Оператор выбора
Условный оператор
Составной оператор
Пример программы (линейный алгоритм)
Program First;
Uses Crt;
Var
R, L, S:Real;
Begin
ClrScr;
Write('Введите радиус->');
Readln(R);
L:=2*Pi*R;
S:=Pi*R*R;
Writeln('Длина окружности - ',L);
Writeln('Площадь круга - ',S);
Readkey;
End.
Составной оператор - это группа операторов, заключенных в операторные скобки, которыми является пара ключевых слов Begin и End. Таким образом, составной оператор включает в себя другие операторы (простые, не содержащие других операторов, или другие составные, или структурные). Составной оператор применяется в тех случаях, когда синтаксис языка Pascal допускает использование только одного оператора, в то время как семантика программы требует задания некоторой последовательности действий. Это, в частности, бывает необходимо при реализации разветвляющихся и циклических алгоритмов. Пример:
В языке Pascal для реализации разветвляющихся алгоритмов используется условный оператор, который имеет две формы: полную и краткую.
Полная форма условного оператора имеет формат:
if <логическое выражение>
then <оператор 1>
else <оператор 2>;
Если < логическое выражение > - истинно, то выполняется <оператор 1>, иначе (если < логическое выражение > = ложно) - оператор 2.
Например:
if x<0 then x:=x+1
else x:=x-1;
Краткая форма условного оператора имеет формат:
if <логическое выражение>
then <оператор 1>;
Если логическое выражение истинно, то выполняется <оператор 1>, в противном случае выполняется оператор, расположенный в программе после условного оператора IF.
Например:
if x<0 then x:=x+1;
s:=s+x;
Действие условного оператора можно расширить путём использования составного оператора, который имеет формат:
begin
<последовательность операторов>
end
Последовательность операторов, заключённая между ключевыми словами begin и end, воспринимается в языке Pascal как один составной оператор и может быть размещена в условном операторе.
Например:
if x<0
then
begin
x:=x+1;
y:=y+1
end
else
x:=x-1;
Оператор выбора позволяет программировать ветвления по многим направлениям. Этот оператор организует переход на одну из нескольких ветвей в зависимости от значения заданного выражения (селектора выбора).
Формат оператора выбора:
case <S> of
<C1>: <оператор 1>;
<C2>: <оператор 2>;
. . .
<CN>: <оператор N>
else <оператор N+1>
end;
Здесь <S> — выражение-селектор, которое может иметь только простой порядковый тип (целый, символьный, логический).
<C1>,..., <CN> — константы того же типа, что и селектор, выполняющие роль меток ветвей. Метки ветвей могут быть заданы списком констант, перечисленных через запятую, или интервалом.
Исполнение оператора начинается с вычисления выражения <S>, полученное значение сравнивается с константами (метками) и выполняется соответствующий оператор. Если ни одна из меток не совпала со значением <S>, то выполняется оператор после слова else.
Возможно использование неполного оператора выбора без ветви else. Если она отсутствует и значение выражения <S> не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора if перед словом else точку с запятой можно ставить.
Пример:
case i of
0, 2, 4, 6, 8: writeln(‘четная цифра’);
1, 3, 5, 7, 9: writeln(‘нечетная цифра’);
10 . . 100: writeln(‘число от 10 до 100’);
else
writeln(‘отрицательное или >100’)
end;
Задача.
В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая по номеру года определяет его название в старояпонском календаре, если известно, что 1996 г. был годом крысы — началом очередного цикла.
Решение.
Поскольку цикл является двенадцатилетним, поставим в соответствие название года остатку от деления номера этого года на 12. При этом учтем, что остаток от деления 1996 на 12 равен 4.
program Goroskop;
var
year:integer;
begin
write('Введите год->');
readln(year);
case year mod 12 of
0:WriteLn ('Год Обезьяны') ;
1:WriteLn ('Год Петуха');
2:WriteLn ('Год Собаки');
3:WriteLn ('Год Свиньи');
4:WriteLn ('Год Крысы' ) ;
5:WriteLn ('Год Коровы' ) ;
6:WriteLn ('Год Тигра');
7:WriteLn ('Год Зайца');
8:WriteLn ('Год Дракона');
9:WriteLn ('Год Змеи' ) ;
10:WriteLn ('Год Лошади');
11:WriteLn ('Год Овцы')
end
end.
Задача.
По введенному номеру дня недели определите название дня недели.
Решение.
Program vibor;
Uses CRT;
Var n:integer;
Begin
ClrScr;
Write('Введите номер дня - ');
Readln(n);
case n of
1:Writeln('Понедельник');
2:Writeln('Вторник');
else Writeln('Такого дня недели нет')
end;
Readkey
End.