- •Модуль и его структура
- •Структура модуля
- •Список uses
- •Интерфейс
- •Реализациия
- •Инициализация и завершение
- •Ключевые слова
- •Слово const
- •Слово type
- •Слово var
- •Комментарии
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Расширенная строка
- •Строка с терминальным нулем
- •Операции со строками Слияние
- •Извлечение символа
- •Управляющие символы в строках
- •Разбиение литерала по строкам программы
- •Сравнение строк
- •Строковые функции
- •Форматирование строк
- •Множества
- •Объявление записи
- •Оператор with
- •Массивы записей
- •Совместимость типов данных
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Управление вычислениями Операторы if, then, else
- •Выполнение нескольких инструкций.
- •Вложенные условия.
- •Циклы Элементы структуры цикла
- •Цикл for…
- •Функции Pred и Succ
- •Цикл while
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Включение внешнего файла в модуль
Типы данных и переменные
НОВЫЙ ТЕРМИН. В Object Pascal тип данных информирует компилятор как размещать информацию в памяти.
Некоторые языки программирования допускают присваивание переменной значения любого типа. Например, рассмотрим следующие примеры кода на языке BASIC:
X = -1;
X = 1000;
X = 3.14;
Интерпретатор BASIC заботится о выделении подходящего размера памяти для хранения соответствующего значения.
В программе на Object Pascal все переменные, используемые в программе надо объявить, например
var
X1 : Integer;
X : Integer;
Y : Double;
Z : Byte;
{ ...далее }
X1 := -1;
X := 1000;
Y := 3.14;
Z := 27;
Компилятор использует объявления переменных для проверки корректности присваиваемых им значений. Некорректность использования типов данных приведет либо к ошибке компиляции, либо к предупреждению, на которое следует обратить внимание, проанализировать и исправить ошибку. Строгий контроль за использованием типов данных обеспечивает надежность программы.
Некоторые из типов являются беззнаковыми, т.е. данные такого типа могут принимать только положительные значения. В таблице 1.1 приведены основные типы данных Object Pascal, размер памяти для размещения одного значения соответствующего типа, а так же диапазон допустимых значений. В этой таблице не представлены строковые типы, обсуждение которых вынесено в раздел «Строки»
Таблица 1.1. Типы данных Object Pascal
Тип |
Размер, байт |
Диапазон значений |
ShortInt |
1 |
-128 …127 |
Byte |
1 |
0 … 255 |
Char |
1 |
0 … 255 |
WideChar |
2 |
0 … 65 535 |
SmallInt |
2 |
–32 768 … 32 767 |
Word |
2 |
0 … 65 535 |
LongInt |
4 |
–2 147 483 648 … 2 147 483 647 |
Int64 |
8 |
от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Integer |
4 |
см. LongInt |
Cardinal |
4 |
0 … 2 147 483 647 |
Single |
4 |
1.5 10-45 … 3.4 1038 |
Double |
8 |
5.0 10-324 … 1.7 10308 |
Real |
8 |
как Double |
Extended |
10 |
3.4 10-4932 … 1.1 104932 |
Comp |
8 |
от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Currency |
8 |
от –922 337 203 685 477.5808 до 922 337 203 685 477.5807 |
Boolean |
1 |
True или False |
Variant |
16 |
|
Как следует из таблицы 1.1, типы Integer и LongInt эквивалентны. Это сделано для совместимости на уровне исходных текстов с программами, подготовленными на 16–разрядных компьютерах. На 16–разрядной версии тип Integer требует 2 байта памяти, а тип LongInt – 4 байта.
В 32-разрядной версии оба типа имеют размер 4 байта и, следовательно, одинаковые диапазоны значений.
Кроме того, можно заметить, что типы Int64 и Comp (computational) также имеют одинаковые диапазоны значений. Различие между ними в том как трактует их компилятор. Так, Int64 относится к целочисленным, а тип Comp – к вещественным. В инженерных приложениях тип Comp вряд ли Вам понадобится.
Далее, отметим идентичность типов Real и Double. В Delphi 1.0 (и в Turbo Pascal) тип Real был 6-байтным. Теперь он стал 8-байтным. Дело в том, что 6-байтный вещественный тип противоречит 32-разрядной архитектуре современных процессоров.
При переносе «старых» 16-разрядных программ на 32-разрядную платформу может возникнуть проблема совместимости по типу real. Так, если в Delphi – программе вы читаете с диска «старый» типизированный файл, объявленный как file of real, данные будут введены не верно. Для совместимости со «старым» типом real в Object Pascal есть тип real48, который соответствует 6–байтному вещественному числу.
ПРИМЕЧАНИЕ. Тип Int64 впервые появился в Delphi 4. Он предназначен для представления «очень больших» целочисленных значений. Его появление связано с тем, что объем жестких дисков далеко «перевалил» за гигабайт. В Windows API есть функция GetDiskFreeSpaceEx, которая вычисляет объем свободного пространства на жестком диске. Она может вернуть значение, которое гораздо больше верхней границы диапазона чисел типа Integer (2 147 483 647). Тип 64-битного целого и предназначен для решения подобных проблем.
Типы Single, Double, Extended, и Currency относятся к группе вещественных. К данным этого типа относятся числа, имеющие целую и дробную части. Каждое число вещественного типа может содержать конечное число десятичных цифр. Иначе данные этого типа называют числами с плавающей точкой.
Остальные типы данных относятся к целочисленным. Целочисленной переменной нельзя присвоить вещественное значение. Например, при компиляции следующего фрагмента будет зафиксирована ошибка:
var
X : Integer;
{ Далее... }
X := 3.75;
При написании кода программы, который отвечает за графический интерфейс, необходимость в переменных вещественного типа возникает очень редко.
С другой стороны, код реализации инженерных расчетов оперирует вещественными переменными на все 100%.