Типы данных
Рассмотрим еще одну несложную программу (пример 2.2). Ее назначение: ввести с клавиатуры два целых числа, найти результат деления первого числа на второе и вывести полученный результат на экран.
Пример 2.2.
Program Input_0utput; {Программа вводит два целых числа и выводит частное от деления 1-го на 2-е} var n1,n2: Integer; {n1 и n2 – вводимые целые} х: Real; {x – результат} BEGIN Write('n1 = '); {Сообщаем о вводе n1} ReadLn (n1); {Вводим n1} Write ('n2 = '); {Сообщаем о вводе п2} ReadLn (n2); {Вводим п2} x: = n1/n2; {Находим результат} WriteLn('n1/n2 =',х); {Выводим его} END.
Прежде всего бросается в глаза появление в программе поясняющих комментариев. Комментарий в Турбо Паскале – это произвольная последовательность любых символов, обрамленная фигурными скобками. Комментарий разрешается вставлять в любое место программы, где по смыслу может стоять пробел. В качестве ограничителей комментария допускается использование фигурных скобок "{" и "}", а также пары символов: "(*" – слева от комментария и "*)" – справа от него:
{ Это – комментарий } (* Это – тоже комментарий *)
Редактор Турбо Паскаля выделяет комментарии наклонным шрифтам (курсивом).
Комментарии с однотипными ограничителями нельзя вкладывать друг в друга, т.е. недопустимы последовательности вида:
{…{…}…} или (*…(*…*)…*)
Однако можно вкладывать комментарии с ограничителями разных типов (не более одной глубины вложения):
{… (*…*)…} или (*… {… }… *)
Последнее обстоятельство проясняет кажущуюся странной избыточность ограничителей: если всюду в программе будут использоваться ограничители одного типа, то для того, чтобы временно исключить из программы какой-либо фрагмент текста, достаточно заключить его в ограничители другого типа.
Наличие комментариев в программе избавляет меня от необходимости пояснять назначение отдельных строк программы. Несколько слов о вводе данных. Пары операторов:
Write (..); ReadLn(..);
Работают следующим образом. Вначале оператор Write выводит строку на экран и оставляет курсор в конце только что выведенной строки текста. Заметим, что оператор:
WriteLn(Text);
В примере 1 после вывода текста осуществлял перевод строки и устанавливал курсор в начало следующей строки экрана. Именно в этом простом действии (переводе строки) заключается единственное отличие в работе процедуры WriteLn от процедуры Write.
Затем по оператору ReadLn вызывается встроенная процедура ввода данных и программа останавливается в ожидании ввода. В этот момент необходимо набрать на клавиатуре нужное число и нажать клавишу Enter. Сразу после этого программа продолжит работу: проанализирует введенное число и перейдет к вводу следующего числа или вычислению результата. Таким образом, сигналом окончания подготовки очередного числа является нажатие на клавишу Enter, до этого момента можно стирать любой ошибочно введенный символ клавишей Backspace.
Для вычисления отношения введенных чисел используется один из основных операторов Турбо Паскаля – оператор присваивания. В его левой части указывается имя переменной, правая часть представляет собой выражение того же типа, что и переменная. Пара символов ": =", связывающая левую и правую части оператора присваивания, означает "присвоить значение". Запомним: в операторах присваивания Турбо Паскаля всегда используются символы ": =", в то время как при описании констант – одиночный символ "=". С точки зрения синтаксиса языка, два символа ": =" рассматриваются как один специальный символ и обязательно пишутся слитно.
Оператор присваивания используется практически во всех языках программирования. В некоторых языках, например в Фортране или Бейсике, символом присваивания является знак равенства, однако новичка, привыкшего к строгости математических формул, может озадачить типичная форма записи фортран-оператора присваивания, например, такая:
X = X + 1
Вариант записи этого же оператора на Турбо Паскале в этом смысле кажется более логичным:
X: = X + 1;
Разумеется, вряд ли кому-нибудь придет в голову видеть уравнения там, где их нет и не может быть. Конечно же, и в том, и в другом случае реализуется одно и то же алгоритмическое действие: к содержимому X прибавляется 1 и полученный результат вновь присваивается переменной X. Обратите внимание на оператор вывода результатов:
WriteLn('n1/n2 = ',х);
В нем в качестве одного из параметров явно указывается константа типа строка символов 'n1/n2 = '. Конечно же, константы (в отличие от переменных) вовсе не обязательно описывать в разделе описаний, так как их тип легко определяется компилятором по форме записи константы. С учетом этого можно было бы записать программу из примера 1 предельно лаконично:
begin WriteLn('Я программирую на Турбо Паскале'); end.