Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика сессия.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
112 Кб
Скачать

Логический тип.

Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие условия: False<True Ord(False)=0 Ord(True)=1 Succ(False)=True Pred (True) = False

В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт), WordBool (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для унификации с другими языками программирования и со средой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа, соответствующей значению True. Для вех логических типов значению False соответствует число 0, записанное в соответствующее количество байтов. Значению же True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля (хотя функция Ord в этом случае дает значение 1).

Символьный тип.

Стандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.

Тип-диапазон.

В любом порядковом типе можно выделить подмножество значений, определяемое минимальным и максимальным значением, в которое входят все значения исходного типа, находящиеся в этих границах, включая и сами границы. Такое подмножество определяет тип-диапазон. Тип-диапазон задается указанием минимального и максимального значений, разделенных двумя точками:

type <имя типа> = <мин. значение> . . <макс. значение>;

Минимальное значение при определении такого типа не должно быть больше максимального.

Пример. Определение типов-диапазонов.

type    Dozen = 1..12;           {числа от 1 до 12}    AddSub = Plus..Minus;    {операции сложения и вычитания}

Вопрос №8.

Вещественные типы

В отличие от стандарта языка Паскаль, где определен только один вещественный тип Real, в Turbo Pascal имеется пять стандартных вещественных типов: Real, Single, Double, Extended, Соmр. Характеристики этих типов см. в табл. 3. Таблица 3. Вещественные типы данных

Тип

Диапазон

Число значащих цифр

Размер в байтах

Real

2.9*10-39..1.7*1038

11-12

6

Single

1.5*10-45..3.4*1038

7-8

4

Double

5.0*10-324.-1.7*10308

15-16

8

Extended

3.4*10-4932..1.1*104932

19-20

10

Comp

-263+1..263-1

19-20

8

Тип Comp фактически является типом целых чисел увеличенного диапазона, однако порядковым не считается.

Типы Single, Double, Extended и Comp можно использовать в программах только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора (см. пп. 17.5.8 и 17.7.1).

Структурированные типы данных

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

  • Массивы

  • Записи (Структуры)

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

называемое множеством индексов. Отображение

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

Запись (или структура) представляет собой кортеж из некоторого декартового произведения множеств. Действительно, запись представляет собой именованный упорядоченный набор элементов  , каждый из которых принадлежит типу  . Таким образом, запись   есть элемент множества  . Объявляя новые типы записей на основе уже имеющихся типов, пользователь может конструировать сколь угодно сложные типы данных.

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

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

Работая же с простыми типами данных, например с числовыми, мы манипулируем ими как неделимыми целыми объектами. Чтобы "увидеть", что числовой тип данных на самом деле сложен (является набором битов), нужно перейти на более низкий уровень абстракции. На уровне программного кода это будет выглядеть как ассемблерные вставки в код на языке высокого уровня или использование специальных побитных операций.

Вопросы №30-31.

Запись

Тип-запись включает ряд компонент, называемых полями, которые могут быть разных типов. При задании типа-записи после зарезервированного слова record следует перечислить все поля типа-записи с указанием через двоеточие их типов и завершить задание типа словом end. Поля отделяются друг от друга точкой с запятой. Количество полей записи может быть любым.

Пример.

Type

Complex = record

{Тип комплексных чисел}

Re: Real;

Im: Real

end;

Data = record

{Тип - дата рждения}

Year: Integer;

Month: 1..12;

Day: 1..31

end;

Person = record

{Тип - сведения о сотруднике}

Name: string[20] ;

Sex: (Male, Female);

Age: Integer;

Married: Boolean

end;

Примечание. Если несколько полей типа-записи имеют один и тот же тип, то их имена можно перечислить через запятую и затем указать этот общий тип. Так, рассмотренный в примере тип комплексных чисел можно ввести и другим образом:

type    Complex=record    Re,Im:Real  end;

После введения типа-записи можно затем задать переменные или типизированные константы этого типа - записи.

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

Так, для введенных выше типов можно задать, например, следующие переменные и константы:

var    X,Y,Z:Complex;    Dat:Data;  сonst    Birthday:Data=(Year:1971;Month:12;Day:9);    Ivanov: Person = (Name: 'Иванов'; Sex: Male; Age: 40; Married: True);

Примечание. Тип-запись можно вводить и непосредственно при определении переменных или типизированных констант. Например, фрагмент

var    X,Y,Z:record      Re,Im:Real     end;

определяет те же комплексные переменные, что и в предыдущем примере.

Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля, записываемого через точку, например:

Ivanov..ge, X.Re, Dat.Day и т. д.

Пример. Использование полей записей.

X.Re=15; X.Im=17; Y.Re=-X.Re; Y.Im=-X.Im; Ivanov.Married := False;

Для того чтобы не выписывать каждый раз имя записи при обращении к ее нолям, можно использовать оператор над записями WITH. Его структура выгляни следующим образом:

with <имя записи> do <оператор>;

В этом случае внутри оператора можно указывать только поле записи. Например, фрагмент:

With X do    begin     Re:=1.5;     Im:=1.7;     Y.Re:=-Re;     Y.Im:=-Im   end;  with Ivanov do   Married := False;

эквивалентен фрагменту из предыдущего примера.

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

Пример. Использование вариантной части.

Type

Figure = (Square, Triangle, Circle);

Param = record

X ,Y: Real;

{точка привязки}

case Fig: Figure of

{параметры фигур}

Square: (Side: Real);

Triangle: (Side1, Side2, Angle: Real);

Circle: (Radius: Real)

end;

var MySquare , MyCircle: Param;

Вариантная часть начинается словом case, за которым следует переменная выбора варианта (в примере Fig) с указанием типа. Далее указываются константы, значения которых может принимать переменная выбора варианта (в примере - Sguare, Triangle, Circle). За каждой константой через двоеточие в круглых скобках записываются поля данного варианта записи с указанием их типов. Круглые скобки необходимы, даже если для данного варианта вариантная часть отсутствует. Следует отметить, что вариантная часть не завершается своей операторной скобкой end, как у обычной конструкции CASE, т.к. далее идет завершающая операторная скобка end всего типа.

В стандарте языка Паскаль перед тем, как использовать один из вариантов записи, переменной выбора варианта необходимо присвоить соответствующе значение:

Fig:=Sguare; MySguare.Side:=5.0; Fig:=Circle; MyCircle. Radius := 7.5;

В Turbo Pascal эту операцию делать необязательно, хотя, если переменная выбора задана, ее затем можно в программе посмотреть, чтобы определить, какой задан вариант. Более того, задание значения переменной выбора ни на что не оказывает влияния, и следующий фрагмент эквивалентен рассмотренному выше:

Fig:=Circle; MySguare.Side:=5.0; Fig:=Sguare; MyCircle. Radius := 7.5;

В тип-записи допустимо не вводить переменную выбора вариантов, а перечислить лишь разные варианты, например:

Transf = record    case Integer of      1: (_Word: Word);      2: (_TwoSymb: array!1..2] of Char)  end;

Вопрос №32-35.