[RESOLU]Debutant en C++, petite question a propos d'un programme

Debutant en C++, petite question a propos d'un programme [RESOLU] - C++ - Programmation

Marsh Posté le 23-09-2009 à 20:42:18    

Bonjour,
Actuellement étudiant, je débute en C++.  
J'avais pour exercice de créer un programme permettant de trier 10 chiffres, voici le code :  

Code :
  1. #define N 10
  2. #include <iostream>
  3. #include <stdlib.h>
  4. using namespace std;
  5. int pos_max(int t[], int p);
  6. int main()
  7. {
  8. srand(NULL);
  9. int t[N];
  10. int m;
  11. for(int i=0; i<N; i++)
  12. {
  13.  t[i]=rand()%9;
  14.  cout <<t[i]<< " ";
  15. }
  16. cout << endl;
  17. m=0
  18. for (; m<N; m++)
  19. {
  20.  cout << m << " " << N << endl;
  21.  int p=pos_max(t, N-m);
  22.  cout << p << endl;
  23.  int aux= t[p];
  24.  t[p]=t[N-m];
  25.  t[N-m]=aux;
  26. }
  27. for (int i=0; i<N; i++)
  28. {
  29.  cout <<t[i]<< " ";
  30. }
  31. return 0;
  32. }
  33. int pos_max(int *t, int p)
  34. {
  35. int pmax=0;
  36. for (int i=0; i<p; i++)
  37. {
  38.  if (t[i]>t[pmax])
  39.  {
  40.   pmax=i;
  41.  }
  42. }
  43. return pmax;
  44. }


 
 
Le probleme est que le "m" démarre à 10 ( cf. Le cout que j'ai placé. voici le resultat d'une simulation :  
6 6 5 7 7 6 1 1 2 4  
10 10
0
6 6 5 7 7 6 1 1 2 4 .
 
Je ne comprend pas pourquoi m ne commence pas a 0 puis 1....  
 
Merci d'avance,
berse


Message édité par berserendo le 24-09-2009 à 23:33:07
Reply

Marsh Posté le 23-09-2009 à 20:42:18   

Reply

Marsh Posté le 23-09-2009 à 21:40:45    

déjà ton code compile pas, il manque un ; après m=0

 

ensuite t[N-m] ça déborde du tableau, il faut remplacer par t[N-m-1] vu que les indices de ton tableau vont de 0 à 9

 

mais sinon, une fois que ça compile, m commence bien à 0 ;)


Message édité par Aiua le 23-09-2009 à 21:43:19

---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Marsh Posté le 23-09-2009 à 23:02:29    

j'ai fait la modification que tu m'as dis, mais j'ai toujours le même probleme... :(

Code :
  1. #define N 10
  2. #include <iostream>
  3. #include <stdlib.h>
  4. using namespace std;
  5. int pos_max(int t[], int p);
  6. int main()
  7. {
  8. srand(NULL);
  9. int t[N];
  10. int m;
  11. // Fabrication du tableau.
  12. for(int i=0; i<N; i++)
  13. {
  14.  t[i]=rand()%9;
  15.  cout <<t[i]<< " ";
  16. }
  17. cout << endl;
  18. for (m=0; m<N; m++)
  19. {
  20.  cout << m << " " << N << endl;
  21.  int p=pos_max(t, N-m-1);
  22.  cout << p << endl;
  23.  int aux=t[p];
  24.  t[p]=t[N-m-1];
  25.  t[N-m-1]=aux;
  26. }
  27. for (int i=0; i<N; i++)
  28. {
  29.  cout <<t[i]<< " ";
  30. }
  31. return 0;
  32. }
  33. int pos_max(int t, int p)
  34. {
  35. int pmax=0;
  36. for (int i=0; i<p; i++)
  37. {
  38.  if (t[i]>t[pmax])
  39.  {
  40.   pmax=i;
  41.  }
  42. }
  43. return pmax;
  44. }



Message édité par berserendo le 24-09-2009 à 08:50:43
Reply

Marsh Posté le 24-09-2009 à 15:31:56    

Déjà je sais pas comment tu fais pour compiler parce que ta fonction "pos_max" prend un int en argument au lieu d'un int* (pour t). Après avoir corrigé ça marche.
 
EDIT : Je viens de voir que tu avais déclaré le prototype correctement, par contre la signature de la définition est incorrecte


Message édité par pierre_brochant le 24-09-2009 à 15:35:14
Reply

Marsh Posté le 24-09-2009 à 20:24:44    

nan mais ton appel à pos_max, c'était bien N-m qu'il fallait, c'est après que ça n'allait pas :D


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
Reply

Marsh Posté le 24-09-2009 à 23:30:59    

Super, ca marche, j'ai compris ! merci beaucoup à tous.

Reply

Marsh Posté le 24-09-2009 à 23:44:19    

srand(time(NULL)) :o et mauvais usage de rand


Message édité par Taz le 24-09-2009 à 23:44:39
Reply

Sujets relatifs:

Leave a Replay

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