Вывести матрицу, которая имеет максимальный след - C (СИ)
Формулировка задачи:
Даны N квадратных матриц различной размерности. Требуется вывести матрицу, которая имеет максимальный след.
На стандартном потоке ввода задано натуральное число N и далее N квадратных матриц Mi, каждая размерности Ni. Матрицы заданы следующим образом. Сначала идет размерность, далее идут элементы матрицы по строкам - то есть, в первой строке задана первая строка матрицы, во второй - вторая и так далее. Элементы матриц - целые 32-битные числа.
На стандартный поток вывода напечатайте матрицу, которая имеет наибольший след среди введенных матриц. Если несколько введенных матриц имеют одинаковый максимальный след, выведите ту, которая была введена первой.
Указание: для хранения матриц используйте динамическую память. Считайте, что след любой входной матрицы помещается в 64-битное целое число.
Вот мое решение но оно вообще не работает=(
#include <stdio.h> #include <stdlib.h> int trac (int *matrix, int m) { int tr=0,j,k; for (j=0; j<=m-1; j++){ for (k=0; k<=m-1; k++) { if (k==j) tr=tr+matrix[j+k*m]; } } return tr; } int main(void) { int **matrix; int *tmp_matrix; int m,n,j,i,k,a,b,tr_old=0,tr_new,lab1,lab2,q,w; scanf("%d", &n); // кол-во матриц for (i=0; i<=n-1; i++) { scanf("%d", &m); // размерность i-й матрицы matrix=malloc(m*m*sizeof(int)); for (j=0; j<=m-1; j++){ for (k=0; k<=m-1; k++) { scanf("%d", *matrix[j+k*m]); } } tr_new=trac(*matrix, m); if (tr_old<tr_new) { tr_old=tr_new; tmp_matrix=malloc(m*m*sizeof(int)); for (a=0; a<=m-1; a++){ for (b=0; b<=m-1; b++) { tmp_matrix[a+b*m]=matrix[a+b*m]; } } lab1=a; lab2=b; } } for (q=0; q<=lab1-1; q++) { for(w=0; w<=lab2; w++) { printf("%d ", tmp_matrix[q+w*lab2]); } printf("\n"); } }
Помогите!
Решение задачи: «Вывести матрицу, которая имеет максимальный след»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int trac (int *matrix, int m) { int tr=0,j,k; for (j=0; j<=m-1; j++){ for (k=0; k<=m-1; k++) { if (k==j) tr=tr+matrix[j+k*m]; } } return tr; } int main(void) { int *matrix; int *tmp_matrix=NULL; int m,n,j,i,k,a,b,tr_old=0,tr_new,lab1,lab2,q, w; scanf("%d", &n); // кол-во матриц for (i=0; i<=n-1; i++) { scanf("%d", &m); // размерность i-й матрицы matrix=(int*)malloc(m*m*sizeof(int)); for (j=0; j<=m-1; j++){ for (k=0; k<=m-1; k++) { scanf("%d", &matrix[j+k*m]); } } tr_new=trac(matrix, m); if (tr_old<tr_new) { tr_old=tr_new; if(tmp_matrix!=NULL) { // удаляем память на которую указывает tmp_matrix } tmp_matrix=matrix; lab1=m; //lab2=b; } else { //удаляем память на которую указывает matrix } } for (q=0; q<=lab1-1; q++) { for(w=0; w<=lab1-1; w++) { printf("%d ", tmp_matrix[q+w*lab1]); } printf("\n"); } }
Объяснение кода листинга программы
Код представлен на языке C и выполняет следующие действия:
- Ввод данных:
- Запрашивает у пользователя количество входных матриц (переменная
n
). - Для каждой матрицы запрашивает ее размерность (переменная
m
). - Считывает элементы матрицы с помощью функции
scanf()
. Элементы сохраняются в динамически выделяемой памяти, управление которой осуществляется с помощью указателяmatrix
.
- Запрашивает у пользователя количество входных матриц (переменная
- Вычисление следа:
- Для каждой матрицы вычисляет след с помощью функции
trac()
. Эта функция проходит по всем элементам матрицы и суммирует их значения, если элемент является элементом главной диагонали (т.е. индексы элемента равны индексам матрицы). - Если след текущей матрицы больше, чем след предыдущей матрицы, обновляет значение следа и сохраняет ссылку на текущую матрицу в переменной
tmp_matrix
.
- Для каждой матрицы вычисляет след с помощью функции
- Вывод результата:
- После обработки всех входных матриц, выводит на экран матрицу с максимальным следом.
- Для этого перебирает все элементы матрицы и выводит их значения с помощью функции
printf()
. Важно отметить, что код не содержит ошибок обработки исключений и не освобождает память, выделенную под временные матрицы, которые уже не нужны. Это может привести к утечкам памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д