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

Глава 10 Условный оператор

Согласитесь, наши последние программы слегка поумнели, догнав по интеллекту попугая. Но негоже на лаврах почивать, — научим компьютер принимать осмысленные решения.

Стой! Кто идет?

Вот секретное учреждение, вход в него строго ограничен. А вы — часовой, и пропускаете лишь тех, кто назовет пароль — слово «pascal». Наскучив на посту, вы задумали приспособить вместо себя компьютер. Ваша новая программа P_10_1 должна запросить у пользователя пароль и решить, пропускать ли этого человека.

Вопрос ребром

Что проще должности часового? Пускать или не пускать? Подобные вопросы решаются поминутно: свернуть направо или налево? орел или решка? быть или не быть? От полученного ответа зависят дальнейшие действия.

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

Существуют два варианта условного оператора — полный и неполный. Полный оператор выражается тремя ключевыми словами: IF — «если», THEN — «то» и ELSE — «иначе», и записывается он так.

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

Первый оператор выполняется, если условие верно, а второй — если ложно. Стало быть, условный оператор — это сложная конструкция, которая включает в себя другие операторы.

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

69

Глава 10

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

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

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

if ’pascal’ = S

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

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

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

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

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

THEN

 

ELSE

 

IF

 

 

 

Оператор_1

 

Оператор_2

 

 

 

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

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

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

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

70

Глава 10

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

var S : string; begin

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

then Writeln(’Проходите!’) else Writeln(’Стойте!’);

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

Почему после оператора Writeln(’Проходите!’) не видно разделителя

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

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

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

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

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

IF

THEN

Оператор

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

71

Глава 10

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

Пост номер два

Применим неполный условный оператор ко второй версии электронного часового — программе 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 представлены схемы наших программ.

72

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