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. В каждую из ветвей можно поместить по одному вложенному оператору.
• Неполный условный оператор состоит из условия IF и положительной ветви THEN.
А слабо?
А) В программах для часового укажите начало и конец условного оператора (то есть, первый и последний его символ, включая вложенные операторы).
Б) Напишите программу, которая спрашивает, идет ли дождь, и на ответ «да» выводит сообщение «А зонта-то у тебя нет!». Воспользуйтесь неполным условным оператором.
Глава 11
Операторный блок
Электронный часовой из 10-й главы пропускает только знающих пароль. Расширим круг его обязанностей. Пусть часовой, приняв верный пароль, отдаст ещё несколько команд, как то: «Распахнуть ворота! Оркестр, музыку!». А для нарушителей команды будут такими: «Тревога! Задержать его!». Разумеется, что команды будут выводиться на экран, причем каждая – в отдельной строке. Усеченная блок-схема программы показана на рис. 26.
Рис.26 – Блок схема часового, подающего дополнительные команды
Операторные скобки
На первый взгляд все ясно, как белый день: если пароль верный, то отдаем команды, что показаны на блок-схеме слева, а иначе те, что справа. Каждую команду выводим отдельным оператором, – так они окажутся в отдельных строках.
if S = ’pascal’
then Writeln(’Распахнуть ворота!’);
Writeln(’Оркестр, музыку!’);
Writeln(’Проходите!’);
else Writeln(’Тревога!’);
Writeln(’Задержать его!’);
Добавьте в программу часового все это и откомпилируйте. Что, не вышло? Тут обнажилась проблема с подряд идущими операторами печати. По правилам языка, они разделяются точками с запятой, не так ли? Но разделители «порежут» на части и условный оператор IF-THEN-ELSE, а это недопустимо! Наткнувшись на показанную выше конструкцию, компилятор заявит вам прямо в глаза о синтаксической ошибке. Ведь в каждой ветви условного оператора допускается лишь по одному вложенному оператору, где выход?
«Вероятно, в Паскале что-то предусмотрено на сей счет» – заподозрите вы. Конечно! Здесь выручит операторный блок, который превращает группу операторов в один, скрывая внутри себя разделители – точки с запятой. Блок организуют знакомой вам парой ключевых слов BEGIN и END. В нашей программе эти слова надо втиснуть в ветви условного оператора так:
if S = ’pascal’
then begin
Writeln(’Распахнуть ворота!’);
Читать дальше