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

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

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<0 then sgn:= -1;3. if x>0 then sgn:= 1;

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

4. if x=0 5. then sgn:= 0 6. else if x<0 then sgn:= -1 7. else sgn:= 1;

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

8. if x=0 9. then sgn:=010. else sgn:=x/abs(x);

Еще одна попытка сократить текст программы. Здесь используется стандартная функция abs(), которая возвращает абсолютное значение аргумента. Проблема в данном случае состоит в том, что "/" - деление дробное, но ведь нам необходим целый, а не вещественный ответ! "Давайте воспользуемся стандартной функцией округления", - скорее всего, скажет внимательный читатель.

11. if x=0 12. then sgn:=013. 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) (ведь сколько людей, столько и способов выражать свои мысли - хоть в литературе, хоть в программировании). Однако уже на этом простеньком примере видно, что способов запрограммировать желаемое всегда больше, чем один, и вряд ли самое простое решение будет и оптимальным.