Очень часто ход решения задачи в практике зависит от выполнения какого-либоусловия.
Например: Требуется построить алгоритм вычисления значения функции
y=|x|. Она задается соотношением:
При решении этой задачи требуется выполнить следующие:
1) проверить больше или равен нулю x;
2) если x больше или равен 0, то присвоить y значение x(y:= x),
если x меньше 0, то присвоить у значение -x (у:=-x).
Коротко алгоритм решения этой задачи может быть записан так:
если x ³0,
то у: = x,
иначе у: = -x
Эти команды называются командами ветвления (условным оператором)
Условный оператор может иметь две формы (структуры), представленные на рисунках 1 и 2. На рисунке 1 показана неполная форма условного оператора: действие выполняется только тогда, когда выполняется записанное в ромбе условие. В случае невыполнения условия происходит переход к следующему оператору (выход из структуры). На рисунке 2 изображена полная форма условного оператора: в случае выполнения условия (выход «+» из ромба) выполняется одно действие, в случае невыполнения (выход «—») — другое действие. Каждая структура имеет один вход и один выход. Программу рекомендуется строить из последовательных, логически завершенных блоков, не допуская передачи управления из одного блока в другой. Такая программа содержит меньше ошибок при разработке, легче проверяется на правильность выполнения. Неполный условный оператор имеет вид:
IF условиеTHEN оператор;
Полный условный оператор:
IF условиеTHEN оператор_1ELSE оператор_2;
Рис 1. Неполная форма
условного оператора
Рис 2. Полная форма
условного оператора
Если перевести на русский язык английские слова IF, THEN и ELSE, то вид условного оператора - ЕСЛИ условие,ТО оператор 1,ИНАЧЕ оператор 2;
В различных случаях после слов THEN и ELSE надо выполнить не один оператор, а несколько. Тогда эти операторы заключаются в так называемые операторные скобки, открывающая скобка которых — слово BEGIN, а закрывающая — слово END: begin
(операторы)
end;
Перед словом ELSE точка с запятой не ставится. В операторных скобках рекомендуется каждую пару BEGIN — END записывать в одном столбце: так легче проверить соответствие каждой открывающей скобке закрывающую.
Примеры условного оператора:
if a < bthen у: = х;
if х < 0thenх: = -х; {изменение знака переменной х}
if a + b < сthen begin
z: = х; {обмен значениями переменными х и у}
х: = у;
у: = z
end;
В качестве выполняемого в условном операторе действия может быть другой условный оператор. Например:
if sqr (х) + sqr (у) > 1then
if х > уthen z: = 0
else z: = 1;
При такой форме записи, использующей сдвиг вправо для каждого внутреннего действия, легко понять, к какому из двух слов IF относится слово ELSE. Если этот оператор записать в одну строку, то ответ будет неоднозначным. Транслятор поступает следующим образом. Встретив сложную конструкцию из вложенных условных операторов, он анализирует ее с конца, приписывая последнее найденное ELSE первому встреченному при просмотре справа налево IF.
Пример программы: Пусть для двух целых чисел надо определить, являются они четными или нет. Для проверки четности используем условие: остаток от деления на 2 четного числа равен 0.
program P3;
var a, b:integer;
Begin
writeln(‘введите два целых числа’):
readln(a, b);
if a mod 2=0then writeln(‘a — четное’)
else writeln(‘a — нечетное’);
if b mod 2=0then writeln(‘b — четное’)
else writeln(‘b — нечетное’)
End.
Логические выражения. Алгоритм решения квадратного уравнения содержит проверку условия d < 0. Два значения, dи 0, связаны отношением < — меньше. Если условие выполняется, то говорят, что соответствующее выражение истинно, если не выполняется — выражение ложно. Речь идет о логическом выражении. Для построения сложных условий в Паскале имеются логические операцииand (и), or (или) иnot(не). Обозначив истинное значение через 1 и ложное через 0, построим таблицы истинности для этих операций.
X
Y
X and Y
X
Y
X or Y
X
not X
Рассмотрим примеры построения сложных логических выражений.
1. Пусть требуется определить, принадлежит ли точка с координатой х отрезку [а; b]. Если записать это условие двойным неравенством, то читать его надо так: х меньше либо равен b и больше либо равен a (а £ х £ b). Отношение «меньше либо равно» в Паскале записывается двумя знаками. Аналогично записывается и «больше либо равно». Однако в Паскале нельзя записывать двойное неравенство. Используя логическую операцию and (и), запишем:
(х ³ a)and (х £ b)
Рис. 3
Отношения, между которыми стоит логическая операция, заключаются в круглые скобки.
2. Имеется прямоугольное отверстие со сторонами a и b и кирпич с ребрами х, у, z. Требуется составить условие прохождения кирпича в отверстие (рис. 3).
Кирпич пройдет в прямоугольное отверстие, если выполнится сложное условие: (а ³ х)and (b ³ y)or
(а ³ у)and (b ³ x)or
(а ³ х)and (b ³ z)or
(a ³ z)and (b ³ x)or
(a ³ y)and (b ³ z)or
(a ³ z)and (b ³ y)
Для трех граней шесть условий получается потому, что можно каждую грань повернуть на 90° и проверить для каждой грани два случая.
3. Определить принадлежность точки фигуре. Пусть фигура задана ограничивающими ее прямыми (рис.4). Для каждой прямой определим полуплоскость, в которой находится фигура – треугольник АВС. Полуплоскость задается неравенством.
Полуплоскость, находящаяся выше оси х определяется неравенством у > 0.
Полуплоскость, находящаяся справа от прямой, соединяющей точки (—1,0) и (0,2), задается неравенством у — 2х — 2 < 0.
Полуплоскость, находящаяся слева от прямой, соединяющей точки (1,0) и (0,2), задается неравенством у + 1х — 2 < 0.
Условие принадлежности точки (х, у) фигуре:
(Y > 0)and (Y - 2*X - 2 < 0)and (Y + 2*X - 2 < 0)
4. Приведем пример программы определения существования треугольника со сторонами a, b и с. Условие существования треугольника известно из геометрии: сумма двух любых сторон должна быть больше третьей. Следовательно, для всех сторон условие «сумма двух больше третьей» должно выполняться.
program Р4;
var a, b, с:real;
Begin
writeln(‘введите длины трех сторон треугольника ‘);