Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Delphi (повторение).doc
Скачиваний:
7
Добавлен:
04.05.2019
Размер:
2.74 Mб
Скачать

5.8.4. Многомерные массивы

Можно объявлять и обрабатывать многомерные массивы, т.е. массивы, элементами ко­торых являются массивы. Например, двумерный массив можно объявить та­ким образом:

Var A2:array[1..10]of array[1..3]of integer;

Этот оператор описывает двумерный массив, который можно представить себе как таблицу, состоящую из 10 строк и 3 столбцов. То же самое можно объ­явить более компактно:

Var A2: array[l..10,1..3] of integer;

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

Доступ к значениям элементов многомерного массива обеспечивается че­рез индексы, перечисляемые через запятую. Например, А2[4,3] – значение элемента, лежащего на пересечении четвертой строки и третьего столбца.

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

type АrЗ = array[1..4,1..3,1..2] of integer;

var A1,A2: АrЗ;

const A3: Ar3=(((0,1), (2,3), (4,5)),

((6,7), (8,9), (10,11)),

((12,13), (14,15), (16,17)),

((18,19), (20,21), (22,23)));

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

0

1

6

7

12

13

18

19

2

3

8

9

14

15

20

21

4

5

10

11

16

17

22

23

Рис. 5.25. Строки матрицы A3

Например, элемент А3[1,2,1] равен 2, элемент А3[4,1,2] равен 19 и т.д.[1].

В качестве примера можно рассмотреть задачу вычисления среднего арифметического элементов каждой строки двумерного массива, состоящего из четырёх строк и четырёх столбцов (4*4). Диалоговое окно приложения представлено на рис. 5.26.

Рис. 5.26. Диалоговое окно приложения обработки матрицы

Фрагмент модуля приложения:

Type Ar= array [1..4,1..4] of integer;

Var a1: Ar;

Const a: Ar =((4,4,4,4),

(3,3,3,3),

(2,2,2,2),

(1,1,1,1));

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

//a:array[1..4,1..4] of integer;

i,j: integer; //индексы

summ: integer;

sr: real; // среднее

begin

Label1.Caption:='';

// ввод модифицированных значений в массив иначе

// работа будет со старыми значениями

for i := 1 to 4 do

for j := 1 to 4 do

a[i,j]:= StrToInt(StringGrid1.Cells[j,i]);

//обработка массива

for i := 1 to 4 do

begin

summ:=0;

for j := 1 to 4 do

summ:= summ + a[i,j];

sr:= summ/4;

Label1.Caption:= Label1.Caption + 'строка '+

IntToStr(i)+ ' среднее = '+FloatToStr(sr)+#13;

end;

end;

procedure TForm1.Formcreate(Sender: TObject);

var

i,j: Integer;

begin

for I := 1 to 4 do

StringGrid1.Cells[0,i]:=IntToStr(i);//запись номеров

// столбцов

for j := 1 to 4 do

StringGrid1.Cells[j,0]:=IntToStr(j);//запись номеров

// строк

//заполнение начальных значений массива в таблицу

for i := 1 to 4 do

for j := 1 to 4 do

StringGrid1.Cells[j,i]:= IntToStr(a[i,j]);

end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

89