Scambio max in matrice

di il
3 risposte

Scambio max in matrice

Salve a tutti sto avendo problemi nel risolvere questo quesito:

Legga una matrice quadrata di interi da un file di testo “input.txt”

Scambi il massimo della prima colonna sulla prima riga, il massimo della seconda colonna sulla seconda riga e cosi via .....

Il mio codice è questo ma non funziona:

#include <stdio.h>
#define N 100

int main()
{
    FILE *fp;
    fp=fopen("input.txt","r");
    if(fp!=NULL)
    {
        int n;
        int m[N][N];
        fscanf(fp,"%d",&n);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                fscanf(fp,"%d",&m[i][j]);
                printf("%d ",m[i][j]);
            }
            printf("\n");
        }
        fclose(fp);
        printf("\n");
        int i,j;
        for(int i=0;i<n;i++)
        {
            int max=0;
            for(int j=0;j<n;j++)
            {
                //ricerca max
                if(m[j][i]>max)
                {
                 max=m[j][i];
                }
            }
            //scambia max
            printf("%d ",max);
            int temp=m[i][i];
            m[i][i]=max;
            max=temp;
        }


        //nuova matrice
        printf("\n\n");
         for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                printf("%d ",m[i][j]);
            }
            printf("\n");
        }
    }
}

3 Risposte

  • Re: Scambio max in matrice

    Il for interno per cercare il max sulle colonne, non sulle righe, e puoi partire da 1

  • Re: Scambio max in matrice

    05/01/2023 - Weierstrass ha scritto:


    Il for interno per cercare il max sulle colonne, non sulle righe, e puoi partire da 1

    Grazie per la risposta, ho aggiustato il for interno mettendo j=1, però riscontro comunque problema quando vado a stampare cioè:

    questa è il file  “input.txt”:

    4
    5  6  1  8
    1  20  3  4
    9  0  11  12
    13  4  15  1

    invece quando vado  a stampare mi trovo:

    5 6 1 8
    1 20 3 4
    9 0 11 12
    13 4 15 1

    13 20 15 12

    13 6 1 8
    1 20 3 4
    9 0 15 12
    13 4 15 12

    cioè la matrice originale, i max di ogni colonna ed infine la matrice con il max scambiato per ogni colonna (e non mi trovo piochè sposta solo il max senza riportare il valore di m[i][i] nella pos del max).

  • Re: Scambio max in matrice

                int max=m[0][i], riga_max=0;
                for(j=1;j<n;j++)
                {
                    //ricerca max
                    if(m[j][i]>max)
                    {
                     max=m[j][i];
                     riga_max=j;
                    }
                }
                //scambia max
                printf("%d ",max);
                int temp=m[i][i];
                m[i][i]=max;
                m[riga_max][i]=temp;
Devi accedere o registrarti per scrivere nel forum
3 risposte