Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ho messo a posto un po' di indici nei cicli ... ti mostro tutte le parti modificate e quelle eliminate in quanto inutili ...

    Per il main, parto da dopo l'input di righe e colonne fino alla fine

    codice:
        matrice = (int**) malloc((righe * sizeof(int*)));
        for (i = 0; i < righe; i++) 
            matrice[i] = (int*) malloc(colonne * sizeof(int));
        
        trasp = (int**) malloc((colonne * sizeof(int*)));
        for (i = 0; i < colonne; i++) 
            trasp[i] = (int*) malloc(righe * sizeof(int));
        
        ris = (int**) malloc((righe * sizeof(int*)));
        for (i = 0; i < righe; i++) 
            ris[i] = (int*) malloc(righe * sizeof(int));
        
        for (i = 0; i < righe; ++i) {
            for (j = 0; j < colonne; ++j) {
                printf("Inserisci elemento riga %d e colonna %d: ", i, j);
                fflush(stdout);
                scanf("%d", &matrice[i][j]);
                printf("\n");
                fflush(stdout);
            }
        }
        
        trasposta(trasp, matrice, righe, colonne);
        moltiplicazione(ris, trasp, matrice, righe, colonne);
        
        for (i = 0; i < righe; ++i) {
            for (j = 0; j < colonne; ++j) {
                printf("matrice[%d][%d]= %d ", i, j, matrice[i][j]);
                fflush(stdout);
            }
            printf("\n");
            fflush(stdout);
        }
    
    
    
    
        for (i = 0; i < colonne; ++i) {
            for (j = 0; j < righe; ++j) {
                printf("trasp[%d][%d]= %d ", i, j, trasp[i][j]);
                fflush(stdout);
            }
            printf("\n");
            fflush(stdout);
        }
    
    
    
    
        for (i = 0; i < righe; ++i) {
            for (j = 0; j < righe; ++j) {
                printf("ris[%d][%d]= %d ", i, j, ris[i][j]);
                fflush(stdout);
            }
            printf("\n");
            fflush(stdout);
        }

    per le funzioni

    codice:
    void trasposta(int **trasp, int **matrice, int righe, int colonne) 
    {
        int i, j; 
        for (i = 0; i < righe; i++) {
            for (j = 0; j < colonne; j++) {
                trasp[j][i] = matrice[i][j];
            }
        }
    }
    
    
    void moltiplicazione(int **ris, int **trasp, int **matrice, int righe, int colonne)
    {
        int i, j, k;
        for (i = 0; i < righe; i++) 
            for (j = 0; j < righe; j++) 
            {
                ris[i][j] = 0;
                for (k = 0; k < colonne; k++) 
                    ris[i][j] += matrice[i][k] * trasp[k][j];
            }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #2
    usando questo metodo, le ultime due colonne danno dei valori sballati, ecco il risultato:
    Righe........: 3
    Colonne......: 2


    Inserisci elemento riga 0 e colonna 0: 1


    Inserisci elemento riga 0 e colonna 1: 2


    Inserisci elemento riga 1 e colonna 0: 3


    Inserisci elemento riga 1 e colonna 1: 1


    Inserisci elemento riga 2 e colonna 0: 2


    Inserisci elemento riga 2 e colonna 1: 3


    variabile temporanea 1
    variabile temporanea 2
    variabile temporanea 3
    variabile temporanea 6
    variabile temporanea 12
    variabile temporanea 18
    variabile temporanea 6
    variabile temporanea 12
    variabile temporanea 18
    variabile temporanea 1
    variabile temporanea 2
    variabile temporanea 3
    matrice[0][0]= 1 matrice[0][1]= 2
    matrice[1][0]= 3 matrice[1][1]= 1
    matrice[2][0]= 2 matrice[2][1]= 3
    trasp[0][0]= 1 trasp[0][1]= 3 trasp[0][2]= 2
    trasp[1][0]= 2 trasp[1][1]= 1 trasp[1][2]= 3
    ris[0][0]= 3 ris[0][1]= 18 ris[0][2]= 1566414912
    ris[1][0]= 18 ris[1][1]= 3 ris[1][2]= 1566414912
    da cosa può dipendere?!
    Non dovrebbe essere un problema di puntatoti, e allo stesso tempo, la variabile temporanea assume valori che risultano corretti
    Ultima modifica di mariella_88; 26-05-2014 a 19:57
    Maria

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Hai usato il codice che ti ho mostrato io ? Non mi pare perché non visualizzo la variabile temporanea ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Si l'ho usato, l'unica cosa che ho dovuto cambiare (per generalizzare il prodotto visto che non mi serve solo per il prodotto con la trasposta) è che ho inserito righe e colonne di entrambi le matrici.. E visto che non mi trovavo, ho stampato il valore intermedio per capire dove fosse il problema.. Ti riporto il for:
    codice:
    void moltiplicazione(int **ris, int **matr1, int **matr2, int righe1,        int colonne1,int righe2,int colonne2){
        int i, j, k;
        for (i = 0; i < righe1; i++)
            for (j = 0; j < colonne2; j++)
            {
                ris[i][j] = 0;
                for (k = 0; k < colonne1; k++)
                    ris[i][j] += matr1[i][k] * matr2[k][j];
            }
    
    
    }
    Maria

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non sono necessari tutti i dati di righe e colonne ma solamente 3 (infatti non è necessario il parametro righe2). La funzione potrebbe essere

    codice:
    void moltiplicazione(int **ris, int **matr1, int **matr2, int righe1, int colonne1, int colonne2)
    {
        int i, j, k;
        for (i = 0; i < righe1; i++)
            for (j = 0; j < colonne2; j++)
            {
                ris[i][j] = 0;
                for (k = 0; k < colonne1; k++)
                    ris[i][j] += matr1[i][k] * matr2[k][j];
            }
    }
    Come chiami la funzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    codice:
    moltiplicazione(ris, trasp, matrice,colonne,righe,righe, colonne);
    Maria

  7. #7
    Ho tolto il parametro che non serviva.. ma visto che devo calcolare A(trasp)*A ho invertito nella chiamata alla funzione le duematrici.. Il problema è che mi escono numeri del tipo 5308612 nell'ultima riga
    Maria

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    EDIT

    Io ho scritto

    moltiplicazione(ris, matrice, trasp, righe, colonne, righe);
    Ultima modifica di oregon; 26-05-2014 a 21:58
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se la moltiplicazione è trasp x matrice allora ris deve essere allocato così

    codice:
    ris = (int**) malloc((colonne * sizeof(int*)));
    for (i = 0; i < colonne; i++) 
            ris[i] = (int*) malloc(colonne * sizeof(int));
    e ugualmente la visualizzazione di ris
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Adesso funziona perfettamente grazie.
    Maria

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 © 2026 vBulletin Solutions, Inc. All rights reserved.