MEGA Funzioni di Matrici

di il
51 risposte

51 Risposte - Pagina 2

  • Re: MEGA Funzioni di Matrici

    Ma non basta ancora, anch'io ho modificato il mio post, mentre scrivevi tu

    E poi perché calcoli la traccia durante la trasposta?

    Fai funzioni che fanno una cosa sola
  • Re: MEGA Funzioni di Matrici

    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 100
    
    /*Definizione dei prototipi*/
    void Inizializzazione_Matrice (int m[][SIZE],int rc);
    void Stampa_Matrice (int m[][SIZE],int rc);
    void Somma_Diagonale (int m[][SIZE],int rc);
    void Trasposta_Matrice (int m[][SIZE],int m2[][SIZE],int rc);
    void Somma_Matrice (int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc);
    void Prodotto_Matrice (int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc);
    
    int main() {
        int M[SIZE][SIZE],M2[SIZE][SIZE], M3[SIZE][SIZE],M4[SIZE][SIZE],RC;
        
        do{
            printf("Inserire il numero di righe e colonne (essendo una matrice quadrata): ");
            scanf("%d",&RC);
        }while ((RC>SIZE)||(RC<1));
    
        printf("Visualizzare la prima matrice\n");
        Inizializzazione_Matrice(M,RC);
        Stampa_Matrice(M,RC);
    
        printf("Visualizzare la seconda matrice\n");
        Inizializzazione_Matrice(M2,RC);
        Stampa_Matrice(M2,RC);
        
        printf("Visualizzare la Somma delle diagonali delle due matrici\n");
        Somma_Diagonale (M,RC);
        Somma_Diagonale (M2,RC);
        
        printf("Visualizzare la matrice trasposta\n");
        Trasposta_Matrice (M,M2,RC);
        
        printf("Visualizzare la somma delle due matrici\n");
        Somma_Matrice(M,M2,M3,RC);
        
        printf("Visualizzare il prodotto delle due matrici\n");
        Prodotto_Matrice(M,M2,M4,RC);
    
        return 0;
    }
    
    /*Definizione della funzione Inizializzione_Matrice*/
    void Inizializzazione_Matrice (int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("Inserisci elemento di riga %d e colonna %d: ", i, j);
                scanf("%d",&m[i][j]);
            }
            printf("\n");
        }
    }
    
    /*Definizione della funzione Stampa_Matrice*/
    void Stampa_Matrice (int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",m[i][j]);
            }
            printf("\n");
        } 
    }
    
    /*Definizione della funzione Somma_Diagonale*/
    void Somma_Diagonale (int m[][SIZE],int rc){
        int i,somma=0;
        
                 for(i=0;i<rc;i++)
    	  somma += m[i][i];
            printf("La somma della diagonale principale e': %d\n",somma);
    }
    
    /*Definizione della funzione Trasposta_Matrice*/
    void Trasposta_Matrice (int m[][SIZE],int m2[][SIZE],int rc){
        int i,j,MT[SIZE][SIZE],M2T[SIZE][SIZE],Somma1=0,Somma2=0;
        
        printf("Confrontare le due matrici\n");
        
        if(Somma1=Somma2){
            printf("Calcolare la trasposta delle singole matrici\n");
            printf("\nCalcoliamo la prima matrice trasposta \n");
            for (i=0;i<rc;i++)
                for(j=0;j<rc;j++) {
                    MT[j][i]=m[i][j];
        } 
            printf("\nStampiamo i dati della prima matrice traposta\n");
            for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",MT[i][j]);
            }
            printf("\n");
        } 
            
            printf("\nCalcoliamo la seconda matrice trasposta \n");
            for (i=0;i<rc;i++)
                for(j=0;j<rc;j++) {
                    M2T[j][i]=m2[i][j];
        }
            printf("\nStampiamo i dati della seconda matrice traposta\n");
            for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",M2T[i][j]);
            }
            printf("\n");
        } 
                    
        } else if (Somma1>Somma2){
            printf("Calcolare la trasposta della prima matrice\n");
            for (i=0;i<rc;i++)
                for(j=0;j<rc;j++) {
                    MT[j][i]=m[i][j];
        } 
            printf("\nStampiamo i dati della matrice traposta\n");
            for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",MT[i][j]);
            }
            printf("\n");
        } 
        } else {printf("Calcolare la trasposta della seconda matrice\n");
            for (i=0;i<rc;i++)
                for(j=0;j<rc;j++) {
                    M2T[j][i]=m2[i][j];
        } 
            printf("\nStampiamo i dati della matrice traposta\n");
            for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",M2T[i][j]);
            }
            printf("\n");
        }      
        }
        
    }
       
        /*Definizione della funzione Somma_Matrice*/
    void Somma_Matrice (int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc){
            int i,j;
            
            printf("Somma delle due matrici\n");
            for(i=0;i<rc;i++){
                m3[i][j]=0;
                for(j=0;j<rc;j++){
                    m3[i][j]=m[i][j]+m2[i][j];
                }
                }
            printf("\nStampiamo i dati della matrice somma\n");
            for(i=0;i<rc;i++){
                for(j=0;j<rc;j++){
                    printf("\t%d",m3[i][j]);
                }
                printf("\n");
                }
            }
    
     /*Definizione della funzione Prodotto_Matrice*/
    void Prodotto_Matrice (int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc){
            int i,j;
            
            printf("Prodotto delle due matrici\n");
            for(i=0;i<rc;i++){
                m4[i][j]=0;
                for(j=0;j<rc;j++){
                    m4[i][j]=m[i][j]+m2[i][j];
                }
                }
            printf("\nStampiamo i dati della matrice prodotto\n");
            for(i=0;i<rc;i++){
                for(j=0;j<rc;j++){
                    printf("\t%d",m4[i][j]);
                }
                printf("\n");
                }
            }
  • Re: MEGA Funzioni di Matrici

    Cosi potrebbe andare?
  • Re: MEGA Funzioni di Matrici

    Vedi tu...

    Una funzione fa una cosa sola?

    Com'è che la funzione della somma La Stampa anche?
    E anche quella del prodotto, che è ancora sbagliata come la volta scorsa...
  • Re: MEGA Funzioni di Matrici

    Ogni funzione ha il proprio compito anche se non mi stampa la somma ed il prodotto della matrice :/
    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 100
    
    /*Definizione dei prototipi*/
    void Inizializzazione_Matrice(int m[][SIZE],int rc);
    void Stampa_Matrice(int m[][SIZE],int rc);
    int Somma_Diagonale(int m[][SIZE],int rc);
    void Trasposta_Matrice (int m[][SIZE],int mt[][SIZE],int rc);
    void Somma_Matrice (int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc);
    void Prodotto_Matrice(int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc);
    
    int main(){
        int M[SIZE][SIZE],M2[SIZE][SIZE],M3[SIZE][SIZE],M4[SIZE][SIZE],MT[SIZE][SIZE],M2T[SIZE][SIZE],RC;
        
        do{
            printf("Inserire il numero di righe e colonne (essendo una matrice quadrata): ");
            scanf("%d",&RC);
        }while((RC>SIZE)||(RC<1));
        
        printf("Visualizzare la prima matrice\n");
        Inizializzazione_Matrice(M,RC);
        Stampa_Matrice(M,RC);
        
        printf("Visualizzare la seconda matrice\n");
        Inizializzazione_Matrice(M2,RC);
        Stampa_Matrice(M2,RC);
        
        printf("Visualizzare la Traccia della prima matrice e della seconda\n");
        int Traccia_M=Somma_Diagonale(M,RC);
        int Traccia_M2=Somma_Diagonale(M2,RC);
        
        printf("Visualizzare la matrice trasposta\n");
        if(Traccia_M=Traccia_M2){
            printf("Calcolare la trasposta delle singole matrici\n");
            Trasposta_Matrice(M,MT,RC);
            Stampa_Matrice(MT,RC);
            
            Trasposta_Matrice(M2,M2T,RC);
            Stampa_Matrice(M2T,RC);
        } else if (Traccia_M>Traccia_M2){
            printf("Calcolare la trasposta della prima matrice\n");
            Trasposta_Matrice(M,MT,RC);
            Stampa_Matrice(MT,RC);
        } else {
            printf("Calcolare la trasposta della seconda matrice\n");
            Trasposta_Matrice(M2,M2T,RC);
            Stampa_Matrice(M2T,RC);
        }
        
        printf("Visualizzare la somma delle due matrici\n");
        Somma_Matrice(M,M2,M3,RC);
        Stampa_Matrice(M3,RC);
        
        printf("Visualizzare il prodotto delle due matrici\n");
        Prodotto_Matrice(M,M2,M4,RC);
        Stampa_Matrice(M4,RC);
        
        return 0;
    }
    
    /*Definizione della funzione Inizializzazione_Matrice*/
    void Inizializzazione_Matrice(int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("Inserire elemento di riga %d e colonna %d: ",i,j);
                scanf("%d",&m[i][j]);
            }
            printf("\n");
        } 
    }
    
    /*Definizione della funzione Stampa_Matrice*/
    void Stampa_Matrice(int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",m[i][j]);
            }
            printf("\n");
        } 
    }
    
    /*Definizione della funzione Somma_Diagonale*/
    int Somma_Diagonale(int m[][SIZE],int rc){
        int i,somma=0;
        
        for(i=0;i<rc;i++){
            somma+=m[i][i];
                printf("La somma della diagonale principale e': %d\n",somma);
            }
            printf("\n");
            
            return somma;
        }
    
    /*Definizione della funzione Trasposta_Matrice*/
    void Trasposta_Matrice(int m[][SIZE],int mt[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                mt[j][i]=m[i][j];
            }
        }
    }
    
    /*Definizione della funzione Somma_Matrice*/
    void Somma_Matrice(int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            m3[i][j]=0;
            for(j=0;j<rc;j++){
                m3[i][j]=m[i][j]+m2[i][j];
            }
        }
    }
    
    /*Definizione della funzione Prodotto_Matrice*/
    void Prodotto_Matrice(int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            m4[i][j]=0;
            for(j=0;j<rc;j++){
                m4[i][j]=m[i][j]*m2[i][j];
            }
        }
    }
  • Re: MEGA Funzioni di Matrici

    Hai fatto un po' di debugging?
  • Re: MEGA Funzioni di Matrici

    SI ma non da nessuno errore apparente
  • Re: MEGA Funzioni di Matrici

    Il programma funziona ma senza stampare il prodotto e la somma
  • Re: MEGA Funzioni di Matrici

    Alcune semplici domande

    1 ma perché se non hai ancora finito questo programma stai già pensando ad un altro?
    2 ti rendi conto che se non risolvi i tuoi problemi con la scrittura di programmi semplici, quando passi a quelli complessi sarai in "roba fetida marrone"?
    3 parlando di questo programma: ti dico per la terza volta che il prodotto tra matrici è sbagliato. vuoi metterti a studiare o fai le cose alla cavolo?
    4 come fai a dire che il programma va se non stampa? cosa ti dice che fa il lavoro giusto? infatti è sbagliato
    5 perché scrivi funzioni che fanno tanti lavori?
    6 non hai tratto ispirazione dal mio esempio? funzioni semplici, che fanno una sola cosa
    la funzione che stampa stampa e basta
    quella che traspone traspone e basta
    se devo stampare la matrice trasposta, prima la traspongo e dopo la stampo

    da ultimo
    se non rispondi a queste domande e se non cominci a metterti di buzzo buono a cercare di capire cosa fai e perché io ti mollo, dato che perdere il mio tempo ho maniere più piacevoli
  • Re: MEGA Funzioni di Matrici

    MarcoTopone ha scritto:


    SI ma non da nessuno errore apparente
    Se non stampa questo è un ertore e il debugging serve a capirne il perché. Ma l'hai fatto? Non rispondere solo sì o no. Dicci cosa hai controllato con il debugging e cosa succede quando il codice arriva alla funzione di stampa.

    Per il prodotto correggi la funzione, leggi questa

    https://www.codingcreativo.it/prodotto-tra-matrici

    ma studiava!
  • Re: MEGA Funzioni di Matrici

    E controlla questa riga

    if(Traccia_M=Traccia_M2)

    Ti sembra corretta?
  • Re: MEGA Funzioni di Matrici

    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 100
    
    /*Definizione dei prototipi*/
    void Inizializzazione_Matrice(int m[][SIZE],int rc);
    void Stampa_Matrice(int m[][SIZE],int rc);
    int Somma_Diagonale (int m[][SIZE],int rc);
    void Trasposta_Matrice(int m[][SIZE],int mt[][SIZE],int rc);
    void Somma_Matrice (int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc);
    void Prodotto_Matrice(int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc);
    
    int main(){
        int M[SIZE][SIZE],M2[SIZE][SIZE],MT[SIZE][SIZE],M2T[SIZE][SIZE],M3[SIZE][SIZE],M4[SIZE][SIZE],RC;
        
        do{
            printf("Inserire il numero di righe e colonne (essendo una matrice quadrata): ");
            scanf("%d",&RC);
        }while((RC>SIZE)||(RC<1));
        
        printf("Visualizzare la prima matrice\n");
        Inizializzazione_Matrice(M,RC);
        Stampa_Matrice(M,RC);
        
        printf("Visualizzare la seconda matrice\n");
        Inizializzazione_Matrice(M2,RC);
        Stampa_Matrice(M2,RC);
        
        printf("Visualizzare la Traccia della prima matrice e della seconda\n");
        int Traccia_M=Somma_Diagonale(M,RC);
        int Traccia_M2=Somma_Diagonale(M2,RC);
        
        printf("Visualizzare la matrice trasposta\n");
        if(Traccia_M=Traccia_M2){
            printf("Calcolare la trasposta delle singole matrici\n");
            Trasposta_Matrice(M,MT,RC);
            Stampa_Matrice(MT,RC);
            
            Trasposta_Matrice(M2,M2T,RC);
            Stampa_Matrice(M2T,RC);
        } else if (Traccia_M>Traccia_M2){
            printf("Calcolare la trasposta della prima matrice\n");
            Trasposta_Matrice(M,MT,RC);
            Stampa_Matrice(MT,RC);
        } else {
            printf("Calcolare la trasposta della seconda matrice\n");
            Trasposta_Matrice(M2,M2T,RC);
            Stampa_Matrice(M2T,RC);
        }
         
        printf("Visualizzare la somma delle due matrici\n");
        Somma_Matrice(M,M2,M3,RC);
        Stampa_Matrice(M3,RC);
        
        printf("Visualizzare il prodotto delle due matrici\n");
        Prodotto_Matrice(M,M2,M4,RC);
        Stampa_Matrice(M4,RC);
        
        return 0;
    }
    
    /*Definizione della funzione Inizializzazione_Matrice*/
    void Inizializzazione_Matrice(int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("Inserire elemento di riga %d e colonna %d: ",i,j);
                scanf("%d",&m[i][j]);
            }
            printf("\n");
        } 
    }
    
    /*Definizione della funzione Stampa_Matrice*/
    void Stampa_Matrice(int m[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                printf("\t%d",m[i][j]);
            }
            printf("\n");
        } 
    }
    
    /*Definizione della funzione Somma_Diagonale*/
    int Somma_Diagonale(int m[][SIZE],int rc){
        int i,somma=0;
        
        for(i=0;i<rc;i++){
            somma+=m[i][i];
            }
            printf("\n");
            
            printf("La somma della diagonale principale e': %d\n",somma);
                        
            return somma;
        }
    
    /*Definizione della funzione Trasposta_Matrice*/
    void Trasposta_Matrice(int m[][SIZE],int mt[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                mt[j][i]=m[i][j];
            }
        }
    }
    
    /*Definizione della funzione Somma_Matrice*/
    void Somma_Matrice(int m[][SIZE],int m2[][SIZE],int m3[][SIZE],int rc){
        int i,j;
        
        for(i=0;i<rc;i++){
            m3[i][j]=0;
            for(j=0;j<rc;j++){
                m3[i][j]=m[i][j]+m2[i][j];
            }
        }
    }
    
    /*Definizione della funzione Prodotto_Matrice*/
    void Prodotto_Matrice(int m[][SIZE],int m2[][SIZE],int m4[][SIZE],int rc){
        int i,j,k;
        
        for(i=0;i<rc;i++){
            for(j=0;j<rc;j++){
                m4[i][j]=0;
                for(k=0;k<rc;k++){
                    m4[i][j] +=m[i][k]*m2[k][j];
                }
            }
        }
    }
  • Re: MEGA Funzioni di Matrici

    oregon ha scritto:


    E controlla questa riga

    if(Traccia_M=Traccia_M2)

    Ti sembra corretta?
    Traspone la matrice caratterizzata dalla traccia maggiore; nel caso le
    tracce delle due matrici coincidano traspone entrambe le matrici

    C'è un modo alternativo? Perchè io non capisco
  • Re: MEGA Funzioni di Matrici

    Ecco cosa mi stampa. Io davvero non comprendo quale sia il problema
    Allegati:
    29959_a47c7dfdf55c07aa4ed7bd9638c568a6.jpg
    29959_a47c7dfdf55c07aa4ed7bd9638c568a6.jpg
  • Re: MEGA Funzioni di Matrici

    Qual è il problema?

    Fa esattamente quello che hai scritto

    Se traspone le due matrici le stampa di seguito e non si vede lo stacco tra una e l'altra
Devi accedere o registrarti per scrivere nel forum
51 risposte