Условный оператор. Блок. Оператор выбора

СОДЕРЖАНИЕ: Условный оператор. Блок. Оператор выбора С.А. Григорьев Условный оператор в Паскале записывается в виде: IF логическое выражение THEN оператор/блок [ELSE оператор/блок] логическое выражение - это любое выражение, значение которого имеет тип Boolean, блок - это последовательность операторов, заключенная в логические скобки : BEGIN операторы END; .

Условный оператор. Блок. Оператор выбора

С.А. Григорьев

Условный оператор в Паскале записывается в виде:

IF логическое выражение THEN оператор/блок [ELSE оператор/блок] логическое выражение - это любое выражение, значение которого имеет тип Boolean, блок - это последовательность операторов, заключенная в логические скобки : BEGIN операторы END; . Перед ELSE никогда не ставится ; ! Перед END в большинстве случаев можно не ставить ;. Если значение логического выражения TRUE, то выполняется оператор или блок, стоящий после THEN, в противном случае - оператор или блок, стоящий после ELSE. Конструкция ELSE необязательна, условный оператор можно использовать и в усеченном виде, тогда при значении логического выражения FALSE не выполняется никаких действий. Операторы, входящие в условный оператор, сами могут быть условными, т.е. допускается любая вложенность условных операторов. Запишем теперь предыдущую задачу о четырех числах, используя оператор IF :

VAR a,b,c,d : Integer;

BEGIN WRITELN(Введите 4 целых числа, a,b,c и d, среди ,

которых должно быть 2 и только 2 одинаковых!);

WRITE(a=); READ(a); WRITELN; WRITE(b=); READ(a); WRITELN;

WRITE(c=); READ(a); WRITELN; WRITE(d=); READ(a); WRITELN;

IF(a=b)AND(ac)AND(ad)AND(cd) OR(a=c)AND(ab)AND(ad)AND(bd)OR

(a=d)AND(ab)AND(ac)AND(bc)OR(b=c)AND(ba)AND(bd)AND(ad)OR

(b=d)AND(ba)AND(bc)AND(ac)OR(c=d)AND(ca)AND(cb)AND(ab)

THEN WRITELN(Вы довольно понятливы)

ELSE WRITELN(Вы ошиблись !!!);

READLN;

END.

Можно решить эту задачу и другим способом :

VAR a,b,c,d : Integer;

CONST num : Byte = 0;

BEGIN WRITELN(Введите 4 целых числа, a,b,c и d, среди ,

которых должно быть 2 и только 2 одинаковых!);

WRITE(a=); READ(a); WRITELN; WRITE(b=); READ(a); WRITELN;

WRITE(c=); READ(a); WRITELN; WRITE(d=); READ(a); WRITELN;

IF a=b THEN Inc(num); IF a=c THEN Inc(num); IF a=d THEN Inc(num);

IF b=c THEN Inc(num); IF b=d THEN Inc(num); IF c=d THEN Inc(num);

IF num=1 THEN WRITELN(Вы довольно понятливы)

ELSE WRITELN(Вы ошиблись !!!);

READLN;

END.

Теперь попробуем записать условный оператор, реализующий более сложную логическую структуру. Пусть даны три числа d, m и y, содержащие число, месяц и год для некоторой даты; необходимо выяснить, правильна ли эта дата.

VAR d,m : Byte; y : Word; Valid : Boolean;

BEGIN WRITE(Введите дату ); READ(d,m,y);

IF (m=1)OR(m=3)OR(m=5)OR(m=7)

OR(m=8)OR(m=10)OR(m=12) THEN

IF (d=1)AND(d=31) THEN Valid:=TRUE

ELSE Valid:=FALSE

ELSE

IF (m=4)OR(m=6)OR(m=9)OR(m=11) THEN

IF (d=1)AND(d=30) THEN Valid:=TRUE

ELSE Valid:=FALSE

ELSE

IF m=2 THEN

IF (d=1)AND(d=28) THEN Valid:=TRUE

ELSE

IF d=29 THEN

IF (y MOD 4=0)AND(y MOD 1000)

OR(y MOD 400=0) THEN Valid:=TRUE

ELSE Valid:=FALSE

ELSE Valid:=FALSE

ELSE Valid:=FALSE;

IF Valid THEN WRITELN(Дата верна)

ELSE WRITELN(Дата не верна);

END.

Оператор выбора во многих случаях удобнее, чем условный оператор,

он записывается в виде :

CASE выражение OF

список значений : оператор/блок

..................................

список значений : оператор/блок

[ELSE оператор/блок]

END;

Здесь выражение - это любое выражение порядкового типа, список значений - это список разделенных запятыми константных выражений или диапазонов, диапазон - это конструкция вида константное выражение .. константное выражение. Константным будем называть любое выражение, в которое входят только неименованные и нетипизированные константы (т.е. в константное выражение не могут входить имена переменных, функции и типизированные константы). На самом деле константные выражения - это выражения, которые могут быть вычислены до выполнения программы, а отсюда уже и вытекают ограничения на их вид. Выражение, стоящее после CASE, и все константные выражения должны быть одного типа либо все иметь целочисленные типы.

Оператор выбора выполняется следующим образом: вычисляется выражение, стоящее после CASE, затем просматриваются все списки значений, и если значение выражения попало в список значений, выполняется соответствующий оператор или блок, и выполнение оператора CASE заканчивается; если значение выражения не содержится ни в одном из списков, то выполняется оператор или блок, стоящий после ELSE. Конструкция ELSE может отсутствовать, в этом случае оператор CASE может не выполнить никаких действий. В качестве примера использования оператора выбора решим предыдущую задачу о правильной дате.

VAR d,m : Byte; y : Word; Valid : Boolean;

BEGIN WRITE(Введите дату ); READ(d,m,y);

CASE m OF

1,3,5,7,8,10,12 :

CASE d OF 1..31 : Valid:=TRUE

ELSE Valid:=FALSE

END;

4,6,9,11 :

CASE d OF 1..30 : Valid:=TRUE

ELSE Valid:=FALSE

END;

2 : CASE d OF 1..28 : Valid:=TRUE;

29 : Valid:=(y MOD 4=0)AND(y MOD 1000);

ELSE Valid:=FALSE

END;

ELSE Valid:=FALSE;

END;

IF Valid THEN WRITELN(Дата верна)

ELSE WRITELN(Дата не верна);

END.

Вы можете видеть, что задачи такого типа решаются оператором CASE гораздо проще, чем оператором IF. Решим еще одну задачу: определить, какого рода символ введен - цифра, латинская буква, русская буква или ни то, ни другое и ни третье.

VAR c : Char;

BEGIN WRITE(Введите символ ); READ(c);

CASE c OF

0..9 : WRITELN(Вы ввели цифру);

a..z,A..Z : WRITELN(Вы ввели латинскую букву);

а..п,р..я,А..Я : WRITELN(Вы ввели русскую букву);

ELSE WRITELN(Вы ввели неизвестно что !);

END;

END.

Скачать архив с текстом документа