Сложные типы

Var

Var

Вещественные типы данных

Var

Целочисленные типы данных

Расширения типов данных

Const

Min=100; Max=200; EarthDiam=12742.48

Center:(Max-Min) div 2; EarthRadius=EarthDiam/2;

NumChars=Ord('Z')-Ord('A')+1;

Комментарии. Допускается использовать скобки { } или (* *). Благодаря этому можно делать "вложенные комментарии", используя скобки { } для комментариев, а скобки (* *) – для временного исключения участков текста программы при отладке.

Если после открывающейся скобки { или (* стоит знак $, этот комментарий является директивой компилятора, позволяющей управлять некоторыми режимами компиляции.

Разделы описаний.Последовательность разделов описаний не фиксирована. После раздела описания переменных может следовать раздел описания констант или типов, затем еще один раздел описания переменных, и т.п. В ряде случаев это удобно, но без крайней необходимости не рекомендуется отклоняться от стандартной последовательности разделов описаний.

Тип Диапазон значений Формат
Shortint –128..127 со знаком, 8 бит (1 байт)
Integer –32 768..32 767 со знаком, 16 бит (2 байта)
Longint –2 147 483 648..2 147 483 647 со знаком, 32 бита (4 байта)
Byte 0..255 без знака, 8 бит (1 байт)
Word 0..65 535 без знака, 16 бит (2 байта)

Примеры:

A:Shortint; W:Word;

Тип Диапазон значений Количество значащих цифр Размер (байт)
Real 2.9´10-39..2.7´1038 11-12
Single 1.5´10-45..3.4´1038 7-8
Double 5.0´10-324..1.7´10308 15-16
Extended 3.4´10-4932..1.2´104932 19-20
Comp –263+1..263 до 19

Для работы с вещественными типами кроме Real должен быть подключен арифметический сопроцессор (устройство, реализующее операции с плавающей точкой) или его программная эмуляция. При отсутствии сопроцессора или его эмуляции можно использовать только тип Real.

Тип Comp, по сути, является целочисленным, но обрабатывается сопроцессором, поэтому отнесен к вещественным типам.

Примеры:

Accurate:Double; {для вычислений повышенной точности}

Precise:Extended; {для очень точных расчетов}

Small:Single; {для экономии памяти при умеренной

точности}

Строковый тип.В дополнение к строковым константам введен строковый тип. Соответственно, можно объявлять переменные строкового типа. Предусмотрен ряд операций над данными строкового типа, процедур и функции для работы с ними.

<строковый тип>::="String" [ "[" <целое без знака от 1 до 255> "]" ].

Если после слова String в квадратных скобках указано целое без знака, максимальная длина строки будет равна этому значению. В противном случае максимальная длина будет 255 символов.

Примеры:

Type My_string=String[20];

DisplayLine: String[80];

Last_name:My_string;

Default_Line:String;

Размер строковой переменной в байтах – на один байт больше, чем длина строки в символах. Дополнительный (скрытый) байт хранит текущее количество символов в строке.

Переменным строкового типа можно присваивать значения констант строкового типа и выражений, результатом которых являются строки. Переменные строкового типа можно использовать в строковых выражениях и как фактические и формальные параметры в процедурах и функциях.

* Слово Packed можно использовать со сложными типами, но оно не изменяет способа хранения данных.

* Начиная с версии 5.5 добавлен объектный тип данных (Object).

Тип указателей.Добавлены нетипизированные указатели, то есть, указатели на область памяти любого типа. Добавлена операция вычисления адреса @ и адресные функции и процедуры.

Процедурный тип.Вместо процедурных и функциональных параметров введено понятие процедурного типа. Можно описать переменные определенного процедурного типа, присваивать этим переменным имена процедур и функций (с соответствующей структурой заголовков), передавать имена процедур и функций в другие процедуры и функции в качестве фактических параметров (если в них описаны формальные параметры соответствующих процедурных типов).

<конструкция процедурного типа>::= ("Procedure"|"Function") ["("<список формальных параметров>")"] [":"<тип результата>].

Структура списка формальных параметров такая же, как в заголовках процедур или функций. Тип результата указывается только в конструкциях со словом Function.

Примеры:

Type My_proc=Procedure;{процедурный тип без параметров}

SwapProc=Procedure(var X,Y:integer);

MathFunc=Function(x:Real):Real;