Рассмотрим более сложные задачи обработки двухмерных масивов.
В этом материале будем обрабатывать отдельно строки массива. (Для столбцов достаточно поменять местами индексы)
Какие же задачи мы будем решать?
1. Найти сумму элементов каждой строки и заполнить результатом другой массив, и вывести результат в порядке возрастания.
Решение задачи сводиться в решению следующих проблем.
— заполнение массива случайными числами
— нахождение суммы элементов
— занесение результата (сумма элементов строки) в другой массив
— сортировка массива-результата
— вывод на экран
В задаче реализован принцип «защиты от дурака»
const Col = 10; Row = 10; var n, m, i, j, sum, Temp: integer; Matrix: array[1..Row, 1..Col] of integer; {исходный массив} Solution: array[1..Row]of integer;{массив для результата} BEGIN randomize; write('Количество строк N='); readln(n);if n>Row then n := Row; write('Количество столбцов M='); readln(m);if m>Col then m := Col; writeln('Исходная матрица:'); {заполнение матрицы} for i := 1 to N do begin for j := 1 to M do begin Matrix[i, j] := random(20); write(Matrix[i, j]:4); end; writeln; end; {нахождение суммы по строкам} for i := 1 to N do begin Sum := 0; for j := 1 to M do begin Sum := Sum + Matrix[i, j]; {считаем суммы в строках} end; Solution[i] := sum; {создаем из них массив} end; Writeln('Вывод массива сумм:'); for i := 1 to n do writeln('Строка ', i:3, Solution[i]:4); {сортировка по возрастанию)} for i := 1 to n - 1 do for j := i + 1 to n do if Solution[i] > Solution[j] then begin Temp := Solution[i]; Solution[i] := Solution[j]; Solution[j] := Temp; end; writeln('Результат:'); for i := 1 to n do write(Solution[i]:3); readln END.
Найти минимальный элемент массива, указать номер строки, в которой он находится, и просчитать сумму элементов этой строки
const Col = 10; Row = 10; var n, m, i, j, sum, RowMin, Min: integer; Matrix: array[1..Row, 1..Col] of integer;{исходный массив} begin randomize; write('Количество строк N='); readln(n);if n>Row then n := Row; write('Количество столбцов M='); readln(m);if m>Col then m := Col; writeln('Исходная матрица:'); {заполнение матрицы} for i := 1 to N do begin for j := 1 to M do begin Matrix[i, j] := random(20); write(Matrix[i, j]:4); end; writeln; end; {нахождение минимального элемента матрицы} min := Matrix[1, 1]; Rowmin := 1; for i := 1 to N do for j := 1 to M do if Matrix[i, j] < min then begin min := Matrix[i, j]; RowMin := i; end; writeln('Минимум=', min:3, ' в строке=', RowMin); {нахождение суммы элементов в нужной строке} sum := 0; for j := 1 to m do sum := sum + Matrix[RowMin, j]; writeln('Сумма=', sum); END.
Найти отдельно суммы элементов строк и столбцов, и вывести их на экран
const Col = 10; Row = 10; var n, m, i, j, sum, RowMin, Min: integer; Matrix: array[1..Row, 1..Col] of integer;{исходный массив} begin randomize; write('Количество строк N='); readln(n);if n>Row then n := Row; write('Количество столбцов M='); readln(m);if m>Col then m := Col; writeln('Исходная матрица:'); {заполнение матрицы} for i := 1 to N do begin for j := 1 to M do begin Matrix[i, j] := random(20); write(Matrix[i, j]:4); end; writeln; end; {Поиск суммы элементов по строкам} for i:=1 to n do begin sum:=0; for j:=1 to m do sum:=sum+Matrix[i,j]; writeln('Сумма элементов ',i,'-й строки = ',sum); end; writeln; {Поиск суммы элементов по столбцам} for j:=1 to m do begin sum:=0; for i:=1 to n do sum:=sum+Matrix[i,j]; writeln('Сумма элементов ',j,'-го столбца = ',sum); end; readln; end.
В массиве найти минимальные значения в каждой строке, и среди них выбрать максимум
{Максимум среди минимумов строк} const Col = 10; Row = 10; var n, m, i, j, MaxFromMin, Min: integer; Matrix: array[1..Row, 1..Col] of integer;{исходный массив} Temp_min: array[1..Row] of integer; BEGIN randomize; write('Количество строк N='); readln(n);if n > Row then n := Row; write('Количество столбцов M='); readln(m);if m > Col then m := Col; writeln('Исходная матрица:'); {заполнение матрицы} for i := 1 to N do begin for j := 1 to M do begin Matrix[i, j] := random(20); write(Matrix[i, j]:4); end; writeln; end; {нахождение минимальных элементов в строках} for i := 1 to N do begin min := Matrix[i, 1]; for j := 1 to M do if Matrix[i, j] < min then begin min := Matrix[i, j]; end; Temp_min[i] := min; end; Writeln('Минимальные элементы в строках:'); for i := 1 to N do write(Temp_min[i]:3); writeln; {нахождение максимального элемента среди минимумов} MaxFromMin := Temp_min[1]; for i := 2 to N do if Temp_min[i] > MaxFromMin then MaxFromMin := Temp_min[i]; writeln('Максимальный среди минимальных=', MaxFromMin); END.
В двухмерном массиве отсортировать значения каждой строки по возрастанию
Сортировка по строкам} const Col = 10; Row = 10; var n, m, i, j, k, Temp: integer; Matrix: array[1..Row, 1..Col] of integer;{исходный массив} BEGIN randomize; write('Количество строк N='); readln(n);if n > Row then n := Row; write('Количество столбцов M='); readln(m);if m > Col then m := Col; writeln('Исходная матрица:'); {заполнение матрицы} for i := 1 to N do begin for j := 1 to M do begin Matrix[i, j] := random(20); write(Matrix[i, j]:4); end; writeln; end; {Сортировка элементов по строкам} for i := 1 to N do for j := 1 to M do for k := 1 to m - 1 do if (Matrix[i, k] < Matrix[i, k + 1]) then begin Temp := Matrix[i, k]; Matrix[i, k] := Matrix[i, k + 1]; Matrix[i, k + 1] := Temp; end; Writeln('Сортирован по строкам'); for i := 1 to N do begin for j := 1 to M do begin write(Matrix[i, j]:4); end; writeln; end; END.