Иллюстрация 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;):
if x=0 then sgn:= 0;
if x<0 then sgn:= -1;
if x>0 then sgn:= 1;
Это так называемая реализация "в лоб". Здесь нет никаких хитростей и никаких попыток оптимизации: даже если сработает первый вариант, второй и третий все равно будут проверены, невзирая на то, что результат уже получен.
if x=0
then sgn:= 0
else if x<0 then sgn:= -1
else sgn:= 1;
Этот вариант свободен от излишних проверок в случае, если значение переменной не положительно.Эту реализацию следует признать более эффективной, чем предыдущая
if x=0
then sgn:=0
else sgn:=x/abs(x);
Еще одна попытка сократить текст программы. Здесь используется стандартная функция abs(), которая возвращает абсолютное значение аргумента. Проблема в данном случае состоит в том, что "/" - деление дробное, но ведь нам необходим целый, а не вещественный ответ! "Давайте воспользуемся стандартной функцией округления", - скорее всего, скажет внимательный читательрезультат проверяется на принадлежность к тому или иному списку.
if x=0
then sgn:=0
else sgn:=round(x/abs(x));
И действительно, исправленный вариант будет выдавать верный результат.
case x=0 of
true: sgn:=0;
false:
sgn:=round(x/abs(x));
end;
А вот еще один (правда, несколько неестественный) способ с использованием оператора выбора. Вся хитрость этого варианта в том, что выбирающий ветви переключатель обязан принадлежать к перечислимому типу, именно поэтому пришлось заменить "х" на "х = 0". Напомним, что эта операция сравнения выдает результат логического типа boolean, и именно логические константы true и false фигурируют в качестве меток выбора.
Конечно же, мы перебрали далеко не все возможные способы реализации функции sgn(x) (ведь сколько людей, столько и способов выражать свои мысли - хоть в литературе, хоть в программировании). Однако уже на этом простеньком примере видно, что способов запрограммировать желаемое всегда больше, чем один, и вряд ли самое простое решение будет и оптимальным.
0>0>
Достарыңызбен бөлісу: |