Навигация
Оглавление
Оператор ветвления 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.


 

Сайт создан в системе uCoz