Сформировать квадратную матрицу, где элементы задаются по формуле - 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;
Объяснение кода листинга программы
- Объявление переменных:
buf
- буфер для временного хранения максимального значения;max
- переменная для хранения максимального значения;a
- матрица размеромn x n
, гдеn
- количество строк, введенное пользователем;i
,j
,n
- целочисленные переменные для обозначения индексов матрицы и размера матрицы.
- Ввод размера матрицы:
Пользователю предлагается ввести размер матрицы
N x N
. - Вывод незаполненной матрицы:
Выводится сообщение
Sformirovannaya matrica A:
и пустая матрица размеромn x n
. - Заполнение матрицы:
Используется два вложенных цикла для заполнения матрицы
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));. - Вывод заполненной матрицы:
Выводится сообщение
Otsortirovannaya matrica A:
и заполненная матрицаa
. - Поиск максимального элемента:
Массив
mass
содержит указатели на элементы матрицыa
. Переменнаяmax
инициализируется нулем. Используется цикл для сравнения каждого элемента матрицыa
с текущим максимальным значением и обновления значенияmax
, если текущий элемент большеmax
. - Сортировка матрицы:
Используется цикл для сравнения трех соседних элементов матрицы
a
и их перестановки при необходимости, чтобы получить матрицу, в которой элементы упорядочены по возрастанию. - Ввод и вывод: После выполнения всех операций программа ожидает ввода пользователя для подтверждения того, что она была выполнена правильно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д