Оператор выбора case

Оператор case разрешает сделать выбор между несколькими вариантами:

case of

: ;

[ : ;]

[ : ;]

[else ;]

end;

Замечание: Обратите внимание, что по окончании else двоеточие не ставится.

Существуют дополнительные правила, относящиеся к структуре этого оператора:

1. Тумблер обязан относиться лишь к порядковому типу данных, но не к типу longint.

2. Тумблер возможно переменной либо выражением.

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

4. Повторение констант не допускается.

5. типы и Тип переключателя всех констант должны быть совместимыми.

Пример оператора выбора:

case symbol(* :char *) of

‘a’..’z’, ‘A..’Z’ : writeln(‘Это латинская буква’);

‘а’..’я’, ‘А..’Я’ : writeln(‘Это русская буква’);

‘0’..’9′ : writeln(‘Это цифра’);

‘ ‘,#10,#13,#26 : writeln(‘Это пробельный знак’);

else writeln(‘Это служебный знак’);

end;

Исполнение оператора case происходит следующим образом:

1. вычисляется значение тумблера;

2. полученный итог проверяется на принадлежность к тому либо иному перечню констант;

3. в случае если таковой перечень отыскан, то предстоящие испытания уже не производятся, а выполняется оператор, соответствующий выбранной ветви, по окончании чего управление передается оператору, следующему за главным словом end, которое закрывает всю конструкцию case.

4. в случае если подходящего перечня констант нет, то выполняется оператор, стоящий за главным словом else. В случае если else-ветви нет, то не выполняется ничего.

Иллюстрация if и case

Как пример, иллюстрирующего применение операторов ветвления, приведем пара разных реализаций функции sgn(x) — символ числа х. Из математики как мы знаем, что эта функция имеет следующие значения:

sgn(x) = -1, в случае если x 0;

sgn(x) = 0, в случае если x = 0;

sgn(x) = 1, в случае если x 0.

Реализовать эту функцию для случая, в то время, когда х вещественное, возможно следующими методами (при условии, что x:real; sgn: -1..1;):

1. if x=0 then sgn:= 0;

2. if x

3. if x0 then sgn:= 1;

Это так называемая реализация в лоб. Тут нет никаких попыток и никаких хитростей оптимизации: кроме того в случае если сработает первый вариант, второй и третий все равно будут проверены, несмотря на то, что итог уже взят.

4. if x=0

5. then sgn:= 0

6. else if x

7. else sgn:= 1;

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

8. if x=0

9. then sgn:=0

10. else sgn:=x/abs(x);

Еще одна попытка сократить текст программы. Тут употребляется стандартная функция abs(), которая возвращает полное значение довода. Неприятность в этом случае пребывает в том, что / — деление дробное, но так как нам нужен целый, а не вещественный ответ! Давайте воспользуемся стандартной функцией округления, — вероятнее, сообщит внимательный читатель.

11. if x=0

12. then sgn:=0

13. else sgn:=round(x/abs(x));

И вправду, исправленный вариант будет выдавать верный итог.

14. case x=0 of

15. true: sgn:=0;

16. false:

17. sgn:=round(x/abs(x));

18. end;

А вот еще один (действительно, пара неестественный) метод с применением оператора выбора. Вся хитрость этого варианта в том, что выбирающий ветви тумблер обязан принадлежать к перечислимому типу, как раз исходя из этого было нужно заменить х на х = 0. Отметим, что эта операция сравнения выдает итог логического типа boolean, и как раз логические константы true и false фигурируют в качестве меток выбора.

Конечно же, мы перебрали не все вероятные методы реализации функции sgn(x) (так как какое количество людей, столько и способов высказывать собственные мысли — хоть в литературе, хоть в программировании). Но уже на этом простеньком примере видно, что способов запрограммировать желаемое неизменно больше, чем один, и вряд ли самое простое ответ будет и оптимальным.

Лекция 4

Циклічні розрахункові процеси

Разбор задачи на оператор выбора case


Похожие статьи:

Понравилась статья? Поделиться с друзьями: