Cours EDUCATEL

Cours EDUCATEL - C++ - Programmation

Marsh Posté le 03-05-2006 à 20:55:12    

Bonjour,
que tout le monde se rassure, je ne demande pas qu'on me fasse mes devoirs (manquerait plus que ça au prix que je paye).
Je suis dans la dernière ligne droite de mes cours et seul un devoir me pose soucis. Je vais essayer d'être clair et concis.
 
Il m'est demandé d'ajouter une fonction void determinant() const; à une classe Matrice. Jusque là pas de problème. Je dois pouvoir tester ma fonction avec le bout de code suivant :

Code :
  1. void initialise(Matrice &mat)
  2. {
  3. Matrice::Vecteurs& m(mat.elements);
  4. m.clear();
  5. m.insert(m.begin(),4,Matrice::Vecteur(4,0));
  6. mat.rows=mat.cols=4;
  7. m[0][0]=0;m[1][0]=1;m[2][0]=1;m[3][0]=2;
  8. m[0][0]=3;m[1][1]=2;m[2][1]=0;m[3][1]=1;
  9. m[0][0]=0;m[1][2]=1;m[2][2]=2;m[3][2]=4;
  10. m[0][0]=2;m[1][3]=3;m[2][3]=2;m[3][3]=0;
  11. }
  12. void main(void)
  13. {
  14. Matrice A;
  15. initialise(A);
  16. cout<<"A = "<<endl;
  17. A.affiche();
  18. cout<<"Det(A) = "<<A.determinant()<<endl;
  19. }


Pas franchement compliqué : il suffit de recopier... quoique, je me demande si la ligne mat.rows=mat.cols=4; ne serait pas en réalité m.rows=m.cols=4;. Peu importe, mon soucis n'est pas là.
En fait, dans l'intitulé du devoir, il est spécifié qu'il faut copier le fichier ~lia/serie-notee/prog3.cc qui est en fait le corrigé de l'exercice 2 de la série 14 et dont le sujet était justement la modélisation des matrices. Le hic (et j'en ai eu confirmation par le professeur) c'est que l'exercice 2 de la série 14 ne fait pas partie de mon programme. J'ai donc demandé à mon professeur de m'aider mais il ne veux rien entendre et pour lui c'est réalisable avec l'intitulé de l'exercice.
Je me suis alors acharné à essayer de reconstituer cette classe mais je peine à cette tache du fait de petites incompréhensions.
Par exemple, Matrice::Vecteurs& m(mat.elements); semble être une fonction statique qui prend pour paramètres mat.elements.  
Oui mais quel est le type de cette données ?  
Et puis qu'effectue réellement cette fonction ?
Je suppose que m.clear(); sert à faire une RAZ de la matrice.
Mais m.insert(m.begin(),4,Matrice::Vecteur(4,0));, qu'effectue réellement cette fonction ?  
Et quels types de paramètres accepte t elle ?
Dans la lignée, mêmes interrogations pour m.begin() et que dire de Matrice::Vecteur(4,0) ?
J'arrête là parce que plus j'avance dans mes interrogations et plus je désespère de trouver des réponses.  
J'espère simplement que quelqu'un pourra éclairer ma lanterne et me permettre ainsi d'effectuer ce devoir dont le sujet réel est, je le rappelle, la création d'une fonction calculant le déterminant.
Merci d'avance pour vos réponse.

Reply

Marsh Posté le 03-05-2006 à 20:55:12   

Reply

Marsh Posté le 06-05-2006 à 14:56:30    

olala ...
 
- d'abord change le sujet du topic pour quelquechose de plus descriptif
 
- oui, ce serait m.rows=...=4, mais j'ai l'impression que tu fait fausse route, normalement la mémoire est allouée dans le constructeur,
 
> Matrice::Vecteurs& m(mat.elements);
> Matrice::Vecteur(4,0));
- faudra que je me rappelle de déconseiller les cours que tu prends, apparemment ils ne t'apprennent pas à reconnaître un constructeur. Outre que la classe Matrice semble bien mal organisée... il s'agit de constructeurs appartenant aux sous classes Vecteur et Vecteurs de la classe Matrice.
 
> m.begin()
> ...
- sans le code de la classe on ne peut pas deviner à quoi servent certains morceaux de code.
 

Code :
  1. cout<<"A = "<<endl;
  2. A.affiche();
  3. cout<<"Det(A) = "<<A.determinant()<<endl;

c'est moche

Message cité 1 fois
Message édité par nargy le 06-05-2006 à 14:57:39
Reply

Marsh Posté le 08-05-2006 à 09:03:23    

nargy a écrit :


- faudra que je me rappelle de déconseiller les cours que tu prends, apparemment ils ne t'apprennent pas à reconnaître un constructeur. Outre que la classe Matrice semble bien mal organisée... il s'agit de constructeurs appartenant aux sous classes Vecteur et Vecteurs de la classe Matrice.


 
Voire même si Dritzz35 pouvait se faire rembourser ca serait pas mal.
Les cours de C++ qui commence avec un constrcuteur vide et une méthode .initialise :|  
ca meriterait le bagne !

Reply

Marsh Posté le 08-05-2006 à 17:03:09    

Matrice::Vecteurs& m(mat.elements);
Ca ressemble plutôt à une référence, qu'un constructeur.
En gros ça te permet de taper m à la place de mat.element (assez embêtant de le retaper pour chaque éléments).
 
Matrice::Vecteurs est un type à priori : std::vector<Vecteur>
et Vecteur est sans doute : std::vector<int>
 
Sinon mat.rows=mat.cols=4; n'est pas une erreur c'est juste qu'on ne veut pas accéder à mat.elements.
 
Donc en gros dans ta classe y a au moins rows, cols (des entiers), deux typedef (Vecteur et Vecteurs) et elements de type Vecteurs.
Plus bien sûr les méthodes : affiche, déterminant, ...
 
clear, insert, begin, ... sont des méthodes de vector donc t'as pas à les taper :)
 
Voilà je pense que c'est clair, reste plus qu'a taper le code ;)
 
PS : Pour le initialise en dehors du constructeur, je ne vois pas où est le problème.
Si on veut créer une matrice qui servira à recevoir le résultat d'un calcul par exemple,
il est inutile de l'initialiser avant il vaut donc mieux en faire une fonction séparée,
après rien n'empêche de la lancer directement depuis le constructeur si on en a toujours besoin.
Une fonction membre serait cependant bienvenue.
 
Mais de toute façon, ici le but est uniquement de remplir la matrice pour pouvoir tester le calcul du déterminant.


Message édité par Tarabiscote le 08-05-2006 à 17:38:12
Reply

Marsh Posté le 08-05-2006 à 20:49:29    

Bien pris pour tous ces conseils.
Pour répondre rapidement à chacun de vous :  
> non, il n'est pas question qu'EDUCATEL me rembourse... ;)  Quant à la qualité des cours dispensés, je ne peux pas trop me prononcer puisque je n'ai aucun élément de comparaison et je ne bosse même pas dans ce domaine (je suis mécano sur aéronefs). J'en suis encore à me demander si ce n'est pas l'interface chaise/clavier qui fait défaut (repeat : je suis mécano sur aéronefs). Moi qui voulais faire de ma passion un métier, j'ai le sentiment d'être très limité  :??:  
> En ce qui concerne Matrice::Vecteurs& m(mat.elements); si j'ai bien compris, c'est un constructeur de copie.
 

Citation :

 

Matrice::Vecteurs est un type à priori : std::vector<Vecteur>
et Vecteur est sans doute : std::vector<int>

 

> merci, ça c'est pour moi un scoop : maintenant il va falloir que je reprenne mes cours illico presto pour dégoter les chapitres qui peuvent m'en dire plus sur les "vectors".
Ben je vous remercie tous pour tous ces conseils, il vont beaucoup m'aider. Juste pour info, j'ai en fait décidé, pour le devoir, de construire une petite classe Matrice très simple et de revoir les fonctions initialise et main de façon simple également. Mais celà n'est que pour le devoir. J'ai en effet la ferme intention de comprendre tout ceci de pied en cape et de bosser un jour dans le développement....peut être dans des langages plus simples et plus accessibles.
topic règlé !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed