Retourner tableau 2d [Résolu]

Signaler
Messages postés
164
Date d'inscription
dimanche 16 novembre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2005
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
J'ai une fonction qui retoure un tableau 2 dimension mais ça ne marche pas :

int MultiMatrice(int Matrice1[2][2], int Matrice2[2][2])
{
int MatriceResultat[2][2];
int i,j,k;
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
MatriceResultat[i][j] = 0;
for(k = 0; k < 2; k++)
MatriceResultat[i][j] += Matrice1[i][k] * Matrice2[k][j];
}
}
return MatriceResultat[2][2];
}

Quand je fais :
curMatrice[2][2] = MultiMatrice(tmpMatrice, Matrice);

Et bien il y a n'importe quoi dans curMatrice !

ZogStriP
IA pour : Incomplet de l'Ancéphale %-6
http://blog.developpeur.org/zogstrip/
8-) www.rubikscubor.fr.st 8-)

#define ThatTheQuestion ((bb) || !(bb))

14 réponses

Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
Je pense qu'il faut que ta fonction retourne un pointeur vers le premier element de ton tableau... sinon ce n'est pas possible à mon avis !
++ Glipper
Messages postés
164
Date d'inscription
dimanche 16 novembre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2005
1
Et comment on fait ça ?

ZogStriP
IA pour : Incomplet de l'Ancéphale %-6
http://blog.developpeur.org/zogstrip/
8-) www.rubikscubor.fr.st 8-)

#define ThatTheQuestion ((bb) || !(bb))
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
ZogStriP > litt un cours sur les tableaux et tu verra que ce que tu ecris n'a pas de sens, on peut pas affecter un tableau (ce n'est pas une variable)

on ne peut pas non plus retourner un tableau par valeur, seulement son adresse convertie en pointeur, et ta matrice MatriceResultat n'existe pas dans le contexte appelant donc tu dois passer la matrice resultat en paramettre à la fonction

void MultiMatrice(const int Matrice1[][2], const int Matrice2[][2], int MatriceResultat[][2])
{
int i,j,k;
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
MatriceResultat[i][j] = 0;
for(k = 0; k < 2; k++)
MatriceResultat[i][j] += Matrice1[i][k] * Matrice2[k][j];
}
}

}

glipper > un tableau 2d est une collection d'elements contigus, tu peut tres bien retourner un pointeur dessus (a condition qu'il existe dans le contexte appelant)
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
1
Hum... en fait je viens de m'apercevoir que renvoyer un pointeur, ca marche bien pour un tableau simple, mais je n'y arrive pas pour un tableau à deux dimenssions...
Ceci dit, je ne vois pas d'autres solutions possibles que les pointeurs.........
Je continu à chercher, et je te dis si j'y arrive :)
++ Glipper
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
euh....un tableau est deja un pointeur. lorsque tu ecris :
void MultiMatrice(const int Matrice1[][2], const int Matrice2[][2], int MatriceResultat[][2])

tu passe deja des références a tes tableaux. effectivement, la solution proposée par djl est la bonne
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
euh....un tableau est deja un pointeur. lorsque tu ecris :
void MultiMatrice(const int Matrice1[][2], const int Matrice2[][2], int MatriceResultat[][2])

tu passe deja des références a tes tableaux. effectivement, la solution proposée par djl est la bonne. sinon utilise des vectors si tu es en c++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
non, un tableau n'est pas un pointeur, mais la conversion se fait implicitement
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
bon alors je reformule:
quand on ecrit
TYPE fonction (TYPE tableau [])
{
//code
}

on passe la référence du tableau et non pas le talbeau (et effectivement personne ne passe un taleau par reference ou par pointeur, on n'a jamais appris a personne a faire comme ca, cest pas sans raisons....). de meme, lorsque écrit
tableau [i]
le compilteur interprete comme "adresse du premier élément du tableau décalé de i * taille des objets du tableau".
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
aufait pr expliquer un peu l'erreur qu'a commise zogstrip, quand tu retourne "return MatriceResultat[2][2];", tu retourne l'adresse du premier élément de ton tableau, codée sur 4 octets, tu stock cette adresse dans un int puisque ton parametre de retour est un int. donc tu as retournée une adresse stockée dans un int. tu as récupéré l'adresse de ton tableau dans un entier. essaie de reprendre ton code, et de faire
cout << multimatrice (mat1[][], mat2[][]);
tu verras le résultat....
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
Type tableau[50]; // c'est un tableau

fonction(type tableau[]) // tableau est un pointeur par conversion

tableau est l'adresse de sont premier element et lor du passage en parametre, il ya conversion

(Type *)&tableau[0] // implicite
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
j'ajoute que ces 3 ecritures reviennent au meme

fonction(type tableau[50]);

fonction(type tableau[50]);

et

fonction(type *tableau);
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
je voulais mettre fonction(type tableau[]); en second
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
tout a fait d'accord. d'ou l'utlité des vectors......et encore plus lorsqu'on manipule du tableau a plusieurs dimensions. dans tous les cas, en cas de manipulation de tableau a passer en parametres, petit conseil, passer la taille du tableau en parametre (si on a fait fonction (type tableau [50]), on peut tres bien ecrire a l'interieur de la fonction un truc genre "cout << tableau [1987]", ca marche tt a fait et ca affiche n'importe quoi....helas on peut pas vraiment proceder comme ca des que le tableau a plus d'une dimension. vive les vectors..........)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
7
tout a fais