Ну-с, данные со спутника введены, и можно заняться их обработкой. Ясно, что для проезда в школу обе улицы должны быть открыты. Условными операторами это нехитрое рассуждение можно выразить так:
S:=’Топай пешком’;
if A then
if B then S:=’Поезжай на машине!’;
Исходное значение – «Топай пешком» – заносим в переменную S заранее. Оно изменится тогда, когда обе булевы переменные станут равны TRUE. Согласитесь, это решение из двух условных операторов оказалось несложным. Но до поры до времени. Что, если маршрутов станет много, и каждый будет пролегать через несколько улиц? Программа превратится в нагромождение условных операторов, больше похожее на хаос землетрясения! Страшно? Тогда рассмотрим другой подход. Суть его в том, чтобы выразить решение на обычном человеческом языке, а затем превратить это высказывание в логическое выражение.
Решение нашей задачи можно высказать так: «проехать можно, если открыта улица A И открыта улица B». Обратите внимание на выделенный курсивом союз «И». Чтобы превратить это рассуждение в логическое выражение и записать на Паскале, надо лишь перевести союз «И» на английский язык – это будет «AND», а названия улиц заменить логическими переменными A и B. И вот результат такого перевода.
if A and B
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
Вместо двух условных операторов остался один. Готовая программа будет такой.
{ P_13_1 – первый маршрут проезда }
var A, B : Boolean; S: string;
begin
{ ввод данных со «спутника» }
Write(’Улица A:’); Readln(S); A:= S=’1’;
Write(’Улица B:’); Readln(S); B:= S=’1’;
{ решение }
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
Writeln(S); Readln
end.
Испытайте программу при разных сочетаниях входных данных и проверьте, не врёт ли она?
Теперь рассмотрим другой маршрут, здесь попасть в школу можно по любой из двух улиц (рис. 32).
Обычным языком молвим так: «проезд возможен, если открыта улица A
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
А вот маршрут на рис. 33 более замысловат.
Слабо ли вам выразить решение для этого случая? Сказать на обычном языке легко: «проехать можно, если открыта A И открыта B
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
Как просто! Здесь опять выделено курсивом логическое выражение. Только теперь оно составлено из булевых переменных и булевых операций AND (И) и OR (ИЛИ). Иногда эти операции называют логическим умножением и логическим сложением. Сходство с арифметикой здесь в том, что каждая логическая операция обладает в выражении своим старшинством: умножение AND выполняется раньше сложения OR. Когда эту последовательность надо изменить, применяют скобки. Пример такого рода показан на рис. 34 (перекресток).
Сначала скажем словами: «проехать можно, если открыта A
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
Поскольку логическое умножение выполняется раньше сложения, Паскаль поймет это так:
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
Наконец, рассмотрим маршрут на рис. 35, где путь преграждает шлагбаум. Договоримся, что закрытому шлагбауму соответствует значение TRUE (то есть, в сравнении с улицами тут все наоборот).
Рассуждая как обычно, скажем так: «проезд возможен, если
if
then S:=’Поезжай на машине!’
else S:=’Топай пешком!’;
В отличие от двух предыдущих операций, логическое отрицание – одноместная операция, ей нужен лишь один операнд. Логическое отрицание имеет наивысший приоритет, и выполняется раньше логического умножения и сложения.
Итак, посредством логических операций мы переводим рассуждения с человеческого языка на формальный язык программирования, получая при этом логические (булевы) выражения. Логические данные в Паскале можно сравнивать и выполнять с ними четыре логические операции, три из которых вам уже знакомы. Рассмотрим свойства этих операций.