Песни о Паскале
Шрифт:
Но существует и другая разновидность констант – типизированные константы, которые объявляются с явным указанием типа:
const Pele : string = ’Эдсон Арантес ду Насименту’; <– это строка (string)
Number : integer = 12; <– это число (integer)
В действительности это тоже переменные, и они могут изменяться в ходе выполнения программы. Но этим переменным изначально присвоены нужные значения, поэтому при запуске программы инициализация их через присваивание уже не требуется.
В Delphi разрешено инициализировать переменные при объявлении:
var Pele : string = ’Эдсон Арантес ду Насименту’;
Но этот способ не совместим с Borland Pascal, и в данной книге не применяется.
Итоги
• В одном операторе можно объявить несколько переменных одного типа.
• Процедура Writeln способна напечатать в одной строке несколько параметров. Параметры в списке разделяются запятыми.
• Операция присваивания «:=» помещает в переменную данные, представленные константой, переменной, или их комбинацией – выражением.
• Конкатенация – это объединение нескольких строк в одну.
• Для инициализации переменной необходимо либо ввести в неё данные процедурой Readln, либо заполнить оператором присваивания.
• Извлечение данных из переменных, которые не были инициализированы, бессмысленно и нередко вызывает крушение программы.
А слабо?
А) Что напечатает следующая программа?
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 S = ’pascal’ then Writeln(’Проходите!’) else Writeln (’Стойте!’)
Здесь логическое выражение выделено курсивом. То же самое можно записать чуть иначе.
if ’pascal’ = S
then Writeln(’Проходите!’)
else Writeln (’Стойте!’)
Теперь переменная S и константа «pascal» поменялись местами, и это никак не сказалось на условном операторе, поскольку знак равенства в логических выражениях означает сравнение (а не присваивание!).
Части условного оператора THEN и ELSE называют ветвями (положительной и отрицательной соответственно). Стало быть, и условие, и ветви оператора можно размещать в нескольких строках – это удобно как для чтения, так и для отладки программ.
В главе 7 мы познакомились с графическим изображением алгоритмов. Существуют лишь три базовые управляющие конструкции, из которых вяжется хитроумная паутина современных программ: 1) линейная последовательность, 2) условный переход и 3) цикл. Условный оператор Паскаля – это и есть один из вариантов условного перехода. На блок-схемах его изображают так (рис. 23).