Итоги
• Наименьшая смысловая часть программы называется оператором. Процедура печати Writeln и процедура ввода Readln – это операторы.
• Программа – это последовательность ключевых слов и операторов.
• Для разделения операторов используют точку с запятой.
• Точное предписание порядка выполняемых действий называется алгоритмом.
• Линейная последовательность – это один из трех базовых алгоритмов.
• Алгоритм может быть представлен словесным описанием, рисунком (блок-схемой), или текстом программы.
А слабо?
А) В нашей программе остался маленький изъян. Со временем вы забудете о том, что для завершения программы надо нажать клавишу Enter. Пусть программа сама напомнит об этом, печатая после приветствия напоминание:
Для завершения программы нажмите Enter
Внесите это изменение в программу. Или слабо?
Б) Измените программу так, чтобы в каждой строке разместилось по два оператора. Откомпилируйте и проверьте программу в действии. Изменилось ли что-то в её поведении?
В) Нарисуйте две блок-схемы, поясняющие, как вы обычно проводите свой будний и выходной день.
Глава 8
Постоянные и переменные
Знаком ли вам Эдсон Арантес ду Насименту? Неужто не слышали о великом Пеле? Ведь оба имени принадлежат одному человеку! В Бразилии полно отменных футболистов, и у всех – пышные имена. Но от футбольных комментаторов вы их не услышите. Бразильцы – а все они фанаты – дали своим любимцам короткие клички. Так на весь мир прославились Пеле, Зико, Ривалдо…
Константы
Придумка бразильских фанатов напомнила решение сходной проблемы программистами. В разных частях программы нередко попадаются одни и те же данные – строчки текста или числа. Взять хотя бы предыдущую программу, где в начале и в конце приветствия печатаются две горизонтальные черты. Если в этих операторах задать линии разной длины, то красота слегка пострадает. Пустяки? Конечно. Но в иных случаях ошибочка обойдется втридорога, например, в программе управления ракетой.
Предположим, что в расчете полета ракеты учитывается масса её полезной нагрузки, и это число разбросано по всем частям программы. Вы должны указать его везде одинаково, без ошибки, иначе ракета улетит «за бугор». А если переделка ракеты повлечет изменение этого числа? Тогда доведется тщательно «прочесать» программу в поисках всех исправляемых операторов.
Проблема очевидна, но Паскаль даёт средство её решения – это символические константы. «Константа» в переводе на русский означает «постоянный», «неизменный». Константа подобна кличке бразильского футболиста: любому элементу данных – числу или строке – вы можете назначить удобное имя, а затем подставлять это имя вместо самих данных. Покажем это на примере нашей программы.
Прежде, чем применить символическую константу, её надо объявить, то есть дать ей имя и значение. Для объявления используют ключевое слово CONST, за которым следует нечто, похожее на простую формулу.
const Имя_константы = Значение_константы;
Слева от знака равенства указывают имя константы, а справа – её значение. Предположим, что длинный прочерк я обозначил словом Line – «линия». Тогда объявление константы для линии будет таким.
const Line = ’---------------------------’;
Обратите внимание, что объявление константы – это оператор, и после него следует точка с запятой! Теперь в любом месте программы я могу напечатать прочерк, пользуясь именем этой константы.
Writeln(Line);
Параметром процедуры печати Writeln здесь по-прежнему является всё та же строковая константа, только теперь она обозначена через свое имя Line.
Слово CONST открывает секцию объявления констант, внутри которой надо объявить хотя бы одну константу, – секция не терпит пустоты! Вот объявление двух констант, где для наглядности слово CONST записано в отдельной строке.
Const
C1 = ’Мой повелитель!’;
Pele = ’Эдсон Арантес ду Насименту’;
Секцию констант располагают до слова BEGIN перед началом выполняемых операторов. Следовательно, новый вариант нашей программы будет таким.
const
Line = ’---------------------------’;
begin
Writeln(Line);
Writeln(’Мой повелитель!’);
Writeln(’Поздравляю тебя с написанием первой программы!’);
Writeln(’Твой верный слуга Паскаль’);
Writeln(Line);
Readln
end.
Программа будет работать точь-в-точь, как и раньше. Но теперь мы уверены, что линии будут одинаковыми. А если потребуется изменить линию и составить её из звездочек? Тогда исправим лишь объявление константы:
const Line = ’***************************’;
и после повторной компиляции программа заработает по-новому.
Константы облегчают жизнь программиста и повышают надежность программ. Но, повторяю, после изменения константы вы должны повторно откомпилировать программу!
Идентификаторы
Для констант придумывают подходящие имена. Впрочем, это касается и других объектов программы, о которых вы скоро узнаете. Выдуманные программистом имена называют идентификаторами (IDENTIFIER). Запомните это словцо, оно ещё «намозолит» вам глаза. Изобретатель идентификаторов ограничен следующими рамками.
• В идентификаторах допустимы лишь латинские буквы, знак подчеркивания и цифры.
• Идентификатор начинают либо с буквы, либо с подчеркивания (но только не с цифры!).
• Идентификатор может содержать до 127 символов, (в Borland Pascal учитываются только первые 63 из них).
• Не допускается совпадение идентификатора с ключевым словом.
Русские буквы и знаки препинания в именах запрещены. Большие и маленькие латинские буквы равнозначны (регистр букв не учитывается), поэтому идентификаторы Pascal и PASCAL считаются одинаковыми.
Вот примеры правильных идентификаторов:
A, b, C - однобуквенные имена
R1, U28, _13_ - имена с цифрами и подчеркиванием
Cosmos, ABBA - однословные имена
NextStep, Next_Step – имена, составленные из двух слов
А это ошибочные имена:
7Up – начинается с цифры
End – совпадает с ключевым словом
Изобретая имена, мы будем придерживаться некоторой системы с тем, чтобы меньше путаться в своих придумках. Так, имена констант условимся начинать с латинской буквы «C» (например, CLine).
Переменные
Согласитесь, наш последний шедевр – программа P_07_1 – пока не слишком умна, при каждом запуске она тупо твердит одно и то же. Сотворим нечто поумней: пусть наша следующая программа сначала спросит имя пользователя, а затем обратится к нему по этому имени. На экране это будет выглядеть так:
Как тебя зовут?
Антон
Здравствуй, Антон
Нажми Enter
Здесь выделенное курсивом слово «Антон» во второй строке ввёл пользователь. Такие программы называют диалоговыми.
Ясно, что неизвестное имя собеседника в программу заранее не вставишь. Константа тут бесполезна, – ведь она вбивается в программу заранее и не меняется после компиляции. Если данные вводятся пользователем в ходе выполнения программы, им нужно нечто иное, – этим данным надо отвести место для хранения их в памяти. И тогда мы сможем как-то работать с этими сохраненными данными (например, печатать).
Где хранят предметы? В ящиках, карманах, кошельках. Для хранения данных в памяти используют переменные (VARIABLE). Переменная – это своего рода «карман» с именем, данным ему программистом. В ходе работы программа может «укладывать» в переменную данные, и затем обращаться с ними по своему усмотрению. Этот «карман» действует по принципу: что положил, то и взял. Иначе говоря, в переменной хранится то, что было положено последним. Но, в отличие от кошелька, единожды положенное в переменную можно извлекать многократно, – этот «карман» никогда не опустеет!
Прежде, чем пользоваться переменной, её, как и константу, надо объявить. Для этого служит секция объявления переменных, которую открывают ключевым словом VAR (сокращение от VARIABLE), секцию помещают до