1. Условный оператор (или оператор ветвления) If — это оператор позволяющий осуществить выбор в программе одной из двух последовательностей команд (ветвей) в зависимости от некоторого условия. Условный оператор имеет две формы:
- неполная форма:If условие then оператор;
- полная форма:If условие then оператор1 else оператор2.
где условие — выражение булевского типа, оператор, оператор1 — оператор, который выполняется, если условие принимает значение True, оператор2 — оператор, который выполняется если условие принимает значение False. В полной форме оператора If обязательно будет выполнен один из двух операторов: оператор1 или оператор2, а затем управление будет передано следующему оператору, стоящему в тексте программы за оператором If. В неполной форме — либо будет выполнен оператор, либо управление будет передано следующему оператору, стоящему в тексте программы за оператором If.
Примечание 1. В полной форме точка с запятой (;) перед else никогда не ставится! Если же ее поставить, то компилятор, прочитав точку с запятой, отметит конец оператора If и, найдя дальше служебное слово else, выдаст следующее сообщение об ошибке: “Error #113: Error in statement” (т.е. ошибка в операторе. Данный идентификатор не может начинать оператор). Не следует также ставить точку с запятой сразу же после then, так как компилятор воспримет ее как пустой оператор, и следующие за ней другие операторы будут находиться вне области действия оператора If. А в случае полной формы оператора компилятор, найдя служебное слово else, выдаст то же самое сообщение об ошибке #113.
Пример 1.If a>0 then b:=1 — неполная форма, в которой при положительном значении переменной A, переменной B присваивается значение 1;
Пример 2. If a>0 then b:=1 else b:=2 — полная форма, в которой при положительном значении переменной A, переменной B присваивается значение 1, а при отрицательном или нулевом значении переменной A, переменная B получает значение 2.
Примечание 2.В случае, когда вместо одного оператора в какой-либо из ветвей оператора If должна стоять последовательность операторов, то ее необходимо заключить в командные скобки: Begin [список_операторов] end. В результате получается составной оператор, который уже можно поместить в любую ветвь оператора If.
Пример. Ifa>0 then Begin b:=1; c:=2 end else Begin b:=2; c:=1 end— полная форма, в которой при положительном значении переменной A, переменным B и C присваивается значение 1 и 2 соответственно, а при отрицательном или нулевом значении переменной A, переменным В и С присваивается значение 2 и 1 соответственно.
Если в какой-либо из ветвей оператора If стоит другой оператор If, то следует помнить следующее правило.
Правило.Ключевое слово else всегда связывается с ближайшим стоящим перед ним словом If, которое еще не было связано с каким-либо словом else.
2. Оператор выбора Case — это оператор позволяющий осуществить выбор в программе одной из последовательностей команд (ветвей) в зависимости от значения переключателя. Оператор выбора имеет две формы:
– Полная форма записи:Caseпереключательof
список(диапазон)_констант_1:оператор1;
список(диапазон)_констант_2:оператор2;
…………………………………………………
список(диапазон)_констант_N:операторN
elseоператорE
end;
– Неполная форма записи:Caseпереключательof
список(диапазон)_констант_1:оператор1;
список(диапазон)_констант_2:оператор2;
…………………………………………………
список(диапазон)_констант_N:операторN
end;
Вычисленное значение переключателяопределяет, какой из операторов должен быть выполнен. Если значение переключателя попадает в список(диапазон)_ констант_1, то будет выполнен оператор_1, если в список(диапазон)_ констант_2 — оператор_2, если в список(диапазон)_констант_N, то будет выполнен оператор_N, и если ни в один из перечисленных списков (диапазонов) вычисленное значение переключателя не попадает, то будет выполнен оператор_Е.
Пример. Написать фрагмент программы, который в зависимости от вида нажатой стрелки соответственно изменяет на ±1 координату X или Y, если известны ASCII-коды клавиш стрелок: #72 — , #75 — , #77 — ®, #80 — ¯.
Program Definer_of_Move;
Var Arrow:Char; X,Y:Integer;
Begin
{… список операторов}
Case Arrow of
#72: Y:=Y-1;
#80: Y:=Y+1;
#75: X:=X-1;
#77: X:=X+1
end;{конец оператора Case}
{… список операторов}
end.
Примечание 1. Символ точка с запятой (;) перед else никогда не ставится!
Примечание 2.В случае, когда вместо одного оператора в какой-либо из ветвей оператора case должна стоять последовательность операторов, то ее необходимо заключить в командные скобки: Begin [список_операторов] end. В результате получается составной оператор, который уже можно поместить в любую ветвь оператора Сase.
Задача 2.Составить программу, которая, на вводимый с клавиатуры год, выдавала бы — к какому этапу развития средств работы с информацией он относится.
Решение. Временные периоды соответствующие каждому этапу оформим в виде диапазонов констант типа Integer. В зависимости от значения переменной-переключателя year типа Integer будет напечатано соответствующее окончание фразы “Этот год относится к этапу…”.
Задача 3.Составить программу, которая, на вводимый с клавиатуры символ, выдавала бы что это: цифра, буква (строчная или прописная, русская или латинская)), пробел или Enter.
Program Definer_of_Letter;
var Symbol:Char;
Begin
WriteLn('Нажмите любую клавишу, а затем нажмите клавишу Enter');
'а'..'я': WriteLn('строчная русская буква ',Symbol);
'А'..'Я': WriteLn('прописная русская буква ',Symbol);
#13: WriteLn('Enter');{ASCII-код клавиши Enter равен 13}
' ': WriteLn('пробел')
else WriteLn('другой символ')
end;{конец оператора Case}
end.
Контрольные вопросы
1. Как выглядит полный условный оператор? Как он работает?
2. Приведите пример полного условного оператора.
3. Как выглядит неполный условный оператор? Как он работает?
4. Объяснить работу условных операторов по соответствующим блок-схемам.
5. Приведите пример неполного условного оператора.
6. Как формируются вложенные операторы условия?
7. Приведите пример различных вложенных операторов условия.
8. Какой оператор не используют вслед за служебным словом then в полном условном операторе?
9. Отсутствие какого символа обязательно перед служебным словом else в условном операторе?
10. Для чего предназначен оператор выбора?
11. Какова структура оператора выбора?
12. Существуют ли полная и неполная формы оператора выбора?
13. Объяснить работу оператора Case по блок-схеме.
14. Каков должен быть тип констант в конструкции Case?
15. Чем заканчивается оператор варианта Case?
16. Обязательно ли отсутствие точки с запятой перед последним оператором конструкции Case?
17. Можно ли в конструкции Case перед else ставить точку с запятой?
18. Может ли в качестве оператора в конструкции Case использоваться составной оператор?
19. Можно ли (и если можно, то как) перечислять несколько констант в конструкции Case?
20. Можно ли (и если можно, то как) указывать диапазон констант в конструкции Case?
Упражнения
1. Является ли условным оператором последовательность символов:
а) If X<Y then X:=0 else Y:=0;
б) If X>Y then X:=0 else Read(Y);
в) If X>=Y then X:=0; Y:=0 else Write(Z);
г) If A<B then 100 else Z:=5;
д) If A<B<C then Z:=Z+1;
е) If sqrt(Z)<=3.17 then Z:=Z+1;
ж) If A<>B then Z:=Z+1; A:=B+1;
2. Какие из следующих вложенных условных операторов допустимы:
а) If X+Y<Z then X:=X+1 else If Y>Z then Z:=0 else Y:=0;
б) If X+Y<Z then If Y>Z then Z:=0 else Y:=0 else Z:=0;
в) If X+Y<Z then If Y>Z then Z:=0 else Y:=0;
3. Записать условный оператор, который эквивалентен оператору присваивания
X:=A or B and C.
4. Какое значение будет иметь переменная С после выполнения операторов
С:=0; If A > 0 then If B>0 then C:=1 else C:=2;
при следующих значениях переменных А и В: а) А = В = 1; б) А = 1, В = -1, в) А = -1, В = 1.
5. Указать ошибки:
а) If 1<X<0 then X:=X+1; Y:=0;
else X:=0; Y:=Y+1;
б) If 1<X and X<0 then Begin X:=X+1; Y:=0 end;
else Begin X:=0; Y:=Y+1 end
6. Условный оператор
If A > B
then If B < 0 then C:=A else C:=В
else C:=0
переписать в более наглядной форме и определить, каким будет значение переменной С после выполнения этого оператора, если А = 5, В = 3.
7. Используя составной оператор, упростить следующий фрагмент программы:
If A > B then C:=1;
If A > B then D:=2;
If A < B then C:=3;
If A < B then D:=4;
8. Каким будет значение переменной А после выполнения операторов:
A:=3;
If A < 4 then
Begin A:=A + 2; A:=A + 3 end;
9. По условному оператору, устанавливающему зависимость значения переменной У от значения переменной Х, построить график этой зависимости. В качестве оператора рассмотреть:
а) If X<1 then Y:=X*X*X else Y:=2-X;
в) If X<1 then Y:=sqr(X+2) else If X<=3 then Y:=2*X+3 else Y:=7.5;
в) If X>2 then Y:=X-4 else If X>-1 then Y:=-X else Y:= -1/X;
г) If abs(X)>10 then Y:=X else If X>0 then Y:=2*X-10 else Y:=10;
10. Даны условные операторы:
1) If A > 0
then B:=5
else B:=10
2) If A < 0
then B:=10
else B:=5
При каких значениях переменой А эти операторы не будут эквивалентны?
11. Значения переменной А заранее не определено. Укажите интервалы значений
переменной А, в которых будут выполняться операторы:
а) If A > 10
then A:=10
else A:=A + 5
б) If A > 0
then A:=1
else A:=0.
12. Записать оператор выбора, который эквивалентен оператору ветвления:
If (A=2) then X:='Плохо' else If (A=3) or (A=4) then X:='Нормально' else X:='Отлично'.
13. Какое значение будет иметь переменная С после выполнения операторов
С:=0; Case A of
-1 : C := C + B;
0 : C := C * B;
1 : C := 2*(B - C);
else C := B end;
при следующих значениях переменных А и В: а) А = В = 1; б) А = 1, В = -1, в) А = -1, В = 1.