program <ім’я програми>;
uses <список модулів>;
label <список міток>;
const <список констант>;
type <список типів>;
var <список змінних>;
<Список процедур та функцій>
begin
<Послідовність операторів, зокрема, викликів процедур та функцій>;
end.
У будь-якому місці програми може бути коментар.
III. Типи даних
1. Прості типи
1.1. Порядкові
1.1.1. Цілі
Таблиця 1. Цілі типи даних в Object Pascal
Тип | Розмір (у байтах) | Знак | Діапазон | Відповідник у Turbo Pascal 7.0 |
Byte | беззнакове | 0..255 | Byte | |
Shortint | знакове | -128..127 | Shortint | |
Word | беззнакове | 0.. 65535 | Word | |
SmallInt | знакове | -32768.. 32767 | Integer | |
Cardinal | беззнакове | 0.. 232-1 | - | |
Integer | знакове | -231 .. 231-1 | Longint | |
Int64 | знакове | -263 .. 263-1 | - |
1.1.2. Логічні
Boolean (значення true або false)
1.1.3. Символьні
Char (Ansi Char) – довжиною в 1 байт (кодування ANSI)
WideChar – довжиною у 2 байти (кодування Unicode)
1.1.4. Переліковий
Наприклад, Seasons = (Winter, Spring, Summer, Autumn);
1.1.5. Діапазон
Наприклад, Days = 1..31
1.2. Дійсні
Таблиця 2. Дійсні типи даних в Object Pascal
Тип | Розмір (у байтах) | Діапазон | Відповідник у Turbo Pascal 7.0 |
Single | 1.5x10–45.. 3.4x1038 | Single | |
Real | 5.0x10–324.. 1.7x10308 | Double | |
Real48 | 2.9x10-39.. 1.7x1038 | Real | |
Comp | –263+1.. 263 –1 | Comp | |
Currency | » -1015.. 1015 | - | |
Double | 5.0x10–324.. 1.7x10308 | Double | |
Extended | 3.6x10–4951.. 1.1x104932 | Extended |
2. Структуровані типи
2.1. Масиви (array)
2.2. Множини (set of)
2.3. Файл (file of, text)
2.4. Записи (record)
3. Вказівники (pointer)
4. Рядки (string)
5. Процедурні типи (procedure)
6. Варіантні типи (variant)
7. Класи (class)
8. Інтерфейси (interface)
Змінні та константи усіх типів використовуються у виразах.
Вираз складається з сумісних за типом операндів, які об’єднані знаками операцій.
IV. Операції
- Арифметичні
+ – * / div (ділення по модулю), mod (залишок від ділення).
- Логічні
not (логічне заперечення)
and (логічне множення)
or (логічне додавання)
xor (додавання за модулем 2)
shl (побітовий зсув вліво)
shr (побітовий зсув вправо)
- Над рядками + (додавання)
- Над множинами + (додавання) – (віднімання) * (перетин)
- Відношення
= <> > < <= >= in (елемент множини)
- Визначення адреси @
- Над об’єктами: is, as
V. Пріоритет операцій (від найвищого до найнижчого)
1. @, not
2. *, /, div, mod, and, shl, shr, as
3. +, –, or, xor
4. =, <>, <, >, <=, >=, in, is
VI. Оператори
Задають деяку алгоритмічну дію над даними.
1. Прості оператори (не містять інших операторів)
1.1. присвоєння
<ідентифікатор>:= <вираз>;
1.2. виклик процедури або функції
<ім’я процедури або функції> (<список параметрів>);
1.3. безумовний перехід
goto <мітка>;
2. Порожній оператор
;
3. Структуровані оператори (побудовані з інших операторів за певними правилами)
3.1. Складений оператор
begin
<інші оператори>
end;
3.2. Умовні оператори
3.2.1. Умовний оператор в скороченій формі
if <умова> then <оператор>,
де <умова> – вираз типу Boolean
3.2.2. Умовний оператор в звичайній формі
if <умова> then <оператор1>
else <оператор2>
3.2.3. Оператор вибору
case <ключ вибору> of
<список1>:<оператор1>
<список2>:<оператор2>
//…
<список n>:<оператор n>
else <оператор>
end;
де <ключ вибору> – змінна або вираз одного з порядкових типів,
<список1>…<список n> – значення цієї змінної.
3.3. Оператори циклу
3.3.1. Оператор циклу з післяумовою
repeat
<оператор1>
// …
<оператор n>
until <умова виходу з циклу>;
3.3.2. Оператор циклу з передумовою
while <умова виконання циклу> do
begin
<оператор1>
// …
<оператор n>
end;
3.3.3. Оператор циклу з лічильником
for <змінна циклу>:= <початкове значення> to
<кінцеве значення> do <оператор>; // крок зміни = 1
або
for <змінна циклу>:= <початкове значення> downto
<кінцеве значення> do <оператор>; // крок зміни = -1
3.3.4. Допоміжні
continue; // перехід на наступну ітерацію циклу
break; // припинення циклу і передача керування наступному оператору
exit; // вихід з процедури або функції
Структуровані типи
- Масиви.
Масив містить визначену кількість елементів одного типу. Доступ до елементів реалізується через індекси.
type
<ім’я типу>= array [<тип індексу>] of <тип елемента>;
var
<ім’я змінної>: <ім’я типу>;
// або
<ім’я змінної>: array [<тип індексу>] of <стандартний тип елемента>
Приклад:
var
A1: array [1..10] of Byte;
For i:=1 to 10 do
A1[i]:= i*2;
Зауваження. Ім’я типу для масиву необхідно задавати, якщо цей масив є аргументом процедури або функції.
- Множини
Множина – набір елементів одного з порядкових типів. Множини не є впорядкованими і мають змінну кількість елементів.
Приклад:
type
TDigit = set of 0..9;
TColor = set of (Red, Green, Blue);
var k: set of Char = [‘Y’,’y’,’N’,’n’];
Key: Char;
If not (Key in K) then exit;
- Записи
Запис складається з елементів, які називаються полями і можуть бути різного типу.
type
<ім’я типу>= record
<ім’я поля1>: <тип поля1>;
// …
<ім’я поля n>: <тип поля n>;
end;
Для доступу до полів запису може використовуватись спеціальний оператор with
Приклад:
type
TPoint= record
X, Y: Real;
end;
var aPoint1, aPoint2: TPoint;
begin
aPoint1.X:= 10.5;
aPoint2.Y:= -7.2;
with aPoint2 do
begin
X:= 4.2;
Y:= 6.9;
end;
end.
4.Вказівники:
Вказівники містять адреси елементів інших типів.
type <ім’я типу вказівника> = ^<ім’я іншого типу>
var
<ім’я змінної>: <ім’я типу вказівника>;
// або
<ім’я змінної>: ^<ім’я іншого типу>
Приклад
type TPoint= record
X, Y: Real;
end;
var P1:^TPoint;
begin
New(P1); //виділення пам’яті
P1^.X:=5; // доступ до даних – через розадресацію вказівника P1^.Y:=3; // (^ – англ. caret)
Dispose (P1); //звільнення пам’яті
end;