пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

№35 Операторы ветвления цикла.

Условный оператор if

Оператор if выбирает между двумя вариантами развития событий:

if <условие>

  then <один_оператор>

  [else <один_оператор>];

Обратите внимание, что перед словом else (когда оно присутствует, конечно же) символ «;» не ставится — ведь это разорвало бы оператор на две части.

Условный оператор if работает следующим образом:

  • Сначала вычисляется значение <условия> — это может быть любое выражение, возвращающее значение типа Boolean.
  • Затем, если в результате получена «истина» (True), то выполняется оператор, стоящий после ключевого слова then, а если «ложь» (False) — без дополнительных проверок выполняется оператор, стоящий после ключевого слова else. Если же else–ветвь отсутствует, то не выполняется ничего.

Что же произойдёт, если написать несколько вложенных операторов if

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

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

case <переключатель> of

    <список_констант> : <один_оператор>;

    [<список_констант> : <один_оператор>;]

    [<список_констант> : <один_оператор>;]

    [else <один_оператор>;]

end;

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

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

  • Переключатель должен относиться только к порядковому типу данных, но не к типу LongInt.
  • Переключатель может быть переменной или выражением.
  • Список констант может задаваться как явным перечислением, так и интервалом или их объединением.
  • Повторение констант не допускается.
  • Тип переключателя и типы всех констант должны быть совместимыми1.

Иллюстрация 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;

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

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

  • case x = 0 of
     True:  Sgn := 0;
     False: Sgn := Round(x / Abs(x));
    end;

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


14.06.2014; 20:01
хиты: 221
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь