Читаем Песни о Паскале полностью

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

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

Глава 11

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



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



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

Операторные скобки

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


if S = ’pascal’

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

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

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

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

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


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

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


if S = ’pascal’

      then begin

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

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

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

      end

      else begin

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

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

      end;


Как видите, внутри блока BEGIN-END разделители ставят как обычно – для разграничения операторов.

А сколько операторов вместится в блок BEGIN-END? Да сколько угодно! Блок может быть и пустым, – иногда это оправдано. Предположим, вы ещё точно не решили, что будет внутри ветви: один оператор или больше. Тогда вставьте здесь пустой блок BEGIN-END, а затем думайте дальше. Вставка лишних блоков не влияет на программу, но может уберечь от синтаксических и логических ошибок.

И последний вопрос: почему после END нет точки? Ведь мы ставим её в конце программы! Да, но окончание программы – это единственный случай, когда после END ставится точка.

Красиво жить не запретишь

Вероятно, вы заметили, что ветви THEN и ELSE условного оператора расположены с отступом вправо. Что это, требование языка? Ничуть. Вы вправе написать программу даже в одну строку, и компилятор «проглотит» её. Но каково будет разбираться в такой программе вам или вашему приятелю?

Отступы в программе сделаны для удобства чтения. Строгих правил по этой части нет; оформление – дело вкуса. Но сложились традиции, следование которым облегчит жизнь и вам, и тем, кто будет читать ваши программы. Главная идея оформления программ состоит в выделении логических уровней. Что это такое? В данном примере это ветви THEN и ELSE, – они должны быть хорошо видны в тексте. Полезно, также, выделять блоки операторов. Для этого можно поместить слова BEGIN и END друг под другом, а содержимое блока сдвинуть относительно них вправо.

Разбирая примеры, вы со временем научитесь разумно оформлять свои программы, – лучше раз увидеть, чем стократ услышать. Вот, в частности, другой вариант оформления программы «P_11_1», где обе ветви условного оператора прекрасно видны, хотя скобки begin-end и не расположены друг под другом.


var S : string;

begin

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

      if S = ’pascal’ then begin

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

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

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

      end else begin

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

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

      end;

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

end.


Комментарии

Перейти на страницу:

Похожие книги

Сломанная кукла (СИ)
Сломанная кукла (СИ)

- Не отдавай меня им. Пожалуйста! - умоляю шепотом. Взгляд у него... Волчий! На лице шрам, щетина. Он пугает меня. Но лучше пусть будет он, чем вернуться туда, откуда я с таким трудом убежала! Она - девочка в бегах, нуждающаяся в помощи. Он - бывший спецназовец с посттравматическим. Сможет ли она довериться? Поможет ли он или вернет в руки тех, от кого она бежала? Остросюжетка Героиня в беде, девочка тонкая, но упёртая и со стержнем. Поломанная, но новая конструкция вполне функциональна. Герой - брутальный, суровый, слегка отмороженный. Оба с нелегким прошлым. А еще у нас будет маньяк, гендерная интрига для героя, марш-бросок, мужской коллектив, волкособ с дурным характером, балет, секс и жестокие сцены. Коммы временно закрыты из-за спойлеров:)

Лилиана Лаврова , Янка Рам

Современные любовные романы / Самиздат, сетевая литература / Романы