Dubbio su matrice trasposta

di il
4 risposte

Dubbio su matrice trasposta

Buonasera a tutti. C'era un esercizio che dovevo svolgere che diceva:
Scrivere una funzione che prende in input una matrice e restituisca in output la matrice trasposta (ovvero la matrice in cui la j-esima colonna è la j-esima riga della matrice data, per j=1,2,..n).
Il punto è questo: sono riuscita a stampare la matrice trasposta, ma l'ho fatto semplicemente invertendo la stampa di righe e colonne e volevo sapere se è giusto o meno farlo. Questo è il codice:
#include <stdio.h>
#define R 4
#define C 6

/* Scrivere una funzione che prende in input una matrice e restituisca in output la matrice trasposta
(ovvero la matrice in cui la j-esima colonna è la j-esima riga della matrice data per j=1,2,...,n) */


/* Prototipo di funzioni */
int caricamento_matrice(int matrice[][C]);
int stampa_matrice(int matrice[][C]);
int stampa_trasposta(int matrice[][C]);

int main(){
    int mat[R][C];

caricamento_matrice(mat);
stampa_matrice(mat);
stampa_trasposta(mat);

return 0;

}

/* DEFINIZIONE DI FUNZIONI */
int caricamento_matrice(int matrice[][C]){
    int i, j;
    for(i=0; i<R; i++){
        for(j=0; j<C; j++){
    printf("Inserisci elemento riga %d colonna %d della matrice: ", i+1, j+1);
    scanf("%d", &matrice[i][j]);}
    }

}

int stampa_matrice(int matrice[][C]){
    int i, j;
for(i=0; i<R; i++){
   for(j=0; j<C; j++){
    printf("%d ", matrice[i][j]);
} printf("\n");
}}

int stampa_trasposta(int matrice[][C]){
    int i, j;

    printf("La matrice trasposta e': \n");
 for(j=0; j<C; j++){
        for(i=0; i<R; i++){
            printf("%d  ", matrice[i][j]);
        } printf("\n");
    }


}
E' sbagliato? Dovevo creare una matrice del tutto nuova? So che una matrice del tipo
1 2 3
4 5 6
7 8 9
in realtà è come se fosse un vettore di vettori del tipo (1 2 3 4 5 6 7 8 9) e che quindi la trasposta sarebbe il vettore di vettori (1 4 7 2 5 8 3 6 9) (almeno credo) ma ho il dubbio se il problema riguarda solo la stampa o meno. Scusate per il dubbio ma devo portare questo esercizio a un professore e non vorrei aver interpretato male. Grazie per la pazienza

4 Risposte

  • Re: Dubbio su matrice trasposta

    E' la funzione che deve restituire la matrice trasposta (non in output a video).

    Quindi deve ricevere come argomento la matrice originale da elaborare e quella trasposta da restituire.
    Nessuna visualizzazione dati all'interno della funzione.
  • Re: Dubbio su matrice trasposta

    oregon ha scritto:


    E' la funzione che deve restituire la matrice trasposta (non in output a video).

    Quindi deve ricevere come argomento la matrice originale da elaborare e quella trasposta da restituire.
    Nessuna visualizzazione dati all'interno della funzione.
    Ho riscritto in questo modo (ho aggiunto un'altra funzione per elaborare la trasposta e un'altra per stamparla):
    int trasposta(int matrice[][C], int matrice_trasposta[][R]){
        int i, j;
        for(i=0; i<R; i++){
            for(j=0; j<C; j++){
                matrice_trasposta[j][i]=matrice[i][j];
            }
        }
    
     return matrice_trasposta[C][R];
    
    }
    
    int stampa_trasposta(int matrice_trasposta[][R]){
        int i, j;
        printf("La matrice trasposta e': \n");
    for(i=0; i<C; i++){
        for(j=0; j<R; j++){
            printf("%d ", matrice_trasposta[i][j]);
        } printf("\n");
    }
    
    }
    E funziona, è corretto? Grazie ancora
  • Re: Dubbio su matrice trasposta

    La funzione deve essere void e la return non serve a nulla.
  • Re: Dubbio su matrice trasposta

    oregon ha scritto:


    La funzione deve essere void e la return non serve a nulla.
    Grazie, era un altro dubbio che avevo...
Devi accedere o registrarti per scrivere nel forum
4 risposte