Конспект по теме: Двумерные массивы Учитель информатики Батракова Л. В

Вид материалаКонспект

Содержание


A, тогда к любой компоненте массива можно обратиться по адресу – A[i,j]
Описание двумерного массива
Type tm2=array
Type tm2=array
Const m=10; n=20
Заполнение по столбцам
Max:= A[1,1];  iMax:=1; jMax:=1
Список задач на двумерные массивы
Подобный материал:

Конспект по теме: Двумерные массивы

Учитель информатики Батракова Л.В.


Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный массив.


Двумерный массив можно представить в виде квадратной или прямоугольной  таблицы, состоящей из строк и столбцов. Аналогом в математике является матрица:



Размер двумерного массива - количество элементов в массиве M*N, где М- число строк, N- число столбцов (натуральные числа).

У любого массива должно быть имя. Пусть у массива будет имя A, тогда к любой компоненте массива можно обратиться по адресу – A[i,j] или A[i][j], где индекс i – номер строки (всегда на первом месте), а индекс j – номер столбца.


Квадратная матрица – матрица с равным числом строк и столбцов.

Порядок матрицы – число строк (столбцов) квадратной матрицы.

Для квадратной матрицы вводятся понятия главной и побочной диагонали, которые обладают следующими свойствами:
  • у элементов, лежащих на главной диагонали, номер строки и номер столбца совпадают, т.е. i=j.
  • у элементов, лежащих на побочной диагонали номер строки и номер столбца связаны следующим соотношением, если i – номер строки, то номер столбца j=N-i+1.





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

Тип описания массива может быть задан одним из способов:


1) Type tm1=array[ti2] of tk;

tm2=array[ti1] of tm1;

где tm1 – тип массива, ti2 – тип индекса, tk – тип компонент одномерного массива,

tm2 – тип массива, ti1 – тип индекса, tm1 – тип компонент двумерного массива

Из этого описания видно, что двумерный массив – это одномерный массив, у которого компоненты – одномерный массив.


2) Type tm2=array[ti1]of array[ti2] of tk;

Чаще тип задается в следующем виде:


3) Type tm2=array[ti1,ti2] of tk;

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

tk – тип компонент массива может быть любим типом, кроме файлового ( простым и сложным).


Так как массивы относятся к произвольным типам, то их можно описывать как через раздел TYPE так и через раздел VAR. Рассмотрим различные способы описания.


Например:


CONST M=10; N=20;

Type m1=array[boolean] of byte;

m2=array[char] of m1;

m3=array[1..20, 1..5] of integer;

m4= array [1..M, 1..N] of char ;

m5= array [1..30] of array [1..20] of real;


Var C:m2;

A:m3;

Mas:m4;

X:m4;

y: [1..5, 1..5] of integer ;

F: array [1..30] of array [1..20] of real;


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

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

А[1,1]

А[1,2]

А[1,3]

А[1,4]

А[1,5]

А[2,1]



















Для заполнения матрицы организуется наружный цикл по i, внутренний – по j (при условии, что i- строки, j –столбцы). При этом индекс строки i меняется медленнее индекса столбца j за счет того, что происходит постепенный перебор всех элементов строки, т.е. столбцов i-й строки.

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

А[1,1]

А[1,2]







А[2,1]









А[3,1]









A[4,1]










Заполнение двумерного массива возможно по строкам и столбцам, каждый из элементов можно вводить:
  1. с  клавиатуры;


Например:

Write(‘Введите число строк M= ‘); readLn (M);

Write(‘Введите число столбцов N= ‘); readLn (N);

for i:=1 to M do

begin

for j:=1 to N do

begin

write(‘Введите элемент A[',i,',',j,']=’);

read(A[i,j]);

end;

readLn;           

end;

  1. с  помощью генератора случайных чисел;


randomize;

writeLn(‘Матрица А:’);

FOR i:= 1 to M DO {наружный цикл по строкам}

begin

FOR j:=1 TO N DO {внутренний цикл по столбцам}

begin

A[i,j]:= random(10);

write(A[i,j]:3); {печатаем подряд всю строку}

end;


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


Вывод двумерного массива осуществляется аналогичным образом.

{Вывод матрицы}

writeLn(‘Результирующая матрица A:’);

for i:=1 to M do               

begin

for j:=1 to N do

write(A[i,j],’ ‘);

writeLn;

end;


Примеры программ


1. Дана матрица A( N ´ M), состоящая из натуральных чисел. Определить ее максимальный элемент и его индексы.

program pr_1; {Max элемент матрицы}

CONST t= 10; r=10;

var

A: array [1..t, 1..r] of INTEGER;

i,j: byte;

n,m, Max, iMax, jMax: integer;

BEGIN

randomize;

write(‘Введите число строк N=’); readLn(N);

write(‘Введите число столбцов M=’); readLn(M);

FOR i:= 1 to N DO {заполнение массива генерированием случайных чисел}

begin

FOR j:=1 TO M DO

begin

A[i,j]:= random(10);

write(A[i,j]:3);

end;

writeLn;

end;

Max:= A[1,1];  iMax:=1; jMax:=1; {принимаем начальное значение  Мах = значению 1-го эл-та}

For i:=1 to N do

For j:=1 to M do

IF A[i,j] > Max then

begin

Max:= A[i,j]; iMax:=i; jMax:=j;

End;

WriteLn(‘Max= ’ ,Max,’ в строке:  ‘,imax, ‘ столбце :’, jmax);

readLn;

END.


2. Подсчитать суммы элементов всех  строк прямоугольной целочисленной матрицы A(M*N) и занести результаты в одномерный массив S(M). Массивы распечатать.

program pr_2;{сумма элементов по строкам}

VAR i,j,n,m: byte;

Sum:integer;

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

S: array[1..100] of integer;

BEGIN

Write(‘Введите число строк M= ‘); readLn (M);

Write(‘Введите число столбцов N= ‘); readLn (N);

for i:=1 to M do

begin

Sum := 0; {начальное значение суммы по строке}

for j:=1 to N do

begin

write(‘Введите элемент A[',i,',',j,']=’); readLn(A[i,j]);

Sum:= Sum + A[i,j]; {суммирование по строке}

end;

writeLn;             {пропуск строки}

S[i]:= Sum; {заполнение массива  S}

end;

writeLn(‘Массив S:’);

for i:=1 to m do

write( S[i]:4);

writeLn;

readln;

END.


Список задач на двумерные массивы

1. Дана матрица вещественных чисел размера m x n. Найти сумму наименьших значений элементов ее строк.

2. Дана матрица вещественных чисел размера m x n. Упорядочить ее строки по убыванию суммы их элементов.

3. Даны действительная квадратная матрица порядка n и натуральные числа i,j (1<=i<=n,1<=j<=n). Из матрицы удалить i-ю строку и j-ый столбец.

4. Даны действительная квадратная матрица порядка n и натуральные числа i,j (1<=i<=n,1<=j<=n). Поменять в матрице местами i-ый и j-ый столбцы.

5. Дана целочисленная квадратная матрица порядка n. Найти номера строк, все элементы которых нули.

6. Дан двумерный массив 7 * 9 элементов. Составить одномерный массив, состоящий из минимальных элементов строк исходного двумерного массива.

7. Дан двумерный массив 8 * 1O элементов. Составить одномерный массив, состоящий из максимальных элементов столбцов исходного двумерного массива.

8. Дан двумерный массив 9 * 12 элементов. Составить одномерный массив, состоящий из отрицательных элементов столбцов исходного двумерного.

9. Дана матрица вещественных чисел размера m x n. Упорядочить ее строки по возрастанию их наибольших элементов.

10. Дана матрица вещественных чисел размера m x n. Строку, содержащую максимальный элемент массива, поменять со строкой, содержащей минимальный элемент.

11. В данной квадратной целочисленной матрице порядка n указать индексы всех элементов с наибольшим значением.

12. Дана действительная матрица размера m x n . Найти среднее арифметическое наибольшего и наименьшего значений ее элементов.

13. Дана действительная матрица размера m x n . Найти сумму наибольших значений элементов ее строк.
  1. Подсчитать количество положительных элементов в каждом столбце матрицы размером

m х n, элементы которой вводятся с клавиатуры.
  1. Подсчитать количество отрицательных элементов в каждой строке матрицы размером

m х n, элементы которой задаются с помощью датчика случайных чисел.
  1. Подсчитать количество четных элементов в каждом столбце матрицы размером m х n, элементы которой задаются с помощью датчика случайных чисел.
  2. Подсчитать количество четных отрицательных элементов в матрице размером m х n, элементы которой вводятся с клавиатуры.

18. Найти сумму элементов в каждом столбце массива размером m х n, элементы которого задаются датчиком случайных чисел.

19. Найти произведение элементов в каждом столбце массива размером m х n, элементы которого вводятся с клавиатуры.

Найти произведение элементов в каждой строке массива размером n х m, элементы которого вводятся с клавиатуры.

20. Найти произведение диагональных элементов массива размером n х m, элементы которого вводятся с клавиатуры.