A voir également:
- Random-shuffle sur tableau en c++
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Imprimer tableau excel sur une page - Guide
7 réponses
davmk
Messages postés
7
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
20 novembre 2007
20 nov. 2007 à 02:05
20 nov. 2007 à 02:05
Bonjour,
si je ne me trompe pas, tu dois initialiser la "base aléatoire". En C, il suffit d'inclure "time.h" et de faire srand(time(NULL)). Il doit donc y avoir un code similaire en C++.
Comme tu as pu le constater, il ne s'agit pas de nombres aléatoires mais de nombres "pseudo-aléatoires" générés par un algorithme de calcul plus ou moins efficace. Ces calculs se basent sur un nombre appel. la "base aléatoire", qui doit donc changer sans quoi l'algorithme retournera toujours les mêmes valeurs. en faisant srand(time(NULL)), tu affectes à la "base aléatoire" le temps courant, ce qui permet d'avoir des nombres différents à l'éxécution (sauf si l'intervalle est trop petite, de l'ordre des microsecondes).
En espérant t'avoir aidé ^^
si je ne me trompe pas, tu dois initialiser la "base aléatoire". En C, il suffit d'inclure "time.h" et de faire srand(time(NULL)). Il doit donc y avoir un code similaire en C++.
Comme tu as pu le constater, il ne s'agit pas de nombres aléatoires mais de nombres "pseudo-aléatoires" générés par un algorithme de calcul plus ou moins efficace. Ces calculs se basent sur un nombre appel. la "base aléatoire", qui doit donc changer sans quoi l'algorithme retournera toujours les mêmes valeurs. en faisant srand(time(NULL)), tu affectes à la "base aléatoire" le temps courant, ce qui permet d'avoir des nombres différents à l'éxécution (sauf si l'intervalle est trop petite, de l'ordre des microsecondes).
En espérant t'avoir aidé ^^
Salut davmk!
Je suis bien content, en suivant tes conseils ca marche beaucoup mieux! J'avais bien saisi ce concept de pseudo-aléatoire, mais je pensai que la référence à l'heure courante était déjà incluse dans la fonction.Donc maintenant le mélange est bien différent d'un lancement à l'autre du programme. Par contre, une des valeurs est toujours remplacée par 0, et la dernière valeur ne bouge jamais...10 reste en position 10... Aurais tu une idée quant à cela? merci
Je suis bien content, en suivant tes conseils ca marche beaucoup mieux! J'avais bien saisi ce concept de pseudo-aléatoire, mais je pensai que la référence à l'heure courante était déjà incluse dans la fonction.Donc maintenant le mélange est bien différent d'un lancement à l'autre du programme. Par contre, une des valeurs est toujours remplacée par 0, et la dernière valeur ne bouge jamais...10 reste en position 10... Aurais tu une idée quant à cela? merci
davmk
Messages postés
7
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
20 novembre 2007
20 nov. 2007 à 02:21
20 nov. 2007 à 02:21
Je ne suis pas sur, mais est-ce que cela ne devrait pas plûtot être random_shuffle(Tableau, Tableau + 9) si ton tableau a 10 éléments? Car la plage de données varie de l'index 0 à 9 et non de 1 à 10.
Essaie cela, peut-être que ça pourrait aider.
Essaie cela, peut-être que ça pourrait aider.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
Le fait qu'un zéro apparaisse me laisse penser qu'il y a comme tu dis chez moi une confusion entre les valeurs contenues dans les tableau, de 1 à n, et l'indice du tableau, de 0 à n. Mais que j'essaye tableau +(n-1), tableau +(n), ou tableau +(N+1) , cette fichue enième valeur ne bouge jamais...
Le fait qu'un zéro apparaisse me laisse penser qu'il y a comme tu dis chez moi une confusion entre les valeurs contenues dans les tableau, de 1 à n, et l'indice du tableau, de 0 à n. Mais que j'essaye tableau +(n-1), tableau +(n), ou tableau +(N+1) , cette fichue enième valeur ne bouge jamais...
davmk
Messages postés
7
Date d'inscription
mardi 20 novembre 2007
Statut
Membre
Dernière intervention
20 novembre 2007
20 nov. 2007 à 02:44
20 nov. 2007 à 02:44
Bizarre,
j'ai le code suivant et il trie tous les nombres:
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++.
j'ai le code suivant et il trie tous les nombres:
#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:)
J'ai trouvé finalement, ca marche en écrivant (tableau+1; tableau+(N+1)) Donc tu avais raison, la syntaxe originale n'est valable que si la première valeur du tableau est égale à l'indice 0 du tableau. Depuis je n'ai plus de zéro qui apparait dans la liste mélangée, et la dernière valeur est brassée. Désolé, je suis débutant en c++ j'aurai peut etre pu chercher un peu mieux. Merci en tout cas de m'avoir filé le tuyau pour <time.h>, et m'avoir aiguillé sur les valeurs d'indice à 0; Bonne nuit,et a plus tard peut être, parceque j'aurai surement d'autres questions à poser d'ici peu! Salut Dav!
J'ai trouvé finalement, ca marche en écrivant (tableau+1; tableau+(N+1)) Donc tu avais raison, la syntaxe originale n'est valable que si la première valeur du tableau est égale à l'indice 0 du tableau. Depuis je n'ai plus de zéro qui apparait dans la liste mélangée, et la dernière valeur est brassée. Désolé, je suis débutant en c++ j'aurai peut etre pu chercher un peu mieux. Merci en tout cas de m'avoir filé le tuyau pour <time.h>, et m'avoir aiguillé sur les valeurs d'indice à 0; Bonne nuit,et a plus tard peut être, parceque j'aurai surement d'autres questions à poser d'ici peu! Salut Dav!