Песни о Паскале - страница 22

Шрифт
Интервал

стр.

Теперь обратимся к условию, что это такое? Если я скажу, что это логическое выражение, вы ничего не поймете. С логическими выражениями мы скоро разберемся досконально, а здесь ограничимся лишь примером. Воспользуемся простейшим логическим выражением, которое заключается в сравнении двух строк. Предположим, что переменная S содержит введенный пользователем пароль, тогда условный оператор проверки пароля будет таким.


>      if S = ’pascal’ then Writeln(’Проходите!’) else Writeln (’Стойте!’)


Здесь логическое выражение выделено курсивом. То же самое можно записать чуть иначе.


>if ’pascal’ = S

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

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


Теперь переменная S и константа «pascal» поменялись местами, и это никак не сказалось на условном операторе, поскольку знак равенства в логических выражениях означает сравнение (а не присваивание!).

Части условного оператора THEN и ELSE называют ветвями (положительной и отрицательной соответственно). Стало быть, и условие, и ветви оператора можно размещать в нескольких строках – это удобно как для чтения, так и для отладки программ.

В главе 7 мы познакомились с графическим изображением алгоритмов. Существуют лишь три базовые управляющие конструкции, из которых вяжется хитроумная паутина современных программ: 1) линейная последовательность, 2) условный переход и 3) цикл. Условный оператор Паскаля – это и есть один из вариантов условного перехода. На блок-схемах его изображают так (рис. 23).



Рис.23 – Блок схема полного условного оператора

Внутри ромбика или рядом с ним обычно показывают проверяемое условие, а положительную и отрицательную ветви располагают слева и справа от него.

Пост номер один

Вам понятен условный оператор? Тогда обратимся к программе-часовому. Вероятно, вы написали её раньше меня, и нам осталось лишь сверить варианты.


>var S : string;

>begin

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

>if S = ’pascal’

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

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

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

>end.


Почему после оператора Writeln(’Проходите!’) не видно разделителя – точки с запятой? Потому, что внутри условного оператора разделители не ставят! Другое дело – оператор Writeln(’Стойте!’). Здесь заканчивается условный оператор IF, и точка с запятой уместна – она разделяет операторы. Попробуйте нарушить эту запись и узнать мнение компилятора.

Неполный условный оператор

Что за окном? нет ли дождя? ЕСЛИ дождь идет, ТО прихватите зонтик. В этом кратком рассуждении нет отрицательной ветви, поскольку в ней никаких действий не предусмотрено. В таких случаях отрицательную ветвь отбрасывают и получают неполный условный оператор.

>IF <условие> THEN <Оператор>

Блок-схема такого оператора показана на рис. 24.



Рис.24 – Блок-схема неполного условного оператора
Пост номер два

Применим неполный условный оператор ко второй версии электронного часового – программе «P_10_2».


>var S, R : string;

>begin

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

>R:= ’Стойте!’;

>if S = ’pascal’

>      then R:= ’Проходите!’;

>Writeln(R);

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

>end.


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

Откомпилируйте и проверьте оба варианта часового. «Поиграйте» с ошибками компиляции. Если компиляция прошла гладко, внесите ошибки сознательно и исследуйте реакцию компилятора.

Теперь вы познакомились с двумя вариантами условного оператора. Ни один серьезный алгоритм не обходится без них. Скоро вам доведется изобретать весьма хитрые алгоритмы и рисовать блок-схемы для них. Значит, надо привыкать к блок-схемам; на рис. 25 представлены схемы наших программ.



Рис.25 – Блок-схемы программ с полным и неполным условными операторами
Итоги

• Условный оператор изменяет порядок действий в зависимости от некоторого условия; оператор может быть полным или неполным.

• Полный условный оператор состоит из условия IF и двух ветвей: положительной – THEN, и отрицательной – ELSE. В каждую из ветвей можно поместить по одному вложенному оператору.


стр.

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