Rechercher : dans
Par :

[C++] Matrices, pointeurs et fonctions...

Dernière réponse le 12 fév 2008 à 16:45:24 Tzeentch, le 12 fév 2008 à 15:09:27 
 Signaler ce message aux modérateurs

Bonjour,

Je me replonge dans le C++ et les pointeurs car j'aurais besoin de programmer (entre autres...) une fonction qui calcule un produit de matrices. Je me suis replongé dans ce forum et dans les WikiLivres mais je n'ai pas réussi à forger un code sans erreur.

Dans mon programme principal, j'ai déclaré 3 matrices de dimensions fixes:

exemple:
double A[3][3], double B[3][3], double X[3][3];

Imaginons que je veuille faire le produit X=A*B
Comme j'en ai plusieurs de la sorte et que je ne connais pas les classes je voulais appeler une fonction en passant des pointeurs comme paramètres.
L'avantage étant que la fonction manipule directement les bonnes variables.

J'ai essayé quelquechose du genre:

Int main
{
double A[3][3], double B[3][3], double X[3][3];

//ici j'ai initialisé les valeurs de la matrice X à 0 avec une boucle

//ici j'ai défini les valeurs de A et de B

//ici j'appelle la fonction produit selon le schéma que je pensais être bon en tout cas pour des variables double normales
produit(&A,&B,&X);

//je m'attends à avoir dans X le résultat
}

void produit (double *pA[3][3], double *pB[3][3], double *pX[3][3]) //je définis des pointeurs dans la fonction
{
int i,j,k;
//ici je calcule le produit des matrices en utilisant le déréférencement des pointeurs pour manipuler les variables
for (i=0,i<3,i++)
{
for (j=0,j<3,j++)
{
for (k=0,k<3,k++)
{
*pX[i][j]=(*pA[i][k])*(*pB[k][j])+*pX[i][j]
}
}
}

}

Evidemment ce n'est pas bon mais que dois-je faire?

Merci d'avance pour votre aide.

Tzeentch

Configuration: Windows XP
Firefox 2.0.0.2

Meilleures réponses pour « [C++] Matrices, pointeurs et fonctions... » dans :
Langage C++ - Les pointeurs Voir Comme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

superCC, le 12 fév 2008 à 15:13:12
Répondre à superCC

2

Tzeentch, le 12 fév 2008 à 15:17:48

Oui, oui mais ca c'est le produit des matrices. ça je sais faire, ce n'est pas le problème ^^
Je ne l'ai écrit que pour montrer l'opérateur de déréférencement. C'est pour le reste que ca m'interesse :D

Répondre à Tzeentch

3

Char Snipeur, le 12 fév 2008 à 15:21:32

Houlà !
déjà révise tes pointeurs et tableaux.
Comme on me l'a déjà fait remarqué sur le forum, tableau et pointeurs, c'est différent. Mais, en gros, un double A[][] correspond à un double** B.(un Type A[]; est très proche d'un Type* const B; pour être plus précis)
essai plutôt :
void produit (double** A,double** B,double **X);
et appel la fonction : produit(A,B,C)
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

5

Tzeentch, le 12 fév 2008 à 15:30:19

Oui... je me doutais pour la double étoile...
Mais pourquoi appeler la fonction sans utiliser les "&" alors?
et au moment du calcul que dois-je écrire?

J'ai beau réviser sans cesse, les pointeurs et moi ca fait 36 :(

Merci quand meme.

Répondre à Tzeentch

7

 Char Snipeur, le 12 fév 2008 à 16:45:24

Prenons le cas plus simple d'un vecteur.
double A[3],B[3],X[3];
void produit (double* Af,double* Bf,double *Xf);
produit(A,B,C)

A est équivalent à un double * c'est à dire que *A==A[0], *(A+1)==A[1];
lors de l'appel de la fonction, tu passe l'adresse A à la variable Af de type double*. C'est comme si tu fesait double *Af=A;
Si tu fait une sorti console, tu as A=x001, et Af=x001, donc lorsque tu modifie les valeur pointé par Af, tu modifie les valeurs pointés par A.
En revanche si dans la fonction produit tu fait Af=\x002, et qu'en suite tu fait Af[0]=3, tu ne modifie plus A[0] et A vaut toujours \x001 !
Donc un simple passage de A à produit suffit, pas besoin de passer l'adresse de A.
Il faut voir qu'en C ce n'est jamais la variable qui est passé en paramètre d'une fonction, mais une copie. Dans le cas d'un double, c'est une copie de la valeur, dans le cas d'un double* c'est la copie de l'adresse.
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

4

superCC, le 12 fév 2008 à 15:29:14

Effectivement, tu ne peux pas définir ta fonction ainsi. Tu ne définis pas la grosseur de tes matrices en paramètre! Tu passes seulement les pointeurs en param et tu dois instancier par la suite

Répondre à superCC

6

superCC, le 12 fév 2008 à 16:21:24

Salut!

Bon je vais essayer de t'aider un peu mieux. J'ai trouvé la réponse à ta question dans ce tutoriel :

http://www.cplusplus.com/doc/tutorial/pointers.html

Bonne lecture!

Répondre à superCC