Например, для нахождения наибольшего из двух чисел условный оператор запишется следующим образом:
If a>b then max:= a else max:= b;
Если требуется выполнить после then или else несколько операторов, они обрамляются операторными скобками begin и end, образуя тем самым составной оператор.
Например,
If a>=0 then begin а:=sqrt(a); Write(‘а=’,a:4:2); end
else Write(‘Нет решения’);
Часть оператора, стоящая после служебного слова else, может отсутствовать. Тогда при значении true условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается.
Формат:
If< условие >then< оператор>;
Один оператор if может входить в состав другого оператора if. В этом случае говорят о вложенности операторов. Рассмотрим следующие возможные варианты.
If А <20 then if А>=15 then write(‘А в диапазоне 15 - 20’)
else write(‘А вне диапазона 15 - 20’);
В условном операторе логические выражения могут содержать несколько отношений и/или логических переменных, связанных операциями and, or, not. Каждое простое условие в логическом выражении обязательно заключается в скобки.
Например,
if (a+b>c) and (a+c>b) and (b+c>a)
then write('Треугольник с такими сторонами существует')
else write('Треугольник с такими сторонами не существует');
Следует знать:
· в условных операторах точка с запятой не ставится после then и перед else;
· при вложенности операторов каждое else соответствует тому then, которое непосредственно ему предшествует;
· конструкций со степенью вложенности более 2—3 необходимо избегать из-за сложности их анализа при отладке программы;
· в условных операторах часто используют составной оператор begin … end.
Пример. Составить алгоритм нахождения корней квадратного уравнения ax2+bx+c=0 в зависимости от коэффициентов а, b и с.
Данный пример рассмотрен в Главе 1. Он реализован с помощью разветвляющейся структуры. Рядом с блок-схемой приводится текст программы.
В разделе описания переменных описаны переменные a, b, c (исходные данные), D (промежуточная величина), x1, x2 (результат) вещественного типа. Если условие D³0 выполняется, необходимо выполнить несколько операторов, поэтому они заключены в операторные скобки, если условие не выполняется, выводится сообщение об отсутствии корней.
Program Prim1;
uses crt;
Var a, b, c, D, x1, x2 :real;
BEGIN
СlrScr;
Write('Введите числа a, b, c');
Readln(a, b, c);
D:= sqr(b)-4*a*c;
If D>=0
then
begin
x1:=(-b+sqrt(D))/(2*a);
x2:=(-b-sqrt(D))/(2*a);
Write('x1=', x1:5:2, 'x2=',
x2:5:2,);
end
else Write('Корней нет');
END.
Пример.Даны три числа. Найти наибольшее из них.
Данный пример реализован с помощью двух разветвляющихся структур, поэтому используем два условных оператора, следующих друг за другом.
Три вводимых числа обозначены переменными a, b и c, переменная max служит для хранения максимального значения этих чисел. После выполнения первого условного оператора переменная max принимает одно из двух значений – значение переменной а или b, в зависимости от выполнения условия a>b.
Не следует записывать a:=max или b:=max, т.к. в данном случае переменные а или b получат значения равные нулю (по умолчанию переменная max =0).
Так как необходимо найти максимальное значение из трех чисел, используется второй условный оператор.
Program Prim2;
uses crt;
Var a, b, c, max : integer;
BEGIN
СlrScr;
Write('Введите числа а, b и с');
Readln(a, b, с);
If a>b then max:=a else max:=b;
If c>max then max:=c;
Write('Наибольшее число', max);
END.
Пример.Пусть значение y зависит от значения х.
Рассчитать
В программе каждому логическому блоку соответствует условный оператор.
Program Prim3;
uses crt;
Var x, y : real;
BEGIN
СlrScr;
Write('Введите число x');
Readln(x);
If x<0 then y:=sqr(x)
else
If x>0 then y:=sqrt(x) else y:=0 ;
Write('Значение y=', y:3:1);
END.
Оператор выбора Case
Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы if — программа становится громоздкой и ее трудно понимать (число уровней вложения не должно превышать двух-трех).
Оператор выбора case позволяет сделать выбор из произвольного числа имеющихся вариантов. Он состоит из выражения, называемого селектором (selection – выбор альтернативы), и списка параметров, каждому из которых предшествует список констант выбора (список может состоять и из одной константы).
Формат:
Case<выражение-селектор>of
<список1>: <оператор1>;
<список2>: <оператор2>;
…
<списокN>: <операторN>
else<оператор>
где case, of, else – зарезервированные слова (обозначают случай, из, иначе соответственно);
<выражение-селектор> - выражение порядкового типа (кроме типов Real и String);
<список1>, < список2> - константы того же типа, что и <выражение-селектор>;
<оператор1>, <оператор2> - любые операторы языка Паскаль.
Выполнение оператора case начинается с вычисления выражения-селектора. Операторы между begin и end выполняются в том случае, если значение выражения после слова case совпадает с константой из соответствующего списка. Если это не так, то выполняется оператор, идущий после else. Если else отсутствует, выполняется оператор программы, следующий за case.
· выражение-селектор должно иметь порядковый тип: чаще всего — integer, реже — char, boolean или один из пользовательских типов;
· список констант выбора может состоять из произвольного количества значений, отделенных друг от друга запятыми, или диапазонов, границы которых записываются двумя константами через разграничитель "..";
· диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах;
· константы выбора внутри одного оператора выбора должны быть различны, в противном случае выполняется первая "подходящая" ветвь (одинаковые константы выбора разрешается использовать в разных операторах выбора);
· после последнего элемента списка выбора (перед else) точка с запятой не ставится.
Пример. По введенному номеру месяца вывести название времени года.
Program God;
uses crt;
var m : integer;
begin Write(‘Введите номер месяца ‘); Readln(m);
case m of
12, 1, 2 : Writeln(‘Зима ‘);
3..5 : Writeln(‘Весна ‘);
6..8 : Writeln(‘Лето‘);
9..11 :Writeln(‘Осень ‘)
else Writeln(‘Введите номер месяца ‘)
end;
end.
Сообщение о названии времени года будет выведено на экран лишь в том случае, если пользователем введен номер месяца, входящий в список констант. В противном случае, запрашивается ввод нового значения месяца.
Операторы повторения (циклы) предусматривают выполнение некоторых операторов несколько раз. В языке Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ:
· while (цикл с предусловием)
· repeat (цикл с постусловием)
· for (цикл со счетчиком)
Если число повторений оператора (составного оператора) заранее неизвестно, а задано лишь условие его повторения (или окончания), используются операторы while, repeat. Оператор for используется, если число повторений заранее известно.
Следует знать:
- самым универсальным из всех операторов цикла считается while, поэтому в случае затруднений с выбором можно отдать предпочтение ему;
- цикл repeat имеет очень простой и понятный синтаксис, поэтому с него удобно начинать изучение циклов;
- цикл for обеспечивает удобную запись циклов с заранее известным числом повторений;
- при неумелом использовании циклов любого типа возможна ситуация, когда компьютер не сможет нормально закончить цикл (в таком случае говорят, что программа "зациклилась"). Для выхода из подобной ситуации используется комбинация клавиш Ctrl+Break. Если это не помогает, есть и крайнее средство Ctrl+Alt+Delete.
Оператор repeat
Оператор repeat называют оператором цикла с постусловием за то, что условие проверяется после выполнения тела цикла.
Формат:
repeat < тело цикла >until < условие окончания цикла >;
где repeat, until – зарезервированные слова (обозначают "повторяй", "пока" соответственно);
<условие> – булевское выражение: простое выражение отношения или сложное логическое выражение;
<тело цикла> – оператор или последовательность операторов.
Вначале выполняется тело цикла, затем проверяется условие завершения цикла. Именно поэтому цикл, организованный с помощью оператора repeat, в любом случае выполнится хотя бы один раз. Если результат булевского выражения равен false (ложь), то тело цикла выполняется еще раз, если же результат – true (истина), происходит выход из цикла. Операторы будут выполняться, пока условие будет оставаться ложным (false). На рисунке 3.2 приведена блок-схема оператора повтора repeat.