Двумерные массивы

Вид материалаДокументы

Содержание


Перемещение по строке
Перемещение по столбцу
Описание двумерного массива Рассмотрим описание массива на конкретном примере
Заполнение по строке
Заполнение по столбцу
A: array [1..4,1..4] of integer
Поменять местами 1 и 3 строки
Подобный материал:
ДВУМЕРНЫЕ МАССИВЫ


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

Каждый элемент таблицы имеет два индекса, значения которых позволяют указать местоположение элемента (его координаты). В математике квадратные и прямоугольные таблицы часто называют матрицами. Первый индекс – это номер строки, который изменяется только с переходом на следующую строку; второй индекс – номер столбца. По таблицу, имеющую m строк и n столбцов, говорят, что она имеет размер m*n.


А[1,1]

А[1,2]

А[1,3]

А[1,4]

А[1,5]

А[1,6]

А[2,1]

А[2,2]

А[2,3]

А[2,4]

А[2,5]

А[2,6]

А[3,1]

А[3,2]

А[3,3]

А[3,4]

А[3,5]

А[3,6]


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

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

Перемещение по строке:

FOR i:=1 to m DO внешний цикл, изменяется номер строки



FOR j:=1 to n DO внутренний цикл, изменяется номер столбца



Перемещение по столбцу:

FOR j:=1 to n DO внешний цикл, изменяется номер столбца



FOR i:=1 to m DO внутренний цикл, изменяется номер строки


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

Рассмотрим описание массива на конкретном примере


Переменная А является двумерным массивом, имеющим 3 строки и 4 столбца


1

3

-6

7

8

-5

3

12

2

-7

8

10


В разделе переменных на языке Паскаль массив описывается следующим образом:

Var


A: array [1..3,1..4] of integer;

{все элементы массива являются целыми числами}


ОСНОВНЫЕ АЛГОРИТМЫ ДЛЯ РАБОТЫ С ДВУМЕРНЫМИ МАССИВАМИ
  1. Заполнение двумерного массива.

Массив А содержит 3 строки и 4 столбца, т.е. 3*4=12 элементов.

Заполнение по строке:

FOR i:=1 to 3 DO внешний цикл, изменяется номер строки

FOR j:=1 to 4 DO внутренний цикл, изменяется номер столбца

Read (A[i,j]);  заполнение с клавиатуры

Заполнение по столбцу:

FOR j:=1 to 4 DO внешний цикл, изменяется номер столбца

FOR i:=1 to 3 DO внутренний цикл, изменяется номер строки

Read (A[i,j]);  заполнение с клавиатуры



  1. Печать в виде таблицы.

FOR i:=1 to 3 DO

begin

FOR j:=1 to 4 DO

WRITE(A[i,j],’ ‘);  печатаем элементы строки,

не перемещая курсор

WRITELN; перемещаем курсор

End;
  1. Сумма элементов массива.



S:=0;

FOR i:=1 to 3 DO

FOR j:=1 to 4 DO

S:=S+A[i,j];


  1. Вычисление суммы элементов каждой строки и каждого столбца.

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

FOR i:=1 to 3 DO

begin

S:=0;

FOR j:=1 to 4 DO

S:=S+A[i,j];

WRITELN(‘сумма ‘,i,’ – строки=‘, S);

End;

Для того, чтобы перемещаться по строке мы меняем индекс j.

Сумма каждого столбца находится аналогично.
  1. Максимальный (минимальный) элемент массива.

Построим алгоритм поиска максимального элемента таким образом: введем три дополнительные переменные с именами max и Imax_m, Imax_n. Присвоим им начальные значения – переменной max значение первого элемента массива A[1,1], Imax_m - номер первой строки, Imax_n - номер первого столбца. Затем сравниваем каждый элемент с переменной max, если его значение оказывается больше, то присваиваем его переменной max, переменной Imax_m присваиваем индекс строки этого элемента и переменной Imax_n присваиваем индекс столбца этого элемента.

Max:=[1,1];

Imax_m:=1;

Imax_n:=1;

FOR i:=1 to 3 DO

FOR j:=1 to 4 DO

If A[i,j]>Max then begin Max:=A[i,j]; Imax_m:=i;

Imax_n:=j; end;

WRITELN(‘Max =‘, Max,’ строка=’,Imax_m,’ столбец=’,Imax_n);
  1. Поиск максимального (минимального) элементов каждой строки (столбца) и их индексов.

FOR i:=1 to 3 DO

begin

Max:=[i,1];

Imax_n:=1;

FOR j:=1 to 4 DO

If A[i,j]>Max then begin Max:=A[i,j]; Imax_n:=j; end;

WRITELN(‘Max ‘,i,’ – строки=‘, Max,’ его индекс=’,Imax_n);

End;

Задачи для самостоятельного решения:
  1. Заполнить массив A[1..2,1..5] целыми значениями с клавиатуры и вывести на экран в виде таблицы.
  2. Заполнить массив A[1..3,1..6] вещественными значениями с клавиатуры и вывести на экран в виде таблицы.
  3. Заполнить массив A[1..3,1..2] по формуле А[i,j]:=i+j и вывести на экран в виде таблицы.
  4. В массиве А[1..3,1..4] найти сумму отрицательных элементов.
  5. В массиве А[1..3,1..2] найти количество четных элементов.
  6. В массиве А[1..2,1..4] найти количество элементов, равных 0, 1 или 2.
  7. Определите среднее арифметическое четных элементов массива A[1..2,1..5].
  8. Найдите номер строки и столбца элемента массива A[1..3,1..4], равного 10.
  9. Вычислить сумму элементов каждого столбца массива A[1..2,1..5].
  10. Найти минимальный элемент каждого столбца массива A[1..4,1..5].
  11. Найти минимальный элемент среди отрицательных элементов массива А[1..3,1..4].
  12. Упорядочить массив по убыванию «методом пузырька».
  13. Найти сумму элементов того столбца двумерного массива, в котором расположился наибольший элемент (считаем, что он единственный).
  • Записать A[1..m,1..n] в B[1..m*n] построчно.

FOR i:=1 to m DO

FOR j:=1 to n DO

B[(i-1)*n+j]:=A[i,j]


  • Поменять в строках элементы в обратном порядке.

FOR i:=1 to m DO

FOR j:=1 to n DO

Begin C:=A[i,j]; A[i,j]:=A[i,n-j+1]; A[i,n-j+1]:=C end;


КВАДРАТНЫЕ МАТРИЦЫ


Объявим двумерный массив, количество строк которого совпадает с количеством столбцов.

Var


A: array [1..4,1..4] of integer;

{все элементы массива являются целыми числами}


А[1,1]

А[1,2]

А[1,3]

А[1,4]

А[2,1]

А[2,2]

А[2,3]

А[2,4]

А[3,1]

А[3,2]

А[3,3]

А[3,4]

А[4,1]

А[4,2]

А[4,3]

А[4,4]

Введем некоторые понятия:

главная диагональ: элементы А[1,1], A[2,2], A[3,3], A[4,4] (индексы элементов, расположенных на главной диагонали (i=j)); побочная диагональ элементы А[4,1], A[3,2], A[2,3], A[1,4] (сумма индексов элементов на 1 больше размерности строки (или столбца), т.е. i+j=4+1  в общем виде i+j=n+1).


-------

А[1,2]

А[1,3]

А[1,4]




---------

А[2,3]

А[2,4]







----------

А[3,4]










-----------

Элементы, расположенные над главной диагональю. Для индексов элементов, расположенных над главной диагональю выполняется отношение i

--------










А[2,1]

-------







А[3,1]

А[3,2]

-------




А[4,1]

А[4,2]

А[4,3]

---------

Элементы, расположенные под главной диагональю. Для индексов элементов, расположенных под главной диагональю выполняется отношение i>j.

ОСНОВНЫЕ АЛГОРИТМЫ ДЛЯ РАБОТЫ С КВАДРАТНЫМИ МАТРИЦАМИ
  1. СУММА

Сумма элементов главной диагонали

S:=0;

FOR i:=1 to n DO

S:=S+A[i,j];


Сумма элементов, стоящих ниже главной диагонали

S:=0;

FOR i:=1 to n DO

FOR j:=1 to i DO

S:=S+A[i,j];

Сумма элементов, стоящих выше главной диагонали

S:=0;

FOR i:=1 to n DO

FOR j:=i to n DO

S:=S+A[i,j];

Сумма элементов, стоящих выше побочной диагонали

S:=0;

FOR i:=1 to n DO

FOR j:=1 to n-i+1 DO

S:=S+A[i,j];



  1. Обмен

Поменять местами 1 и 3 строки


FOR j:=1 to n DO

Begin C:=A[1,j]; A[1,j]:=A[3,j]; A[3,j]:=C

end;

Поменять местами 1 и 2 столбцы

FOR i:=1 to n DO

Begin C:=A[i,1]; A[i,1]:=A[i,2]; A[i,2]:=C

end;



  1. Найти минимальный элемент побочной диагонали.

Min:=A[1,n];

FOR i:=1 to n DO

If A[i,n+1-i]


Задачи для самостоятельного решения:

  1. Заменить элементы главной диагонали матрицы на 5.
  2. Найти сумму элементов побочной диагонали матрицы.
  3. Найти сумму элементов, стоящих ниже побочной диагонали.
  4. Найти сумму элементов матрицы, не лежащих на главной диагонали.
  5. Поменять местами 3 и 4 столбец матрицы А[1..4,1..4].
  6. Поменять местами 2 и 4 строки матрицы А[1..4,1..4].
  7. В квадратной матрице размера 5*5 поменять местами столбец, содержащий наибольшее значение, со столбцом содержащим наименьшее значение (предполагаем, что эти элементы единственные).
  8. Найти максимальный элемент главной диагонали.