Справочник по Pascal
Назначение
Справочник-шпаргалка по Pascal — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс: раздел. Полные программы с разбором каждой строки — Lab / 1140 (шпаргалка, формат вывода, несколько тестов).
Краткое пояснение
Шпаргалка по синтаксису и типам. Таблицы с ShortInt, Int64, overload, try/except относятся к Free Pascal / Delphi, если не указано иное. Для ISO 7185 ориентируйтесь на базовые типы integer, real, boolean, char, string[n], фиксированные array и отсутствие unit/class.
Справочные таблицы
Содержание справочника
- Общая структура программы
- Комментарии
- Типы данных
- Структурированные типы
- Операторы
- Процедуры и функции
- Встроенные функции и процедуры
- Управление памятью (динамические структуры)
- Модули
- Директивы компилятора
- Обработка ошибок
- Сравнение реализаций Pascal
- Примеры использования
- Советы по стилю и читаемости
- Специфические особенности
- Зарезервированные слова
- Ограничения классического Pascal
Общая структура программы
Программа на Pascal состоит из заголовка, блока описаний и исполняемого блока.
Код ITЗагрузка примера кода…
Элементы структуры
program— объявляет имя программы. Необязательный элемент в некоторых диалектах.uses— подключает модули или библиотеки. Располагается сразу после заголовка.const— определяет именованные константы.type— определяет пользовательские типы данных.var— объявляет переменные.begin ... end.— основной исполняемый блок программы. Завершается точкой.
Комментарии
Pascal поддерживает два вида комментариев:
{ Это комментарий }(* Это тоже комментарий *)
Комментарии могут быть вложены в другие комментарии только в формате { }.
Типы данных
Простые (скалярные) типы
Целочисленные типы
| Тип | Диапазон значений | Размер (байт) |
|---|---|---|
ShortInt | -128 .. 127 | 1 |
Byte | 0 .. 255 | 1 |
SmallInt | -32768 .. 32767 | 2 |
Word | 0 .. 65535 | 2 |
Integer | -2147483648 .. 2147483647 | 4 |
LongInt | -2147483648 .. 2147483647 | 4 |
Cardinal | 0 .. 4294967295 | 4 |
Int64 | -2^63 .. 2^63 - 1 | 8 |
QWord | 0 .. 2^64 - 1 | 8 |
В классическом Pascal доступны только
Integer,Byte,Word,ShortInt,LongInt. Остальные — расширения Object Pascal.
Вещественные типы
| Тип | Диапазон | Значащие цифры | Размер (байт) |
|---|---|---|---|
Real | 2.9e-39 .. 1.7e38 | 11–12 | 6 |
Single | 1.5e-45 .. 3.4e38 | 7–8 | 4 |
Double | 5.0e-324 .. 1.7e308 | 15–16 | 8 |
Extended | 3.4e-4932 .. 1.1e4932 | 19–20 | 10 |
Comp | -2^63+1 .. 2^63-1 | 19–20 | 8 |
Currency | -922337203685477.5808 .. 922337203685477.5807 | 19–20 | 8 |
В Turbo Pascal основной тип —
Real. В современных реализациях чаще используютDouble.
Логический тип
Boolean— принимает значенияTrueилиFalse.- Размер: 1 байт.
- Также существуют
ByteBool,WordBool,LongBool— для совместимости с API.
Символьный тип
Char— один символ ASCII (0..255).- Размер: 1 байт.
- Для Unicode используется
WideChar(2 байта) в Object Pascal.
Перечислимые типы
Определяются явно:
type
Color = (Red, Green, Blue);
Season = (Winter, Spring, Summer, Autumn);
Значения упорядочены. К ним применимы функции Ord, Pred, Succ.
Интервальные (ограниченные) типы
type
Age = 0..120;
Digit = '0'..'9';
SmallIndex = 1..10;
Интервальные типы ограничивают допустимые значения базового типа.
Структурированные типы
Массивы (array)
Объявление:
var
A: array[1..10] of Integer;
B: array[0..99] of Real;
C: array['a'..'z'] of Char;
Многомерные массивы:
var
Matrix: array[1..5, 1..5] of Integer;
Cube: array[1..3, 1..3, 1..3] of Real;
Индексы могут быть любого порядкового типа (целые, перечислимые, символьные).
Операции (статический array[low..high]):
| Действие | Синтаксис |
|---|---|
| Прочитать | A[i] |
| Заменить | A[i] := value |
| Длина / границы | Low(A), High(A) (Object Pascal) |
Размер массива фиксирован при объявлении. Динамические массивы в Object Pascal: SetLength(dyn, count) — изменение длины с возможной переаллокацией.
Строки (string)
- В классическом Pascal:
string[0..255]— ограниченная строка длиной до 255 символов. - Первый байт хранит длину строки.
- В Object Pascal —
AnsiString,UnicodeString,WideString,ShortString.
Пример:
var
S: string[20];
T: string; // неограниченная (в Object Pascal)
Операции:
Length(S)— длина строки.S[i]— i-й символ.+— конкатенация.Copy(S, start, count)— подстрока.Pos(sub, S)— позиция подстроки.- удаление.
Delete(S, index, count)
- вставка.
Insert(sub, S, index)
Записи (record)
Группировка разнородных данных:
type
Person = record
Name: string[30];
Age: Integer;
Height: Real;
end;
var
P: Person;
Доступ к полям: P.Name, P.Age.
Вложенные записи:
type
Address = record
Street: string[50];
City: string[30];
end;
Employee = record
Info: Person;
WorkAddress: Address;
end;
Множества (set)
Коллекция значений порядкового типа (до 256 элементов):
type
CharSet = set of Char;
DigitSet = set of 0..9;
ColorSet = set of (Red, Green, Blue);
var
Vowels: CharSet;
Digits: DigitSet;
Операции:
+— объединение*— пересечение-— разностьin— проверка принадлежности
Пример:
Vowels := ['a', 'e', 'i', 'o', 'u'];
if 'a' in Vowels then ...
Файлы (file)
Типизированные файлы:
var
F: file of Integer;
Нетипизированные:
var
F: file;
Текстовые файлы:
var
F: text;
Операции:
Assign(F, 'filename.txt')— связывание с файломReset(F)— открытие для чтенияRewrite(F)— открытие для записиRead(F, x)/Write(F, x)Close(F)Eof(F)— признак конца файлаSeek(F, n)— позиционирование
Операторы
Присваивание
x := 5;
name := 'Alice';
Условные операторы
if
if условие then
оператор1
else
оператор2;
Блоки:
if x > 0 then
begin
WriteLn('Положительное');
x := x * 2;
end
else
WriteLn('Не положительное');
case
case Day of
1: WriteLn('Понедельник');
2: WriteLn('Вторник');
3..5: WriteLn('Рабочий день');
6, 7: WriteLn('Выходной');
else
WriteLn('Неверный день');
end;
Выражение в case должно быть порядкового типа.
Циклы
for
for i := 1 to 10 do
WriteLn(i);
for i := 10 downto 1 do
WriteLn(i);
Переменная цикла должна быть порядкового типа.
while
while x < 100 do
begin
x := x + 1;
WriteLn(x);
end;
repeat ... until
repeat
ReadLn(x);
until x > 0;
Тело выполняется хотя бы один раз.
Процедуры и функции
Объявление
procedure PrintMessage(Msg: string);
begin
WriteLn(Msg);
end;
function Square(x: Integer): Integer;
begin
Square := x * x;
end;
Параметры
- Значение (по умолчанию):
procedure P(x: Integer);— копия. - Переменная:
procedure P(var x: Integer);— передача по ссылке. - Константа:
procedure P(const s: string);— защита от изменения. - Открытые массивы (в Object Pascal):
procedure P(arr: array of Integer);
Рекурсия
function Factorial(n: Integer): Integer;
begin
if n = 0 then
Factorial := 1
else
Factorial := n * Factorial(n - 1);
end;
Встроенные функции и процедуры
Математические
Abs(x)— модульSqr(x)— квадратSqrt(x)— квадратный кореньSin(x),Cos(x),Arctan(x)Exp(x)— e^xLn(x)— натуральный логарифмTrunc(x)— целая часть (вещественное → целое)Round(x)— округлениеFrac(x)— дробная частьInt(x)— целая часть как вещественное число
Работа с типами
Ord(x)— порядковый номер (для порядковых типов)Chr(n)— символ по кодуPred(x),Succ(x)— предыдущее/следующее значениеHigh(x),Low(x)— верхняя/нижняя граница типа или массива
Работа со строками
Length(s)Copy(s, i, n)Pos(sub, s)Concat(s1, s2, ...)UpCase(c)— преобразует символ в верхний регистр (только латиница)
Работа с файлами
Assign(f, name)Reset(f),Rewrite(f),Append(f)Close(f)Eof(f),Eoln(f)Read(f, x),ReadLn(f, x)Write(f, x),WriteLn(f, x)Seek(f, n),FileSize(f),FilePos(f)
Преобразования
Str(x, s)— число → строкаVal(s, x, code)— строка → число (code = 0при успехе)
Управление памятью (динамические структуры)
В классическом Pascal динамическое выделение ограничено указателями и записями.
Код ITЗагрузка примера кода…
Указатели:
^— разыменование@— взятие адреса
Модули
Модуль — автономная единица кода, содержащая объявления типов, констант, переменных, процедур и функций, которые можно использовать в других программах или модулях.
Структура модуля
Код ITЗагрузка примера кода…
Разделы модуля
interface— публичный интерфейс. Всё, что объявлено здесь, видно извне.implementation— реализация. Здесь пишутся тела процедур и функций.initialization— необязательный блок, выполняется один раз при подключении модуля.finalization— необязательный блок, выполняется при завершении программы.
Подключение модулей
В программе:
program Test;
uses
Crt, Graph, MyUtils;
begin
{ ... }
end.
Порядок в uses важен: если модуль A использует модуль B, то B должен быть указан до A или в его interface-разделе.
Директивы компилятора
Директивы управляют поведением компилятора. Они заключаются в фигурные скобки с символом $.
Часто используемые директивы
| Директива | Назначение |
|---|---|
{$APPTYPE CONSOLE} | Указывает, что приложение — консольное (Object Pascal) |
{$R+} / {$R-} | Включает/отключает проверку диапазонов массивов |
{$Q+} / {$Q-} | Включает/отключает проверку переполнения целых |
{$I+} / {$I-} | Включает/отключает проверку ввода-вывода |
{$G+} | Включает 32-битный код (Turbo Pascal) |
{$M min, max} | Устанавливает размер стека и кучи |
{$DEFINE DEBUG} | Определяет условный символ |
{$IFDEF DEBUG} ... {$ENDIF} | Условная компиляция |
Пример условной компиляции:
{$IFDEF DEBUG}
WriteLn('Отладочная информация');
{$ENDIF}
Обработка ошибок
Классический Pascal не имеет встроенной системы исключений. Обработка ошибок осуществляется через:
- Проверку кодов возврата (например,
IOResultпосле операций ввода-вывода) - Использование
{$I-}и последующую проверкуIOResult
Пример:
{$I-}
Assign(F, 'data.txt');
Reset(F);
{$I+}
if IOResult <> 0 then
WriteLn('Ошибка открытия файла')
else
begin
{ работа с файлом }
Close(F);
end;
В Object Pascal (Delphi, Free Pascal) доступна полноценная обработка исключений через
try ... exceptиtry ... finally.
Сравнение реализаций Pascal
| Характеристика | Turbo Pascal (1980–1990) | Free Pascal | Delphi (Object Pascal) |
|---|---|---|---|
| Поддержка ООП | Нет | Да | Полная |
| Исключения | Нет | Да | Да |
| Unicode | Нет | Ограниченная | Полная |
| Многопоточность | Нет | Через API | Да |
| GUI-библиотеки | BGI (графика) | LCL | VCL / FireMonkey |
| Совместимость с C | Низкая | Высокая | Средняя |
| Активная разработка | Прекращена | Да | Да |
Для учебных целей часто используется Free Pascal с IDE Lazarus, так как он бесплатен, кроссплатформен и совместим с Turbo Pascal на уровне базового синтаксиса.
Примеры использования
Пример 1 — Работа с массивом
Код ITЗагрузка примера кода…
Пример 2 — Рекурсия — вычисление НОД
function GCD(a, b: Integer): Integer;
begin
if b = 0 then
GCD := a
else
GCD := GCD(b, a mod b);
end;
Пример 3 — Запись и файл
Код ITЗагрузка примера кода…
Советы по стилю и читаемости
- Используйте осмысленные имена переменных —
Counter,TotalPrice, а неi,x. - Разделяйте логические блоки пустыми строками.
- Комментируйте сложные алгоритмы.
- Объявляйте одну переменную на строку.
- Выравнивайте
begin/endвертикально. - Избегайте глубокой вложенности — выносите логику в процедуры.
- Используйте константы вместо магических чисел:
MaxStudents = 100; - При работе со строками проверяйте длину перед доступом к символам.
Специфические особенности
Порядковые типы
Любой тип, значения которого можно пронумеровать целыми числами, называется порядковым. К ним относятся:
- Все целочисленные типы
BooleanChar- Перечислимые типы
- Интервальные типы
К порядковым типам применимы функции:
Ord(x)Pred(x)Succ(x)Low(T)High(T)
Совместимость типов
Pascal строго типизирован. Присваивание возможно только между совместимыми типами. Например:
var
a: Integer;
b: Real;
begin
a := 5;
b := a; // допустимо: Integer → Real
a := b; // ошибка: Real → Integer без явного преобразования
a := Trunc(b); // правильно
end;
Явное преобразование типов осуществляется через функции (Trunc, Round) или приведение указателей (в продвинутых случаях).
Зарезервированные слова
Полный список ключевых слов Pascal (базовый набор):
and, array, begin, case, const, div, do, downto, else, end,
file, for, function, goto, if, in, label, mod, nil, not, of,
or, packed, procedure, program, record, repeat, set, then,
to, type, until, var, while, with
В Object Pascal добавляются:
class, constructor, destructor, inherited, override, virtual,
property, published, try, except, finally, raise, and many more
Ограничения классического Pascal
- Максимальная длина строки — 255 символов.
- Массивы имеют фиксированный размер на этапе компиляции.
- Нет динамических массивов (в классическом варианте).
- Нет встроенной поддержки строковых операций вроде
ToLower. - Нет многопоточности.
- Нет исключений.
- Нет пространств имён.
Эти ограничения снимаются в современных реализациях (Free Pascal, Delphi).
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Справочники — Справочник по Lisp, Справочник по visual-basic, Справочник по языку Fortran, Справочник по ассемблеру, Справочник по COBOL, Справочник по языку С.