Oppure

Loading
07/03/12 22:23
coreyt
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

int* trasponi (int m[][], int r, int c); //prototipo

#define maxr 30
#define maxc 30

int main ()
{
int m[maxr][maxc];
int r,c;
...
mt = trasponi (m, r, c);
...
}

int* trasponi (int m[maxr][maxc], int r, int c)
{
int i,j;
int mt[maxr][maxc];
for (i=0; i<=r-1; i++)
{
for (j = 0; j <= c-1; j++)
{
mt[j][i] = m[i][j];
}
}
return mt;
} 


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 :)
aaa
08/03/12 9:00
Poggi Marco
Ciao!

Il compilatore ti da errore perché lavori con le matrici bidimensionali.
In questi casi dovresti dichiarare:
 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:
#include <stdio.h>
#include <stdlib.h>

#define maxr 30
#define maxc 30

typedef  int tMatrice[maxr][maxc]; // creo un tipo apposito

void trasponi (tMatrice, tMatrice, int, int ); //prototipo

int main ()
{
  tMatrice m, mt;
  int r,c;

  trasponi (m,mt, r, c);
  return 0;
}

void trasponi (tMatrice m, tMatrice mt, int r, int c)
{
  int i,j;
  for (i=0; i<r; i++)
  {
    for (j = 0; j <c; j++)
    {
      mt[j][i] = m[i][j];
    }
  }
}
Ultima modifica effettuata da Poggi Marco 08/03/12 9:02
aaa