Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л7_2012 мас_ы.doc
Скачиваний:
2
Добавлен:
19.11.2019
Размер:
88.06 Кб
Скачать
    1. Действия над элементами массивов

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

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

Например.

VAR X : real;

Y : array[1..1] of real;

………………………………..

X:=Y; Y:=X; X:=Y+0.5; Y=3.14 – недопустимо.

После объявления массива, каждый его элемент можно обработать, указав имя массива и индекс элемента в квадратных скобках. Например, запись MAS[2], VEG[10] позволяет обратиться ко второму элементу массива MAS и к десятому элементу массива VEG.

При работе с двумерными массивами указывается два индекса, с N-мерными, N индексов. Например, запись MATR[2,3] делает доступным для обработки значение элемента находящегося во 2-й строке 3 столбца массива MATR.

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

B[10]: = B[3] + 1;

Sum: = Sum – C[K];

P1: = A[2*I + 1];

Инициализация массива заключается в присваивании каждому элементу массива значения, соответствующего базовому типу. Это можно сделать, записав группу операторов присваивания. Например,

A[1]:=0; A[2]:=0; A[3]:=0; A[4]:=0;

Однако, при большом количестве элементов такой способ нерационален. Гораздо удобнее получить тот же результат, используя оператор FOR.

FOR I:=1 TO 4 DO A[I]:=0;

Для инициализации двумерного массива, обычно используют вложенный оператор FOR:

FOR I := 1 TO 10 DO

FOR I:=1 TO 15 DO B[I,J]:=0;

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

Значения элементам массива можно присвоить с помощью оператора присваивания, однако чаще всего они вводятся с помощью оператора READ (READLN).

FOR I:=1 TO 4 DO READLN(A[I]);

для двумерного

FOR I:=1 TO 10 DO

FOR J:=1 TO 15 DO READLN(B[I,J]);

Можно ввести и значения отдельных элементов, а не всего массива.

Например, Read(A[3]); Read(B[6,9]);

Вывод значений элементов массива выполняется аналогичным образом с помощью оператора WRITE или WRITELN

FOR I:=1 TO 4 DO WRITELN(A[I]);

Или для двумерного:

FOR I:=1 TO 10 DO

FOR J:=1 TO 15 DO WRITELN(B[I,J]);

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

1.2 Динамические массивы

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

Var

A: array of integer;

B: array of array of char;

C: array of array of array of real;

В этом примере динамический массив A имеет одно измерение, массив B – два и массив C – три измерения. Распределение памяти и указание границ индексов по каждому измерению динамических массивов осуществляется в ходе выполнения программы путем инициализации массива с помощью функции SetLength.

Например, SetLength(A,3) – в ходе выполнения этого оператора одномерный массив A будет инициализирован, то есть получит память, достаточную для размещения трех целочисленных значений.

Нижняя граница индексов по любому измерению динамического массива всегда равна 0, поэтому верхней границей индексов для A станет значение 2.

В многомерных массивах сначала устанавливается длина его первого измерения, затем второго, третьего и т.д.

Например, вот как создается динамический массив 33:

Var

A: array of array integer;

Begin

// устанавливаем длину первого измерения (количество столбцов):

SetLength(A,3);

// задаем длину каждого столбца:

SetLength(A[0],3);

SetLength(A[1],3);

SetLength(A[2],3);

…………..

end;