Условный оператор
End.
Begin
Var
R,S : Real;
Clrscr; {Очистка экрана}
Write('Введите радиус круга '); {Печать на экране просьбы о вводе}
Readln(R); {Ввод значения в переменную R с клавиатуры}
S:=PI*SQR(R); {Вычисление площади круга }
Writeln('Площадь круга радиусом ',R,' равна ',S);
Эта программа запрашивает у пользователя значение радиуса круга, вводит его значение, рассчитывает и выводит на экран величину площади круга с таким радиусом. Таким образом, появляется возможность, не внося изменений в текст программы, вводить с клавиатуры различные значения радиуса и получать соответствующие им значения площади круга. Для этого достаточно несколько раз запустить программу. Также эта программа демонстрирует следующее правило: выдача результатов должна быть прокомментирована так, чтобы был ясен смысл напечатанных чисел. Действительно, ведь можно было бы ограничиться Writeln(S), но значение выведенного программой числа в этом случае было бы ясно только тому, кто эту программу написал.
Одной из основных алгоритмических структур является ветвление
(альтернатива).
Если условие выполняется, то будет выполнена инструкция «1», если нет, то – инструкция «2». Несмотря на то, что в схеме присутствуют два действия, выполнено будет только одно, так как условие либо ложно, либо истинно. Третьего не дано. Такая схема позволяет решать задачи, в которых в зависимости от сложившихся обстоятельств требуется совершить то или иное действие. Нет никакого сомнения, что число задач такого рода огромно. Более того, очень сложно придумать реально значимое задание, алгоритм выполнения которого содержал бы в себе простое прямое следование команд. Даже примитивный пример, взятый из курса математики, не может быть решен без использования ветвления: необходимо вычислить значение выражения y = 1/x. Данная функция не всегда имеет значение, то есть не для всех значений аргумента существует значение результата. Наша задача так составить алгоритм, чтобы исполнитель ни в коем случае не встал в тупик, даже при получении нуля в качестве аргумента. Сформулировать это на естественном языке нетрудно:
1. Получить значение x.
2. Если x = 0, то сообщить, что выражение значения не имеет, иначе – вычислить y как 1/x.
Таким образом используется приведенная выше алгоритмическая структура. Она может быть выражена простыми словами:
Если <условие> {Если выполняется условие}
то <действие 1> {то выполнить действие № 1 }
иначе <действие 2> {иначе – выполнить действие № 2 }
Как это записать на Паскале? Да точно так же, только по-английски.
Формат условного оператора на языке Паскаль:
If <условие>
Then <оператор 1>
Else <оператор 2>;
Обратите внимание на то, что после Then и Else стоит только один оператор. Но что делать, чтобы решить задачу, в которой по выполнению или невыполнению условия нужно совершить не одно, а несколько действий? Здесь приходит на помощь уже известный нам составной оператор. В операторные скобки можно заключить любое количество операторов.
Вариант условного оператора в этом случае:
If <условие>
Then Begin <группа операторов 1> end
Else Begin < группа операторов 2> end;
Символ «точка с запятой» не ставится перед служебным словом Else, но операторы в группах, естественно, отделяются друг от друга этим символом.
Теперь поговорим об условиях. В программах на языке Паскаль условия представляют собой логические выражения (см. выше). Это может быть как просто переменная логического типа, так и сложная последовательность высказываний, связанных логическими операциями.
Приведем пример решения задачи: «Из двух чисел выбрать наибольшее».
Составим алгоритм и программу.
Program Example;
Var
A,B,C : Real;
Begin
Writeln('Введите два числа');
Readln(A,B); {Ввод аргументов с клавиатуры}
If A>B Then C:=A Else C:=B;
{Если A>B, то результат - A, иначе результат - B}
Writeln(¢Наибольшее число равно ¢, C);
{Вывод результата на экран}
End.
Еще один классический пример: «По заданным коэффициентам решить квадратное уравнение». Эта задача сложнее, поэтому перед тем как писать программу составим алгоритм, записав его в виде блок-схемы.
Сначала вводим коэффициенты, затем вычисляем дискриминант. Теперь возникает две возможности: либо отсутствие действительных корней в случае отрицательного дискриминанта, либо эти корни можно все-таки вычислить и вывести на экран в случае неотрицательного дискриминанта (случай равенства дискриминанта нулю входит сюда же, корней – два, только они одинаковые).
При записи алгоритма на языке программирования следует учесть, что в ветви «нет» не одно действие, а три, поэтому следует применить составной оператор. Арифметические выражения не забывайте записывать в соответствии с правилами языка Паскаль. В остальном, эта программа не сложнее
предыдущей.
Program Sq1;
Var
A, B, C, D, X1, X2 : Real;
Begin
Writeln ('Введите коэффициенты квадратного уравнения');
Readln (A,B,C);
D:=B*B-4*A*C;
If D<0 Then Writeln ('Корней нет! ') Else Begin
X1:=(-B+SQRT(D))/(2*A);
X2:=(-B-SQRT(D))/(2*A);
Writeln ('X1= ', X1:8:3, ' X2= ',X2:8:3)
End
End.
В качестве оператора, который выполняется по истинности или ложности условия, может выступать условный оператор. В этом случае говорят о вложенности условных операторов. При решении такого рода задач настоятельно рекомендуется составлять блок-схему алгоритма и только потом составлять программу. Обычно при записи условных операторов на языке Паскаль (особенно при множественных ветвлениях) команды записывают уступом вправо и вниз. Это повышает наглядность и снижает потери времени на отладку.