Есть задачи, в которых требуется обработать элементы главной или побочной диагонали квадратной матрицы, объявленной, например, так: const n=5; int A[n][n]; Структура циклов останется такой же, как при решении аналогичной задачи для одномерного массива. Например, для нахождения среднего значения главной диагонали необязательно писать два следующих вложенных цикла:
float Sum=0;
for (int i=0; i<n; i++)
for (int j=0; j< n; j++)
if ( i==j)Sum+=A[i][j];
Sum/=n;
Так как для элементов главной диагонали оба индекса одинаковы, то это можно выполнить компактнее с помощью одного цикла:
float Sum=0;
for (int i=0; i<n; i++)
Sum+=A[i][i];
Sum/=n;
Сравните с задачей нахождения этого же параметра в одномерном массиве.
Для обработки побочной диагонали, как и при решении некоторых других типов задач, необходимо найти зависимость второго индекса от первого. Легко видеть, что сумма индексов равна n-1. Поэтому второй индекс будет равен n-1-i, и соответствующая часть программы будет такой:
float Sum=0;
for (int i=0; i<n; i++)
Sum+=A[i][ n-1-i];
Sum/=n;
Верхний треугольник квадратной матрицы относительно главной диагонали — это те элементы, у которых i<j, если главная диагональ не включается, или i<=j, если включается. Аналогично определяется нижний треугольник относительно главной диагонали и треугольники относительно побочной диагонали.
Для обработки таких треугольников необходимо определить, как изменяются индексы. Анализируя, например, верхний треугольник, можно видеть, что в нулевой строке j изменяется от 0 до n-1, в первой строке — от 1 до n-1, во второй строке — от 2 до n-1 и так далее. Значит, в произвольной i-й строке индекс j изменяется от i до n-1. Поэтому, например, подсчёт количества нулевых элементов верхнего треугольника, включая и главную диагональ, будет выглядеть следующим образом:
int K0=0;
for (int i=0; i<n; i++)
for (int j=i; j< n; j++)
if (A[i][j] ==0) K0++;
Если диагональные элементы не надо анализировать, то заголовок внутреннего цикла будет таким:
for (int j=i+1; j< n; j++)…
Упражнение. Эту же задачу решить для нижнего (верхнего) треугольника относительно побочной диагонали.