Для обращения к элементу двумерного массива используют квадратные скобки, запись A[i,j] (A[i][j]) обозначает элемент массива A, расположенный на пересечении строки i и столбца j.
Для обработки элементов двумерного массива используются вложенные циклы
Паскаль |
Си |
for i:=1 to N do begin … for j:=1 to M do begin ... end; ... end; |
for (i=0; i<= n-1;i++) { … for (j=0;j<= m-1;j++) { … } … } |
Если необходимо выполнить обработку строки i в матрице из M столбцов, нужно использовать цикл, в котором меняется номер столбца j.
Если необходимо выполнить обработку столбца j в матрице из N строк, нужно использовать цикл, в котором изменяется номер строки i.
Например, приведем полное решение следующего задания:
Дан прямоугольный массив целых положительных чисел 20 х 25. Написать алгоритм поиска столбца с наименьшей суммой элементов. Вывести на печать номер столбца и сумму его элементов. Предполагается, что такой столбец один.
Решение:
Для формирования массива используем генератор случайных чисел. И обязательно организуем вывод полученного массива на экран.
Паскаль |
const n=20; m=25; var a:array[1..n,1..m] of integer; min, s, Nmin, i, j: integer; begin { формирование массива } randomize; for i:=1 to N do for j:=1 to m do a[i,j]:=random(100); {вывод полученного массива на экран} for i:=1 to N do begin for j:=1 to m do write(a[i,j]:3); writeln; end; {Подсчитываем сумму элементов первого столбца } s := 0; for i:=1 to n do s := s + a[i,1]; {Начальное значение для поиска минимума полагаем равным полученной сумме} min := s; Nmin := 1; {номеру столбца присваиваем 1 } for j:=2 to M do begin s := 0; {Подсчитываем сумму элементов столбца j} for i:=1 to n do s := s + a[i,j]; {Если сумма меньше минимума, заменяем минимум и номер столбца } if s < min then begin min := s; Nmin := j; end; end; writeln('stolbec ',Nmin,' summa ',Min); end. |
Си |
#include <stdio.h> #include <conio.h> #include <time.h> #define n 20 #define m 25 void main() { int a[n][m]; int min,s, Nmin, i, j; // формирование массива srand(time(NULL)); for (i=0; i<n; i++) for (j=0; j<m; j++) a[i][j]=rand() % 100; //вывод полученного массива на экран
|
Паскаль |
for (i=0; i<n; i++) { for (j=0; j<m; j++) printf(" %4d ",a[i][j]); printf("\n"); } // Подсчитываем сумму элементов первого столбца s= 0; for (i=0; i<n; i++) s = s + a[i][0]; // Начальное значение для поиска минимума полагаем равным полученной сумме min = s; Nmin = 1;// номеру столбца присваиваем 1
for (j=1; j<m; j++) { s = 0; //Подсчитываем сумму элементов столбца j for (i=0; i<n; i++) s = s + a[i][j]; // Если сумма меньше минимума, заменяем минимум и номер столбца if (s < min) { min = s; Nmin= j; } } printf("stolbec %d summa %d", Nmin, min ); } |