Общая структура программы.
Program {заголовок программы}
($...) {глобальные директивы компилятора}
USES {подключение библиотек}
LABEL {объявление глобальных меток}
CONST {объявление глобальных констант}
TYPE {объявление глобальных типов}
VAR {объявление глобальных переменных}
Типы данных
Целочисленные:
Тип |
Диапазон |
Формат |
Размер в байтах |
Byte |
0..255 |
Беззнаковый |
1 |
ShortInt |
−128..127 |
Знаковый |
1 |
SmallInt |
-32768..32767 |
Знаковый |
2 |
Word |
0..65535 |
Беззнаковый |
2 |
Integer |
-32768..32767 |
Знаковый |
2 |
Cardinal |
=LongWord |
Беззнаковый |
4 |
LongWord |
0..4294967295 |
Беззнаковый |
4 |
LongInt |
−2147483648..2147483647 |
Знаковый |
4 |
Int64 |
-9223372036854775808..9223372036854775807 |
Знаковый |
8 |
Qword |
0..18446744073709551615 |
Беззнаковый |
8 |
Типы с плавающей точкой (вещественные):
Тип |
Диапазон |
количество значащих цифр |
Размер в байтах |
||||
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 |
|
19-20 |
10 |
||||
Comp |
-9.2e18..9.2e18 |
19-20 |
8 |
||||
Currency |
-922337203685477.5808..922337203685477.5807 |
19-20 |
8 |
Логические переменные.
Type Boolean = (False, True); WordBool = (False, True); LongBool = (False, True); ByteBool = (False, True);
Имеются четыре предопределенных булевых типа: Boolean, WordBool, LongBool и ByteBool.
Эти типы имеют следующие размеры:
Boolean - Byte (8 бит)
WordBool - Word (16 бит)
LongBool - LongInt (32 бита)
ByteBool - Byte (8 бит)
Поскольку данные типы являются перечислимыми порядковыми типами, то существуют следующие связи:
False < True Ord(False) = 0 Ord(True) = 1 Succ(False) = True Pred(True) = False
Тип Boolean является предпочтительным, так как он использует наименьшее количество памяти. ByteBool, WordBool и LongBool существуют только для совместимости с Windows.
Символьные переменные.
Переменные порядкового типа Char используются для хранения символов ASCII.
Символьные константы записываются в апострофах, например:
'A', '3' или '*'
Один символ апострофа записывается как два апострофа в апострофах, например:
''''
Функция Chr преобразовывает значение Integer в символ с соответствующим номером в таблице ASCII.
Функция Ord возвращает значение заданного символа ASCII.
Типы поддиапазонов (subrange)
Тип поддиапазона - это диапазон значений порядкового типа называемый главным типом.
Kонстанта1 .. константа2
При определении типа поддиапазона задается наименьшее и наибольшее значение в поддиапазоне.
Обе константы должны иметь один и тот же перечислимый тип, и значение первой константы должно быть меньше или равно значению второй.
Строковые переменные
Строковая переменная - это последовательность символов с динамической длиной, и постоянным максимальным размером в диапазоне от 1 до 255.
Строковый тип, объявленный без максимального размера имеет размер 255.
Строковые константы записываются в одинарных кавычках, например:
'Turbo Pascal'
'That''s all'
Две последовательных одиночных кавычки используются для задания в строке одиночной кавычки.
Со строковыми типами могут использоваться следующие операторы:
+ = <> < > <= >=
Стандартная функция Length возвращает динамическую длину строки.
Можно указывать максимальный размер строки в квадратных скобках при объявлении. Например,
Var a:string[70];
Массивы.
Описание типа массива:
type
имя типа = array[ список индексов ] of тип
Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например:
var a,b,c: array[1..10] of integer;
Если массивы a и b описаны как:
var
a = array[1..5] of integer;
b = array[1..5] of integer;
то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.
Вместе с тем, над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно.
Так как тип, идущий за ключевым словом of в описании массива, - любой тип Турбо Паскаль, то он может быть и другим массивом. Например:
type
mas = array[1..5] of array[1..10] of integer;
Такую запись можно заменить более компактной:
type
mas = array[1..5, 1..10] of integer;
Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт.
Записи
Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа.
Описание записи в языке Паскаль осуществляется с помощью служебного слова record, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом end.
Например, телефонный справочник содержит фамилии и номера телефонов, поэтому отдельную строку в таком справочнике удобно представить в виде следующей записи:
type TRec = Record
FIO: String[20];
TEL: String[7]
end;
var rec: TRec;
Описание записей возможно и без использования имени типа, например:
var rec: Record
FIO: String[20];
TEL: String[7]
end;
Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:
rec.FIO, rec.TEL
Особой разновидностью записей являются записи с вариантами, которые объявляются с использованием зарезервированного слова case. С помощью записей с вариантами вы можете одновременно сохранять различные структуры данных, которые имеют большую общую часть, одинаковую во все структурах, и некоторые небольшие отличающиеся части.
Например, сконструируем запись, в которой мы будем хранить данные о некоторой геометрической фигуре (отрезок, треугольник, окружность).
type
TFigure = record
type_of_figure: string[10];
color_of_figure: byte;
...
case integer of
1: (x1,y1,x2,y2: integer);
2: (a1,a2,b1,b2,c1,c2: integer);
3: (x,y: integer; radius: word);
end;
var figure: TFigure;
Таким образом, в переменной figure мы можем хранить данные как об отрезке, так и о треугольнике или окружности. Надо лишь в зависимости от типа фигуры обращаться к соответствующим полям записи.
