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

4.Алгоритмы с разветвляющейся структурой (продолжение).

Оператор выбора Case.

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

Var

den’_nedeli=1..4 // переменная принимает одно из 4-х возможных значений – 1 – 4 - в зависимости от текущего дня недели

Begin

If den’_nedeli=1 then writeln(‘Сегодняидёмвкино’)

else If den’_nedeli=2 then writeln(‘Сегодня приглашаем мастера по стиральным машинам’)

else If den’_nedeli=3 then writeln(‘Сегодня перевозим мебель в гараж)’

else If den’_nedeli=4 then writeln(‘Сегодня покупаем продукты’);

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

Для того, чтобы упросить написание программы, в языке Pascal имеется наряду с оператором выбора If специальный для таких случаев второй условный оператор выбора Case, который описывается следующим образом:

case переменная of

a: действие 1;

b: действие 2;

n: действия n;

else иное действие;

end;

Как мы видим, в данном случае перед словом else «;» ставить нужно.

Иное действие можно не выполнять. В таком случае мы просто не пишем ветку else и тогда, если переменная не совпала ни с одним значением a, b.. n, то программа будет выполняться дальше и опустит оператор выбора Case.

Кроме чисел вместо a, b,…, n можно вставлять определённые диапазоны, которые не должны перекрываться друг с другом, например:

Case p of

1..4: действие 1;

56..225: действие 2;

226..259: действие 3;

end;

Переменная p должна иметь простой порядковый (целый) тип данных и наши диапазоны или числа a, b,…, n должны быть того же типа, что и тип переменной p, или совместимого с ней типа.

Для того, чтобы проиллюстрировать применение оператора Case, давайте напишем программу сравнения 2-х чисел x и y. Если числа равны, значит, их разница равна 0, иначе числа не равны.

program matching;

var x,y: integer; //наши числа

begin

write('Введите значение x ');

read(x);

write('Введите значение y ');

readln(y);

case x-y of

0: writeln (‘x и y равны между собой’); //если разница равна 0, то наши числа равны

//между собой

else

writeln (‘x и y не равны'); //иначе не равны

end;

readln;

end.

Конечно, эту конструкцию с оператором caseможно было бы легко описать с помощью оператора If, поэтому данная программа скорее носит своей целью проиллюстрировать на лёгком примере применение нашего оператора.

Если какое-либо условие в своём теле содержит более одного оператора, то возникающую последовательность операторов необходимо, как и в случае с оператором If, заключить в операторные скобки Begin end. Это иллюстрирует пример программы, вычисляющей значение выражения в зависимости от отрицательного, нулевого или единичного, или положительного (начиная с 2-х) значения x. Если х – число отрицательное, то выражение для вычисления 25*х, если х – 0 или 1, то выражение будет 25*х2, а если х – положительное неединичное число, то выражение – 25*х3:

Program computation;

Var

x, znach: integer;

Begin

Write(‘Введитезначениеx: ‘);

Readln(x);

Case x of

-32768..-1: begin

znach:=25*x;

writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х и результат равен ‘, znach);

end;

0, 1: begin

znach:=25*x*x;

writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х*x и результат равен ‘, znach);

end;

2..32767: begin

znach:=25*x*x*x;

writeln(‘Поскольку число х отрицательное, то значение выражения вычислялось по формуле 25*х*x*x и результат равен ‘, znach);

end;

Readln;

End.