Песни о Паскале | страница 41




>      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

Согласно схеме, оператор BREAK передаст управление в точку, следующую за UNTIL. Применительно к нашей программе условие досрочного выхода из цикла будет таким.


>      if S=’’ then break;


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


>{ P_12_3 – часовой с досрочным выходом из цикла }

>var S : string;

>begin

>      repeat

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

>      { если строка пуста, то выход из цикла }