|
|
|
|
Bonjour,
je suis actuellement en train d'ecrire un petit programme en c++, dans lequel j'ai un tableau trié.
J'aimerai qu'à chaque lancement du programme, le tableau soit mélangé de manière aléatoire.
J'ai donc utilisé la fonction "random_shuffle(Tableau, Tableau + 10);"
Mon problème est que la première valeur reste en place (1 en position 1) et la dernière aussi (10 en position 10)
Mon second problème est que le mélange est toujours le même à chaque lancement du programme, il ne semble donc pas être aléatoire du tout.
Mon troisième problème est qu'une des valeurs est replacée par 0 (Zéro).
Si quelqu'un connait cette fonction et pourrai m'apporter quelques explications/aide, j'en serai très heureux....
merci. Jérémie
Configuration: Windows XP Firefox 2.0.0.9
Bonjour,
|
Salut davmk!
|
Eh bien à vrai dire j'avais flairé un truc comme ca, et ca ne change rien, quelle que soit la valeur passé en paramètre...du coup je ne vois pas bien à quoi sert cet argument. J'ai essayé avec un tableau de 50 éléments, et même si je passe (tableau;tableau+ 40) ca mélange quand même, mais la valeur 50 reste en 50ème position....c'est très curieux |
Oups au temps pour moi, ce paramètre sert bien à préciser combien de "n" premiers rangs il faut mélanger, sans toucher au suivants. Donc avec + 40 ca me mélange bien les 40 premiers nombres, et pas les dix derniers. Mais à +50, il n'en mélange que 49...
|
Bizarre,
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
int main()
{
srand(time(NULL));
int a[] = {1,4,3,6,8,89,35,25};
random_shuffle(a, a+8);
for(int i = 0; i < 8; i++){
cout << a[i] << ":";
}
cout << endl;
return 0;
}
Sorties: 3:89:8:1:6:25:4:35: 1:35:25:3:8:4:6:89: etc... Et, selon la documentation, le générateur calcule quelle possibilité prendre parmi les (2e paramètre - 1er paramètre)! possibilités de triage. Il faut donc que ce chiffre soit égal au nombre de données pour avoir un résultat convenable. Désolé pour le code un peu bâtard, mais je suis plus habitué en C qu'en C++. |
Re:)
|