Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции ИВАНОВ Книга Паскаль.doc
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
1.93 Mб
Скачать
  1. Условные операторы

Условный оператор позволяет проверить некоторое условие и в зависимости от результата выполнить тот или иной оператор или группу операторов.

С помощью условных операторов программируются алгоритмы разветвляющейся структуры. Язык Паскаль допускает использование двух условных операторов: if и case.

Условный оператор if

Формат:

if <условие> then < оператор1> else < оператор2>;

где if, then, else – зарезервированные слова (обозначают если, то, иначе соответственно);

<условие> - произвольное выражение логического типа;

<оператор1>, <оператор2> - любые операторы языка Паскаль.

Условный оператор работает по следующему алгоритму: вначале вычисляется выражение <условие>. Если результат - true (истина), то выполняется <оператор1>, а <оператор2> пропускается. Если результат - false (ложь), наоборот <оператор1> пропускается, а выполняется <оператор2>. На рисунке 3.1 приведена блок-схема условного оператора.

Рис. 3.1

Например, для нахождения наибольшего из двух чисел условный оператор запишется следующим образом:

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. В этом случае говорят о вложенности операторов. Рассмотрим следующие возможные варианты.

Вариант 1.

If Условие1 then if Условие2 then Оператор1 else Оператор2

else ОператорЗ;

Например,

If a>b then if a>=0 then write(sqrt(a)) else write(sqr(a))

else write(‘Первое число не наибольшее’);

Вариант 2.

if Условие1 then Оператор1

else if Условие2 then Оператор2 else ОператорЗ;

Например,

If х<2 then y:= x

else if x<3 then y:=2 else y:=-x+5;

Вариант 3.

If Условие1 then if Условие2 then Оператор1 else Оператор2

else if Условие3 then Оператор3 else Оператор4;

Например,

if a > b then if a > 100 then a:=a+10 else a:=2*a

else if b > 100 then b:=b+10 else b:=2*b;

Вариант 4.

if Условие1 then if Условие2 then Оператор1 else Оператор2;

Например,

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 необходимо избегать из-за сложности их анализа при отладке программы;

  • в условных операторах часто используют составной оператор beginend.

Пример. Составить алгоритм нахождения корней квадратного уравнения 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 <оператор>

end;

где case, of, else – зарезервированные слова (обозначают случай, из, иначе соответственно);

<выражение-селектор> - выражение порядкового типа (кроме типов Real и String);

<список1>, < список2> - константы того же типа, что и <выражение-селектор>;

<оператор1>, <оператор2> - любые операторы языка Паскаль.

Выполнение оператора case начинается с вычисления выражения-селектора. Операторы между begin и end выполняются в том случае, если значение выражения после слова case совпадает с константой из соответствующего списка. Если это не так, то выполняется оператор, идущий после else. Если else отсутствует, выполняется оператор программы, следующий за case.

Например,

  • селектор целочисленного типа:

case k of

1: z:=k+10;

2: z:=k+100;

3: z:=k+1000;

end;

  • селектор интервального типа;

case k of

1..15: Writeln(‘Число’, k, ‘в диапазоне 1 - 15 ‘);

16..36: Writeln(‘Число’, k, ‘в диапазоне 16 - 36 ‘);

37..55: Writeln(‘Число’, k, ‘в диапазоне 37 - 55 ‘)

else Writeln(‘Число’, k, ‘вне заданных диапазонов ‘);

end;

Следует знать:

  • оператор case является обобщением оператора if;

  • выражение-селектор должно иметь порядковый тип: чаще всего — 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.

Сообщение о названии времени года будет выведено на экран лишь в том случае, если пользователем введен номер месяца, входящий в список констант. В противном случае, запрашивается ввод нового значения месяца.