Оператор ветвления case

Практическая работа №2

Базовые алгоритмические конструкции

Цели: Изучить три базовые алгоритмические конструкции: линейную, ветвящуюся, циклическую. Научиться представлять линейные, ветвящиеся и циклические алгоритмы на блок-схемах. Научиться представлять базовые алгоритмические конструкции на языке программирования Object Pascal.

Теория:

Оператор ветвления if

Оператор ветвления if — одно из самых популярных средств, изменяющих естественный порядок выполнения операторов программы. Вот его общий вид:

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

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

Логика работы оператора if очевидна: выполнить оператор 1, если условие истинно, и оператор 2, если условие ложно. Пример:

program Console; {$APPTYPE CONSOLE} uses SysUtils; var A, B, C: Integer; begin A:= 2; B:= 8; if A > B then C:= A else C:= B; Writeln('C=', C); Writeln('Press Enter to exit...'); Readln; end.

В данном случае значение выражения А > В ложно, следовательно на экране появится сообщение C=8.

У оператора if существует и другая форма, в которой else отсутствует:

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

Логика работы этого оператора if еще проще: выполнить оператор, если условие истинно, и пропустить оператор, если оно ложно. Пример:

program Console; {$APPTYPE CONSOLE} uses SysUtils; var A, B, C: Integer; begin A:= 2; B:= 8; C:= 0; if A > B then C:= A + B; Writeln('C=', C); Writeln('Press Enter to exit...'); Readln; end.

В результате на экране появится сообщение С=0, поскольку выражение А > В ложно и присваивание С:= А + В пропускается.

Один оператор if может входить в состав другого оператора if. В таком случае говорят о вложенности операторов. При вложенности операторов каждое else соответствует тому then, которое непосредственно ему предшествует. Например:

program Console; {$APPTYPE CONSOLE} uses SysUtils; var A: Integer; begin Readln(A); if A >= 0 then if A <= 100 then Writeln('A попадает в диапазон 0 - 100.') else Writeln('A больше 100.') else Writeln('A меньше 0.'); Writeln('Press Enter to exit...'); Readln; end.

Конструкций со степенью вложенности более 2–3 лучше избегать из-за сложности их анализа при отладке программ.

Оператор ветвления case

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

case <переключатель> of <список №1 значений переключателя>: <оператор 1>; <список №2 значений переключателя>: <оператор 2>; ... <список №N значений переключателя>: <оператор N>; else <оператор N+1> end;

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

Переключатель должен принадлежать порядковому типу данных. Использовать вещественные и строковые типы в качестве переключателя не допускается.

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

program Console; {$APPTYPE CONSOLE} uses SysUtils; var Day: 1..31; begin Readln(Day); case Day of 20..31: Writeln('День попадает в диапазон 20 - 31.'); 1, 5..10: Writeln('День попадает в диапазон 1, 5 - 10.'); else Writeln('День не попадает в заданные диапазоны.'); end; Writeln('Press Enter to exit...'); Readln; end.

Если значения переключателя записаны в возрастающем порядке, то поиск требуемого оператора выполняется значительно быстрее, так как в этом случае компилятор строит оптимизированный код. Учитывая сказанное, перепишем предыдущий пример:

program Console; {$APPTYPE CONSOLE} uses SysUtils; var Day: 1..31; begin Readln(Day); case Day of 1, 5..10: Writeln('День попадает в диапазон 1, 5 - 10.'); 20..31: Writeln('День попадает в диапазон 20 - 31.'); else Writeln('День не попадает в заданные диапазоны.'); end; Writeln('Press Enter to exit...'); Readln; end.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: