
- •Волгоград 2006
- •3. Двумерные массивы (матрицы) 24
- •3.1. Объявление двумерных массивов 24
- •3.2. Решение задач с использованием двумерных массивов 25
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями 39
- •1. Общие понятия
- •2. Одномерные массивы (векторы)
- •2.1. Объявление одномерных массивов
- •2.2. Типовые алгоритмы обработки одномерных массивов
- •2.2.1. Ввод одномерного массива в память компьютера
- •2.2.2. Вывод массива на экран
- •2.2.3. Подсчёт суммы, произведения, количества элементов одномерного массива, удовлетворяющих заданному условию
- •2.2.4 Поиск значений среднего арифметического и среднего геометрического элементов массива
- •2.2.5. Обработка элементов одномерного массива, имеющих чётные индексы
- •2.2.6. Формирование нового одномерного массива из элементов другого одномерного массива
- •2.2.7. Нахождение максимального (минимального) элемента одномерного массива
- •2.2.9. Сортировка элементов массива
- •3. Двумерные массивы (матрицы)
- •3.1. Объявление двумерных массивов
- •3.2. Решение задач с использованием двумерных массивов
- •3.2.1. Ввод и вывод на экран двумерного массива
- •3.2.2. Алгоритмы обработки матрицы в целом
- •3.2.3. Алгоритмы обработки отдельных строк или столбцов матрицы
- •3.2.4. Алгоритмы обработки элементов каждой строки матрицы
- •3.2.4. Алгоритмы обработки элементов каждого столбца матрицы
- •3.2.5. Обработка элементов матрицы, расположенных в четных и нечетных строках или столбцах
- •3.2.5. Обработка элементов главной диагонали
- •3.2.6. Обработка элементов побочной диагонали
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями
- •3.2.8. Транспонирование матрицы
- •Иерархическая структура программы
- •Структура программы, использующей подпрограммы
- •Локальные и глобальные идентификаторы
- •Формальные и фактические параметры
- •Способы передачи параметров в подпрограммы
- •Подпрограммы-процедуры Описание процедуры
- •Вызов процедуры
- •Примеры использования подпрограмм-процедур
- •Функции Описание функции
- •Вызов функции
- •Примеры использования подпрограмм-функций
- •Пример решения задачи с использованием подпрограмм
- •Список рекомендуемой литературы
- •Обработка массивов
- •400131 Волгоград, пр. Ленина, 28.
- •400131 Волгоград, ул. Советская,35.
3.2.2. Алгоритмы обработки матрицы в целом
В задачах подобного вида результатом является единственное значение. Поэтому начальные значения вычисляемым переменным присваиваются один раз в начале алгоритма, до организации циклов обработки элементов массива.
На рис.27 показан алгоритм вычисления суммы элементов матрицы. Начальное значение сумме S=0 присваивается до начала суммирования элементов. Затем обработка элементов массива идёт по тому же принципу, что и в предыдущем пункте.
…
S:=0;
for i:=1 to N do
for j:=1 to M do
S := S+X[i,j];
writeln(‘S= ‘,S);
…
Рис.27
Также рассуждаем и при нахождении максимального элемента матрицы (рис.28). В качестве начального значения максимума принимаем её первый элемент, в качестве начальных значений координат максимума — единицы. Затем поочерёдно сравниваем максимум со всеми элементами матрицы построчно и запоминаем координаты вновь принятого за максимум элемента. При завершении обоих циклов максимум считается окончательно найденным и может быть обработан по условию задачи. Ниже приведены фрагменты программ, иллюстрирующие рис. 29.
…
MAX := X[1,1];
Imax:=1;
Jmax:=1;
For I:=1 to N do
For j:=1 to M do
If MAX < X[I,j] then
Begin
MAX:= X[I,j];
Imax :=I;
Jmax := j;
End;
Writeln(‘max= ‘,MAX);
…
Рис.29
3.2.3. Алгоритмы обработки отдельных строк или столбцов матрицы
Алгоритмы обработки отдельной строки или столбца матрицы почти не отличаются от алгоритмов обработки элементов одномерного массива.
Например, найдем сумму элементов в первой строке матрицы А. Для этого зададим начальное значение суммы S=0, и организуем цикл для перебора элементов первой строки. Нужно помнить, что каждая строка матрицы содержит столько же элементов, сколько в этой матрице столбцов (смотри алгоритм на рис.30).
S:=0;
I:=1;
For J:=1 to M do
S:=S+A[i,j];
Рис.30
Этот
же алгоритм можно было записать следующим
образом (рис.31):
S:=0;
For J:=1 to M do
S:=S+A[1,j];
Рис.31
Теперь найдем произведение четных элементов в последнем столбце матрицы. Для этого зададим начальное значение произведения P=1, и организуем цикл для перебора элементов последнего столбца. Каждый столбец матрицы содержит столько же элементов, сколько в этой матрице строк (алгоритм представлен на рис.32).
P:=1;
J:=M;
For I:=1 to N do
P:=P*A[i,j];
Рис.32
Этот же алгоритм можно было записать следующим образом (рис.33):
P:=1;
For I:=1 to N do
P:=P*A[i,M];
Рис.33
3.2.4. Алгоритмы обработки элементов каждой строки матрицы
При решении задач подобного типа необходимо рассматривать матрицу по строкам (т.е. вначале должен быть задан цикл по переменной i, а затем по переменной j).
Начальные значения вычисляемых переменных задаются для каждой строки, поэтому при переходе к новой строке, т.е. между циклами, необходимо поместить соответствующие операторы присваивания.
В ответе получается столько же значений, сколько в матрице строк. Результат для каждой строки окончательно вычисляется при завершении каждой строки и может быть обработан по условию задачи между циклами (после завершения цикла по переменной j).
На рис.34 представлен алгоритм нахождения суммы элементов каждой строки матрицы X и вывод этих сумм на экран. Ниже приведены фрагменты программ, иллюстрирующие этот алгоритм.
…
for i:=1 to N do
begin
S:=0;
for j: =1 to M do
S:=S+X[ i , j ];
writeln(‘S= ‘ ,S:6:2);
end;
Рис. 34
На рис.35 представлен алгоритм нахождения произведения нечетных элементов в каждой строке матрицы X и cохранение найденных значений в одномерном массиве Y.
Т.к. количество элементов в массиве Y совпадает с количеством строк в матрице X, то для нумерации элементов в массиве Y воспользуемся переменной I. Размер сформированного массива будет равен количеству строк матрицы X (т.е. переменной N). Ниже приведен фрагмент программы, иллюстрирующий этот алгоритм.
…
for i:= 1 to N do
begin
P:=1;
for j: =1 to M do
if odd (X[I,j]) then
P:=P*X[I,j];
Y[i]:=P;
end;
writeln(‘Сформированный массив Y’);
For I:=1 to N do
Write(Y[i]);
Writeln;
Рис. 35
Н
а
рис.36 приведён алгоритм вычисления
максимума каждой строки матрицы X
и
замена
его нулём.
for i:=l to N do
begin
MAX:=X[i,1] ;{за максимум берем первый элемент в I-ой строке}
Jmax:=1;
for j:=2 to M do
if X[I,j] > MAX then
begin
MAX:=X[i,j];
Jmax:=j
end;
X[i,Jmax] :=0;
end;
Рис.36