Учебно-методический комплекс дисциплины для обучающегося «Языки программирования» для специальности 5В010900 Математика


Лекция 5. Операторы условий, выбора и безусловного перехода. Циклы



бет24/142
Дата03.01.2022
өлшемі1.33 Mb.
#450516
түріУчебно-методический комплекс
1   ...   20   21   22   23   24   25   26   27   ...   142
УМКДО -ЯзыкиПрограммирования

Лекция 5. Операторы условий, выбора и безусловного перехода. Циклы
К операторам, позволяющим из нескольких возможных вариантов выполнения программы (ветвей) выбрать только один, относятся if и case.
Условный оператор if

Оператор if выбирает между двумя вариантами развития событий:


if <условие>

then <один_оператор>

[else <один_оператор>];
Обратите внимание, что перед словом else (когда оно присутствует, конечно же) символ ";" не ставится - ведь это разорвало бы оператор на две части.

Условный оператор if работает следующим образом:



  1. Сначала вычисляется значение <условия> - это может быть любое выражение, возвращающее значение типа boolean.

  2. Затем, если в результате получена "истина" (true), то выполняется оператор, стоящий после ключевого слова then, а если "ложь" (false) - без дополнительных проверок выполняется оператор, стоящий после ключевого слова else. Если же else-ветвь отсутствует, то не выполняется ничего.

Что же произойдет, если написать несколько вложенных операторов if?

В случае, когда каждый оператор if имеет собственную else-ветвь, все будет в порядке. А вот если некоторые из них этой ветви не имеют, может возникнуть ошибка. Компилятор языка Pascal всегда считает, что else относится к самому ближнему оператору if. Таким образом, если написать


if i>0 then if s>2

then s:= 1

else s:= -1;
подразумевая, что else-ветвь относится к внешнему оператору if, то компилятор все равно воспримет эту запись как
if i>0 then if s>2

then s:= 1

else s:= -1

else
Ясно, что таким образом правильного результата получить не удастся.

Для того чтобы избежать подобных ошибок, стоит всегда (или по крайней мере при наличии нескольких вложенных условных операторов) указывать оба ключевых слова, даже если одна из ветвей будет пустовать. Так вы застрахуетесь от одной из частых "ошибок по невнимательности", которые очень сложно найти в процессе отладки программы.

Итак, исходный вариант нужно переписать следующим образом:


if i>0 then if s>2

then s:=1

else

else s:=-1;



либо так:

if i>0 then begin if s>2

then s:=1

end


else s:=-1;
Вообще же, если есть возможность переписать несколько вложенных условных операторов как один оператор выбора, это стоит сделать.





Достарыңызбен бөлісу:
1   ...   20   21   22   23   24   25   26   27   ...   142




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет