Чтение онлайн

на главную

Жанры

Шрифт:

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

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

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

Вопрос

ребром

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

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

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

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

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

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

Поделиться:
Популярные книги

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Эфир. Терра 13. #2

Скабер Артемий
2. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13. #2

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III