Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Доп.мат-лы студентам к лекциям по ИиП.doc
Скачиваний:
1
Добавлен:
06.12.2018
Размер:
193.54 Кб
Скачать

Тема 6. Сложные или структурированные типы данных.

  1. Массивы и работа с ними.

  2. Множества и выражения над ними.

* - *

К сложным или структурированным типам относят массивы, записи, множества и файлы. Характерной их особенностью является то, что они описывают множественные объекты, т.е. состоящие из нескольких компонентов. Причем каждый из компонентов также может быть структурированным, образуя т.н. вложенность типов произвольной глубины. Общая длина такого компонента не может быть больше 65520 байт.

Каждому сложному типу свойственен и свой метод объединения компонентов.

1. Массивы и работа с ними.

Под массивом понимается фиксированная совокупность

однотипных элементов, расположенных в

определенном порядке.

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

Каждый массив обладает по крайней мере тремя характеристиками: мерностью, размерностью и размером

.

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

В зависимости от числа индексов (измерений) массивы бывают одномерными и многомерными.

Например,

а). последовательность чисел

2 34 -5 7 0 13 -22

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

МАS(7) или А(7).

При этом число 13 в массиве будет иметь индекс 6 и выражаться MAS[6] или А[6].

I-ый элемент обозначается MAS[I] или А[I].

Аналогично, последовательность слов

МИР РАК РИМ СОК КОТ ТОК

также является одномерным массивом, состоящим из 6-ти, но уже 3–х символьных элементов.

б). двумерный массив в нашем представлении есть матрица, где местоположение элемента определяется двумя индексами, первый из которых обозначает строку, а второй – столбец. Поэтому элемент М[2,4] будет располагаться на пересечении 2-й строки и 4-го столбца. А сама матрица, состоящая, например, из 6 строк и 5 столбцов, будет иметь следующее обозначение:

М(6,5)

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

К(3,4,5)

задает куб из 5-ти матриц, каждая из которых насчитывает 3 строки и 4 столбца.

А указание

К[2,1,3]

выводит нас на элемент, находящийся на пересечении 2-ой строки и 1-го столбца 3-й матрицы куба.

Если увеличивать число индексов, то можно оперировать более сложными массивами и представлять n-мерные пространства.

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

Например, говорят: массив В, размерностью 4 на 6, подразумевая, что он двумерный и содержит 4 строки 6 столбцов. Т.е. В(4,6).

Размер массива определяет общее количество его элементов. При этом в расчет берутся все измерения массива. Так, размер двумерного массива В(4,6) равен 24.

Напомним, что важнейшей особенностью массива является фиксированное количество элементов в нем.

Чтобы использовать массивы в программе, их необходимо объявить.

Объявить массив – это означает сообщить компилятору:

- имя массива, которое определяет переменную с индексами;

- тип элементов массива;

- тип индексов элементов массива;

- размерность массива, равную количеству его индексных позиций;

- порядок позиционирования, т.е. нумерации элементов массива;

- количество элементов массива.

Полная форма объявления массива:

cписок тип

TYPE <имя типа > =ARRAY[<типов индексов >] OF < элементов >;

массива через запятую массива

VAR <имя массива> : < имя типа массива>;

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

Тип элементов м.б. любым из допустимых, кроме FILE.

Сокращенная форма объявления:

имя cписок тип

VAR < массива> : ARRAY[<типов индексов >] OF < элементов >;

через запятую массива

Примеры объявления одномерных массивов:

a). полная запись:

TYPE

A=ARRAY[1..50] OF INTEGER;

B=ARRAY[10..20] OF REAL;

C=ARRAY[-5..15] OF BOOLEAN;

D=ARRAY[0..25] OF STRING[30];

E=ARRAY[-1..5] OF CHAR;

VAR MASA: A; => массив из 50 элементов целого типа

MASB: B; => массив из 11 элементов вещественного типа

MASС: С; => массив из 21 элемента булевского типа

MASD: D; => массив из 26 элементов строкового типа

MASE: E; => массив из 7 элементов символьного типа

Границы изменения индексов можно задать и так:

CONST I=-10000;

N=10000;

TYPE M= ARRAY[I..N] OF REAL;

б). сокращенная запись:

VAR MASA: ARRAY[1..50] OF INTEGER;

Примеры объявления многомерных массивов:

TYPE A1= ARRAY[1..20] OF INTEGER;

A2= ARRAY[1..10] OF A1;

VAR MSV: A2; => матрица, размерностью 10 на 20

Или:

TYPE A1= ARRAY[1..20] OF INTEGER;

VAR MSV: ARRAY[1..10] OF A1;

Или:

VAR MSV: ARRAY[1..10] OF ARRAY[1..20] OF INTEGER;

Или еще проще:

VAR MSV: ARRAY[1..10,1..20] OF INTEGER;

Следует учитывать, что, располагаясь в оперативной памяти, элементы массива образуют цепочку, в которой при последовательном переходе от элемента к элементу быстрее меняется самый правый (младший) индекс. Иными словами, в массиве T(2,3) элементы расположатся в следующем порядке:

Т[1,1] Т[1,2] Т[1,3] Т[2,1] Т[2,2] Т[2,3]

А в нашем представлении:

Т[1,1] Т[1,2] Т[1,3]

Т[2,1] Т[2,2] Т[2,3]

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

Индекс может быть константой или выражением того же типа, что и тип индекса:

MASА[7] => обращение к 7–му (из 50-ти) элементу массива

MASA.

MSV[2,5] => обращение к элементу, лежащему на

пересечении 2-ой строки и 5-го столбца

матрицы MSV.

M1[i+1,j-2,k*3] => обращение к элементу трехмерного

массива M1, индексы которого вычисляются

согласно приведенным выражениям.

Замечания:

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

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

  3. значение вычисляемого индекса должно соответствовать типу индекса и не м.б. REAL.

Например, недопустимо:

Pole :=MSV[15, 25/(3+a), 4];

т.к.:

  • первый индекс д.б. < = 10

  • второй – дает в результате REAL

  • третьего индекса вообще не должно быть

Можно описывать массивы с помощью компонент и индексов разных типов:

а).

TYPE DAY=(PND,VTR,SRD,CTV,PTN,SBT,VSK);

VAR DN: ARRAY[1..7] OF DAY;

Значениями элемента этого массива DN может быть один из 7 дней недели, задаваемых перечисляемым типом DAY, т.е допустимо:

DN[5]:=CTV;

б).

TYPE GR=(EIS_111,EIS_112,EIS_211,EIS_212,EIS_311,EIS_312);

ML_KURS=(1..3);

VAR STUD: ARRAY[GR, ML_KURS] OF INTEGER;

Тогда,

STUD[EIS_112,1]:=23; => число студентов в группе.