Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

1.1.3.6. Перечисляемые типы

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

Type <имя типа>=(<значение1>,[<значение2>]...)

Каждому значению соответствует порядковый номер этого значения в списке значений (отчет начинается с нуля).

Пример. Перечисляемый тип с сокращенными названиями месяцев.

Type TypeMonth=(jan,feb,mar,apr,may,jun,jul,aug,sep, oct, nov, dec);

Var Month: TypeMonth; ....

If Month=aug Then Label1.Capion:= ‘Хорошо бы поехать к морю!’

Переменную перечисляемого типа можно определить сразу в разделе пе­ремен­ных, без предварительного описания перечисляемого типа (Var TypeMonth: (jan,feb,mar,apr,may,jun,jul,aug, sep, oct, nov, dec).

1.1.3.7. Интервальные типы

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

Пример. type dni=1..31; var rd, vd: dni;

Переменную интервального типа можно определить сразу в разделе переменных без предварительного описания интервального типа:

var dni: 1..31; god: 1900..2000

1.1.3.8. Порядковые типы

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

Для порядковых типов имеются функции:

Ord(i) ‑ порядковый номер аргумента (запрещен аргумент типа Int64).

Pred(i)/Succ(i) ‑ предшествующее/следующее значение для аргумента.

High(i)/Low(i) ‑ максимальное/ минимальное значение аргумента.

Inc(i)/Dec(i ‑ увеличение/уменьшение i на единицу (инкремент/декремент).

Пример. Две группы по три эквивалентных оператора:

Inc(i); i:=Succ(i); i:=i+1; Dec(i); i:=Pred(i); i:=i‑1;

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

Объект структурированного типа всегда имеет несколько компонентов. Допускается вложенность типов, т.е. компонент может быть структурным. Имеется четыре типа: массив, запись, множество, файл (описание этого типа приводится в пункте 6.1).

1.1.4.1. Статические массивы

Массив ‑ группа переменных (элементов). Описание типа имеет вид: <имя типа>=[Packed] Array [<индекс>] Of <тип>

Packed - элементы массива располагаются плотно без пропусков, что уменьшает размер используемой памяти, но увеличивает время обработки.

<индекс> ‑ список индексов через запятую. Индексами могут быть переменные типов: целые (кроме Longint), логические, символьные, пе­ре­чис­ляемые, интервальные (кроме базового типа Longint). Обычно исполь­зуется интервальный тип. Границы значений индексов могут задаваться только константами, а не переменными, т.е. при выполнении программы нель­зя изменить размер массива. Поэтому такие массивы называют ста­ти­чес­кими в отличие от динамических, размер которых не известен до вы­пол­нения программы и определяется в процессе ее выполнения.

Элементами массива могут быть и структурированные данные. Суммарная длина массива ограничена ‑ 2 Гб.

Число индексов определяет размерность массива.

Пример. Двумерный массив: таблица из 5 строк и 10 колонок

type mot=array [1..5,1..10] of byte //таблица символов

Переменную типа «массив» можно определить сразу в разделе переменных без предварительного описания типа массива.

Пример. var urog : array [1..10,1..100] of real

Доступ к элементу массива осуществляется по его индексу.

Запись вида А:=В означает, что всем элементам массива А прис­ваиваются попарно значения элементов массива В при следующем ограни­че­нии: перечислены в одном списке команды объявления или объявлены через один поименованный тип.

Однотипные массивы можно сравнивать (А=В, А<>В). Действия осуществляются с элементами массива.

Пример. FOR I:=1 TO 10 DO A[I]:=0 //очистка массива нулями.

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

Пример перечисляемого типа индекса:

Type Cvet=(krasnii, geltii, zelenii, hernii); //перечисляемый тип ‑ цвета

Var Mcvetov: Array [Cvet] Of Integer; //одномерный массив цветов

Для обращения к третьему элементу массива нужно указать Mcvetov[zelenii].

Пример интервального символьного типа ‑ латинские буквы.

Var Cim: Array [‘a’..’z’] Of Char; I:char; ...

For I:=’a’ to ‘z’ Do Cim[I]:=I; //заполнение массива латинскими буквами

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

Пример присвоения начальных значений одномерному массиву:

Var A1: Array [0..6] of integer=(2,1,7,4,3,8,10); // список констант

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

Пример присвоения начальных значений двумерному массиву:

Type A2: Array [1..3,1..2] of integer=((1,2),(3,4),(5,6)); // значения 1,2,3,4,5,6.

Пример типизированной константы типа «массив»:

Const Matr: Array[1..3,1..5) Of Byte=((0,1,2,3,4),(5,6,7,8,9),(10,11,12,13,14));

К одномерным символьным массивам применимы функции работы со строками.

Параметры в виде открытых массивов

При объявлении подпрограммы (функции или процедуры) можно не указывать размерность массивов. Такой открытый массив воспринимается в подпрограмме как массив с целыми индексами, начинающимися с нуля. Раз­мер массива определяется функцией Length и Height=Length‑1.

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

Пример: S=MinValue([1.3,45.6,‑22,67,132.45,56]).

Приведем некоторые полезные функции обработки массивов.

Length(x) - возвращает число элементов в массиве.

High(x)/Low(x) - возвращает наибольшее/наименьшее значение индекса.

MaxIntValue(x), MinIntValue(x), MaxValue(x), MinValue(x) - возвращает мак­симальное, минимальное значение элемента числового массива.

Sum(x) - возвращает сумму элементов числового массива.