Вывести матрицу, которая имеет максимальный след - C (СИ)

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

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

Даны N квадратных матриц различной размерности. Требуется вывести матрицу, которая имеет максимальный след. На стандартном потоке ввода задано натуральное число N и далее N квадратных матриц Mi, каждая размерности Ni. Матрицы заданы следующим образом. Сначала идет размерность, далее идут элементы матрицы по строкам - то есть, в первой строке задана первая строка матрицы, во второй - вторая и так далее. Элементы матриц - целые 32-битные числа. На стандартный поток вывода напечатайте матрицу, которая имеет наибольший след среди введенных матриц. Если несколько введенных матриц имеют одинаковый максимальный след, выведите ту, которая была введена первой. Указание: для хранения матриц используйте динамическую память. Считайте, что след любой входной матрицы помещается в 64-битное целое число.
Не получается решить эту задачу. Прошу помочь. Решение нужно на языке Си! Не С++, не C#, не С--, не С+-, не Сw, а именно Си!
Вот мое решение но оно вообще не работает=(
#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 и выполняет следующие действия:

  1. Ввод данных:
    • Запрашивает у пользователя количество входных матриц (переменная n).
    • Для каждой матрицы запрашивает ее размерность (переменная m).
    • Считывает элементы матрицы с помощью функции scanf(). Элементы сохраняются в динамически выделяемой памяти, управление которой осуществляется с помощью указателя matrix.
  2. Вычисление следа:
    • Для каждой матрицы вычисляет след с помощью функции trac(). Эта функция проходит по всем элементам матрицы и суммирует их значения, если элемент является элементом главной диагонали (т.е. индексы элемента равны индексам матрицы).
    • Если след текущей матрицы больше, чем след предыдущей матрицы, обновляет значение следа и сохраняет ссылку на текущую матрицу в переменной tmp_matrix.
  3. Вывод результата:
    • После обработки всех входных матриц, выводит на экран матрицу с максимальным следом.
    • Для этого перебирает все элементы матрицы и выводит их значения с помощью функции printf(). Важно отметить, что код не содержит ошибок обработки исключений и не освобождает память, выделенную под временные матрицы, которые уже не нужны. Это может привести к утечкам памяти.

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


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

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

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