Книга: Песни о Паскале
Глава 9 Переменные: продолжение знакомства
Разделы на этой странице:
Глава 9
Переменные: продолжение знакомства
Теперь, после знакомства с переменными, вы умеете объявлять их, вводить в переменные данные и печатать. Отныне мы не расстанемся с ними.
Представьтесь, пожалуйста!
Наша следующая программа «P_09_1» спросит у пользователя имя и фамилию, после чего обратится к нему уважительно, как следует. Вот пример такой «беседы» (выделенное курсивом печатал пользователь).
Фамилия?
Скотинин
Имя?
Тарас
Здравствуй, Тарас Скотинин!
Нажми Enter
Примечание. Тарас Скотинин — персонаж комедии Д.И. Фонвизина «Недоросль».
Очевидно, что для хранения имени и фамилии одной переменной мало, нужны две. Памятуя о том, что секция объявления переменных допускает несколько операторов, объявим там парочку переменных.
var N : string;
S : string;
Здесь переменные N и S названы мною по первым буквам слов Name (имя) и Surname (фамилия). Объявить несколько переменных одного типа можно и в одной строке, перечислив их через запятую.
var N, S : string;
Тут две переменные объявлены одним оператором, – этот способ ничуть не хуже.
Далее, после ввода данных, надо напечатать в одной строке несколько параметров: приветствие, имя, фамилию, и восклицательный знак в конце, чтобы обратиться к Тарасу Скотинину так:
Здравствуй, Тарас Скотинин!
Достаточно ли здесь одного оператора печати? Конечно! Вот он.
Writeln(’Здравствуй, ’, N, ’ ’, S, ’!’);
Тут мы втиснули в процедуру Writeln аж пять параметров! Обратите внимание: в конце добавлен восклицательный знак, а между именем и фамилией печатается пробел, иначе эти слова слипнутся на экране.
После всех пояснений следующая программа должна быть вполне ясной.
var N, S : string;
begin
Writeln(’Фамилия?’); Readln(S);
Writeln(’Имя?’); Readln(N);
Writeln(’Здравствуй, ’, N, ’ ’, S,’!’);
Writeln(’Нажми Enter’); Readln;
end.
Обязательно скомпилируйте её и проверьте в действии.
Из пустого в порожнее
Итак, нам удалось скроить уже два «кармана» для хранения данных. Действительно, переменные сродни карманам, здесь можно и хранить данные, и копировать из одного «кармана» в другой. Для копирования данных в Паскале применяют оператор присваивания, вот примеры копирования данных.
A := 'Привет, Мартышка!'; <– копирование строковой константы
B := A; <– копирование из переменной A в переменную B
Пара символов «:=» – «двоеточие» и «равно» – означают операцию присваивания. Слева от знака операции указывают переменную, в которую будут помещены данные, а справа можно указать переменную или константу. Что, по вашему мнению, напечатает следующая программа?
var A, B : string;
begin
A:= 'Первая строка';
B:= 'Вторая строка';
Writeln(A); Writeln(B);
B:= A;
Writeln(B); Readln
end.
Очевидно, что на экране появятся следующие строки.
Первая строка
Вторая строка
Первая строка
Первые два оператора заносят в переменные A и B две строковые константы, которые затем печатаются. Третий оператор присваивания B:=A скопирует в переменную B значение переменной A, где уже содержится «Первая строка», – она и будет напечатана последней.
Но, к чему здесь было копировать данные из одной переменной в другую? Сейчас это не имело смысла, согласен. Но последнее слово ещё не сказано!
Сцепление строк
Спросите у любого: для чего нужны компьютеры? Для вычислений, для чего ж еще? – ответят некоторые. Другие скажут, что для обработки данных. В самом деле, обработка данных – нечто более общее, чем вычисление. Не пора ли и нам приступить к обработке данных? Познакомимся с простейшей операцией обработки строк, которую называют сцеплением или конкатенацией.
Не пугайтесь этого заумного слова, сцепление строк – простейшее дело! Руками это делается так: берете несколько полос бумаги и пишите что-либо, – это ваши строки, – а затем склеиваете полоски. Это и есть конкатенация строк.
Рис.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.
- Только для взрослых
- Детям до 16–ти
- Глава 1 Путь далек у нас с тобою…
- Глава 2 Вместо теории
- Глава 3 Консольный интерфейс
- Глава 4 Оружие – к бою!
- Глава 5 Программа номер один
- Глава 6 Подготовка к следующему штурму
- Глава 7 Развиваем успех
- Глава 8 Постоянные и переменные
- Глава 9 Переменные: продолжение знакомства
- Глава 10 Условный оператор
- Глава 11 Операторный блок
- Глава 12 Цикл с проверкой в конце
- Глава 13 Правда и кривда
- Глава 14 Дважды два – четыре
- Глава 15 Айда в Монте-Карло!
- Глава 16 Делу время, а потехе час
- Глава 17 И вновь за парту
- Глава 18 Аз, Буки
- Глава 19 Процедуры и функции: разделяй и властвуй
- Глава 20 Процедуры: первый опыт
- Глава 21 Отладка
- Глава 22 О передаче параметров
- Глава 23 Функции
- Глава 24 Криптография
- Глава 25 Текстовые файлы
- Глава 26 Я не читатель, – я писатель!
- Глава 27 Дайте кораблю минутный отдых!
- Глава 28 Редактор и справочная система
- Глава 29 Читайте по-новому
- Глава 30 Журнальная история
- Глава 31 Финал журнальной истории
- Глава 32 Порядковые типы данных
- Глава 33 Вещественные числа
- Глава 34 Структура программы
- Глава 35 Множества
- Глава 36 Множества в Паскале
- Глава 37 Ввод и вывод множеств
- Глава 38 Множества в «бою»
- Глава 39 Командная игра (массивы)
- Глава 40 Пристрелка на знакомых мишенях
- Глава 41 По порядку, становись!
- Глава 42 Кто ищет, тот всегда найдет
- Глава 43 Сортировка по-взрослому
- Глава 44 Строки
- Глава 45 Очереди и стеки
- Глава 46 Огромные числа
- Глава 47 Системы счисления
- Глава 48 Железная логика
- Глава 49 Сложные массивы
- Глава 50 Неспортивные рекорды (записи)
- Глава 51 Указатели в море памяти
- Глава 52 Динамические переменные
- Глава 53 Массив указателей
- Глава 54 Односвязные списки
- Глава 55 Слова, слова, слова…
- Глава 56 И снова очереди, и снова стеки…
- Глава 57 Графомания
- Глава 58 По графу шагом марш!
- Глава 59 Крупные проекты
- Глава 60 Мелкие хитрости
- Глава 61 «Кубики» программиста (ООП)
- Глава 62 Самое интересное только начинается!
- Приложение А Установка и настройка IDE Borland Pascal
- Приложение Б Консольная программа в среде Delphi
- Приложение В Особенности IDE Pascal ABCNet
- Приложение Г Зарезервированные слова
- Приложение Д Ошибки компиляции
- Приложение Е Ошибки исполнения
- Приложение Ж Директивы управления компиляцией
- Приложение З Назначение пунктов меню
- Приложение И Стандартная кодировка символов MS–DOS
- Приложение К Некоторые встроенные процедуры и функции
- Приложение Л Перечень программ
- Приложение М Пример олимпиадной задачи
- Библиография
- Содержание книги
- Популярные страницы
- Продолжение линии 1.0
- 4.6. Техники организации знакомства участников на бизнес-тренинге
- Бонусы с продолжением
- Совет 43 Заводи знакомства
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- 1.2.3. Константы, переменные и типы
- 22.3.3. Переменные окружения
- 8.3 Этап 3: переменные с произвольными именами; встроенные функции
- Контекстные переменные даты и времени
- 13.2.4. Условные переменные
- Переменные
- 15.4.2.1. Добавляйте отладочные опции и переменные