Печать элементов под второй диагональю в 2-й матрице на С - PullRequest
0 голосов
/ 30 сентября 2019

Здравствуйте, у меня есть код, который показывает элементы под главной диагональю 2d матрицы, и мне также нужно показать элементы под второй диагональю. Любые идеи, что манипулировать в цикле.

// loop to show the elements under the main diagonal
void element_under_diag(int number, int arr[number][number])
{
   int i, j;

   printf("\nUnder the main diagonal:\n");
      for(i=0;i<number;i++){
         for(j=0;j<number;j++){
            if(i>j)
               printf("%d ",arr[i][j]);
         }
      }
   printf("\n");

}

number берется от пользователя в основной функции, и это количество строк и столбцов в матрице.

этот циклрезультат в виде:

The entered matrix is:
1 2 3
4 5 6
7 8 9
Under the main diagonal:
4 7 8

Теперь мне нужно, чтобы результат был примерно таким:

The entered matrix is:
1 2 3
4 5 6
7 8 9
Under the secondary diagonal:
6 8 9

Ответы [ 4 ]

1 голос
/ 30 сентября 2019

Если массив определен с N * N элементами, тогда условие в операторе if может выглядеть как

if ( N - i - 1  < j ) printf( "%d ", a[i][j] );
0 голосов
/ 30 сентября 2019

Мне удалось решить это так:

// loop to show the elements under the main diagonal
void element_under_diag(int number, int arr[number][number])
{
   int i, j;
   printf("\nUnder the secondary diagonal:\n");
      for(i=1;i<number;i++){
         j = number - i; //Every time the row number goes up one, the starting column goes down one. 
           for(;j<number;j++){
            printf("%d ",arr[i][j]);
         }

      }
   printf("\n");
}
0 голосов
/ 30 сентября 2019

делает нас бесполезными, потому что это может быть сделано через цикл:

#include <stdio.h>
void main(){
    int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    element_under_diag(3,arr);
    element_under_secondary_diag(3,arr);
}

void element_under_diag(int number, int arr[number][number])
{
   printf("\nUnder the main diagonal:\n");
      for(int i=1;i<number;i++){
        for(int j=0;j<i;j++){
            printf("%d ",arr[i][j]);
         }
      }
   printf("\n");
}

void element_under_secondary_diag(int number, int arr[number][number])
{
   printf("\nUnder the secondary diagonal:\n");
      for(int i=1;i<number;i++){
        for(int j=0;j<i;j++){
            printf("%d ",arr[number-j-1][i]);
         }
      }
   printf("\n");
}
0 голосов
/ 30 сентября 2019

Пожалуйста, замените в вашей программе:

if(i>j)   // above the diagonal

на

if( (i+j) >= N )   // below the diagonal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...