Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    55

    [C++] Far puntare una matrice ad un altra matrice?

    Ciao a tutti, sono ore che perdo tempo su questo problema e non riesco a venirne a capo.

    Ho fatto questa funzione:
    codice:
    void trasposta_matrice(int **matrice, int &m, int &n)
    {
        int **trasposta = NULL;
        int t;
    
    
        trasposta = alloca_matrice(n, m);
    
    
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                trasposta[j][i] = matrice[i][j];
            }
        }
    
        dealloca_matrice(matrice, m, n);
    
        stampa_matrice(trasposta, n, m);
        cout<<"OK"<<endl;
    
         *matrice = *trasposta;
    
        delete[] trasposta;
    
        t=m;
        m=n;
        n=t;
    
    }
    La funzione dovrebbe effettuare la trasposta di una matrice (anche non quadrata), quindi ho pensato di creare a runtime una nuova matrice "trasposta" di dimensione nxm rispetto alla matrice da trasporre "matrice" di dimensione mxn.
    Fatto ciò, copio gli elementi che stanno all'interno di "matrice" nella matrice "trasposta" ma con colonne e righe invertite.
    Stampando la matirce "trasposta", nessun problema... tutto va come deve andare.
    Ora, visto che vorrei che nella matrice data come parametro ci sia la matrice trasposta, vorrei far puntare il **matrice alla stessa locazione di memoria di trasposta per poi cancellare la matrice non trasposta.
    Fatto ciò, scambio i valori di m e n.

    L'effetto finale dovrebbe essere quello di aver ottenuto la matrice trasposta nella stessa variabile puntatore che si utilizza all'inizio, il problema è che mi ritrovo una matrice con la prima riga trasposta correttamente e gli elementi restanti tutti sballati.
    Come posso risolvere?

    Spero di essermi spiegato bene, se avete bisogno di chiarimenti chiedete


    GRAZIE MILLE!

  2. #2
    La funzione per cambiare il valore di matrice, deve ricevere matrice per riferimento.
    Non devi deallocare la nuova matrice trasposta altrimenti la funzione diventa inutile, in ogni caso quella deallocazione non è effettuata correttamente.
    codice:
    void trasposta_matrice(int **&matrice, int &m, int &n)
    {
        int **trasposta = alloca_matrice(n, m);
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                trasposta[j][i] = matrice[i][j];
        dealloca_matrice(matrice, m, n);
        matrice = trasposta;
        int t=m;
        m=n;
        n=t;
        stampa_matrice(matrice, n, m);
    }
    Ultima modifica di Samuele_70; 29-03-2015 a 22:27
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.