Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_Прг+КР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
913.41 Кб
Скачать

4.1. Типы данных

4.1.1. Классификация типов

Тип является одним из фундаментальных понятий языка Free Pascal. Введение типа дало возможность автоматического поиска ошибок при компиляции, что в итоге приводит к созданию надёжных (корректных) программ.

Типы могут быть стандартными и определяемыми пользователем. Стандартные типы известны компилятору, а потому не нуждаются в объявлении. Напротив, типы, определяемые пользователем, должны быть объявлены в разделе объявлений. Соответствующий подраздел этого раздела начинается со служебного слова type и имеет следующий формат:

type

<имя типа 1> = <определение типа 1>;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

<имя типа N> = <определение типа N>;

В языке Free Pascal используется 5 групп типов данных – простые, структурированные, процедурные типы, указатели и объекты. Их содержание показано на рис. 6, где затененные блоки соответствуют нестандартным типам. Для первого знакомства с языком достаточно ограничиться наиболее часто используемыми типами.

Рис. 6. Классификация типов данных.

4.1.2. Простые типы.

Целый тип обозначает множество целых чисел. В зависимости от диапазона их значений имеется несколько типов целых чисел. Над целыми значениями допустимы 4 арифметические операции – сложение, вычитание, умножение, деление нацело (дробная часть отбрасывается) и взятие остатка от деления.

Л

Целый тип

Порядок

Число байт

Byte

0...255

1

Word

0...65535

2

Shortint

-128...127

1

Smollint

-32768...+32767

2

Integer

-2147486648… +2147487647

4

огический тип определяет множество данных, каждое из которых может принимать лишь два значения: истина (идентификатор true) или ложь (идентификатор false). Для всех логических типов значению false соответст-вует число 0, а значению true - 1. Логический тип имеет идентификатор Boolean. Над значениями логического типа допустимы операции сравнения, а также операции логического сложения (идентификатор or), умножения (идентификатор and), исключающее ИЛИ (идентификатор xor) и отрицания (идентификатор not).

Символьный тип определяет множество символов, состоящее из 256 различных символов. Каждый символ имеет свой порядковый номер (код), который присваивается ему в соответствии с системой ASCII (американский стандартный код для обмена информацией). Этот номер (код) и является значением символа.

Над значениями символьного типа возможны операции сравнения – >, <, = и т.д. Символьный тип имеет идентификатор Char.

Значения символьного типа, имеющие физическое изображение (т.е. которые можно вывести на печать - символы алфавита и т.п.) заключаются в апострофы. Например, 'x', '+', '>'. Для символов, не имеющих физического изображения (управляющие символы), используется их код с символом # перед ним. Например, #13 (код клавиши <Enter>).

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

Формат записи нового перечисляемого типа:

<имя типа> = (<идентификатор 1, ..., идентификатор N>);

Здесь важен порядок перечисления идентификаторов, т.к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т.д. Кроме того, один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Например, перечисляемый тип Operat = (Plus, Minus, Divide); образован из строкового типа (смотри ниже). Он говорит о том, что над значениями его типа возможны только три операции: сложение, вычитание и деление.

Тип-диапазон получается в результате сужения допустимого диапазона значений некоторого стандартного типа. Это сужение определяется заданием минимального и максимального значений диапазона.

Формат записи нового типа-диапазона:

<имя типа> = <минимальное значение>..

<максимальное значение>;

Имя типа вводится программистом произвольно, но не из числа зарезервированных слов языка. Например, тип Dozen = 1..12; образован из целого типа, а тип Book = 'a'..'s'; - из символьного типа.

В

Тип

Порядок

Число байт

Single

-45..+38

4

Real

-39..+38

6

Double

-324..+308

8

Extended

-4951..+4932

10

Comp

-263+1..+263-1

8

ещественный тип обозначает множество вещественных чисел, т.е. чисел, имеющих целую и дробную части. Вещественные значения могут изображаться в форме с фиксированной точкой или в форме с плавающей точкой. В первом случае целая и дробная части вещественного числа отделяются друг от друга точкой. Например, 0.5. Во втором случае число записывается в виде АеР, где А называется мантиссой числа, е изображает число 10 - основание десятичной системы счисления и имеет смысл "умножить на 10 в степени Р", а Р называется порядком. Количественно порядок равен числу позиций, на которое смещается десятичная точка в изображении числа. При этом если смещение направлено влево, то порядок положителен, а если вправо - отрицателен. В зависимости от диапазона значений в Free Pascal имеется 5 типов вещественных чисел. Над значениями вещественных чисел допустимы только 4 арифметические операции – сложение, умножение, вычитание и деление.

4.1.3. Структурированные типы.

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

array [<нижняя граница . . верхняя граница>] of <тип>;

Например, массив из пяти элементов типа real объявляется следующим образом:

Ar = array[1..5] of real;

В случае двумерного массива необходимо в квадратных скобках указать нижние и верхние границы по строкам и столбцам. Например,

Matrix = array[1..4,1..4] of real;

Строковый тип определяет множество строк символов. Имеет идентификатор String[n]. Если для String не указан размер, то предполагается длина строки 255. Значения строкового типа заключаются в апострофы. Например, 'язык', 'pro'. Над объектами строкового типа допустима операция конкатенации (сцепления строк) и операция сравнения (какая строка длиннее).

4.1.4. Идентичность и совместимость типов.

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

Типы Т1 и Т2 считаются идентичными, если:

  • они имеют один и тот же идентификатор типа;

  • один объявлен эквивалентным другому (один из них может быть автоматически преобразован к другому).

Например:

type

T1 = Boolean;

T2 = T1;

Этот уровень соответствия типов должен соблюдаться между параметрами и аргументами процедур и функций.

Выполнение операций в выражениях, а также операции сравнения требуют, чтобы операнды имели совместимые типы.

Типы Т1 и Т2 совместимы, если выполняется хотя бы одно из следующих условий:

  • Т1 и Т2 идентичны;

  • оба типа являются либо целыми, либо вещественными;

  • один тип представляет собой тип - диапазон другого;

  • оба типа являются типами - диапазонами какого-то одного типа;

  • один тип строка, другой символ;

  • T1 и T2 - процедурные типы с одинаковым количеством попарно эквивалентных параметров и с эквивалентными типами результатов (для функций).

Для оператора присваивания имеется специальное понятие – совместимость по присваиванию. Оператор присваивания считается корректным, если тип переменной в левой части совместим по присваиванию с типом выражения из правой части.