Основы программирования на C++, PASCAL
3.10. Логические выражения в управляющих операторах
Алгоритмическая структура ветвления программируется в Паскале с помощью условного оператора. Раньше мы его описывали в таком виде:
If <условие> Then <оператор 1> Else <оператор 2>;
Кроме того, возможно использование неполной формы условного оператора:
If <условие> Then <оператор>;
Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 20).

То, что мы раньше называли условием, есть логическое выражение, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться <оператор 1> (после Then), если false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).
Пример 1. По длинам трех сторон треугольника а, b, с вычислить его площадь.
Для решения задачи используется формула Герона

где р = (а + b + с) / 2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сторон треугольника: длина каждой стороны должна быть меньше длин двух других сторон.
Имея возможность в одном условном операторе записывать достаточно сложные логические выражения, мы можем сразу «отфильтровать» все варианты неверных исходных данных.
Program Geron;
Var A,B,C,P,S: Real;
Begin
WriteLn('Введите длины сторон треугольника:');
Write('а='); ReadLn(A) ;
Write('b='); ReadLn(В);
Write ('c='); ReadLn(C);
If (A>0) And (B>0) And (00) And (A+B>C)
And (B+С>A) And (A+C>B)
Then Begin
P:=(A+B+C)/2;
S:=Sqrt(P*(P-A)*(P-B)*(P-C));
WriteLn('Площадь=',S)
End
Else WriteLn('Неверные исходные данные')
End.
Теперь рассмотрим синтаксическую диаграмму оператора цикл-пока, или цикл с предусловием (рис. 21).

Сначала вычисляется <Логическое выражение>. Пока его значение равно true, выполняется <0ператор> — тело цикла. Здесь <Oператор> может быть как простым, так и составным.
Пример 2. В следующем фрагменте программы на Паскале вычисляется сумма конечного числа членов гармонического ряда

Суммирование прекращается, когда очередное слагаемое становится меньше ε или целая переменная i достигает значения MaxInt.
S:=0;
I:=l;
While (l/I>=Eps) And (I<MaxInt) Do
Begin
S:=S+1/I;
I:=1+1
End;
Синтаксическая диаграмма оператора цикл-до, или цикл с постусловием, представлена на рис. 22.

