Песни о Паскале (СИ) - Страница 15

Изменить размер шрифта:

Песни о Паскале (СИ) - _41.jpg

Рис.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.

Комментарии

Раз уж мы коснулись оформления, рассмотрим ещё одно средство Паскаля – комментарии, которые служат для пояснения программ. Комментарий – это произвольный текст, заключенный в фигурные скобки {…}, или в круглые скобки со звездочкой (*…*). Вот примеры комментариев.

{ Комментарий в одной строке }

{ Многострочный

комментарий

}

(* Комментарий в скобках со звездочками *)

А как воспринимает их компилятор? Да никак. Найдя начало комментария, компилятор ищет его окончание, а все, что оказалось внутри ограничителей, «пропускает мимо ушей». Поэтому комментарии не оказывают влияния на программу. Есть только одно исключение, о котором я скажу в своё время, повествуя о директивах компилятора. Последующие программы я буду сопровождать комментариями.

Программисты нередко используют комментарии как «шапку-невидимку». О чем я? Иногда – при поиске ошибок – требуется временно исключить часть операторов из программы. Вместо того чтобы удалять, а затем печатать их заново, лучше закомментировать эту часть текста. То есть, заключить ненужные операторы в фигурные скобки, превратив в комментарий. Такой кусок программы легко восстановить, удалив фигурные скобки.

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

      A:= B;       // Копирование переменой – это однострочный комментарий

Итоги

• Операторные скобки BEGIN-END объединяют несколько операторов в один операторный блок. Операторный блок воспринимается как один оператор.

• Форматирование программы – это оформление её с помощью логических отступов. Форматирование не влияет на программу, но облегчает её чтение.

• Комментарии предназначены для включения в программу пояснений. Комментарии пропускаются компилятором и не влияют на программу.

• Комментарии удобны для временного исключения частей программы.

А слабо?

А) Сколько операторов можно поместить в операторном блоке?

Б) Найдите ошибку в этом кусочке программы, проверьте свое решение на компьютере.

      Writeln(’Что дождь? Все ещё идет?’); Readln(S);

      if S = ’ага’ then

      begin

      Writeln(’А зонтик ты так и не купил!’);

      Writeln(’Сколько раз напоминать?’);

      end;

      else begin

      Writeln(’На этот раз тебе повезло!’);

      end;

Глава 12

Цикл с проверкой в конце

Песни о Паскале (СИ) - _42.jpg

Подтянем дисциплину

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

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com