const Pele = ’Эдсон Арантес ду Насименту’;
begin
Writeln(’Pele = ’ + Pele); Readln;
end.
Б) А эта программа что напечатает?
var A, B : string;
begin
A:=’123’; B:=’456’;
Writeln(’A+B= ’ + A + B); Readln;
end.
В) Является ли следующий оператор оператором присваивания?
const Pele = ’Эдсон Арантес ду Насименту’;
Г) Пусть ваша программа запросит у пользователя его адрес, а именно: город, улицу, номер дома и номер квартиры. А затем напечатает адрес одной строкой в таком виде:
Город:
Сделайте два варианта программы: один – с печатью нескольких параметров оператором Writeln, другой – с объединением строк.
Д) Какие из следующих операторов забракует компилятор?
const
Pele = ’Эдсон Арантес ду Насименту’;
ABBA : string = ’Музыкальный шедевр из Швеции’;
var
Moscow : string;
begin
Pele := ’Лучший футболист мира’;
ABBA := ’Распевают частушки’;
Moscow:= ’Столица олимпиады’;
end.
Глава 10
Условный оператор
Согласитесь, наши последние программы слегка поумнели, догнав по интеллекту попугая. Но негоже на лаврах почивать, – научим компьютер принимать осмысленные решения.
Вот секретное учреждение, вход в него строго ограничен. А вы – часовой, и пропускаете лишь тех, кто назовет пароль – слово «pascal». Наскучив на посту, вы задумали приспособить вместо себя компьютер. Ваша новая программа «P_10_1» должна запросить у пользователя пароль и решить, пропускать ли этого человека.
Что проще должности часового? Пускать или не пускать? Подобные вопросы решаются поминутно: свернуть направо или налево? орел или решка? быть или не быть? От полученного ответа зависят дальнейшие действия.
Обычно мы рассуждаем так: ЕСЛИ некоторое утверждение верно, ТО делаем одно, а ИНАЧЕ делаем другое. Например, ЕСЛИ на улице жарко, ТО наденем футболку, а ИНАЧЕ – свитер. Выделенные мною слова – ключевые в этом рассуждении. Переведя их на английский, получим условный оператор языка Паскаль.
Существуют два варианта условного оператора – полный и неполный. Полный оператор выражается тремя ключевыми словами: IF – «если», THEN – «то» и ELSE – «иначе», и записывается он так:
IF <условие> THEN <Оператор_1> ELSE <Оператор_2>
Первый оператор выполняется, если условие верно, а второй – если ложно. Стало быть, условный оператор – это сложная конструкция, которая включает в себя другие операторы.
Теперь обратимся к условию, что это такое? Если я скажу, что это логическое выражение, вы ничего не поймете. С логическими выражениями мы скоро разберемся досконально, а здесь ограничимся лишь примером. Воспользуемся простейшим логическим выражением, которое заключается в сравнении двух строк. Предположим, что переменная S содержит введенный пользователем пароль, тогда условный оператор проверки пароля будет таким.
if
Здесь логическое выражение выделено курсивом. То же самое можно записать чуть иначе.
if
then Writeln(’Проходите!’)
else Writeln (’Стойте!’)
Теперь переменная S и константа «pascal» поменялись местами, и это никак не сказалось на условном операторе, поскольку знак равенства в логических выражениях означает сравнение (а не присваивание!).
Части условного оператора THEN и ELSE называют ветвями (положительной и отрицательной соответственно). Стало быть, и условие, и ветви оператора можно размещать в нескольких строках – это удобно как для чтения, так и для отладки программ.
В главе 7 мы познакомились с графическим изображением алгоритмов. Существуют лишь три базовые управляющие конструкции, из которых вяжется хитроумная паутина современных программ: 1) линейная последовательность, 2) условный переход и 3) цикл. Условный оператор Паскаля – это и есть один из вариантов условного перехода. На блок-схемах его изображают так (рис. 23).
Внутри ромбика или рядом с ним обычно показывают проверяемое условие, а положительную и отрицательную ветви располагают слева и справа от него.
Вам понятен условный оператор? Тогда обратимся к программе-часовому. Вероятно, вы написали её раньше меня, и нам осталось лишь сверить варианты.
var S : string;
begin
Writeln(’Пароль?’); Readln(S);
if S = ’pascal’
then Writeln(’Проходите!’)
else Writeln(’Стойте!’);
Writeln(’Нажмите Enter’); Readln;
end.
Почему после оператора Writeln(’Проходите!’) не видно разделителя – точки с запятой? Потому, что внутри условного оператора разделители не ставят! Другое дело – оператор Writeln(’Стойте!’). Здесь заканчивается условный оператор IF, и точка с запятой уместна – она разделяет операторы. Попробуйте нарушить эту запись и узнать мнение компилятора.