Оператор условного перехода
Разветвляющийся вычислительный процесс, содержащий две ветви, схематично может быть изображен с помощью структуры выбора (структуры разветвления), которая содержит три элемента: логическое условие, ветвь ДА и ветвь НЕТ. Общий вид структуры представлен на рис.1. После вычислений, общих для обеих ветвей (блок 1), проверяется некоторое условие (блок 2). Если оно выполняется, то осуществляется переход к первой ветви – ветви ДА (блок 3), в противном случае – ко второй ветви – ветви НЕТ (блок 4). После выполнения вычислений в любой из ветвей осуществляется переход к общему участку 2 (блок 5). Структура выбора в языке Паскаль реализуется с помощью условного оператора (оператора условного перехода), который позволяет выполнять один из двух входящих в него операторов в зависимости от значения некоторого логического выражения. Оператор имеет следующий вид: ΙF < логическое выражение > THEN < оператор 1 > ELSE < оператор 2 >; Где IF (если), THEN (то), ELSE (иначе) – служебные слова; оператор 1, оператор 2 – любые операторы языка.
Рис.1. Порядок выполнения условного оператора поясняется рис. 2. Если значение логического выражения равно true (истинно), то выполняется оператор 1 (оператор 2 пропускается), если значение логического выражения равно false (ложно), то выполняется оператор 2 (оператор 1 пропускается). Далее в любом случае выполняется оператор, стоящий в программе непосредственно за оператором if (оператор 3). Значение true и false получают обычно в результате выполнения операций сравнения (отношения): < - меньше; <= - меньше или равно; > - больше; >= - больше или равно; = - равно; < > - не равно. Операнды этих операций (константы, переменные, функции, выражения, не содержащие отношений) могут быть вещественного, целого или логического типа. Простейшим примером использования условного оператора является вычисление значения функции по одной из двух предложенных формул в зависимости от значения аргумента: Оператор, реализующий выражение для некоторого значения аргумента Х, выглядит следующим образом: IF X>0 THEN Y: =LN (X) ELSE Y: =EXP (X); Здесь логическое выражение – отношение Х>0, оператор 1, оператор 2 – операторы присвоения Y: =LN (X) и Y: =EXP (X). Примером, когда логическое выражение в операторе имеет более сложную структуру, может служить задача определения, можно ли построить треугольник из отрезков заданной длины: x,y,z (x>0, y>0, z>0). Условный оператор имеет вид: IF (X+Y>Z) AND (X+Z>Y) AND (Y+Z>X) THEN WRITELN (‘треугольник построить можно’) ELSE WRITELN (‘треугольник построить нельзя’); Условный оператор может не иметь конструкции ELSE, такая форма оператора называется сокращенной: IF <логическое выражение> THEN <оператор>; Порядок выполнения оператора IF в сокращенной форме поясняется рис. 3.
Рис. 3.
Если логическое выражение принимает значение FALSE, то сразу выполняется оператор, следующий за оператором IF. Например, IF X>0 THEN WRITELN (X); Z: =SQR (X); Условные операторы могут иметь вложенную конструкцию, когда после THEN или FALSE используется так же условный оператор. При этом справедливо следующее правило: ELSE всегда относится к ближайшему слева оператору IF. Например, требуется вычислить значение функции по одной из предложенных форму: Для программной реализации используется вложенная конфигурация условного оператора: IF X>=1 THEN Y: =SQRT (X) ELSE IF X>0 THEN Y: =LN (X) ELSE Y: =EXP (X); В состав условного оператора может входить только один оператор. Если какую либо ветвь разветвления требуется вставить несколько операторов, то они объединяются в один, составной оператор, для чего в начале группы этих операторов записывается слово BEGIN, а в конце – служебное слово END: BEGIN <оператор 1>; <оператор 2>; …………….. <оператор N>; END; Элементами составного оператора могут быть любые операторы языка, в том числе условные и другие составные операторы.
1.2. Оператор варианта. Оператор варианта является обобщением условного оператора: он дает возможность выполнить один из нескольких операторов в зависимости от значения некоторого выражения, называемого селектором. В общем случае оператор имеет вид: CASE <селектор> OF <список меток 1>: <оператор 1 >; <список меток 2>: <оператор 2 >; ……………………………………………. <список меток N>: <оператор N >; END; Где CASE (выбор), OF(из), END(конец) – служебные слова; Селектор – выражение любого скалярного типа, кроме вещественного; Оператор – любой оператор языка, в том числе и составной; Список меток – список разделенных запятыми значений выражения селектор или одно его значение. Эти константы, следовательно, должны иметь тот же тип, что и селектор, и называются они метками варианта. Метка варианта – не обычная метка: это не обязательно целое число, она не описывается в разделе LABEL, на нее нельзя ссылаться в операторе GOTO. Оператор варианта выбирает для исполнения тот оператор, одна из меток которого равна текущему значению выражения селектор. По окончании выполнения выбранного оператора управление передается в конец оператора CASE. Метки полей не должны пересекаться. Если ни одна метка не найдена, то управление передается за оператор END. Можно использовать следующую конструкцию: CASE I OF 1: <оператор 1>; 2: <оператор 2>; ELSE <оператор 3>; END; Рассмотрим оператор на примере: CASE NOMER OF 0: y: =G; 1..3: y: =G*X; 6,7,8: y: =G*sqrt (abs (x)); 9..11: y: =G*exp (x)+H; 12: y: =G*sqr (sin (x)+H); END; В зависимости от значения селектора NOMER значение функции У вычисляется по одной из перечисленных формул. Схематическое представление оператора CASE – структура отбора, представлена для данного примера на рис.4.
Метка может быть константой, диапазоном констант и списком: 0 и 12 – константа; 1..3 и 9..11 – диапазон констант; 6,7,8 – список констант. Такие вычисления могут быть выполнены и с помощью вложенных условных операторов, однако это в значительной степени удлинило бы программу и сделало бы ее менее наглядной.
1.3.Оператор безусловного перехода Общий вид оператора: GOTO <метка> где GOTO (идти к) – служебное слово; <метка> - целое число без знака, определяемое в разделе LABEL как метка оператора. Оператор GOTO производит передачу управления к оператору,помеченному указанной меткой. Применение оператора безусловного перехода в языке Паскаль является необязательным и нежелательным, так как присутствие этого оператора в программе нарушает ее структурную целостность и наглядность, такую программу становится трудно читать, отлаживать и модифицировать. Используют оператор GOTO лишь в исключительных случаях, например для выхода из структурного (составного) оператора при возникновении особой ситуации в программе.
1.4.Логические отношения Для задания условий в логическом операторе IF могут Таблица 1.
применяться не только отношения, сравнивающие две величины, но и более сложные логические выражения. Обозначения и названия этих операций приведены в табл.1. Отношения, стоящие слева и справа от знака логической операции должны быть заключены в скобки, поскольку логические операции имеют более высокий приоритет и выполняются в следующем порядке: в первую очередь NOT, а затем AND, а операция OR в последнюю очередь. Например, 0<X<=1 можно записать с помощью логической операции AND (Х>0)AND(X<=1) Это логическое выражение имеет значение истинно, если истинны оба выражения, написанные в круглых скобках. Иначе выражение ложно. Например, если Х<6 либо Х=6, можно записать с помощью логической операции, то есть логическое выражение, (X=6)OR(X<6) которое читается так: имеет значение истинно, если хотя бы одно из этих выражений истинно, иначе ложно. Например, X>1, но Х<>6, можно записать с помощью логической операции NOT: (Х>1)AND(X NOT 6), имеет значение истина, если оба выражения истины, иначе ложь. 2.Задание 2.1. Из таблицы 2 взять задание и написать программу, используя оператор условного перехода. 2.2. Из таблицы 3 взять задание и написать программу, используя оператор варианта.
Контрольные вопросы 1. Понятие разветвляющихся процессов. 2. Что называется условным переходом? 3. Оператор условного перехода. 4. Полная и сокращенная формы условного оператора. 5. В чем заключается вложенная конструкция условных операторов? 6. В каких случаях операторы объединяются в один, составной оператор? Приведите пример. 7. Оператор варианта, его возможности. 8. Общий вид оператора безусловного перехода. Литература 1. Новичков В.С. Паскаль. – В.С. Новичков, Н.И. Панфилов, А.Н. Пылькин. – М.: Высш. школа, 1990 – 223с. 2. Савельев А.Я. Языки программирования (Паскаль, ПЛ/М). – М.: Высш. школа, 1987 – 143 с. 3. Боон К. Паскаль для всех. – М.: Энергоатомиздат, 1988 – 190 с. 4. Пильшиков В.Н. Сборник упражнений по языку Паскаль. - М.: Наука, 1989 – 169 с. Таблица 2
Таблица 3
|