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

advertisement
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный
массив.
Двумерный массив можно представить в виде квадратной или прямоугольной таблицы, состоящей из строк и
столбцов. Аналогом в математике является матрица:
Размер двумерного массива - количество элементов в массиве 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 – тип компонент двумерного массива
Из этого описания видно, что двумерный массив – это одномерный массив, у которого компоненты – одномерный
массив.
1
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
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]
А[2,1]
…
А[1,2]
…
…
А[1,3]
…
…
А[1,4]
…
…
А[1,5]
…
…
Для заполнения матрицы организуется наружный цикл по i, внутренний – по j (при условии, что i- строки, j –
столбцы). При этом индекс строки i меняется медленнее индекса столбца j за счет того, что происходит постепенный
перебор всех элементов строки, т.е. столбцов i-й строки.
Заполнение по столбцам:
А[1,1]
А[2,1]
А[3,1]
A[4,1]
А[1,2]
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
Заполнение двумерного массива возможно по строкам и столбцам, каждый из элементов можно вводить:
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;
2
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
readLn;
end;
2
с помощью генератора случайных чисел;
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.
3
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
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 . Найти сумму наибольших значений элементов ее строк.
14. Подсчитать количество положительных элементов в каждом столбце матрицы размером
m х n, элементы которой вводятся с клавиатуры.
15. Подсчитать количество отрицательных элементов в каждой строке матрицы размером
m х n, элементы которой задаются с помощью датчика случайных чисел.
16. Подсчитать количество четных элементов в каждом столбце матрицы размером m х n, элементы которой
задаются с помощью датчика случайных чисел.
4
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
17. Подсчитать количество четных отрицательных элементов в матрице размером m х n, элементы которой
вводятся с клавиатуры.
18. Найти сумму элементов в каждом столбце массива размером m х n, элементы которого задаются датчиком
случайных чисел.
19. Найти произведение элементов в каждом столбце массива размером m х n, элементы которого вводятся с
клавиатуры.
Найти произведение элементов в каждой строке массива размером n х m, элементы которого вводятся с клавиатуры.
20. Найти произведение диагональных элементов массива размером n х m, элементы которого вводятся с
клавиатуры.
5
Download