Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast2.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
413.7 Кб
Скачать

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

Все рассмотренные ранее типы данных (исключая тип STRING языка Паскаль) имеют одно общее свойство – неделимость значения. Такие данные называются простыми или скалярными. Данные, состоящие из нескольких компонентов, называются структурированными. К структурированным типам данных, в частности, относится тип массив.

4.1. Массивы

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

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

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

4.1.1. Задание массивов

В Бейсике описание массивов совмещено с резервированием памяти под переменные простого и структурированного типа. Синтаксис оператора резервирования памяти:

<резервирование памяти QB> ≡ DIM <элемент списка> {, <элемент списка>}

<элемент списка> ≡ <идентификатор> [(<границы>)] AS <тип элемента>

<границы> ≡ [<выражение 1> TO] <выражение 2>{,[<выражение 1> TO] <выражение 2>}

<тип элемента> ≡ INTEGER | LONG | SINGLE | DOUBLE | STRING | <тип пользователя>

Если (<границы>) отсутствуют, то осуществляется резервирование памяти под данные простого типа. С помощью части оператора (<границы>) задаются границы значений индексов и, как следствие, размерность и размер массива. <Выражение 1> и <выражение 2> должны быть целого типа. В частности, значение <выражения 1> задает нижнюю границу индекса; в случае его отсутствия (по умолчанию) нижняя граница равна 0.

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

Пример 4.1.1.

Следующие операторы имеют одну и ту же семантику:

DIM A(0 TO 5, 0 TO 10) AS single

DIM A(5, 0 TO 10) AS single

DIM A(0 TO 5, 10) AS single

DIM A(5, 10) AS single

а именно, резервируют память под 60 элементов двумерного массива А, элементы которого имеют тип SINGLE. При этом первый индекс может принимать значения от 0 до 5, второй – от 0 до 10. С помощью такого массива в программе можно представить матрицу из шести строк и одиннадцати столбцов. Идентификатору A соответствует ячейка памяти, начиная с которой располагается значение элемента A(0,0).

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

<тип массив TP> = ARRAY [<тип индекса> {, <тип индекса>}] OF <тип элементов>

где <тип индекса> может быть любым порядковым типом, например целым типом, символьным или логическим типом, отрезком целого или символьного типа, перечисляемым типом. Использование типа Real для этих целей недопустимо, поскольку он не относится к порядковому типу. Тип элементов массива может быть любым допустимым в языке Паскаль, в том числе и структурированным, кроме файлового.

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

Пример 4.1.2.

TYPE

matr = array [0..10,0..10] of real;

VAR

A: matr;

В данном примере описывается массив А типа matr, представляющего собой матрицу (двумерный массив) из 11 строк и 11 столбцов, элементы которой имеют тип Real.

Обращение к элементу массива в TP осуществляется с помощью идентификатора и указания в квадратных скобках индекса (индексов через запятую, если их несколько) элемента.

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

Пример:

Turbo Pascal:

VAR

A: matr;

BEGIN

A[5, 2] := 2;

END;

QBasic:

DIM A(1 to 10, 1 to 10) AS single

A(5, 2) = 2

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

Пример:

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

В TP тип массив может быть использован:

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

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

В случае целых индексов индексация массива может начинаться с любого числа, но целесообразно нумеровать элементы, начиная с 0 или с 1.

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

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

Кроме оператора присваивания, значения компонентам массива в языке Бейсик можно присвоить с помощью пары операторов DATA и READ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]