- •Волгоград 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.4. Алгоритмы обработки элементов каждого столбца матрицы
При решении задач подобного типа необходимо рассматривать матрицу по столбцам (т.е. вначале должен быть задан цикл по переменной j, а затем по переменной i).
Начальные значения вычисляемых переменных задаются для каждого столбца, поэтому при переходе к новому столбцу, т.е. между циклами, необходимо поместить соответствующие операторы присваивания.
В ответе получается столько же значений, сколько в матрице столбцов. Результат для каждого столбца окончательно вычисляется при завершении каждого столбца и может быть обработан по условию задачи между циклами (после завершения цикла по переменной i).
Н а рис.37 представлен алгоритм нахождения суммы элементов каждого столбца матрицы X и вывод этих сумм на экран. Ниже приведены фрагменты программ, иллюстрирующие этот алгоритм.
…
for j:=1 to M do
begin
S:=0;
for I:=1 to N do
S:=S+X[ i , j ];
writeln(‘S= ‘ ,S);
end;
Рис. 37.
На рис.38 представлен алгоритм нахождения произведения четных элементов в каждом столбце матрицы X и cохранение найденных значений в одномерном массиве Y.
Т.к. количество элементов в массиве Y совпадает с количеством столбцов в матрице X, то для нумерации элементов в массиве Y воспользуемся переменной J. Размер сформированного массива будет равен количеству столбцов матрицы X (т.е. переменной M).
Н иже приведен фрагмент программы, иллюстрирующий этот алгоритм.
• • •
for j:= 1 to M do
begin
P:=1;
for i :=1 to N do
if X [ I , j ] mod 2 = 0 then
P := P * X [ I , j ];
Y[ j j:=P;
end;
writeln(‘Сформированный массив Y’);
For I:=1 to M do
Рис.38 Write(Y[ i ]);
Writeln;
• • •
На рис.39 приведён алгоритм увеличения в 2 раза максимальных элементов столбцов матрицы X. Ниже приведён фрагмент программы к этому алгоритму.
• • •
for j:=1 to M do
begin
МАХ:=Х[1,j];
Imax:=1;
for i:=2 to N do
if MAX<X[i,j] then
begin
MAX:=X[i,j];
Imax:= i;
end;
X [Imax, j ]: =X [Imax, j ] *2;
end;
…
Рис.39
3.2.5. Обработка элементов матрицы, расположенных в четных и нечетных строках или столбцах
Принципиальным отличием этих алгоритмов от алгоритмов обработки каждой строки или каждого столбца матрицы (п.п. 3.2.5.) является то, что в этом случае в циклах для обработки строк (столбцов) матрицы шаг изменения переменной цикла будет равен 2.
Рассмотрим следующую задачу: требуется найти и распечатать суммы элементов каждой четной строки матрицы А. В этом случае для задания цикла по строкам воспользуемся циклом ПОКА, который позволяет изменять переменную цикла с шагом 2 (рис.40).
i :=2;
While I<=N do
begin
S:=0;
for j: =1 to M do
S:=S+X[ i , j ];
writeln(‘S= ‘ ,S);
I:=I+2;
end;
Рис. 40
Аналогично найдем количество положительных элементов в каждом нечетном столбце (рис.41).
j:=1
While j<=M do
begin
k=0;
for I:=1 to N do
k::=k+1;
writeln(‘k= ‘ ,k);
j:=j+2;
Рис. 41 end;
В случае, если результаты обработки элементов четных или нечетных строк (столбцов) необходимо сохранить в одномерном массиве, то для нумерации элементов этого массива необходимо использовать дополнительную переменную. Для примера запишем в массив Y максимальные элементы каждой нечетной строки матрицы Х (рис.42).
Рис. 42
K:=0;{переменная для индексации элементов массива Y}
i:=1;
While I<=N do
begin
max:=X[I,1];
for j: =2 to M do
if X[I, j ] > max then
max:=X [ I , j ];
k:=k+1;
Y[k]:=max;
I:=I+2;
end;
writeln (‘Сформированный массив Y’);
For I:=1 to k do
Write(Y[i]);
Writeln;