Расчет и печать сумм диагоналей матрицы - PullRequest
0 голосов
/ 15 декабря 2018

Это программа, которая должна вычислить сумму всех диагоналей в матрице и затем распечатать их.

отл.если матрица

1 2 3 4 5
2 3 4 5 6
0 1 1 2 5
5 5 5 5 5
7 8 9 7 7

вывод должен быть

17 13 13 10 5

15 17 13 13 10

14 15 17 13 13

13 14 15 1713

7 13 14 15 17

#include <stdio.h>

int main()
{
    int n, sum=0, i, j, sub_i, sub_j, sub1_i, sub1_j;

    scanf("%d ", &n);

    int array1[n][n];

    for(i=0;i<n;i++){
        for(j=0; j<n; j++){
            scanf("%d", &array1[i][j]);
        }
    }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            sub_i=i;
            sub_j=j;
            sub1_i=i;
            sub1_j=j;
            sum=0;

            if(j>i){
                while(sub_j<n){
                    sum+=array1[sub_i][sub_j];
                    sub_i++;
                    sub_j++;
                }
                while(sub_j<n){
                    array1[sub_i][sub_j]=sum;
                    sub1_i++;
                    sub1_j++;
                }
            }

            if(i>j){
                while(sub_i<n){
                    sum+=array1[sub1_i][sub1_j];
                    sub_i++;
                    sub_j++;
                }
                while(sub1_i<n){
                    array1[sub1_i][sub1_j]=sum;
                    sub1_i++;
                    sub1_j++;
                }
            }
        }
    }

    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            printf("%d ", array1[i][j]);
        }
        printf("\n");
    }
    return 0;
}

Когда я запускаю программу, она печатает массив, как будто никакое значение не было присвоено матрице.Кто-то может указать, что происходит?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Цитирование комментария по Weather Vane :

Программа изменяет проверяемый массив - см. array1[sub_i][sub_j]=sum; - и затем печатает неверные значения, так как вы не можетеправильно суммируйте диагонали изменяемого массива.

ОП уже понимает, что

... что вы говорите мне, это присвоение значений другому массивуи распечатайте это.

Да, это намного проще:

#include <stdio.h>

int main(void)
{
    int n;
    // Checking the input is always a good idea, but you
    // may prefer something less brutal, in case of error
    if (scanf("%d", &n) != 1  ||  n < 1)
       return 1;    

    int mat[n][n];

    for (int i = 0; i < n; ++i) {
        for (int j= 0; j < n; ++j) {
            if (scanf("%d", &mat[i][j]) != 1)
                return 1; 
        }
    }

    // Calculate and store the sum of the diagonals. Note that
    // it could be done in the previous loop, but it may be better
    // to refactor those snippets into separate functions.
    int diagonals[2 * n + 1];
    for (int i = 0; i < 2 * n + 1; ++i)
        diagonals[i] = 0;  // consider 'memset' instead of this loop

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            diagonals[n + i - j] += mat[i][j]; 
        }    
    }

    // Now print the correct values in their position
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < n; ++j) {
            printf("%4d", diagonals[n + i - j]);
        }
        printf("\n");
    }
    return 0;
}

Тестируемый ЗДЕСЬ .

0 голосов
/ 15 декабря 2018

Вы можете сделать следующее:

#include <stdio.h>

#define N 5

int main()
{
  int array[N][N] = {
    1, 2, 3, 4, 5,
    2, 3, 4, 5, 6,
    0, 1, 1, 2, 5,
    5, 5, 5, 5, 5,
    7, 8, 9, 7, 7};

  for(int i = 1; i < N; ++i)
    for(int j = 1; j < N; ++j)
      array[i][j] += array[i - 1][j - 1];

  for (int i = 0; i + 1 < N; ++i)
    for (int j = 0; j + 1 < N; ++j)
      if (i == j)
        array[i][j] = array[N - 1][N - 1];
      else if (i > j)
        array[i][j] = array[N - 1][N - 1 - i + j];
      else
        array[i][j] = array[N - 1 - j + i][N - 1];

    for (int i = 0; i < N; ++i) {
      for(int j = 0; j < N; ++j)
        printf("%d ", array[i][j]);
      printf("\n");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...