Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
59
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

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

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

 

 

Пароль верный?

Да

 

 

Нет

 

 

 

 

 

Распахнуть ворота!

 

Тревога!

 

 

 

 

 

 

 

 

 

 

Оркестр, музыку!

 

Задержать его!

 

 

 

 

 

 

 

 

 

 

Проходите!

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

if S = ’pascal’

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

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

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

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

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

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

75

Глава 11

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

на части и условный оператор 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 условного оператора расположены с отступом вправо. Что это, требование языка? Ничуть. Вы вправе написать программу даже в одну строку, и компилятор «проглотит» её. Но каково будет разбираться в такой программе вам или вашему приятелю?

Отступы в программе сделаны для удобства чтения. Строгих правил по этой части нет; оформление — дело вкуса. Но сложились традиции, следование которым облегчит жизнь и вам, и тем, кто будет читать ваши программы. Главная

76

Глава 11

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

идея оформления программ состоит в выделении логических уровней. Что это такое?

В данном примере это ветви 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.

Комментарии

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

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

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

комментарий

}

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

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

77

Глава 11

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

повествуя о директивах компилятора. Последующие программы я буду сопровождать комментариями.

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

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

A:= B;

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

Итоги

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

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

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

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

Аслабо?

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

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

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

begin

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

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

end; else begin

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

end;

78

Соседние файлы в папке delphi