Tris en c++

Tris en c++ - C++ - Programmation

Marsh Posté le 26-11-2005 à 18:51:29    

Bonjour à tous,
Voilà je dois écrire un programme, et j' ai besoin à un moment de trier une liste de données en plusieurs ensembles.
J'explique: on doit faire un programme qui classe des vitesses de services suivis du numero ATP du joueur qui sert.
On a donc 2 vecteurs: vit[n] et atp[n]
Selon les donnée qu'on met en cin, il foit afficher:
-les faibles: ceux qui servent  à une vitesse inférieur à 150km/h
-les moyens: qui servent entre 150 et 200 km/h
-les forts: servent à + en 200km/h
 
J'ai donc commencé par essayer de classer juste les faibles mais j'ai une erreur quelque part.
Voici la partie de mon code:
 

Code :
  1. int main(int argc, char*const argv[])
  2. {
  3.   int n,vit[n],atp[n];
  4.   int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];
  5.   int a,b,c;
  6.  
  7.   cout<<"introduisez le nombre de joueurs total: ";
  8.     cin>>n;
  9.     cout<<"inserez le numero atp suivit de la moyenne des services du joueur:";
  10.     cout<<" "<<endl;
  11.     a=0;
  12.     b=0;
  13.     c=0;
  14.     for(int i=0;i<n;i++)
  15.        cin>>atp[i]>>vit[i];
  16.    
  17.     for(int i=0;i<n;i++)
  18.        {
  19.        if(vit[i]<150)
  20.         {
  21.          vit150[a]=vit[i]; 
  22.          atp150[a]=atp[i];   
  23.          a++;     
  24.         }}
  25.      
  26.     cout<<"les faibles sont: "<<atp150[a]<<" et respectivement leur vitesses: "<<vit150[a];
  27.     cin>>a;
  28.   return 0;
  29. }


 
Je me suis peut-être embrouillé dans les vecteurs, mais il faudrait qu'il m'affiche tous les services en dessous des 150km/h suivis de leur numero ATP.
Merci infiniment à celui qui m'aide à résoudre mon problème.
 :hello:

Message cité 1 fois
Message édité par -neophyte- le 26-11-2005 à 21:45:03
Reply

Marsh Posté le 26-11-2005 à 18:51:29   

Reply

Marsh Posté le 26-11-2005 à 20:40:00    

Pour afficher tous les serveurs faible, tu dois faire une boucle  

Code :
  1. for(intk=0;k<a;k++)
  2. cout<<"les faibles sont: "<<atp150[a]<<" et respectivement leur vitesses: "<<vit150[a];


 
stef
 

-neophyte- a écrit :

Bonjour à tous,
Voilà je dois écrire un programme, et j' ai besoin à un moment de trier une liste de données en plusieurs ensembles.
J'explique: on doit faire un programme qui classe des vitesses de services suivis du numero ATP du joueur qui sert.
On a donc 2 vecteurs: vit[n] et atp[n]
Selon les donnée qu'on met en cin, il foit afficher:
-les faibles: ceux qui servent  à une vitesse inférieur à 150km/h
-les moyens: qui servent entre 150 et 200 km/h
-les forts: servent à + en 200km/h
 
J'ai donc commencé par essayer de classer juste les faibles mais j'ai une erreur quelque part.
Voici la partie de mon code:
 

Code :
  1. int main(int argc, char*const argv[])
  2. {
  3.   int n,vit[n],atp[n];
  4.   int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];
  5.   int a,b,c;
  6.  
  7.   cout<<"introduisez le nombre de joueurs total: ";
  8.     cin>>n;
  9.     cout<<"inserez le numero atp suivit de la moyenne des services du joueur:";
  10.     cout<<" "<<endl;
  11.     a=0;
  12.     b=0;
  13.     c=0;
  14.     for(int i=0;i<n;i++)
  15.        cin>>atp[i]>>vit[i];
  16.    
  17.     for(int i=0;i<n;i++)
  18.        {
  19.        if(vit[n]<150)
  20.         {
  21.          vit150[a]=vit[i]; 
  22.          atp150[a]=atp[i];   
  23.          a++;     
  24.         }}
  25.      
  26.     cout<<"les faibles sont: "<<atp150[a]<<" et respectivement leur vitesses: "<<vit150[a];
  27.     cin>>a;
  28.   return 0;
  29. }


 
Je me suis peut-être embrouillé dans les vecteurs, mais il faudrait qu'il m'affiche tous les services en dessous des 150km/h suivis de leur numero ATP.
Merci infiniment à celui qui m'aide à résoudre mon problème.
 :hello:


Reply

Marsh Posté le 26-11-2005 à 21:44:39    

scol30 a écrit :

Pour afficher tous les serveurs faible, tu dois faire une boucle  

Code :
  1. for(intk=0;k<a;k++)
  2. cout<<"les faibles sont: "<<atp150[a]<<" et respectivement leur vitesses: "<<vit150[a];


 
stef


 
 
Ok merci stef  :)  
En effet, il faut aussi que le cout tourne. Mais j'ai encore quelques problèmes:
-le tri ne veux pas se faire. il reconnait pas quelques chose et en cout il me met des choses bizarres genre 15424342
pour une réponse...
-pour le cout, je voudrais qu'il fasse:
 
les joueurs faibles sont: ... , ... , ...
ainsi que la vitesse respective de leur service: ... , ... , ...
 
donc que ca tourne en boucle sans qu'il me répète antant de fois ces 2 phrases mais juste les réponses.
J'espère que vous voyez de quoi je veux parler...

Reply

Marsh Posté le 27-11-2005 à 16:39:35    

ton problème semble venir de ta 2ieme boucle for. Quand tu fais la comparaison

Code :
  1. if(vit[n]<150)


en fait c'est plutôt  

Code :
  1. if(vit[i]<150)


 
Donc au final avec affichage comme tu veux:

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc, char*const argv[]) {
  4.   int n,vit[n],atp[n];
  5.   int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];
  6.   int a,b,c;
  7.  
  8.   cout<<"introduisez le nombre de joueurs total: ";
  9.   cin>>n;
  10.   cout<<"inserez le numero atp suivit de la moyenne des services du joueur:";
  11.   cout<<" "<<endl;
  12.   a=0;
  13.   b=0;
  14.   c=0;
  15.   for(int i=0;i<n;i++)
  16.     cin>>atp[i]>>vit[i];
  17.  
  18.   for(int i=0;i<n;i++) {
  19.     if(vit[i]<150) {
  20.       vit150[a]=vit[i]; 
  21.       atp150[a]=atp[i];   
  22.       a++;     
  23.     }
  24.   }
  25.  
  26.   cout<<"les faibles sont: ";
  27.   for(int i=0; i<a ; i++) {
  28.     cout << atp150[i];
  29.     if((i+1) == a)
  30.       cout<<".";
  31.     else
  32.       cout<< ", ";
  33.   }
  34.   cout<<"\nla vitesse respective de leur service: ";
  35.   for(int i=0; i<a ; i++) {
  36.     cout<<vit150[i]<< ", ";
  37.     if((i+1) == a)
  38.       cout<<".";
  39.     else
  40.       cout<< ", ";
  41.   }
  42.   cout<<"\n";
  43.   return 0;
  44. }
  45. Stef


-neophyte- a écrit :

Ok merci stef  :)  
En effet, il faut aussi que le cout tourne. Mais j'ai encore quelques problèmes:
-le tri ne veux pas se faire. il reconnait pas quelques chose et en cout il me met des choses bizarres genre 15424342
pour une réponse...
-pour le cout, je voudrais qu'il fasse:
 
les joueurs faibles sont: ... , ... , ...
ainsi que la vitesse respective de leur service: ... , ... , ...
 
donc que ca tourne en boucle sans qu'il me répète antant de fois ces 2 phrases mais juste les réponses.
J'espère que vous voyez de quoi je veux parler...


Reply

Marsh Posté le 27-11-2005 à 17:52:38    

ami de l'abstraction bonsoir.

Reply

Marsh Posté le 27-11-2005 à 19:36:45    

scol30 a écrit :

ton problème semble venir de ta 2ieme boucle for. Quand tu fais la comparaison

Code :
  1. if(vit[n]<150)


en fait c'est plutôt  

Code :
  1. if(vit[i]<150)


 
Donc au final avec affichage comme tu veux:

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc, char*const argv[]) {
  4.   int n,vit[n],atp[n];
  5.   int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];
  6.   int a,b,c;
  7.  
  8.   cout<<"introduisez le nombre de joueurs total: ";
  9.   cin>>n;
  10.   cout<<"inserez le numero atp suivit de la moyenne des services du joueur:";
  11.   cout<<" "<<endl;
  12.   a=0;
  13.   b=0;
  14.   c=0;
  15.   for(int i=0;i<n;i++)
  16.     cin>>atp[i]>>vit[i];
  17.  
  18.   for(int i=0;i<n;i++) {
  19.     if(vit[i]<150) {
  20.       vit150[a]=vit[i]; 
  21.       atp150[a]=atp[i];   
  22.       a++;     
  23.     }
  24.   }
  25.  
  26.   cout<<"les faibles sont: ";
  27.   for(int i=0; i<a ; i++) {
  28.     cout << atp150[i];
  29.     if((i+1) == a)
  30.       cout<<".";
  31.     else
  32.       cout<< ", ";
  33.   }
  34.   cout<<"\nla vitesse respective de leur service: ";
  35.   for(int i=0; i<a ; i++) {
  36.     cout<<vit150[i]<< ", ";
  37.     if((i+1) == a)
  38.       cout<<".";
  39.     else
  40.       cout<< ", ";
  41.   }
  42.   cout<<"\n";
  43.   return 0;
  44. }
  45. Stef



 
 
Suuuuuper!!
Vraiment merci beaucoup Stef!
Ton aide m'a été très précieuse. Grace à toi j'ai enfin fini mon projet woohouuu  :pt1cable:  
 :hello:

Reply

Marsh Posté le 28-11-2005 à 08:04:44    

maintenant que ca fonctionne il serait preferable que tu utilise des fonctions pour eclaircir ton prog. Je t'ai juste montre comment faire fonctionner ton prog. Il serait bien par exemplede faire des trucs comme ca:

Code :
  1. void affiche(int tab[], int index){
  2.   for(int i=0; i<index ; i++) {
  3.     cout << tab[i];
  4.     ((i+1) == index) ? cout<<".": cout<< ", ";
  5.   }
  6. }


ce qui modifies ton main  

Code :
  1. int main() {
  2.   int n=2,vit[n],atp[n];
  3.   int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];
  4.   int a,b,c;
  5.  
  6.   cout<<"introduisez le nombre de joueurs total: ";
  7.   cin>>n;
  8.   cout<<"inserez le numero atp suivit de la moyenne des services du joueur:";
  9.   cout<<" "<<endl;
  10.   a=0;
  11.   b=0;
  12.   c=0;
  13.   for(int i=0;i<n;i++)
  14.     cin>>atp[i]>>vit[i];
  15.  
  16.   for(int i=0;i<n;i++) {
  17.     if(vit[i]<150) {
  18.       vit150[a]=vit[i]; 
  19.       atp150[a]=atp[i];   
  20.       a++;     
  21.     }
  22.   }
  23.  
  24.   cout<<"les faibles sont: ";
  25.   affiche(atp150, a);
  26.   cout<<"\nla vitesse respective de leur service: ";
  27.   affiche(vit150, a);
  28.   cout<<"\n";
  29.   return 0;
  30. }


Essaies de faire la meme chose pour remplir tes tableaux.
Quand ca marcheras essaies de passer a l'utilisation de vector<>. et ainsi de suite.
 
Stef

Reply

Marsh Posté le 28-11-2005 à 09:32:25    

-neophyte- a écrit :


Code :
  1. int n,vit[n],atp[n];
  2. int vit150[n],atp150[n],vit150_200[n],atp150_200[n],vit200[n],atp200[n];




 
Sérieux ca fonctionne ca ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 28-11-2005 à 10:00:17    

blackgoddess a écrit :

Sérieux ca fonctionne ca ?


 
En C99 oui

Reply

Marsh Posté le 28-11-2005 à 10:02:45    

je comprends pas, les tableaux sont initialisés quand alors ? parce que la lors de la déclaration des tableaux, n n'est pas initialisé !


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 28-11-2005 à 10:02:45   

Reply

Marsh Posté le 28-11-2005 à 18:36:16    

blackgoddess a écrit :

je comprends pas, les tableaux sont initialisés quand alors ? parce que la lors de la déclaration des tableaux, n n'est pas initialisé !


 
ce comportement est indéfini mais :
 

Code :
  1. int f(int i) { return 2*i; }
  2. int n = f(5);
  3. int tab[n];


 
est censé fonctionner en C99

Reply

Marsh Posté le 29-11-2005 à 10:55:00    

oui, la variable doit avoir la bonne valeur avant d'etre utilisée pour déclarer le tableau (ce qui parait logique).
 
Donc je comprends pas comment son code fonctionne toujours.


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 01-12-2005 à 14:58:28    

Je comprend pas non plsu pourquoi sa amrche ( surement que n prend une valeur bizare ou ché pas )
 
pis pourquoi tu parle de vecteur quand tout se que ta, cé des int ??

Reply

Sujets relatifs:

Leave a Replay

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