Читаем Песни о Паскале (СИ) полностью

      if S = ’’ then …


Здесь справа от знака равенства стоят два апострофа, – это пустая строка (между апострофами нет пробела!).

Мы ответили на первый вопрос, но как перейти к началу программы? Не надейтесь на условный оператор, он тут не поможет! Обе его ветви следуют после проверки условия IF, поэтому условный оператор передает управление только вперед.


Нанимаем репетитора

Итак, условный оператор тут не помощник, но Паскаль не оставит вас в беде. Для организации циклов в нём предусмотрены три оператора, с одним из которых мы ознакомимся немедля. Программистам он известен как цикл с проверкой в конце, и записывается двумя ключевыми словами: REPEAT – «повторять» и UNTIL – «вплоть до».

Отчасти «репетитор» похож на операторный блок BEGIN-END, рассмотренный нами в предыдущей главе. Вам надо повторять выполнение ряда операторов? Тогда поставьте слово REPEAT перед первым из них, а проверку условия UNTIL – за последним, и получите следующую конструкцию.


REPEAT

<Оператор 1>;

<Оператор 2>;

...

<Оператор N>

UNTIL условие


По-русски действие оператора можно изъяснить так: ПОВТОРЯТЬ следующие далее операторы, ПОКА условие НЕ соблюдается. На рис. 28 показана блок-схема такой циклической конструкции; здесь операторы 1 и 2 будут исполняться до тех пор, пока НЕ соблюдается условие в конце цикла. При соблюдении условия цикл прекратится, и выполнится оператор 3.

Примечание. Сходство оператора цикла с блоком BEGIN-END состоит в том, что REPEAT-UNTIL тоже скрывает внутри себя разделители операторов – точки с запятой. Стало быть, он тоже формирует единый блок.




Рис.28 – Блок-схема оператора цикла с проверкой в конце

Воспользуемся циклом для очередной версии «киберчасового». За основу возьмем простейшую из предыдущих версий – программу «P_10_1». Поместив внутрь цикла REPEAT-UNTIL все исполняемые там операторы, получим желаемое – программу «P_12_1».


{ P_12_1 – программа-часовой с циклом }

var S : string;

begin

      repeat

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

      if S = ’pascal’

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

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

      until S=’’; { окончание цикла, если строка S пуста }

end.


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


Вежливый часовой

Программа работает? Прекрасно! Но одна шероховатость меня удручает. Покидая пост, часовой почему-то поднимает лишний шум: «Стойте!» – кричит он. Кому он это кричит? своему командиру? Безобразие! Пусть при оставлении поста часовой не проверяет пароль. С этой целью добавим ещё один условный оператор, как показано на рис. 29.




Рис.29 – Блок-схема часового с корректным завершением

На этой блок-схеме оператор проверки пароля обведен пунктиром; получив команду о завершении работы, программа должна обойти его. Этому служит ещё один условный оператор, проверяющий, не пуста ли строка S.


      if S <> ’’ then …


Пара знаков «меньше»–«больше» в Паскале означает неравенство. Здесь положительная ветвь THEN будет выполнена, если строка S не будет пустой. Стало быть, это условие по смыслу противоположно условию IF S=’’.

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


{ P_12_2 – вежливый часовой }

var S : string;

begin

      repeat

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

      { если строка не пуста, проверяем пароль }

      if S<>’’ then

      if S = ’pascal’

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

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

      until S=’’;

      Writeln(’До встречи! Нажмите Enter’); Readln;

end.


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


Досрочный выход из цикла

С какой бы стороны придраться к нашему часовому? Ведь программа делает все, что положено. Но рассмотрим ещё один её вариант. Дело в том, что условные операторы внутри цикла порой загромождают и запутывают его. Это не относится к нашей теперешней программе, но мы ведь только в начале пути… Ждать ли, пока гром грянет? Или подготовиться к нему заранее? Познакомьтесь с процедурой по имени BREAK – «прервать» (боксерам знакомо это слово).

Условие завершения цикла, как вам известно, проверяется в точке UNTIL. Но порой это условие удобней проверить где-то в середине цикла, и тогда цикл лучше прервать досрочно, вызвав процедуру BREAK следующим образом:


      if условие_выхода_из_цикла then Break;


Внимание: вызов процедуры BREAK допустим только внутри циклов!

Посмотрите, как изменится блок-схема с оператором BREAK (рис. 30), здесь оператор принятия решения я заменил пунктирным прямоугольником.




Рис.30 – Блок-схема циклической программы с оператором Break

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

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

Букварь сценариста. Как написать интересное кино и сериал
Букварь сценариста. Как написать интересное кино и сериал

Александр Молчанов создал абсолютно честный и увлекательный «букварь» для сценаристов, делающих первые шаги в этой профессии. Но это не обычный скучный учебник, а увлекательная беседа с профессионалом, которая поможет вам написать свой первый, достойный сценарий! Книга поделена на уроки, из которых вы узнаете, с чего начать свою работу, как сделать героев живыми и интересными, а сюжет — захватывающим и волнующим. Первая часть книги посвящена написанию сценариев для больших экранов, вторая — созданию сценариев для телесериалов.Как развить и улучшить навыки сценариста? Где искать вдохновение? Почему одни идеи выстреливают, а от других клонит в сон? И как вообще правильно оформлять заявки и составлять договоры? Ответы на эти и многие другие вопросы вы найдете внутри! Помимо рассказов из своей практики и теоретической части, Александр Молчанов приводит множество примеров из отечественной и западной киноиндустрии и даже делится списком шедевров, которые обязательно нужно посмотреть каждому сценаристу, мечтающему добиться успеха.

Александр Владимирович Молчанов

Драматургия / Прочее / Культура и искусство