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

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

Части условного оператора THEN и ELSE называют ветвями (положительной и отрицательной соответственно). Стало быть, и условие, и ветви оператора можно размещать в нескольких строках – это удобно как для чтения, так и для отладки программ.

В главе 7 мы познакомились с графическим изображением алгоритмов. Существуют лишь три базовые управляющие конструкции, из которых вяжется хитроумная паутина современных программ: 1) линейная последовательность, 2) условный переход и 3) цикл. Условный оператор Паскаля – это и есть один из вариантов условного перехода. На блок-схемах его изображают так (рис. 23).



Рис.23 – Блок схема полного условного оператора

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

Пост номер один

Вам понятен условный оператор? Тогда обратимся к программе-часовому. Вероятно, вы написали её раньше меня, и нам осталось лишь сверить варианты.


>var S : string;

>begin

>Writeln(’Пароль?’); Readln(S);

>if S = ’pascal’

>      then Writeln(’Проходите!’)

>      else Writeln(’Стойте!’);

>Writeln(’Нажмите Enter’); Readln;

>end.


Почему после оператора Writeln(’Проходите!’) не видно разделителя – точки с запятой? Потому, что внутри условного оператора разделители не ставят! Другое дело – оператор Writeln(’Стойте!’). Здесь заканчивается условный оператор IF, и точка с запятой уместна – она разделяет операторы. Попробуйте нарушить эту запись и узнать мнение компилятора.

Неполный условный оператор

Что за окном? нет ли дождя? ЕСЛИ дождь идет, ТО прихватите зонтик. В этом кратком рассуждении нет отрицательной ветви, поскольку в ней никаких действий не предусмотрено. В таких случаях отрицательную ветвь отбрасывают и получают неполный условный оператор.

>IF <условие> THEN <Оператор>

Блок-схема такого оператора показана на рис. 24.



Рис.24 – Блок-схема неполного условного оператора
Пост номер два

Применим неполный условный оператор ко второй версии электронного часового – программе «P_10_2».


>var S, R : string;

>begin

>Writeln(’Пароль?’); Readln(S);

>R:= ’Стойте!’;

>if S = ’pascal’

>      then R:= ’Проходите!’;

>Writeln(R);

>Writeln(’Нажмите Enter’); Readln;

>end.


Здесь для хранения решения введена переменная R, в которую изначально помещается суровое «Стойте!». После успешной проверки пароля значение переменной меняется на благосклонное «Проходите!», а затем решение выводится на экран.

Откомпилируйте и проверьте оба варианта часового. «Поиграйте» с ошибками компиляции. Если компиляция прошла гладко, внесите ошибки сознательно и исследуйте реакцию компилятора.

Теперь вы познакомились с двумя вариантами условного оператора. Ни один серьезный алгоритм не обходится без них. Скоро вам доведется изобретать весьма хитрые алгоритмы и рисовать блок-схемы для них. Значит, надо привыкать к блок-схемам; на рис. 25 представлены схемы наших программ.



Рис.25 – Блок-схемы программ с полным и неполным условными операторами
Итоги

• Условный оператор изменяет порядок действий в зависимости от некоторого условия; оператор может быть полным или неполным.

• Полный условный оператор состоит из условия IF и двух ветвей: положительной – THEN, и отрицательной – ELSE. В каждую из ветвей можно поместить по одному вложенному оператору.

• Неполный условный оператор состоит из условия IF и положительной ветви THEN.

А слабо?

А) В программах для часового укажите начало и конец условного оператора (то есть, первый и последний его символ, включая вложенные операторы).

Б) Напишите программу, которая спрашивает, идет ли дождь, и на ответ «да» выводит сообщение «А зонта-то у тебя нет!». Воспользуйтесь неполным условным оператором.

Глава 11

Операторный блок



Электронный часовой из 10-й главы пропускает только знающих пароль. Расширим круг его обязанностей. Пусть часовой, приняв верный пароль, отдаст ещё несколько команд, как то: «Распахнуть ворота! Оркестр, музыку!». А для нарушителей команды будут такими: «Тревога! Задержать его!». Разумеется, что команды будут выводиться на экран, причем каждая – в отдельной строке. Усеченная блок-схема программы показана на рис. 26.



Рис.26 – Блок схема часового, подающего дополнительные команды
Операторные скобки

На первый взгляд все ясно, как белый день: если пароль верный, то отдаем команды, что показаны на блок-схеме слева, а иначе те, что справа. Каждую команду выводим отдельным оператором, – так они окажутся в отдельных строках.


>if S = ’pascal’

>      then Writeln(’Распахнуть ворота!’);

>      Writeln(’Оркестр, музыку!’);

>      Writeln(’Проходите!’);

>      else Writeln(’Тревога!’);

>      Writeln(’Задержать его!’);


Добавьте в программу часового все это и откомпилируйте. Что, не вышло? Тут обнажилась проблема с подряд идущими операторами печати. По правилам языка, они разделяются точками с запятой, не так ли? Но разделители «порежут» на части и условный оператор IF-THEN-ELSE, а это недопустимо! Наткнувшись на показанную выше конструкцию, компилятор заявит вам прямо в глаза о синтаксической ошибке. Ведь в каждой ветви условного оператора допускается лишь по одному вложенному оператору, где выход?

«Вероятно, в Паскале что-то предусмотрено на сей счет» – заподозрите вы. Конечно! Здесь выручит операторный блок, который превращает группу операторов в один, скрывая внутри себя разделители – точки с запятой. Блок организуют знакомой вам парой ключевых слов BEGIN и END. В нашей программе эти слова надо втиснуть в ветви условного оператора так:


Рекомендуем почитать
Мечты сбываются...

Для того, чтобы проходить сквозь стены необходимо выполнить три условия: видеть цель, верить в себя и не замечать препятствий. Чтобы сбылась Мечта достаточно иметь эту мечту и желание идти до конца. Алина жила как и большинство населения России: работа - дом, редкие встречи с друзьями, читала по вечерам любимые книги и представляла себя героиней одной из них. Видела себя сильным магом, в окружении друзей - эльфов драконов... Жаль, мечты сбываются не все. Или все-таки сбываются? Она сама уже эльф и дракон, а магом - сильным магом - она обязательно станет.


Люди как птицы

Гера обладает необычным даром полёта. И эта её способность вызывает у одних — пламенную любовь и всплеск творчества, у других — желание подчинить и завоевать, у третьих — жажду обладания и овладения технологией чуда… Какова же судьба девушки в сложном, жестоком мире?


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

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


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

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


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

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


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

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