Retourner tableau 2d [Résolu]

ZogStriP 164 Messages postés dimanche 16 novembre 2003Date d'inscription 5 juillet 2005 Dernière intervention - 24 juil. 2004 à 16:23 - Dernière réponse : cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention
- 26 juil. 2004 à 21:56
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))
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 24 juil. 2004 à 17:01
1
Merci
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

Merci glipper 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de glipper
Meilleure réponse
ZogStriP 164 Messages postés dimanche 16 novembre 2003Date d'inscription 5 juillet 2005 Dernière intervention - 24 juil. 2004 à 17:41
1
Merci
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))

Merci ZogStriP 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ZogStriP
Meilleure réponse
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 24 juil. 2004 à 18:01
1
Merci
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)

Merci cs_djl 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_djl
glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 24 juil. 2004 à 17:49
0
Merci
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
Commenter la réponse de glipper
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 juil. 2004 à 21:02
0
Merci
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
Commenter la réponse de leprov
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 25 juil. 2004 à 21:02
0
Merci
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++
Commenter la réponse de leprov
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 26 juil. 2004 à 20:14
0
Merci
non, un tableau n'est pas un pointeur, mais la conversion se fait implicitement
Commenter la réponse de cs_djl
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 26 juil. 2004 à 21:23
0
Merci
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".
Commenter la réponse de leprov
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 26 juil. 2004 à 21:28
0
Merci
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....
Commenter la réponse de leprov
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 26 juil. 2004 à 21:32
0
Merci
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
Commenter la réponse de cs_djl
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 26 juil. 2004 à 21:33
0
Merci
j'ajoute que ces 3 ecritures reviennent au meme

fonction(type tableau[50]);

fonction(type tableau[50]);

et

fonction(type *tableau);
Commenter la réponse de cs_djl
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 26 juil. 2004 à 21:34
0
Merci
je voulais mettre fonction(type tableau[]); en second
Commenter la réponse de cs_djl
leprov 1163 Messages postés vendredi 23 juillet 2004Date d'inscription 21 octobre 2010 Dernière intervention - 26 juil. 2004 à 21:39
0
Merci
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..........)
Commenter la réponse de leprov
cs_djl 3011 Messages postés jeudi 26 septembre 2002Date d'inscription 27 novembre 2004 Dernière intervention - 26 juil. 2004 à 21:56
0
Merci
tout a fais
Commenter la réponse de cs_djl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.