Песни о Паскале
Шрифт:
R:= ’Здравствуй, ’ + N + ’ ’ + S + ’!’;
Стало быть, справа от операции присваивания «:=» может быть не только константа или переменная, но и строковое выражение.
Испытайте теперь второй вариант приветствующей программы с тремя строковыми переменными.
var N, S, R : string;
begin
Writeln(’Фамилия?’); Readln(S);
Writeln(’Имя?’); Readln(N);
R := ’Здравствуй, ’ + N + ’ ’ + S +’!’;
Writeln(R);
Writeln(’Нажми Enter’); Readln;
end.
Инициализация
Если найдете силы, испытайте и эту программку (в ней есть ошибка!).
var S : string;
begin
Writeln(S);
S:= ’Спартак’;
Writeln(S);
S:= S + ’ – чемпион!’;
Writeln(S);
Writeln(’Нажми Enter’); Readln;
end.
Здесь переменная S будет напечатана трижды. Но что, по вашему мнению, выведет первый оператор Writeln(S)? Ни за что не угадаете! Этого даже я не знаю. Все потому, что при старте программы содержимое всех её переменных не определено, – в этих «карманчиках» может валяться что угодно. Обычно там остаются следы от деятельности предыдущих программ – так называемый мусор. Не пытайтесь напечатать такие переменные или извлечь из них данные, – порой это может вызвать даже аварию программы.
Запомните: прежде, чем взять из «карманчика», туда следует что-либо положить! Надо, как говорят программисты, инициализировать переменную. Это можно сделать двояко: либо вводом данных процедурой Readln, либо оператором присваивания.
В последующих операторах этого примера переменная S инициализируется, и здесь результат вывода на экран очевиден. А в операторе
S:= S + ’ – чемпион!’;
предыдущее значение переменной S взято для формирования её нового значения. Теперь там окажется строка «Спартак минус чемпион!». Не обижайтесь, спартаковцы, – пошутил. Обязательно проверьте эту программу!
Типизированные константы
Всем данным в программе свойственен какой-либо тип. Это может быть строка, число или другой тип данных, с которыми вы скоро познакомитесь. То же касается и констант, например:
const Pele = ’Эдсон Арантес ду Насименту’; <– это строка (string)
Number = 12; <– это число
Здесь тип сам собой определяется тем значением, что дано константе.
Но существует и другая разновидность констант – типизированные константы, которые объявляются с явным указанием типа:
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
Условный оператор