Урок 2. Переменные и типы данных
Программа из прошлого урока выводила готовый текст. Чтобы считать, программе нужно где-то хранить числа и слова — для этого есть переменные.
Что такое переменная
Переменная — именованное место в памяти, где лежит значение. У переменной есть имя (например, age) и тип — какие значения в ней могут храниться: целые числа, дробные, символы, строки.
В Pascal каждую переменную нужно описать до того, как ею пользоваться. Описания пишут в разделе var перед begin:
program Variables;
var
apples, pears, total: integer;
price: real;
begin
apples := 5;
pears := 3;
total := apples + pears;
price := 1.25;
writeln('Всего фруктов: ', total);
writeln('Цена одного: ', price:0:2);
writeln('Цена всех: ', (total * price):0:2);
end.Всего фруктов: 8
Цена одного: 1.25
Цена всех: 10.00Строка apples, pears, total: integer; описывает сразу три переменные одного типа. Запись price:0:2 — формат вывода дробного числа с двумя знаками после точки, о нём подробно в следующем уроке.
Присваивание
Знак := (двоеточие и равно, без пробела между ними) — присваивание: положить значение справа в переменную слева. total := apples + pears значит «посчитать сумму и записать её в total». Старое значение переменной при этом пропадает.
Одиночный знак = в Pascal — это сравнение («равно ли?»), он нужен в условиях. Перепутать := и = — одна из самых частых ошибок новичков.
Значение можно менять на основе старого: apples := apples + 1 увеличивает apples на единицу.
Основные типы
| Тип | Что хранит | Пример значения |
|---|---|---|
integer | целое число | 42, -7 |
longint | целое число от −2 147 483 648 до 2 147 483 647 | 1500000 |
int64 | очень большое целое, до 9 223 372 036 854 775 807 | 10000000000 |
real | дробное число, около 15 значащих цифр | 3.14, -0.5 |
char | один символ | 'A', '7', ' ' |
string | строка символов | 'Pascal' |
boolean | логическое значение | true, false |
Дробную часть числа отделяют точкой, а не запятой: 3.14. Символы и строки, как и в writeln, пишут в одинарных кавычках.
У integer есть важная особенность. В PascalABC.NET он хранит числа от −2 147 483 648 до 2 147 483 647, а в Free Pascal в обычном режиме и в Turbo Pascal — только от −32 768 до 32 767. Сумма, которая вышла за предел, получается неверной, часто без всякой ошибки. Если числа могут быть больше 32 767, описывайте переменную как longint. Подробно — в справке Диапазон integer.
Символы, строки и логический тип
program Types;
var
letter: char;
lang: string;
age: integer;
isAdult: boolean;
begin
letter := 'P';
lang := 'Pascal';
age := 15;
isAdult := age >= 18;
writeln('Буква: ', letter);
writeln('Язык: ', lang);
writeln('Возраст: ', age);
if isAdult then
writeln('Уже есть 18')
else
writeln('Ещё нет 18');
end.Буква: P
Язык: Pascal
Возраст: 15
Ещё нет 18В isAdult записывается результат сравнения age >= 18: true (истина) или false (ложь). Такие переменные удобны в условиях — оператор if разобран в уроке Условия.
Константы
Константа — имя для значения, которое не меняется во время работы программы. Её описывают в разделе const, перед var, и пишут знак =, а не :=:
program Week;
const
Rate = 3.2;
Days = 7;
var
total: real;
begin
total := Rate * Days;
writeln('За неделю: ', total:0:2);
end.За неделю: 22.40Константы избавляют от «магических чисел»: если значение изменится, его правят в одном месте, а не по всей программе. Попытка присвоить константе новое значение — ошибка компиляции.
Как называть переменные
- Имя состоит из латинских букв, цифр и знака
_и начинается с буквы:sum,max2,first_name. - Пробелы и русские буквы в именах не используйте: Free Pascal их не примет.
- Служебные слова —
begin,end,var,program,if,forи другие — именами быть не могут. Имена типов вродеwordилиstringтоже лучше не занимать. - Большие и маленькие буквы не различаются:
Sumиsum— одна и та же переменная, описать обе нельзя. - Давайте понятные имена:
count,total,priceчитать проще, чемa1,b2,x3.
Совместимость типов
Целое число можно положить в переменную типа real: price := 5 — это 5.0. Обратно нельзя: строка total := 2.5 при total: integer не скомпилируется, потому что дробную часть некуда деть. Дробное превращают в целое явно: round(x) округляет, trunc(x) отбрасывает дробную часть. Подробно — в справке Ошибка: несовместимые типы.
Строку нельзя просто присвоить числу и наоборот: '5' — это символ, а не число. Для перевода есть отдельные процедуры — в справке Как перевести число в строку и обратно.
Начальное значение
Переменные из раздела var программы и PascalABC.NET, и Free Pascal заполняют нулями. А переменные внутри процедур и функций (о них — в уроке Процедуры и функции) в Free Pascal и Turbo Pascal не обнуляются: там может лежать случайный «мусор». Поэтому всегда задавайте начальное значение перед использованием, например sum := 0 перед подсчётом суммы, — тогда программа работает одинаково в любой среде.
Частые ошибки
x = 10;вместоx := 10;— одиночный=только сравнивает, и программа не скомпилируется.- Переменная не описана в
var— компилятор сообщит о неизвестном имени (справка Ошибка: неизвестное имя). - Запятая в дробном числе.
price := 3,14;— ошибка: дробную часть отделяют точкой,3.14. - Дробное значение в
integer— ошибка несовместимых типов. Нуженroundилиtrunc. - Неверная сумма больших чисел —
integerв Free Pascal (в обычном режиме) вмещает только до 32 767. Беритеlongint.
Коротко
- Переменные описывают в разделе
varпередbegin:имя: тип;. :=— присваивание,=— сравнение и описание констант.- Главные типы:
integerиlongint(целые),real(дробные, через точку),char,string,boolean. - В Free Pascal
integerпо умолчанию до 32 767 — для больших чисел беритеlongint. - Целое можно присвоить
real, дробное вinteger— только черезroundилиtrunc.