Сформировать квадратную матрицу, где элементы задаются по формуле - C (СИ)

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

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

Задание: Сформировать квадратную матрицу, где элементы задаются по формуле. Необходимо определить наибольший из угловых элементов матрицы и расположить угловые элементы в порядке убывания. Я решил данное задание, но код получился очень громоздким и препод сказал реализовать более сжато, а точнее надо сделать поиск наибольшего элемента и сортировки в цикле, но я не могу понять как это сделать. Помогите пожалуйста сделать алгорит более "умным".
main()
{
     double buf,max,a [SIZE][SIZE];
     int i,j,n;
 
     printf("Vvedite razmer matrici NxN: ");
     scanf("%d",&n);
 
     printf("Sformirovannaya matrica A: \n");
     for (i=0;i<n;i++)
     {
          printf("\n");
          for (j=0;j<n;j++)
          {
               if (i>j) a[i][j]=sin(i+j);
               else 
               if (i==j) a[i][j]=((i==0)&&(j==0))?log(2): log(i+j);
               else
               a[i][j]=cos(i-j);
               printf("%lf ",a[i][j]);
          }
     }
             n--;
     max=a[0][0];
     i=0; j=0;
     if (max<a[0][n]) {max=a[0][n]; i=0; j=n;}
     else
     if (max<a[n][0]) {max=a[n][0];  i=n; j=0;}
     else
     if (max<a[n][n]) {max=a[n][n];  i=n; j=n;}
 
     printf("\n\nMaxsimalnii iz uglovix eto %dx%d:=%lf",++i,++j,max);

     if (a[0][0]<a[0][n])
     {
          buf=a[0][0];
      a[0][0]=a[0][n];
      a[0][n]=buf;
     }
     else
     if (a[0][0]<a[n][0])
     {
          buf=a[0][0];
          a[0][0]=a[n][0];
          a[n][0]=buf;
     }
     else
     if (a[0][0]<a[n][n])
     {
          buf=a[0][0];
          a[0][0]=a[n][n];
          a[n][n]=buf;
     }
 
     if (a[0][n]<a[n][0])
     {
          buf=a[0][n];
          a[0][n]=a[n][0];
          a[n][0]=buf;
     }
     else
     if (a[0][n]<a[n][n])
     {
          buf=a[0][n];
          a[0][n]=a[n][n];
          a[n][n]=buf;
     }
     if (a[n][0]<a[n][n])
     {
          buf=a[n][0];
          a[n][0]=a[n][n];
          a[n][n]=buf;
     }
                
     printf("\nOtsortirovannaya matrica A:\n");
 
     for (i=0;i<=n;i++)
     {
          printf("\n");
          for (j=0;j<=n;j++)
               printf("%lf ",a[i][j]);
     } 
}

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

textual
Листинг программы
     double buf,max,a[10][10];
     int i,j,n;
 
     printf("Vvedite razmer matrici NxN: ");
     scanf("%d",&n);
 
     printf("Sformirovannaya matrica A: \n\n");
     for (i=0;i<n;i++)
     {
          for (j=0;j<n;j++)
          {
               if (i>j) a[i][j]=sin((float)(i+j));
               else 
               if (i==j) a[i][j]=((i==0)&&(j==0))?log(2.): log((float)(i+j));
               else
               a[i][j]=cos((float)(i-j));
               printf("%lf ",a[i][j]);
          }
          printf("\n");
     }
 
     double *mass[4]={&a[0][0],&a[0][n-1],&a[n-1][0],&a[n-1][n-1]};
     max=0;
     for(int i=0;i<4;i++)
     {
         if(max<*mass[i])
            max=*mass[i];
     }
 
     printf("\n\nMaxsimalnii iz uglovix eto: %lf",max);
 
     bool End=true;
     while(End)
     {
         End=false;
         for(int i=0;i<3;i++)
         {
             if(*mass[i]<*mass[i+1])
             {
                buf=*mass[i];
                *mass[i]=*mass[i+1];
                *mass[i+1]=buf;
                End=true;
             }
         }
     }
           
     printf("\nOtsortirovannaya matrica A:\n");
 
     for (i=0;i<n;i++)
     {
          for (j=0;j<n;j++)
               printf("%lf ",a[i][j]);
          printf("\n");
     } 
    getchar();
    getchar();
    return 0;

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

  1. Объявление переменных:
    • buf - буфер для временного хранения максимального значения;
    • max - переменная для хранения максимального значения;
    • a - матрица размером n x n, где n - количество строк, введенное пользователем;
    • i, j, n - целочисленные переменные для обозначения индексов матрицы и размера матрицы.
  2. Ввод размера матрицы: Пользователю предлагается ввести размер матрицы N x N.
  3. Вывод незаполненной матрицы: Выводится сообщение Sformirovannaya matrica A: и пустая матрица размером n x n.
  4. Заполнение матрицы: Используется два вложенных цикла для заполнения матрицы a. Значение элемента матрицы a[i][j] вычисляется в зависимости от того, больше ли i j, равно ли i j или меньше ли i j. Если i больше j, то элемент матрицы a[i][j] равен синусу ((i+j) mod 2 == 0)?log(2.):log((float)(i+j));. Если i равно j, то элемент матрицы a[i][j] равен логарифму ((i==0)&&(j==0))?log(2.): log((float)(i+j));. В противном случае элемент матрицы a[i][j] равен косинусу ((i-j) mod 2 == 0)?log(2.):log((float)(i-j));.
  5. Вывод заполненной матрицы: Выводится сообщение Otsortirovannaya matrica A: и заполненная матрица a.
  6. Поиск максимального элемента: Массив mass содержит указатели на элементы матрицы a. Переменная max инициализируется нулем. Используется цикл для сравнения каждого элемента матрицы a с текущим максимальным значением и обновления значения max, если текущий элемент больше max.
  7. Сортировка матрицы: Используется цикл для сравнения трех соседних элементов матрицы a и их перестановки при необходимости, чтобы получить матрицу, в которой элементы упорядочены по возрастанию.
  8. Ввод и вывод: После выполнения всех операций программа ожидает ввода пользователя для подтверждения того, что она была выполнена правильно.

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


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

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

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