Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной - C (СИ) (75938)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, очень нужна ваша помощь в выполнении одного задания.

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

Я написал программу, которая находит сумму элементов, которые лежат на диагоналях, перпендикулярных к главной.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main()
{
int i,j,q=0,w=0,e=0;
float a[20][20];
clrscr();
randomize();
for (i=0;i<=4;i++)
for (j=0;j<=4;j++)
a[i][j]=rand()%5;
for (i=0;i<=4;i++)
{for (j=0;j<=4;j++)
printf("%10.2f",a[i][j]);
printf("\n");}
printf("\n");
 
for (i=0;i<=4;i++)
for (j=0;j<=4;j++)
if (i+j==2)
q=q+a[i][j];
printf("a[1][1]=%i\n",q);
 
for (i=0;i<=4;i++)
for (j=0;j<=4;j++)
if (i+j==4)
w=w+a[i][j];
printf("a[2][2]=%i\n",w);

for (i=0;i<=4;i++)
for (j=0;j<=4;j++)
if (i+j==6)
e=e+a[i][j];
printf("a[3][3]=%i\n",e);
 
getch();
}
Я нахожу их в отдельных переменных, но я не знаю как присвоить найденное значение переменной определенному элементу массива. И так же хотелось бы узнать, можно ли все эти действия как-нибудь запихнуть в цикл, чтобы не нужно было каждый раз прописывать
for (i=0;i<=4;i++)
for (j=0;j<=4;j++)
if (i+j==2)
q=q+a[i][j];
printf("a[1][1]=%i\n",q);
Очень надеюсь на вашу помощь, заранее спасибо!

Решение задачи: «Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной»

textual
Листинг программы
#include <stdio.h>
#include <time.h>
 
 
 
int main()
{
 int N;                 // N - matrix size
 int **matrix,i,j,sum;
 int *l_diag,max_diag;           // вектор длин диагоналей
 srand(time(NULL));
 
 scanf("%d",&N);
 
 // создаем вектор диаг.
 l_diag = (int*)malloc(sizeof(int)*N);
 
 // создаем матрицу
 matrix = (int**)malloc(sizeof(int*)*N);
 for(i = 0; i < N; i++)
 {
  matrix[i] = (int*)malloc(sizeof(int)*N);
 }
 
 // заполняем слу. значениями и выводим
 for(i = 0; i < N; i++)
 {
  for(j = 0; j < N; j++)
  {
   matrix[i][j] = rand()%9+1;
   printf("%2d ",matrix[i][j]);
  }
  putchar('\n');
 }
 
 // заполняем вектор диагоналей
 if(N%2 == 0)
 {
  max_diag = N/2-1;
 }
 else
 {
  max_diag = N/2;
 }
 for(i=0; i < max_diag; i++)
 {
  l_diag[i]=i;
  l_diag[N-1-i]=i;
 }
 if(N % 2 == 0)
 {
  l_diag[i] = max_diag;
  l_diag[++i] = max_diag;
 }
 else
 {
  l_diag[i] = max_diag;
 }
 
 // выводим вектор диагоналей
 for(i = 0; i < N; i++)
 {
  printf("%d ",l_diag[i]);
 }
 printf("\n");
 
 // суммируем диагонали
 
 for(i=0; i < N; i++)
 {
  sum = 0;
  // верхняя диагональ
  for(j = 0; j < l_diag[i]; j++)
  {
   sum += matrix[i-(j+1)][i+j+1];
  }
  // нижняя диагональ
  for(j = 0; j < l_diag[i]; j++)
  {
   sum += matrix[i+j+1][i-(j+1)];
  }
 
  matrix[i][i] = matrix[i][i] + sum;
 }
 
 printf("\n\n\n");
 
 // выводим изменененую матрицу
 for(i = 0; i < N; i++)
 {
  for(j = 0; j < N; j++)
  {
   printf("%2d ",matrix[i][j]);
  }
  putchar('\n');
 }
 
 // очищаем память
 
 free(l_diag);
 free(matrix);
 for(i=0; i < N; i++)
 {
  free(matrix[i]);
 }
 
 return 0;
}

Объяснение кода листинга программы

В этом коде реализована задача, описанная в вашем вопросе. Вот список ключевых моментов работы программы:

  1. Создается матрица заданного размера и заполняется случайными значениями.
  2. Создается вектор длин диагоналей, который заполняется значениями от 0 до N-1, где N - размер матрицы.
  3. Если размер матрицы четный, то в векторе длин диагоналей добавляются два элемента, равных максимальному значению диагонали.
  4. Суммируются элементы диагоналей, проходя по всем элементам матрицы.
  5. Результат суммирования добавляется к элементу в главной диагонали.
  6. Выводится измененная матрица.
  7. Все выделенные памятью объекты освобождаются. Стоит отметить, что этот код можно оптимизировать, например, вычислив сумму диагоналей заранее, до заполнения матрицы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы