Первые два оператора заносят в переменные A и B две строковые константы, которые затем печатаются. Третий оператор присваивания B:=A скопирует в переменную B значение переменной A, где уже содержится «Первая строка», – она и будет напечатана последней.

Но, к чему здесь было копировать данные из одной переменной в другую? Сейчас это не имело смысла, согласен. Но последнее слово ещё не сказано!

Сцепление строк

Спросите у любого: для чего нужны компьютеры? Для вычислений, для чего ж еще? – ответят некоторые. Другие скажут, что для обработки данных. В самом деле, обработка данных – нечто более общее, чем вычисление. Не пора ли и нам приступить к обработке данных? Познакомимся с простейшей операцией обработки строк, которую называют сцеплением или конкатенацией.

Не пугайтесь этого заумного слова, сцепление строк – простейшее дело! Руками это делается так: берете несколько полос бумаги и пишите что-либо, – это ваши строки, – а затем склеиваете полоски. Это и есть конкатенация строк.

Песни о Паскале _35.jpg

Рис.22 – «Склеивание» отдельных строк оператором сцепления «+»

На рис. 22 представлено строковое выражение. Знаки «+» здесь обозначают операцию сцепления строк, – точно так же она обозначается и в Паскале. Показанный ниже оператор присваивания занесет в переменную R строку, «склеенную» из пяти других строк (здесь N и S – это переменные, содержащие имя и фамилию человека).

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

Условный оператор

Песни о Паскале _36.jpg

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