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 :
- #include <iostream.h>
- #include <fstream.h>
- #include <math.h>
- #include <stdlib.h>
- #include <time.h>
- #include <stdio.h>
- void main()
- {
- ofstream fichier("hasard.xls" );
- if (!fichier)
- {
- cerr << "Impossible d'ouvrir le fichier!" << endl;
- return (-1);
- } //endif
- int alea[4400];
- srand (time(NULL));
- for (int i=0;i<4400;i++)
- {
- int nb;
- nb=(rand()%9)+1;
- fichier <<nb<< endl;
- alea[i]=nb;
- }//endfor
- int tri[4400];
- int i=1;
- int j=2;
- tri[0]=alea[0];
- while(alea[i]==tri[0])
- {
- i++;
- } //endwhile
- tri[1]=alea[i];
- i++; //init 1ere var rainflow
- for(;i<4400;i++)
- {
- if (tri[j-2]<tri[j-1])
- {
- while((alea[i+1]<alea[i]||alea[i]>=tri[j-1]))
- {
- i++;
- } //endwhile
- tri[j]=alea[i];
- j++;
- //i++;
- } //endif
- if (tri[j-2]>tri[j-1])
- {
- while((alea[i+1]>alea[i]||alea[i]<=tri[j-1]))
- {
- i++;
- } //endwhile
- tri[j]=alea[i];
- j++;
- //i++;
- } //endif
- } //endfor
- for (int k=0;k<4400;k++)
- {
- printf("%d",tri[k]);
- } //endfor
- char fin;
- cout<<"Appuyer sur une touche pour quitter!";
- cin>>fin;
- } //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