К оглавлению

 

Урок № 28

Тема: Структура двумерного массива и его описание.

 

Вопросы темы:

1.     Понятие двумерного массива.

2.     Заполнение двумерного массива

3.     Описание двумерного массива на языке Турбо Паскаль. Разбор задач.

4.     Шаблон для решения задач на двумерные массивы.

5.  Разбор задач.

    Презентация

 

В начало

Понятие двумерного массива

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

Например, данные о планетах Солнечной системы представлены следующей таблицей:

Планета

Расст. до Солнца

Относ. обьем

Относ. масса

Меркурий

57.9

0.06

0.05

Венера

108.2

0.92

0.81

Земля

149.6

1.00

1.00

Марс

227.9

0.15

0.11

Юпитер

978.3

1345.00

318.40

Сатурн

1429.3

767.00

95.20

Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].

 

В начало

Заполнение двумерного массива

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

Program Vvod2;

 Var I, J : Integer;

     A : Array [1..20, 1..20] Of Integer;

 Begin

  FOR I := 1 TO 3 DO

   FOR J := 1 TO 2 DO A[I, J] := 456 + I

 End.

элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.

 

 

При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.

При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.

Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.

Задача Заполнить матрицу порядка n по следующему образцу:

 

1

2

3

...

n-2

n-1

n

2

1

2

...

n-3

n-2

n-1

3

2

1

...

n-4

n-3

n-2

...

...

...

...

...

...

...

n-1

n-2

n-3

...

2

1

2

n

n-1

n-2

...

3

2

1

Program Massiv12;

  Var I, J, K, N : Integer; A : Array [1..10, 1..10] Of Integer;

  Begin

   Write('Введите порядок матрицы: '); ReadLn(N);

    For I := 1 To N Do

     For J := I To N Do

      Begin

       A[I, J] := J - I + 1; A[J, I] := A[I, J];

      End;

     For I := 1 To N Do

      Begin

       WriteLn;

       For J := 1 To N Do Write(A[I, J]:4);

      End

  End.

 В начало

Описание двумерного массива

 

Двумерный массив на языке Турбо Паскаль можно описать по-разному.

Const MaxN=...;  {Максимальные значения количества строк} МахМ=...;  {Максимальные значения количества столбцов}

Первый способ:

Type OMyArray=Array[1..МахМ] Of Integer;

{*0дномерный массив из целых чисел.*} TMyArray=Array[I..MaxN] Of OMyArray; {*Одномерный массив, элементами которого являются одномерные массивы*}

Второй способ:

Type TMyArray=Array[1..MaxN,1..МахМ] Of Integer; {*Двумерный массив из целых чисел.*}

Будем отдавать предпочтение второму способу описания двумерного массива.

 

В начало

Шаблон для решения задач на двумерные массивы

Для работы с двумерными массивами изготовим программу-шаблон. Она включает ввод данных из файла и вывод элементов двумерного массива в файл. Размеры двумерного массива вводятся из файла. В дальнейшем мы не будем приводить процедуры ввода и вывода двумерного массива, имея в виду этот шаблон:

{$R+}

Program Dv_massiv;

Const MaxN=10; MaxM=8;

Type TMyArray=Array[l..MaxN,1..МахМ] Of Integer;

Var A:TMyArray;

N,M:Integer;

Procedure TInit(Var v,w:Integer;Var X:TMyArray); Var i,j:Integer;

Begin

Assign(Input,'Input.Txt'); Reset (Input);

ReadLn(v,w);{*B первой строке файла записаны значения N и М.*}

For i:=1 То v Do

For j :=1 To w Do

Read(X[i, j ] ) ; Close(Input);

End;

Procedure TPrint(v,w:Integer;X:TMyArray);

Var i,j:Integer;

Begin Assign(Output,'Output.Txt');

ReWrite(Output);

For i:=1 To v Do

Begin

         For j:=1 To w Do Write(X[i,j],’ ‘);

WriteLn;

End;

Begin

TIni (N,M.A);

TPrint (N,M.A);

End.

 

В начало

Задача 1 . Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

Program Obmen;

 Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;

 Begin

  WRITE('Введите количество элементов в массиве: '); READLN(N);

 FOR I := 1 TO N DO

  FOR J := 1 TO N DO

  Begin

   WRITE('A[', I, ',', J, '] '); READLN(A[I, J])

  End;

 FOR I := 1 TO N DO

 Begin

  Max := A[I, 1]; Ind := 1;

   FOR J := 2 TO N DO

      IF A[I, J] > Max THEN

       Begin

        Max := A[I, J]; Ind := J

       End;

   Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp

  End;

     FOR I := 1 TO N DO

      Begin

       WriteLn;

       FOR J := 1 TO N Do Write(A[I, J] : 3);

      End; WriteLn

 End.

 

В начало

 

К оглавлению

Сайт управляется системой uCoz