4.
ОРГАНИЗАЦИЯ ПРОГРАММ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ
Логические выражения
Логическое
выражение вырабатывает результат логического типа: true и false. Эти выражения
записываются с помощью операций отношений и логических операций.
Логические операции (L1 и L2 – логические
выражения)
L1 |
L2 |
L1 and L2 |
L1 or L2 |
L1 xor L2 |
not L1 |
true |
true |
true |
true |
false |
false |
true |
false |
false |
true |
true |
|
false |
true |
false |
true |
true |
true |
false |
false |
false |
false |
false |
|
Операции
в порядке убывания их приоритета располагаются следующим образом:
Операция |
Приоритет |
not and or, xor =, < >, <, >, < =, > = |
первый (высший) второй третий четвертый (низший) |
Пример логического выражения:
not (ln(x) > 5) and ((a
<= 5) or (y = 0.2))
Оператор условия if
Оператор if имеет вид:
if p then a1 else a2;
При выполнении
этого оператора сначала вычисляется логическое выражение p
(условие), в случае истинности которого выполняется оператор а1, а в случае
ложности – оператор а2. Ключевые
слова if, then и else имеют
смысл если,
то и иначе, соответственно.
Возможен сокращенный вариант
оператора if:
if p then a1;
Здесь, если
условие p истинно,
выполняется оператор а1.
Если условие p ложно, управление передается следующему (за оператором if) оператору в программе. Можно сказать, что первый вариант
оператора if осуществляет
выбор между двумя действиями, а второй – между действием и отсутствием
действия.
Пример
использования оператора if:
program sqroot; {Вычисление
действительных корней квадратного
уравнения}
var
a, b, c: real;
{коэффициенты уравнения}
x1, x2: real; {корни уравнения}
d: real; {дискриминант}
begin
writeln (’Введите коэффициенты уравнения:’);
write (’a =’); readln (a);
write (’b =’); readln (b);
write (’c =’); readln (c);
d: = b * b – 4 * a * c; {вычисление дискриминанта}
if d > = 0
then
begin
x1: = (-b +
sqrt(d)) / (2 * a);
x2: = (-b –
sqrt(d)) / (2 * a);
writeln (’Корни уравнения:’);
writeln (’ x1= ’, x1 : 9 : 3, ’ x2= ’, x2 : 9 : 3);
end
else
writeln
(’Действительных корней нет.’);
end.
Оператор выбора case
Оператор case используется для выбора одного
из нескольких направлений дальнейшего хода программы. Этот оператор имеет вид:
case p of
a: s1;
b: s2;
. .
n: sn;
else sn+1;
end;
При выполнении
оператора case сначала
вычисляется выражение p, называемое селектором выбора.
Выражение p должно принадлежать типу данных,
имеющему конечное число значений (например: integer).
Затем, в зависимости от полученного значения (если оно равно одной из констант a, b, …, n, которые называются константами выбора), выполняется
один из операторов s1,
s2, …, sn,
помеченный соответствующей константой. Каждый из этих операторов может быть
составным. Затем управление передается следующему (после case)
оператору в программе.
Если значение
выражения p не совпадает ни с одной из
констант выбора, выполняется оператор sn+1,
содержащийся после ключевого слова else, причем ветвь else в операторе case необязательна.
Зарезервированные
слова case, of, else и end имеют смысл вариант,
из, иначе и конец.
Кроме
одиночных констант в вариантах оператора case могут
использоваться диапазоны значений и списки (представленные через запятую).
Пример
использования оператора case:
program number;
{ Определение времени года по номеру месяца}
var
month: integer; {номер месяца}
begin
write (’Введите номер месяца:’);
readln (month);
writeln (‘Время года:’);
case month of
1, 2, 12: writeln (’зима’);
3..5: writeln (’весна’);
6..8: writeln (’лето’);
9..11: writeln (’осень’);
else writeln (’число должно
быть от 1 до 12’);
end;
end.
Оператор перехода goto
Оператор
перехода предназначен для передачи управления в другое место программы, т.е.
для нарушения естественного порядка выполнения операторов.
Этот оператор
имеет вид:
goto p;
Здесь p – метка, которой помечен некоторый другой оператор в программе.
Зарезервированное слово goto имеет смысл перейти. Переход осуществляется к
оператору, помеченному меткой p. Так, оператор перехода
goto 11;
передаст управление оператору с
меткой 11, например, оператору
11: writeln;
В качестве
меток допускается использовать числа (от 1 до 9999) и идентификаторы. Все
метки, используемые в программе, должны быть объявлены в разделе описания
меток, начинающемся со слова label. Каждой меткой
должен быть помечен один и только один из операторов в программе.
Пример
использования оператора goto:
program jump;
label 1;
var n: integer;
begin
read (n);
if n > 1000 then goto
1 else n: = n + 100;
write (n);
1: end.
Программа jump работает так. Вводится с клавиатуры значение переменной
n типа integer. Если это
значение превышает 1000, программа сразу завершается. В противном случае к
значению n прибавляется 100
и оно выводится на экран.