Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Passare matrici e restituire matrici in una funzione
Forum - C/C++ - Passare matrici e restituire matrici in una funzione

Avatar
coreyt (Normal User)
Rookie


Messaggi: 21
Iscritto: 28/02/2010

Segnala al moderatore
Postato alle 23:23
Mercoledì, 07/03/2012
Salve forum!
Ho un problema con il mio programma in C, vorrei passare una matrice ad una funzione e assegnare il risultato di questa funzione ad un'altra matrice. Ho scritto questo codice

Codice sorgente - presumibilmente C++

  1. int* trasponi (int m[][], int r, int c); //prototipo
  2.  
  3. #define maxr 30
  4. #define maxc 30
  5.  
  6. int main ()
  7. {
  8. int m[maxr][maxc];
  9. int r,c;
  10. ...
  11. mt = trasponi (m, r, c);
  12. ...
  13. }
  14.  
  15. int* trasponi (int m[maxr][maxc], int r, int c)
  16. {
  17. int i,j;
  18. int mt[maxr][maxc];
  19. for (i=0; i<=r-1; i++)
  20. {
  21. for (j = 0; j <= c-1; j++)
  22. {
  23. mt[j][i] = m[i][j];
  24. }
  25. }
  26. return mt;
  27. }



ma quando lo vado a compilare mi da l'errore nella riga mt = trasponi (m, r, c); nel main con errore "incompatible types in assignment". Sapete aiutarmi e dirmi come risolvere questo problema? Grazie in anticipo :)

PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Up
2
Down
V
Segnala al moderatore
Postato alle 10:00
Giovedì, 08/03/2012
Ciao!

Il compilatore ti da errore perché lavori con le matrici bidimensionali.
In questi casi dovresti dichiarare:
Codice sorgente - presumibilmente C/C++

  1. int** trasponi (int m[maxr][maxc], int r, int c)



E comunque sarebbe sbagliato, siccome il valore di ritorno è un puntatore ad una matrice locale.

In questi casi, passa l' argomento alla funzione in questo modo:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define maxr 30
  5. #define maxc 30
  6.  
  7. typedef  int tMatrice[maxr][maxc]; // creo un tipo apposito
  8.  
  9. void trasponi (tMatrice, tMatrice, int, int ); //prototipo
  10.  
  11. int main ()
  12. {
  13.   tMatrice m, mt;
  14.   int r,c;
  15.  
  16.   trasponi (m,mt, r, c);
  17.   return 0;
  18. }
  19.  
  20. void trasponi (tMatrice m, tMatrice mt, int r, int c)
  21. {
  22.   int i,j;
  23.   for (i=0; i<r; i++)
  24.   {
  25.     for (j = 0; j <c; j++)
  26.     {
  27.       mt[j][i] = m[i][j];
  28.     }
  29.   }
  30. }


Ultima modifica effettuata da Poggi Marco il 08/03/2012 alle 10:02
grazie mille! così il codice funziona e il risultato è proprio quello che volevo, grazie ancora! - coreyt - 11/03/12 02:57


Nulla va più veloce della luce, quindi rilassati.
PM