Учебно-методический комплекс дисциплины для обучающегося «Языки программирования» для специальности 5В010900 Математика



бет26/142
Дата03.01.2022
өлшемі1.33 Mb.
#450516
түріУчебно-методический комплекс
1   ...   22   23   24   25   26   27   28   29   ...   142
УМКДО -ЯзыкиПрограммирования

Иллюстрация 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) (ведь сколько людей, столько и способов выражать свои мысли - хоть в литературе, хоть в программировании). Однако уже на этом простеньком примере видно, что способов запрограммировать желаемое всегда больше, чем один, и вряд ли самое простое решение будет и оптимальным.




Достарыңызбен бөлісу:
1   ...   22   23   24   25   26   27   28   29   ...   142




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет