MODULE DE GESTION DE MATRICE

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 22 juil. 2004 à 23:56
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 23 juil. 2004 à 21:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24795-module-de-gestion-de-matrice

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 21:49
Matrice& operator = (const Matrice &);

dur à voir, c'est canonique, le compilo cherchait cette declaration pour l'operateur interne d'affectation

il te manque aussi le constructeur par defaut, et ca c'est tres important, a partir du moment ou tu redefini un constructeur, tu doit redefinir egalement celui par defaut (sans parametre)

ca peut etre aussi bien

Matrice();

que

Matrice( int 5, int 5, int = 0);
cs_shen Messages postés 17 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 16 août 2004
23 juil. 2004 à 21:23
c ok!
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 21:20
comment tu as declaré l'operateur = ?

met à jour le zip pour voir
cs_shen Messages postés 17 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 16 août 2004
23 juil. 2004 à 21:04
djl > j'ai rajoute l'operateur = comme tu m'avais dir mais j'ai un prob...quand j'ecrit par exemple pour deux matrices a et b :
a a+b, ou a a*b....
c'est cette erreur a la compilation :
no match for 'Matrice& = Matrice' operator.
par contre si j'ecrit : a = b;
c'est correct...
??? bizarre, j'ai pourtant bien les bons operateurs definis...
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 20:48
pense aussi à utiliser un type non signé ou un size_t pour les dimensions, c'est fait pour


class Matrice
{
public:
typedef std::size_t size_type;
...
private:
size_type N, P;
Matrix XxMatrice;
};
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 20:45
si tu compte utiliser des cin (iostream) vau mieux pas que ce soit une fonction membre (pour les memes raisons que pour display)
le plus simple c'est des constructeurs prenant en parametres des tableau, des vector, des valarray... pour permettre diverses initialisations

par exemple

Matrice( int, int, double *);
cs_shen Messages postés 17 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 16 août 2004
23 juil. 2004 à 20:41
j'ai pas encore terminé! si vous regarde dans les fonctions membres, certaines ne sont pas encore implementees. La fonction qui permet de remplir une matrice avec les valeurs de l'utilisateur est Matrice::GetMatrice().
Ceci dit, il est preferable d'en faire une fonction membre ou non, c'est a dire d'entrer les valeurs a l'initialisation?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 19:13
a oui c'est vrai, ca rend ta classe peu fonctionnel

rajoute des constructeur permettant l'initialisation

http://www.cppfrance.com/code.aspx?ID=22840
Iwin Messages postés 24 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 23 juillet 2004
23 juil. 2004 à 14:05
Euh, c'est cool mais comment tu fais pour initialiser une matrice avec les valeurs que tu veux ?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 juil. 2004 à 08:03
shen > kirua te l'a bien expliquer, si tu veux afficher ta matrice dans la console, utilise cout, mais il faut que ce soit separé de ton module (dans une fonction externe à ton module)
sinon tu limite gandement les possibilité d'utilisation de ton module
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 juil. 2004 à 01:54
shen > il y en a beaucoup de texte devant toi en ce moment et pourtant pas l'ombre d'une console.
Evite de penser console systematiquement, a part pour du debug comme dit Kirua, on en voit plus trop l'utilite.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 juil. 2004 à 00:58
ben, justement, dans un moteur 3D tu t'en ficherais pas mal d'afficher la matrice dans la console (sauf pr le débuggage), puisque ce qui t'intéresserais ne serait pas le contenu de la matrice (pr une résolution de problèmes, comme une calculatrice), mais bien son utilisation pratique interne au moteur (calcul des perspectives, de la lumière etc, ça me dépasse de tte façon, mais je sais que ça trouve un usage là dedans), et pour cela tu n'aurais besoin à aucun moment d'afficher le contenu de la matrice, et c'est pr cela qu'il est bien d'isoler cette fonction du module, tt en le rendant "activable" à la compilation, soit pr débug, soit pr l'utilisation première que tu en as je suppose, qui est le calcul matriciel en tant que tel.
cs_shen Messages postés 17 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 16 août 2004
23 juil. 2004 à 00:53
dans ce cas, comment faire pour afficher du texte sans utiliser iosream?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 juil. 2004 à 00:49
le truc d'éviter l'utilisation de la sortie standard dans un module, c'est que tu n'utiliseras pas forcément ta classe dans un programme qui en fera usage (de la sortie console), et que donc ce serait dommage de devoir inclure la bibliothèque iostream ds ton programme pour pvr utiliser la classe de matrices, sans en avoir l'usage (parce que iostream bouffe plein de place ds l'exe).
cs_shen Messages postés 17 Date d'inscription dimanche 29 décembre 2002 Statut Membre Dernière intervention 16 août 2004
23 juil. 2004 à 00:45
merci djl pour tes commentaires, tres utiles.
sinon, j'ai pas tres bien comprit la subtilite qui fait que l'utilisation de "std::cout" n'est pas conseille pour l'affichage. Pour un moteur 3D, c'est ok, sinon....pourquoi?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 juil. 2004 à 00:35
faudrait calculer les déterminants et les rangs, et ça serait encore mieux ^^
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 juil. 2004 à 23:56
pour un debut c'est bien

delete[] XxMatrice; et pas delete XxMatrice; sinon ca fuie

et si tu rajoute l'operateur =, ta classe sera vraiment securisée

pour la methode display, elle necessite std::cout de iostream et ca peut etre genant, surtout pour un moteur 3d ou ca n'a rien à faire

met la en inline et fait generer le code seulement si iostream est inclu

// dans le corps
#ifdef _CPP_IOSTREAM
inline void Display() ;
#endif

// dans le fichier .hpp, apres le corps
#ifdef _CPP_IOSTREAM
inline void Matrice::Display()
{
for(int i=0; i #include <ctime> et non time.h

a par ca je trouve que c'est bien codé, surtout si tu debute

j'avaiss deja posté une classe matrice generique si ca t'interesse
Rejoignez-nous