Esercizio sulle matrici

di il
45 risposte

45 Risposte - Pagina 2

  • Re: Esercizio sulle matrici

    Allora il discorso della matrice allocata con il doppio puntatore si va a fare benedire ..

    Ma tu devi allocare una matrice o un semplice vettore ? Ancora non si è capito ...
  • Re: Esercizio sulle matrici

    Devo allocare una matrice..
    Prima alloco la matrice normale A poi alloco la trasposta.
    È che se non ci fosse stata la struct, sarebbe stata molto più semplice la questione..
    Ma così non saprei come fare...
  • Re: Esercizio sulle matrici

    Allora usa un singolo puntatore e allochi tutti gli elementi MxN
  • Re: Esercizio sulle matrici

    oregon ha scritto:


    Allora usa un singolo puntatore e allochi tutti gli elementi MxN
    Cioè?
    Così?
    
    A.data = malloc( A.N * sizeof(double));
    
    ?
  • Re: Esercizio sulle matrici

    Manca A.M come ti avevo detto...
  • Re: Esercizio sulle matrici

    Quindi è
    
    A.data = malloc( A.N * sizeof(double));
    A.data = malloc( A.M * sizeof(double));
    
    Volevo fare un ciclo for.. Ma dopo usando la i, mi ridà lo stesso errore di prima.
    Va bene così?
  • Re: Esercizio sulle matrici

    No.

    A.M*A.N*sizeof(double)

    nella malloc
  • Re: Esercizio sulle matrici

    oregon ha scritto:


    No.

    A.M*A.N*sizeof(double)

    nella malloc
    Ok. Grazie mille!
    Forse per quanto riguarda l'allocazione dinamica della matrice ce l'ho fatta.. Grazie ancora!
    Adesso ho qualcosa di errato per quel che riguarda la funzione mat_transpose..
    Ecco il mio codice :
    
    #inlcude "matrix.h"
    
    struct matrix *mat_transpose ( const struct matrix *mat)
    {
              size_t i = 0;
              size_t j = 0;
    
              struct matrix trasposta;
              trasposta.data = malloc ( trasposta.M * trasposta.N * sizeof(double));
    
              for( i = 0; i< (mat->N); i++)
              {
                     for ( j=0; j < (mat->M); j++)
                     {
                           trasposta.N = mat->M;
                           trasposta.M = mat->N;
                     }
                }
                return &trasposta;
    }
    
    Mi da due errori..
    Il primo dice che non ho inizializzato la variabile 'trasposta' che ho usato..
    Ma io ho scritto che
    
    struct matrix trasposta;
    
    E l'altro errore mi viene dato sul return:
    returning address of local variable or temporary.

    Inoltre, come mi ha detto Migliorabile,
    Le due righe di codice dopo il secondo ciclo for sono corrette ma in posizione sbagliata..
    Dove andrebbero messe? A me sembrano corrette messe lì..
  • Re: Esercizio sulle matrici

    C'è qualcuno ?
  • Re: Esercizio sulle matrici

    
    struct matrix {
            size_t N, M;
            double *data;
    };
    Questa è la struttura di matrix?

    Se è quella di sopra allora, inserisco due quesiti come commento nel codice sotto, cerca di rispondere.
    
    struct matrix *mat_transpose ( const struct matrix *mat)
    {
              size_t i = 0;
              size_t j = 0;
    
              struct matrix trasposta;
    
              /* Quanto valgono trasposta.M e trasposta.N qui secondo te? */
              trasposta.data = malloc ( trasposta.M * trasposta.N * sizeof(double)); 
    
              for( i = 0; i< (mat->N); i++)
              {
                     for ( j=0; j < (mat->M); j++)
                     {
                           trasposta.N = mat->M; /* Che senso hanno queste assegnazioni? */
                           trasposta.M = mat->N;
                     }
                }
                return &trasposta;
    }
  • Re: Esercizio sulle matrici

    SVNiko ha scritto:


    
    struct matrix {
            size_t N, M;
            double *data;
    };
    Questa è la struttura di matrix?
    Ciao!
    Si esatto la struct di matrix è quella lì..

    SVNiko ha scritto:


    Se è quella di sopra allora, inserisco due quesiti come commento nel codice sotto, cerca di rispondere.
    
    struct matrix *mat_transpose ( const struct matrix *mat)
    {
              size_t i = 0;
              size_t j = 0;
    
              struct matrix trasposta;
    
              /* Quanto valgono trasposta.M e trasposta.N qui secondo te? */
              trasposta.data = malloc ( trasposta.M * trasposta.N * sizeof(double)); 
    
              for( i = 0; i< (mat->N); i++)
              {
                     for ( j=0; j < (mat->M); j++)
                     {
                           trasposta.N = mat->M; /* Che senso hanno queste assegnazioni? */
                           trasposta.M = mat->N;
                     }
                }
                return &trasposta;
    }
    Mi rendo conto che è sbagliata..ma non saprei come correggerla.
    Provo a rispondere comunque alle tue domande..
    trasposta.data non dovrebbe aver allocato una matrice di trasposta.M * trasposta.N double?
    Cioè una matrice 3x2 ? Riprendendo i dati del main ?

    Per l'altro quesito che mi hai posto, vorrei scambiare le righe con le colonne per ottenere la matrice trasposta. Quindi vorrei mettere la riga i-esima della matrice di partenza nella colonna j-esima della matrice trasposta e mettere la colonna j-esima della matrice di partenza nella riga i-esima della matrice trasposta.
    Ma se metto degli indici i e j nelle due righe di codice che ho scritto mi da un sacco di errori..
  • Re: Esercizio sulle matrici

    Ascolta le mie domande non sono per fare un'interrogazione o per metterti in difficoltà, ma per stimolare la comprensione del problema.
    Se vuoi capire qualcosa è importante che ti poni delle domande e cerchi di dare le risposte.

    Le mie domande sono precise, prova a rispondere:

    Che valori hanno trasposta.N e trasposta.M in quel punto del programma.
    trasposta.data non dovrebbe aver allocato una matrice di trasposta.M * trasposta.N double?
    Rispondo io alla tua risposta/domanda. No!
    Prova a rispondere alla mia di domanda e vedrai che comprendi il perché del No!
  • Re: Esercizio sulle matrici

    In quel punto lì non hanno alcun valore..
    Secondo me..
    Ah forse ho capito quello che intendi.
    Devo modificarlo così ?
    
    trasposta.data = malloc( mat->M * mat->N * sizeof(double));
    
  • Re: Esercizio sulle matrici

    Bene! Per essere precisi non ha nessun valore che sia utile a te, perchè un valore ce l'hanno ma a te è ignoto.

    Quindi questa scrittura:

    trasposta.data = malloc ( trasposta.M * trasposta.N * sizeof(double));

    non ha alcun senso, giusto?

    Se concordi con me puoi già provare ad aggiustare il codice, e risolvi il primo dei problemi. Poi vedremo il ciclo di assegnazione.

    redigit:

    Ecco quell'allocazione già ha più senso. Lavora sul ciclo adesso, che ci sei!
  • Re: Esercizio sulle matrici

    Ok il primo problema è risolto .. Grazie !
    Adesso con il ciclo c'è da ridere.. Per non piangere.

    Allora può essere che debba creare una nuova struct in cui copiare mat->M ?
Devi accedere o registrarti per scrivere nel forum
45 risposte