pb tri dans tableau

pb tri dans tableau - C++ - Programmation

Marsh Posté le 11-02-2005 à 16:31:27    

salut
 
j'essayais en fait de réaliser le tri d'un tableau (1 dimension, 4400 éléments) d'entiers aléatoires (compris entre 1 et 9)de la façon suivante:
 
-je ne garde que les valeurs localement extrèmales du tableau
cad si j'ai la sequence 15896852 je garderais 19682
 
-je ne doit pas garder 2 valeurs conscutives égales dans le tableau trié
 
 
pour ce faire j'ai écris l'algo suivant :

Code :
  1. #include <iostream.h>
  2. #include <fstream.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <stdio.h>
  7. void main()
  8. {
  9. ofstream fichier("hasard.xls" );
  10. if (!fichier)
  11. {
  12.     cerr << "Impossible d'ouvrir le fichier!" << endl;
  13.     return (-1);
  14. } //endif
  15. int alea[4400];
  16. srand (time(NULL));
  17. for (int i=0;i<4400;i++)
  18. {
  19. int nb;
  20. nb=(rand()%9)+1;
  21. fichier <<nb<< endl;
  22. alea[i]=nb;
  23. }//endfor
  24. int tri[4400];
  25. int i=1;
  26. int j=2;
  27. tri[0]=alea[0];
  28. while(alea[i]==tri[0])
  29. {
  30. i++;
  31. }   //endwhile
  32. tri[1]=alea[i];
  33. i++;         //init 1ere var rainflow
  34. for(;i<4400;i++)
  35. {
  36. if (tri[j-2]<tri[j-1])
  37. {
  38. while((alea[i+1]<alea[i]||alea[i]>=tri[j-1]))
  39. {
  40. i++;
  41. }    //endwhile
  42. tri[j]=alea[i];
  43. j++;
  44. //i++;
  45. }   //endif
  46. if (tri[j-2]>tri[j-1])
  47. {
  48. while((alea[i+1]>alea[i]||alea[i]<=tri[j-1]))
  49. {
  50. i++;
  51. //endwhile
  52. tri[j]=alea[i];
  53. j++;
  54. //i++;
  55. } //endif
  56. } //endfor
  57. for (int k=0;k<4400;k++)
  58. {
  59. printf("%d",tri[k]);
  60. } //endfor
  61. char fin;
  62.      cout<<"Appuyer sur une touche pour quitter!";
  63.      cin>>fin;
  64. //endvoid


 
il semble fonctionner (en dehors d'un défaut à l'initialisation de la 2é valeur du tableau trié mais ce n'est pas l'objet de la question)
 
PROBLEME:
régulièrement mais pas systématiquement l'algo me renvoie une liste trié fausse :
          -le nombre d'éléments du tableau n'est plus 4400
          -les derniers chiffres non-nuls du tableau se termine à chaque fois par la séquence 201331441
 
??
 
d'où ma question qu'est-ce qui pourrait provoquer ce phénomène
et surtout pourquoi cela se produit-il uniquement parfois
 
 
merci pour tout éclairage


Message édité par lechals le 13-02-2005 à 12:00:50
Reply

Marsh Posté le 11-02-2005 à 16:31:27   

Reply

Marsh Posté le 13-02-2005 à 11:57:20    

oh du C

Reply

Marsh Posté le 13-02-2005 à 12:21:50    

Si tu n'indentes pas correctement ton code, je prédis que tu n'auras pas bcp d'aide.

Reply

Marsh Posté le 13-02-2005 à 12:22:31    


j'en étais sur [:ddr555]
 
bon allez, je m'y colle...
lechals >> je te met des annotations sur ton code
 

Code :
  1. // edit Harko : en C++, on utilise les entêtes sans extension :
  2. // <iostream>, <fstream>, etc...
  3. // de plus, stdio et stdlib n'ont rien à faire ici, ce sont des déclarations C
  4. #include <iostream.h>
  5. #include <fstream.h>
  6. #include <math.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <stdio.h>
  10. // edit Harko : int main() et pas void main()
  11. void main()
  12. {
  13. ofstream fichier("hasard.xls" );
  14. if (!fichier)
  15. {
  16.     cerr << "Impossible d'ouvrir le fichier!" << endl;
  17.     return (-1); // edit Harko : t'es gonflé de renvoyer une valeur alors que ta déclaration de main est censée ne pas en renvoyer
  18. } //endif
  19. int alea[4400]; // edit Harko : tu es en C++, donc tu utilises un truc genre vector<int>
  20. srand (time(NULL));
  21. for (int i=0;i<4400;i++)
  22. {
  23. int nb;
  24. nb=(rand()%9)+1; // edit Harko : utilisation de rand() merdique
  25. fichier <<nb<< endl;
  26. alea[i]=nb;
  27. }//endfor
  28. int tri[4400];
  29. int i=1;
  30. int j=2;
  31. tri[0]=alea[0];
  32. while(alea[i]==tri[0])
  33. {
  34. i++;
  35. }   //endwhile
  36. tri[1]=alea[i];
  37. i++;         //init 1ere var rainflow
  38. for(;i<4400;i++)
  39. {
  40. if (tri[j-2]<tri[j-1])
  41. {
  42. while((alea[i+1]<alea[i]||alea[i]>=tri[j-1]))
  43. {
  44. i++;
  45. }    //endwhile
  46. tri[j]=alea[i];
  47. j++;
  48. //i++;
  49. }   //endif
  50. if (tri[j-2]>tri[j-1])
  51. {
  52. while((alea[i+1]>alea[i]||alea[i]<=tri[j-1]))
  53. {
  54. i++;
  55. //endwhile
  56. tri[j]=alea[i];
  57. j++;
  58. //i++;
  59. } //endif
  60. } //endfor
  61. for (int k=0;k<4400;k++)
  62. {
  63. printf("%d",tri[k]); // edit Harko : pourquoi printf() alors que tu bosses en C++ ?
  64. } //endfor
  65. char fin;
  66.      cout<<"Appuyer sur une touche pour quitter!";
  67.      cin>>fin; // edit Harko : cin.ignore() plutot
  68. //endvoid


 
je me suis pas penché sur ton tri (en espérant qu'il n'y ait pas de leaks), mais tu ferais mieux d'utiliser un vector plutot que ton tableau


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

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