Конспект по теме: Двумерные массивы Учитель информатики Батракова Л. В
Вид материала | Конспект |
- Конспект по теме: Одномерные массивы Учитель информатики Батракова, 270.14kb.
- Урок информатики по теме, 49.9kb.
- Конспект по теме "двумерные массивы", 20.17kb.
- Конспект по теме: Множества в Паскале Учитель информатики: Батракова, 204.91kb.
- Лекции раздел I массивы, 23.1kb.
- Двумерные массивы, 90.55kb.
- Конспект по теме: введение в язык программирования Паскаль Учитель информатики Батракова, 271.14kb.
- Тема: Массивы, 422.12kb.
- Двумерные массивы, 69.42kb.
- Краткий курс лекций "Основы программирования на языке Паскаль", 291.49kb.
Конспект по теме: Двумерные массивы
Учитель информатики Батракова Л.В.
Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный массив.
Двумерный массив можно представить в виде квадратной или прямоугольной таблицы, состоящей из строк и столбцов. Аналогом в математике является матрица:
Размер двумерного массива - количество элементов в массиве 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] | … | … | … | … |
Заполнение двумерного массива возможно по строкам и столбцам, каждый из элементов можно вводить:
- с клавиатуры;
Например:
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;
- с помощью генератора случайных чисел;
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 . Найти сумму наибольших значений элементов ее строк.
- Подсчитать количество положительных элементов в каждом столбце матрицы размером
m х n, элементы которой вводятся с клавиатуры.
- Подсчитать количество отрицательных элементов в каждой строке матрицы размером
m х n, элементы которой задаются с помощью датчика случайных чисел.
- Подсчитать количество четных элементов в каждом столбце матрицы размером m х n, элементы которой задаются с помощью датчика случайных чисел.
- Подсчитать количество четных отрицательных элементов в матрице размером m х n, элементы которой вводятся с клавиатуры.
18. Найти сумму элементов в каждом столбце массива размером m х n, элементы которого задаются датчиком случайных чисел.
19. Найти произведение элементов в каждом столбце массива размером m х n, элементы которого вводятся с клавиатуры.
Найти произведение элементов в каждой строке массива размером n х m, элементы которого вводятся с клавиатуры.
20. Найти произведение диагональных элементов массива размером n х m, элементы которого вводятся с клавиатуры.