Сумма диагонали в двумерном массиве - PullRequest
2 голосов
/ 02 марта 2011
for (row=0; row<SIZE; row++)
    {
        for (col=0; col<SIZE; col++)
        {
            if (row == 0 && col == 0) {
                answer+=my_data[row][col];
            }
            else if ((row)/(col) == 1) //1 is slope of array
            {
                answer+=my_data[row][col];
            }
        }
    }
    printf("The diagonal sum of the 8x8 array is: %i\n",answer);

начиная с [0,0] и заканчивая [8,8]

"Суммируйте диагональные значения в массиве 8x8, начиная с [0,0]"

Я понимаю, что могу сделать один цикл for, так как форма всего 1: 1, но как бы я это сделал на тот случай, если мне нужно будет сложить диагональный массив 8x10?

Ответы [ 6 ]

7 голосов
/ 02 марта 2011

Диагональные элементы и основная диагональ определены только для квадратной матрицы.

if rowcount == colcount
  sum = 0
  for i = 0 to rowcount
    sum += matrix[i][i]
  end-for
else
  print Diagonal sum not defined
end-if

Для неквадратной матрицы, если вы хотите суммировать элементы в позиции с одинаковым номером строки и столбца, вы можете сделать:

sum = 0
for i = 0 to min(rowcount,colcount)
  sum += matrix[i][i]
end-for
print sum
1 голос
/ 02 марта 2011

Зависит от того, как вы будете определять диагональные элементы. Если мы определим диагональные элементы как - ячейки, через которые диагональная линия проходит где-то около центра ячейки , то диагональные элементы матрицы:

enter image description here

(0,0); (1,0); (2,1); (3,1); (4,2); (5,2) будут полностью действительными.

0 голосов
/ 29 марта 2014

include

int main () {

int a [10] [10], i, j, sum = 0, m, n;

printf ("\ nВведите строку и столбец матрицы:");scanf ("% d% d", & m, & n);

printf ("\ nВведите элементы матрицы:");

0 голосов
/ 02 марта 2011

Я бы предпочел игнорировать лишние строки или столбцы, если они не квадратные;это кажется наиболее разумным подходом, хотя это всего лишь предположение, поскольку диагональ неквадратной матрицы не определена, но, поскольку вы спрашиваете о 2-мерном массиве вместо матрицы, я предполагаю контекстВопрос заключается в программировании, а не в линейной алгебре.

Для этого вы можете получить минимальную длину строки и столбца, а затем выполнить итерацию от 0 до этой минимальной длины:

diag_len = min (row_size, col_size);

for (int i = 0; i < /* or <= */ diag_len; i++) {
  answer += my_data[i][i];
}

Это работает как в квадрате, так и в случае квадрата с потерями.Ваш пример кода заканчивается с учетом координат каждой ячейки, что бесполезно, если вы знаете, что заботитесь только о тех случаях, когда row == col.(Это также устраняет необходимость в особом случае, когда строки и столбцы равны 0 и , что позволяет избежать деления, что является более медленной работой ЦП, чем сложение.)

0 голосов
/ 02 марта 2011

Кодаддикт прав;только квадратные матрицы имеют диагональные элементы.Я полагаю, вы хотите добавить элементы, где rownum == colnum?

0 голосов
/ 02 марта 2011

Итак, основная проблема здесь в том, каково определение диагональных элементов, если это не квадратная матрица. Если это квадратная матрица, то это должно быть RowCount == ColCount. Но что, если это не квадратная матрица ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...