Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 9.doc
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
66.05 Кб
Скачать

3. Оператор выбора case -of.

Оператор выбора является обобщением оператора if-then-else на случай выбора одного из нескольких возможных продолжений выполнения программы. Выбор осуществляется по ключу выбора (селектору). Синтаксическая структура этого оператора такова:

case < ключ выбора > of

< константа выбора 1> : < оператор 1>;

. . . . . .

< константа выбора m> : < оператор m>;

[else < оператор>]

end;

где: < константа выбора > - значение того же типа, что и ключ выбора. Ключом выбора может быть выражение любого порядкового типа.

m - число ветвей выбора (не более чем мощность типа ключа выбора).

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

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

Операторы выбора являются хорошо структурированным средством выбора из любого числа альтернатив и часто выполняют ту же функцию, что и вложенные операторы if-then-else.

4. Примеры программ с простыми типами и оператором выбора.

Следующая простая программа демонстрирует создание и использование перечислимого типа и оператора case-of.

program colors;{Выбор цвета из набора, заданного перечислимым типом}

uses CRT;

type color = (cWhite,cRed,cBlue,cGreen,cBlack); {перечислимый тип}

var b:0..4; c:color;

begin TextBackground(cyan);TextColor(white);ClrScr;window(10,10,50,20);

write('Введите число (от 0 до 4):');read(b);c:=color(b);

case c of cWhite: begin TextColor(white);writeln('white') end;

cRed: begin TextColor(red);writeln('red') end;

cBlue: begin TextColor(blue);writeln('blue') end;

cGreen: begin TextColor(green);writeln('green') end;

cBlack: begin TextColor(black);writeln('black') end;

end

end {colors}.

Эта программа иллюстрирует также так называемое приведение типа. Для любого типа можно использовать функцию с именем этого типа для преобразования переменной (или выражения) к заданному типу. Например, для описанного выше типа color допустим, оператор присваивания сol:= color(3); в результате такого присваивания переменная col типа color получит значение blue.

Замечание

Переменная с приведением типа рассматривается, как обычная переменная и может использоваться не только в выражениях, но и в левой части оператора присваивания.

Приводимая ниже программа week_day иллюстрирует использование диапазонов типа и оператора case-of для определения дня недели по вводимой дате:

program week_day; {Вычисление дня недели по введённой дате}

uses CRT;

var d:1..31; m:1..12; year:1600..2000;{день, месяц, год}

wd:integer; {день недели} z:1..100; {год в столетии}

t:string[1];

begin TextBackground(cyan);TextColor(white);ClrScr;

window(10,10,50,20); TextBackground(blue);ClrScr;

repeat writeln(' введите дату:');

write(' Год:'); readln(year); write(' месяц:'); readln(m);

write(' день:'); readln(d); writeln(' день недели: ');

{вычисление по формуле Зеллера}

if m<3 then begin m:=m+10;year:=year-1 end

else m:=m-2; z:=year div 100; year:=year mod 100;

wd:=abs(trunc(2.6*m-0.2)+d+year div 4+year+z div 4-2*z);

wd:=wd mod 7; {конец вычисления} case wd of

0: writeln(' воскресенье');

1: writeln(' понедельник');

2: writeln(' вторник');

3: writeln(' среда');

4: writeln(' четверг');

5: writeln(' пятница');

6: writeln(' суббота'); end; readln(t)

until (t=' ')

end{week_day}.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]