Двумерные массивы
Вид материала | Документы |
- Лекции раздел I массивы, 23.1kb.
- Двумерные массивы, 69.42kb.
- Краткий курс лекций "Основы программирования на языке Паскаль", 291.49kb.
- Тема: Массивы, 422.12kb.
- Программа на языке Паскаль выглядит так: Program pr1, 37.38kb.
- Тема: "Двумерные массивы", 274.91kb.
- Двумерные массивы, 25.69kb.
- Конспект по теме "двумерные массивы", 20.17kb.
- Обработки данных, 302.31kb.
- Урок информатики по теме, 49.9kb.
ДВУМЕРНЫЕ МАССИВЫ
Двумерные массивы условно можно изобразить в виде таблицы. С информацией, представленной в виде таблицы, мы очень часто встречаемся в различных областях знаний – экономике, статистике, математике, физике, химии и т.д.
Каждый элемент таблицы имеет два индекса, значения которых позволяют указать местоположение элемента (его координаты). В математике квадратные и прямоугольные таблицы часто называют матрицами. Первый индекс – это номер строки, который изменяется только с переходом на следующую строку; второй индекс – номер столбца. По таблицу, имеющую 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;
{все элементы массива являются целыми числами}
ОСНОВНЫЕ АЛГОРИТМЫ ДЛЯ РАБОТЫ С ДВУМЕРНЫМИ МАССИВАМИ
- Заполнение двумерного массива.
Массив А содержит 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]); заполнение с клавиатуры |
- Печать в виде таблицы.
FOR i:=1 to 3 DO
begin
FOR j:=1 to 4 DO
WRITE(A[i,j],’ ‘); печатаем элементы строки,
не перемещая курсор
WRITELN; перемещаем курсор
End;
- Сумма элементов массива.
…
S:=0;
FOR i:=1 to 3 DO
FOR j:=1 to 4 DO
S:=S+A[i,j];
…
- Вычисление суммы элементов каждой строки и каждого столбца.
Мы используем базовый алгоритм вычисления суммы элементов одномерного массива (у нас это будут строки) и повторим его столько раз, сколько имеется строк.
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.
Сумма каждого столбца находится аналогично.
- Максимальный (минимальный) элемент массива.
Построим алгоритм поиска максимального элемента таким образом: введем три дополнительные переменные с именами 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);
- Поиск максимального (минимального) элементов каждой строки (столбца) и их индексов.
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;
Задачи для самостоятельного решения:
- Заполнить массив A[1..2,1..5] целыми значениями с клавиатуры и вывести на экран в виде таблицы.
- Заполнить массив A[1..3,1..6] вещественными значениями с клавиатуры и вывести на экран в виде таблицы.
- Заполнить массив A[1..3,1..2] по формуле А[i,j]:=i+j и вывести на экран в виде таблицы.
- В массиве А[1..3,1..4] найти сумму отрицательных элементов.
- В массиве А[1..3,1..2] найти количество четных элементов.
- В массиве А[1..2,1..4] найти количество элементов, равных 0, 1 или 2.
- Определите среднее арифметическое четных элементов массива A[1..2,1..5].
- Найдите номер строки и столбца элемента массива A[1..3,1..4], равного 10.
- Вычислить сумму элементов каждого столбца массива A[1..2,1..5].
- Найти минимальный элемент каждого столбца массива A[1..4,1..5].
- Найти минимальный элемент среди отрицательных элементов массива А[1..3,1..4].
- Упорядочить массив по убыванию «методом пузырька».
- Найти сумму элементов того столбца двумерного массива, в котором расположился наибольший элемент (считаем, что он единственный).
- Записать 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.
ОСНОВНЫЕ АЛГОРИТМЫ ДЛЯ РАБОТЫ С КВАДРАТНЫМИ МАТРИЦАМИ
- СУММА
-
Сумма элементов главной диагонали
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 и 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;
- Найти минимальный элемент побочной диагонали.
Min:=A[1,n];
FOR i:=1 to n DO
If A[i,n+1-i]
Задачи для самостоятельного решения:
- Заменить элементы главной диагонали матрицы на 5.
- Найти сумму элементов побочной диагонали матрицы.
- Найти сумму элементов, стоящих ниже побочной диагонали.
- Найти сумму элементов матрицы, не лежащих на главной диагонали.
- Поменять местами 3 и 4 столбец матрицы А[1..4,1..4].
- Поменять местами 2 и 4 строки матрицы А[1..4,1..4].
- В квадратной матрице размера 5*5 поменять местами столбец, содержащий наибольшее значение, со столбцом содержащим наименьшее значение (предполагаем, что эти элементы единственные).
- Найти максимальный элемент главной диагонали.