Песни о Паскале - [23]

Шрифт
Интервал


>      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 A and B

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;

>      Writeln(S); Readln

>end.


Испытайте программу при разных сочетаниях входных данных и проверьте, не врёт ли она?

Теперь рассмотрим другой маршрут, здесь попасть в школу можно по любой из двух улиц (рис. 32).



Рис.32 – Схема проезда, второй вариант

Обычным языком молвим так: «проезд возможен, если открыта улица A ИЛИ открыта улица B». Союз «ИЛИ» тоже припасен в Паскале, по-английски он пишется «OR». В этом случае решение будет таким.


>      if A or B

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;


А вот маршрут на рис. 33 более замысловат.



Рис.33 – Схема проезда, третий вариант

Слабо ли вам выразить решение для этого случая? Сказать на обычном языке легко: «проехать можно, если открыта A И открыта B ИЛИ открыта C И открыта D ИЛИ открыта E». Слово «улица» я пропустил. Все, решение готово! Осталось лишь перевести его на язык Паскаль.


>      if A and B or C and D or E

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;


Как просто! Здесь опять выделено курсивом логическое выражение. Только теперь оно составлено из булевых переменных и булевых операций AND (И) и OR (ИЛИ). Иногда эти операции называют логическим умножением и логическим сложением. Сходство с арифметикой здесь в том, что каждая логическая операция обладает в выражении своим старшинством: умножение AND выполняется раньше сложения OR. Когда эту последовательность надо изменить, применяют скобки. Пример такого рода показан на рис. 34 (перекресток).



Рис.34 – Схема проезда, четвертый вариант

Сначала скажем словами: «проехать можно, если открыта A ИЛИ открыта B И открыта C ИЛИ открыта D». Переведя на Паскаль буквально, без скобок, получим:


>      if A or B and C or D

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;


Поскольку логическое умножение выполняется раньше сложения, Паскаль поймет это так: A or (B and C) or D. Но это не то, что мы хотели! Правильно будет записать наше решение со скобками:


>      if (A or B) and (C or D)

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;


Наконец, рассмотрим маршрут на рис. 35, где путь преграждает шлагбаум. Договоримся, что закрытому шлагбауму соответствует значение TRUE (то есть, в сравнении с улицами тут все наоборот).



Рис.35 – Схема проезда, пятый вариант

Рассуждая как обычно, скажем так: «проезд возможен, если НЕ закрыт шлагбаум». Здесь применено логическое отрицание НЕ, что по английски значит «NOT». Решение на Паскале будет таким.


>      if not A

>      then S:=’Поезжай на машине!’

>      else S:=’Топай пешком!’;


В отличие от двух предыдущих операций, логическое отрицание – одноместная операция, ей нужен лишь один операнд. Логическое отрицание имеет наивысший приоритет, и выполняется раньше логического умножения и сложения.

Парад логических операций

Итак, посредством логических операций мы переводим рассуждения с человеческого языка на формальный язык программирования, получая при этом логические (булевы) выражения. Логические данные в Паскале можно сравнивать и выполнять с ними четыре логические операции, три из которых вам уже знакомы. Рассмотрим свойства этих операций.

Логическое отрицание NOT («НЕ»). Имеет наивысший приоритет, то есть, при отсутствии скобок выполняется в первую очередь. Это одноместная операция, поскольку требует лишь одного операнда. По своему действию она напоминает знак «минус» для чисел, поскольку изменяет значение операнда на противоположное. Правила для этой операции таковы.


>NOT FALSE = TRUE

>NOT TRUE = FALSE


Логическое умножение AND («И»). Приоритет ниже, чем у NOT, но выше, чем у логического сложения OR. Требует двух операндов, и в результате дает TRUE, если оба операнда равны TRUE.


Рекомендуем почитать
Жлобские хроники

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Другая Земля Наследие Дружан

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Дороги своих любят

Четыре противоположности, чьи судьбы однажды удивительным образом переплелись – наемник, монах, воришка и маг – седлают коней. Что там, за горизонтом? Погони, разнесенные трактиры и странствующие музыканты да не оставят вас! Верные мечи, молитвы богам, ловкие руки, магия, и, конечно, верное плечо друга – и дороги будут благосклонны к своим любимцам, можете мне поверить.У менестрелей тяжелая работа. Но что на счет тех, кто им ее создает?


Зазеркалье. Фея для демона

Добрая и наивная сказка о любви.


Ли Кахори: Космическая любовь

На календаре 2283г. и у тебя светлое будущее.Ты — сын Советника Земного Союза и красивый парень. Отличник на курсе и прекрасный спортсмен. Просто тебе не повезло, Ли Кахори. Первой твоей ошибкой было влюбиться в сестру близкого друга, ну а второй — не отказаться от ваших взаимных чувств в угоду ее будущему жениху.Ты думал, что потерять ногу — это самое плохое в твоей жизни? Ты глубоко заблуждался, Лирой, мясорубка только начинается. Но ты ведь пройдешь этот путь до конца, так, Кахори? История про сильных духом, чья любовь разрушает любые преграды.Присутствует сёнэн-ай среди второстепенных героев.


Правила экстрасенса

Дело происходит в Питере. Молодой оперативник одного из убойных отделов Леонид Воронцов вызывает на допрос некоего бизнесмена Рыбкина с целью весьма низкой, а именно, получение взятки. Однако у Рыбкина, обвиняющегося в организации убийства своего зама, на этот счет совсем другие планы. Он подстраивает всё так, чтобы Воронцов получил сильный удар током, обычно в таких случаях ведущий к смерти. И Лёня действительно оказывается в морге. Однако в то время, когда для остальных такое путешествие, как правило, является последним, Лёнина история с него только начинается...