classement --> comment faire

classement --> comment faire - C++ - Programmation

Marsh Posté le 27-04-2004 à 17:14:14    

Bonjour,  
je suis étudiant à la rochelle en DUT info et j'avais a presenter pour avant les vacances un programme qui en fonction des resultats de matchs de football que l'on rentrait, pouvait nous donner le classement des buteuses et le classement general.
 
Seulement pour le classement general, la methode est la suivante j'ai une multimpap de la forme multimap<int, pair<string,Equipe> > ou l'entier est le nombre de points de l'equipe, le string le nom de l'equipe et Equipe une instance d'equipe.
Actuellement le programme fait une itération sur la map et affiche une equipe dans le classement lorsque le nombre de points de celle ci(l'entier) est égal a un nombre que je décremente au fur et a mesure.
 
Seulement avec cette méthode si 2 équipe ont le meme nombre de points, aucune distinction n'est faite hors dans la réalité le classement regarde des attributs des equipes (la difference de but des equipes) et les classes en fonction de cela , je cheche donc comment pourrais je introduire cette verification dans mon iteration Merci.
 
PS : je ne sais pas si c'est tres clair j'ai encore du mal a expliquer aux autres ce que je programme donc si vous avez des questions n'hésitez pas.
 
voila ce qui se passe actuellement :  
 
je orecise que terminal est une classe qui nous a ete fourni par les profs de l'IUT, en gros elle remplace cout et cin  

Code :
  1. void ClassementEquipes::afficherClassementEquipesDOM()
  2. {
  3. std::ifstream feClEquipes(Configuration().ficClassementEquipesA().c_str());
  4. chargerMultimap(feClEquipes);
  5. std::multimap<int,std::pair<std::string,Equipe> >::const_iterator itDOM;
  6. int pos=1;
  7. terminal.afficheMessage("\n \t \t \t \t \t \t  Classement a Domicile \n \n " );
  8. terminal.afficheMessage("\t \t \t        POS -  Equipe \t \tPts \t \t MG \t \tMN \t \tMP \t \tBM \t \tBP \t \tDif \n", false);
  9. terminal.afficheMessage("\t \t \t       \
  10. -----------------------------------------------------------------------------------------------------------------------------" );
  11. for( int b=88 ; b>=0 ; b=b-1)
  12. {
  13.      for(itDOM=MultimapClassEquipes.begin();itDOM!=MultimapClassEquipes.end();itDOM++)
  14. {
  15. if((*itDOM).second.second.nbPointsEquipeDOMA()==b)
  16. {
  17. terminal.afficheMessage("\t \t \t \t ",false);
  18. terminal.afficheInt(pos,false);
  19. terminal.afficheMessage("  -  ", false);
  20. terminal.afficheMessage((*itDOM).second.first, false);
  21. terminal.afficheMessage("\t \t", false);
  22. terminal.afficheInt((*itDOM).second.second.nbPointsEquipeDOMA(),false);
  23. terminal.afficheMessage("   \t \t ",false);
  24. terminal.afficheInt((*itDOM).second.second.nbMatchsGagnesDOMA(),false);
  25. terminal.afficheMessage(" \t \t",false);
  26. terminal.afficheInt((*itDOM).second.second.nbMatchsNulsDOMA(),false);
  27. terminal.afficheMessage("  \t \t",false);
  28. terminal.afficheInt((*itDOM).second.second.nbMatchsPerdusDOMA(),false);
  29. terminal.afficheMessage("  \t \t",false);
  30. terminal.afficheInt((*itDOM).second.second.nbbutsMisDOMA(),false);
  31. terminal.afficheMessage("  \t \t",false);
  32. terminal.afficheInt((*itDOM).second.second.nbbutsPrisDOMA(),false);
  33. terminal.afficheMessage("  \t \t",false);
  34. terminal.afficheInt((*itDOM).second.second.difButsDOMA(),false);
  35. terminal.afficheMessage("  \n" );
  36. pos++;
  37. }
  38. }
  39. }
  40. }


 
voila ce que je voudrais mais a mon avis ce que je suis en trainde faire est pas la bonne methode  

Code :
  1. void ClassementEquipes::afficherClassementEquipes()
  2. {
  3. std::ifstream feClEquipes(Configuration().ficClassementEquipesA().c_str());
  4. chargerMultimap(feClEquipes);
  5. std::multimap<int,std::pair<std::string,Equipe> >::const_iterator it;
  6. std::multimap<int,std::pair<std::string,Equipe> >::const_iterator it2;
  7. int pos=1;
  8. terminal.afficheMessage("\n \t \t \t \t \t \t  Classement a Domicile \n \n " );
  9. terminal.afficheMessage("\t \t \t        POS -  Equipe \t \tPts \t \t MG \t \tMN \t \tMP \t \tBM \t \tBP \t \tDif \n", false);
  10. terminal.afficheMessage("\t \t \t       \
  11. -----------------------------------------------------------------------------------------------------------------------------" );
  12. for( int b=88 ; b>=0 ; b=b-1)
  13. {
  14.      for(it=MultimapClassEquipes.begin();it!=MultimapClassEquipes.end();it++)
  15. {
  16. if((*it).second.second.nbPointsEquipeA()==b)
  17. {
  18.  for(it2=MultimapClassEquipes.begin();it2!=MultimapClassEquipes.end();it2++)
  19.  {
  20.   if((*it2).second.second.nbPointsEquipeA()==b && ((*it2).second.first)!=((*it).second.first) )
  21.    {
  22.    //il y a des egalites
  23.    //departageDifButs();
  24.    }
  25.   else
  26.   {
  27.   terminal.afficheMessage("\t \t \t \t ",false);
  28.   terminal.afficheInt(pos,false);
  29.   terminal.afficheMessage("  -  ", false);
  30.   terminal.afficheMessage((*it).second.first, false);
  31.   terminal.afficheMessage("\t \t", false);
  32.   terminal.afficheInt((*it).second.second.nbPointsEquipeA(),false);
  33.   terminal.afficheMessage("   \t \t ",false);
  34.   terminal.afficheInt((*it).second.second.nbMatchsGagnesA(),false);
  35.   terminal.afficheMessage(" \t \t",false);
  36.   terminal.afficheInt((*it).second.second.nbMatchsNulsA(),false);
  37.   terminal.afficheMessage("  \t \t",false);
  38.   terminal.afficheInt((*it).second.second.nbMatchsPerdusA(),false);
  39.   terminal.afficheMessage("  \t \t",false);
  40.   terminal.afficheInt((*it).second.second.nbbutsMisA(),false);
  41.   terminal.afficheMessage("  \t \t",false);
  42.   terminal.afficheInt((*it).second.second.nbbutsPrisA(),false);
  43.   terminal.afficheMessage("  \t \t",false);
  44.   terminal.afficheInt((*it).second.second.difButsA(),false);
  45.   terminal.afficheMessage("  \n" );
  46.   pos++;}
  47.  }
  48. }
  49. else
  50. {
  51. }
  52. }
  53. }
  54. }


Message édité par john8585 le 27-04-2004 à 17:40:11
Reply

Marsh Posté le 27-04-2004 à 17:14:14   

Reply

Marsh Posté le 27-04-2004 à 17:41:29    

voila avec le code c'est peut etre plus clair

Reply

Marsh Posté le 27-04-2004 à 18:07:43    

je crois qu'il faut que tu definisse une operateur de tri pour ta classe Equipe qui gere ce cas, et insatncier ta multimap en utilisant cette operateur.

Reply

Marsh Posté le 27-04-2004 à 18:13:16    

joel f a écrit :

je crois qu'il faut que tu definisse une operateur de tri pour ta classe Equipe qui gere ce cas, et insatncier ta multimap en utilisant cette operateur.


Comme je l'ai dit je débute, premiere année de DUT donc si tu pouvais m'expliquer ce qu'est un opérateur de tri et comment ca marche ca serait cool.
Merci

Reply

Marsh Posté le 27-04-2004 à 18:55:24    

personnellement, je mettres les points et le nom en tant que membres de la classe Equipe.
 
le tout maintenu dans un vector<Equipe>, et ton operator < qui prends en compte les points, et les autres attributs...

Reply

Marsh Posté le 27-04-2004 à 19:45:28    

les containers de la STL fournissent un argument template qui est l'operateur de comparaison sur les éléements ou dans ton cas sur les clés du container.
 
On peut définir un FONCTEUR, à savoir une classe fournissant une surcharge de l'opérateur() pour redefinir l'ordre sur différents éléments.
 
Le plus simple pour toi serait de stocket tout dans un vector<> et d'utiliser un foncteur qui tri tout selon l'ensemble de tes critéres.
 
Quelques Liens en vrac :
http://casteyde.christian.free.fr/ [...] x5263.html
http://casteyde.christian.free.fr/ [...] x8791.html
http://forum.hardware.fr/hardwaref [...] 5677-1.htm
http://docs.mandragor.org/files/Pr [...] c8899.html

Reply

Sujets relatifs:

Leave a Replay

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