Переменные в Pascal, их значения и вывод на экран
Обновлено: 27.03.2026
Подробно рассмотрим программу, которую мы написали на прошлом уроке. При этом немного упростим ее, не прибавляя к букве a число 3.
var a: integer; begin a := 10; writeln(a); end.
Данная программа состоит из двух разделов. Это раздел переменных, который определяется словом var, и раздел операторов, или действий, который начинается со слова begin и заканчивается end с последующей точкой. В программе на языке Паскаль могут быть и другие разделы. Мы о них узнаем позже, когда они понадобятся.
В разделе переменных задается объем памяти, необходимый программе для хранения данных, которых пока еще нет, но они будут. Понятие данных в программировании также важно, как в реальном мире важны разные объекты. В обоих случаях это сущности, над которыми производятся какие-либо действия.
Можно сказать, что в разделе переменных происходит резервирование памяти. В программе выше у нас объявлена только одна переменная, которую мы назвали именем a и задали ей тип integer, то есть целочисленный. Это значит, что в процессе выполнения программы будет только один "участок" памяти, где могут быть разные целые числа. Сначала сюда может быть записано одно число, потом другое, но не два сразу. Когда записывается следующее предшествующее исчезнет.
В разделе операторов мы присваиваем переменной a значение 10. Это значит, что в выделенный ранее участок памяти записывается число 10. Мы не знаем реального адреса этого участка. Он определится, когда программа будет компилироваться или исполняться. Да нам адрес и не важен, потому что обращаться к нему мы можем только через имя переменной, в данном случае — a.
Важным элементом в выражении a := 10; является оператор присваивания, который в языке Pascal обозначается как двоеточие и равно, то есть :=. В большинстве других языков используется просто =.
Когда переменная только упоминается, то есть ей ничего не присваивается, то это обозначает как бы обратное действие — значение не записывается в память, а "извлекается" из нее. Правильно говорить "считывается", потому что значение не удаляется из своего участка памяти, оно там и остается. Просто мы его узнаем, то есть получаем.
Поэтому выражение writeln(a); на самом деле составное. Сначала из переменной a извлекается ее значение, и только потом оно передается команде writeln, которая занимается выводом на экран всего, что получила. Другими словами, когда до нее доходит дело, то фактически операция вывода имеет вид writeln(10).
Теперь усложним программу. Пусть в ней будет четыре переменных: две целочисленные, одна для вещественных (дробных) чисел и еще одна для строки.
var a, b: integer; f: real; s: string; begin a := 10; b := -5; f := 0.75; s := 'Hello World'; writeln(a); writeln(b); writeln(f); writeln(s); end.
Сначала зададимся вопросом: для чего указывают тип переменной? Например, чем переменная вещественного типа real отличается от integer? Почему целочисленной нельзя присвоить дробное число? Дело в том, что в компьютерной памяти не могут храниться данные как они есть, то есть десятичные цифры, буквы и другие символы, цвета или элементы рисунка, звуки. Все виды информации здесь кодируется с помощью нулей и единиц, представляются в двоичной системе счисления. И каждая разновидность данных кодируется по своим правилам. Поэтому, указывая тип, мы сообщаем программе как объем необходимой под данные памяти, так и как правильно декодировать двоичные числа обратно в информацию, которую мы способны воспринимать.
В Паскале куда больше типов данных, чем integer, real и string. Так только целочисленных типов аж пять вариантов. Изучение их отличия между собой отложим на потом. Пока нам будет достаточно трех упомянутых. Однако запомните, что тип integer в Паскале ограничен значениями в диапазоне [-32768, 32767]. Если вы попытаетесь присвоить переменной этого типа число меньше нижней границы или больше верхней, то получите предупреждение (warning) в процессе компиляции, а при исполнении программы увидите не то число, которое ожидаете.
Имена переменных придумывает программист. Хотя в примере мы использовали буквы, в более сложных программах лучше определять слова, которые что-то значат по смыслу. Это сделает исходный код программы более понятным. В именах переменных могут быть цифры, но имя не должно с них начинаться.
Имена переменных не должны совпадать с ключевыми словами самого языка программирования. В Паскале к ним относятся операторные скобки begin и end, объявитель var и еще более 30-ти слов.
Ключевые слова языка программирования Pascal
| and | end | nil | set |
| array | file | not | then |
| begin | for | of | to |
| case | function | or | type |
| const | goto | packed | until |
| div | if | procedure | var |
| do | in | program | while |
| downto | label | record | with |
| else | mod | repeat |
Такие слова как integer, real, string, writeln относятся к предопределенным, или стандартным, именам. Они также имеют в языке специальный заранее заданный смысл. Однако, если программист определит переменную с таким же именем, то ошибки не возникнет. Но лучше так не делать, потому что при этом старое, предопределенное, значение слова будет утеряно, как бы затерто.
Спишите программу с четырьмя переменными, скомпилируйте и выполните ее.
При выполнении нашей программы мы ожидаем, что на экране будут выведены числа 10, -5, 0.75 и строка Hello World. Однако вместо числа 0.75 мы можем увидим нечто другое — вывод значения в экспоненциальной форме:
10 -5 7.5000000000000000E-001 Hello World
В Паскале чтобы заставить вещественные числа выводить в обычной форме, надо использовать форматирование вывода. Для этого в скобках процедуры writeln после имени переменной ставят двоеточие, после него указывают общее количество знакомест для числа, затем снова ставят двоеточие, после которого задают количество цифр в дробной части. Так, если мы напишем writeln(f:4:2);, то получим заветное число 0.75. В нем действительно 4 знака, так как точка также учитывается.
Что будет, если указать больше знакомест, чем значащих цифр в числе? Проверьте, можно ли форматировать вывод целых чисел, строк? Надо ли для этого указывать формат для дробной части?
В скобках процедуры writeln(), можно указывать сразу несколько переменных. Так в нашей программе вместо четырех строк с writeln мы можем написать только одну таким образом:
writeln(a:5, b:5, f:7:2, s:15);
Или таким:
writeln(a, ' ', b, ' ', f:4:2, ' ', s);
Вывод первого варианта:
10 -5 0.75 Hello World
Вывод второго, когда разделение задается не через дополнительные пустые знакоместа, а через вставку символов пробела:
10 -5 0.75 Hello World
В языке Pascal кроме процедуры writeln есть похожая на нее write. Она не выполняет переход на новую строку. Так что вывод в одну строку можно выполнить и так:
write(a, ' '); write(b, ' '); write(f:4:2, ' '); writeln(s);
Последней мы вызываем процедуру writeln, а не write, чтобы в конце программы переход на новую строчку все-таки произошел. Иначе приглашение командной строки терминала будет появляться на той же строке.
Сделайте так, чтобы текст Hello World выводился на экран в двойных кавычках, то есть как "Hello World".
Теперь давайте проверим, что будет если не присваивать переменным значения. Для этого надо удалить часть кода, где происходит присваивание. Однако не будем спешить. Вместо удаления превратим строчки этого кода в комментарии. Такие не попадают в исполняемую программу, для компилятора их как бы нет, он их игнорирует. В Visual Studio Code чтобы закомментировать текст, надо его выделить и нажать комбинацию клавиш Ctrl и /. В результате перед началом каждой строки появится пара слэшей, и программа на Паскале примет такой вид:
// a := 10; // b := -5; // f := 0.75; // s := 'Hello World';
Знаки комментария можно вводить и вручную. При этом вместо двойного слэша могут использоваться фигурные скобки со звездочкой:
{* a := 10; b := -5; f := 0.75; s := 'Hello World'; *}
Такой способ используется, когда комментируют несколько строк и надо показать, что все они относятся к одной смысловой фразе. На самом деле комментарии используются не столько для отключения кода с целью проверки чего-либо, сколько для пояснения, что делает тот или иной код.
Итак, если теперь мы скомпилируем программу, то сделать это получится. Однако компилятор вынесет предупреждение о том, что переменные выглядят не инициализированными. Запустив программу, увидим на экране нули в качестве чисел, а также отсутствие текста. Такие значения (нули и пустая строка) для неинициализированных переменных — это особенность Паскаля. В других языках в переменных может содержаться "мусор" (посторонние значения). Поэтому объявленная, но не получившая явного значения, переменная вызывает подозрения.