Matrice d'une classe complexe...

Résolu/Fermé
skandourabes Messages postés 5 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 6 février 2010 - 7 déc. 2009 à 21:33
skandourabes Messages postés 5 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 6 février 2010 - 8 déc. 2009 à 18:58
Bonjour,jai une classe complexe avec des methodes comme addition avec reel avec un autre complexe multiplication etc...
je desire mnt saisir une matrice d'objet "complexe" mais je ny arrive pas...
est ce que je dois declarer la methode matrice(permettant la saisie de la matrice) a l'interieur de la classe complexe ou bien dans le programme pricipal comme uneistruction ????
Merci.

4 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
7 déc. 2009 à 22:14
Bonjour,

tu veux une sorte d'objet qui contient des objets complexes, donc qui utilise des objets complexes. Tu vas donc créer une classe Matrice, qui va utiliser (comme variables private par exemple) des objets de type Complexe. Donc ce sont bien deux choses différentes, il ne faut pas les déclarer l'un a l'intérieur de l'autre. Ensuite il faudra par exemple faire une méthode dans la classe Matrice qui invite l'utilisateur à entrer plusieurs nombres complexes pour assigner ces différentes valeurs.

Note : si tu veux pouvoir facilement créer une matrice à dimension variable (certaines font 2x2, d'autres 3x3, ...) je te conseille de te tourner vers un conteneur standard... mais enfin ça dépend du langage que tu utilises.
0
skandourabes Messages postés 5 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 6 février 2010
7 déc. 2009 à 22:24
dsl joublié :) je suis en C++.
alors je suis arrivé a initialiser une matrice de complexe en mettant la methode a linterieur meme de la classe complexe...mais en retournant un complexe jutilise pas vraiment lobjet a la base donc..

complexe complexe::matrice()
{complexe mat[2][2];
for(int i=0;i<2;i++)
{for(int j=0;j<2;j++)
{mat[i][j].init();
}
return mat[2][2];
} en plus a l'affichage jai nimporte quoi.

alors j'aurai voulu pouvoir ecrire
void complexe::matrice()
{
for(int i=0;i<2;i++)
{for(int j=0;j<2;j++)
{this[i][j]->init();
}
}
mais ya des erreur :( ché pas ou est exactement l'erreur
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
7 déc. 2009 à 22:49
il y a deux problèmes.

Un problème, le plus important selon moi, c'est celui de la conception. Si tu crées juste une matrice à l'aide de [2][2] pour en faire une 2*2, ok pas de problème. Mais tu ne dois pas créer ça dans la classe complexe!

C'est juste un tableau deux dimensions avec 4 variables complexes. La classe complexe et déclarée, et ensuite, ailleurs, (dans le main() par exemple) tu crées ta matrice :
complexe mat[2][2];
for(int i=0;i<2;i++) {
  for(int j=0;j<2;j++) {
    mat[i][j].init();
  }
}


Deuxième problème, tu ne sais pas trop comment gérer les tableaux apparemment :

return mat[2][2]; // ça ne veut rien dire.

En fait ça voudrait dire : retourne l'élément en position (2;2) dans le tableau de complexe nommé Mat.
Mais il n'y a rien ! mat a 2 lignes et 2 colonnes, il n'y a que mat[0][0], mat[1][0], mat[0][1], mat[1][1].
(le c++ permet totu de même d'exécuter ça mais il te renvoie n'importe quoi car à cet endroit dans la mémoire il y a du bazar, mais en tout cas pas quelquechose de ta matrice, c'est pour cela que tu obtiens n'importe quoi)

Ensuite, pour faire une fonction qui retourne un tableau (ce qu'apparemment tu souhaites faire) et pas juste mettre ce code dans main() tel quel, deux choses :

1) elle doit renvoyer un complexe**, pas un complexe . et il faudrait faire return mat; tout simplement. Mais attention ! Et c'est là où le fait de faire une classe matrice serait intéressant, c'est que ce tableau retourné par la fonction, tu n'as pas vraiment moyen de savoir s'il est 2 2 ou 3 3 ou 4 4 ... après que la fonction se soit terminée. Si tu n'as que des 2 2 c'est pas trop grave, tu sais ce que tu auras en retour. Mais sinon il faudra faire pas mal de boulot à ce niveau.

2) il faudra créer dans cette fonction le tableau à l'aide de malloc (dynamiquement) et ne pas oublier de le libérer avec free après. Je ne sais pas si tu as appris à faire ça...

Mais tout ça c'est en style C, en C++ tu peux utiliser des conteneurs standards (std::vector<> ) et/ou créer toi même ta classe Matrice pour gérer la taille, l'initialisation de la matrice entière, crée des fonctions membres de la classe qui feront pour toi certains calculs (ajouter deux matrices, calculer son déterminant, etc...) de manière beaucoup plus claire.
0
skandourabes Messages postés 5 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 6 février 2010
8 déc. 2009 à 18:58
merci bcp
0