Amorce dun generateur de nombre en c++
mick
-
mick -
mick -
salut
en feuilletant un livre jai vu que lon pouvait faire un generateur de nombre "pseudo aleatoire" en c++ sur un intervalle donner.
il parlait du amorce mais je nai pas compris comment et surtout a quoi cela servai , puis dans un deuxieme temps il utilisai une instruc tion rand avec un min et un max .
je nai plus acces a ce livre mais jaimerai connaitre la syntaxe et les instruction a utiliser pour maitriser les generateur de nombre, donc si lon pouvait meclairer ca serai sympa .
ps ce que je veut faire cest generer un nombre entre 0 et 1
merci
en feuilletant un livre jai vu que lon pouvait faire un generateur de nombre "pseudo aleatoire" en c++ sur un intervalle donner.
il parlait du amorce mais je nai pas compris comment et surtout a quoi cela servai , puis dans un deuxieme temps il utilisai une instruc tion rand avec un min et un max .
je nai plus acces a ce livre mais jaimerai connaitre la syntaxe et les instruction a utiliser pour maitriser les generateur de nombre, donc si lon pouvait meclairer ca serai sympa .
ps ce que je veut faire cest generer un nombre entre 0 et 1
merci
A voir également:
- Amorce dun generateur de nombre en c++
- Generateur mot de passe - Télécharger - Sécurité
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Ascii nombre de caractères - Guide
- Generateur de cle windows 10 - Guide
18 réponses
Euh ... un générateur de nombre aléatoire est strictement impossible mais simuler un nombre aléatoire c'est possible à l'aide de fonctions dans le sens mathématique du terme. Les fonctions "int rand(void)" et "void srand(unsigned int value)" de l'en-tête <stdlib.h> sont des génératrice de nombre pseudo-aléatoire. Bon si tu veux générer un nombre (entier je suppose) donc il te faut écrire une fonction, soit tu écris totalement ta fonction soit tu composes avec celles existantes par exemple vu que "srand()" donne un entier non signé alors il est compris entre [0, 2^32-1] alors tu peux faire "x/ 2^32-1" puis arrondir le résultat alors tu obtiendra un fonction qui donnera 0 si "x < 0.5" ou 1 si "x >= 0.5". C'est une idée à creuser.
tu mavais deja expliquer comment faire un generateur de nombre ,ca marchai .le probleme c quil generai un nombre difficilement controlable.
mon but est de faire un mastermind tres simple en c++
en qbasic jutilisai une instruction ramdomize timer ,il me trouvai un nombre entre 0 et 1 ,je le multipliai par 999999 puis je le decomposai, x=le chiffre des unite ....
donc
dans le livre "programmer en c++" jai vu quil etai possible avec linstruction rand, de creer un nombre entre deux valeurs
en gros de memoire ca resemble a sa:
rand(amorce);
rand(min , max);
c vraiment de memoir!!! c pour ca que je demande de laide .sinon jachaite le livre mais ca fait chier jai pas finit le 1er!!!!
en esperant que jai ete assez clair et c pas sur
merci de ton aide bob
mon but est de faire un mastermind tres simple en c++
en qbasic jutilisai une instruction ramdomize timer ,il me trouvai un nombre entre 0 et 1 ,je le multipliai par 999999 puis je le decomposai, x=le chiffre des unite ....
donc
dans le livre "programmer en c++" jai vu quil etai possible avec linstruction rand, de creer un nombre entre deux valeurs
en gros de memoire ca resemble a sa:
rand(amorce);
rand(min , max);
c vraiment de memoir!!! c pour ca que je demande de laide .sinon jachaite le livre mais ca fait chier jai pas finit le 1er!!!!
en esperant que jai ete assez clair et c pas sur
merci de ton aide bob
je nai pas bien compris ton message bob si tu pouvait me donner exemple sa serai cool .sinon le truc que jai vu dans le bouquin ca ne te dit rien?
salut !!
salut !!
Excuse moi d'avoir lu en diagonale ;-) . Ben "rand(min, max)" me semble une fonction artisanale non standard. Bon je vais détailler une peu l'idée que j'avais pour donner un nombre entier aléatoire dans [0, 1]:
/* brouillon en C */
#include <stdlib.h>
#include <math.h>
...
unsigned int rdnumber1;
float rdnumber2;
int rdnumber3;
srand(rdnumber1); // ici rdnumber compris dans [0, 2 ^ 32 - 1]
rdnumber2 = (float) (rdnumber1 / pow(2, 32) - 1); // castage d'un uint vers float
rdnumber3 = (int) arrondir(rdnumber2); // fonction standard à rechercher ;-) plus castage
/* Donc finalement rdnumber 3 devient soit 0 soit 1 par arrondi */
/* brouillon en C */
#include <stdlib.h>
#include <math.h>
...
unsigned int rdnumber1;
float rdnumber2;
int rdnumber3;
srand(rdnumber1); // ici rdnumber compris dans [0, 2 ^ 32 - 1]
rdnumber2 = (float) (rdnumber1 / pow(2, 32) - 1); // castage d'un uint vers float
rdnumber3 = (int) arrondir(rdnumber2); // fonction standard à rechercher ;-) plus castage
/* Donc finalement rdnumber 3 devient soit 0 soit 1 par arrondi */
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci mais je ne comprend pas pourquoi lexecute me genere toujours le meme nombre
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned int rdnumber1;
float rdnumber2;
srand(rdnumber1); // ici rdnumber compris dans [0, 2 ^ 32 - 1]
rdnumber2 = (float) (rdnumber1 / pow(2, 32) ); // castage d'un uint ve
cout << rdnumber2;
system("PAUSE");
return 0;
}
ps jai retirer le moin 1 car il me trouvait toujours -1;surement un pb darrondit
#include <iostream.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned int rdnumber1;
float rdnumber2;
srand(rdnumber1); // ici rdnumber compris dans [0, 2 ^ 32 - 1]
rdnumber2 = (float) (rdnumber1 / pow(2, 32) ); // castage d'un uint ve
cout << rdnumber2;
system("PAUSE");
return 0;
}
ps jai retirer le moin 1 car il me trouvait toujours -1;surement un pb darrondit
Hum ... ben en fait j'ai écris le bout de code au pif alors forcément ;-) . Dans les grandes lignes y a le principe mais au sujet de la fontion "srand()" c'est normal que pour un 1er appel le nombre pseudo-aléatoire reste le même puisque c'est une fonction connu qui définit ce nombre. Bon je vois voir en pratique si je peux améliorer ça ^_^ .
/* Generateur en C */
#include <math.h>
#include <stdlib.h>
int main()
{
unsigned int rdnumber1;
float rdnumber2;
srand(rdnumber1);
rdnumber2 = (float) (rdnumber1 / (pow(2, 32) - 1));
printf("%f\n", rdnumber2);
system("pause");
return EXIT_SUCCESS;
}
/* Donc le -1 venait des parathèses manquantes dans la division alors maintenant sans arrondir ça marche. */
#include <math.h>
#include <stdlib.h>
int main()
{
unsigned int rdnumber1;
float rdnumber2;
srand(rdnumber1);
rdnumber2 = (float) (rdnumber1 / (pow(2, 32) - 1));
printf("%f\n", rdnumber2);
system("pause");
return EXIT_SUCCESS;
}
/* Donc le -1 venait des parathèses manquantes dans la division alors maintenant sans arrondir ça marche. */
#include <math.h>
#include <stdlib.h>
int rdbool()
{
unsigned int rdnumber1;
float rdnumber2;
int rdnumber3;
srand(rdnumber1);
rdnumber2 = (float) (rdnumber1 / (pow(2, 32) - 1));
rdnumber3 = (int) (nearbyint(rdnumber2));
return rdnumber3;
}
int main(int argc, char *argv[])
{
int n;
n = 0;
while(n < 10)
{
printf("%i\n", rdbool());
n++;
}
system("pause");
return EXIT_SUCCESS;
}
/* Bon la fonction marche mais semble pipé alors le mieux c'est de générer une autre fonction un peu plus pseudo-aléatoire que celle ci. */
#include <stdlib.h>
int rdbool()
{
unsigned int rdnumber1;
float rdnumber2;
int rdnumber3;
srand(rdnumber1);
rdnumber2 = (float) (rdnumber1 / (pow(2, 32) - 1));
rdnumber3 = (int) (nearbyint(rdnumber2));
return rdnumber3;
}
int main(int argc, char *argv[])
{
int n;
n = 0;
while(n < 10)
{
printf("%i\n", rdbool());
n++;
}
system("pause");
return EXIT_SUCCESS;
}
/* Bon la fonction marche mais semble pipé alors le mieux c'est de générer une autre fonction un peu plus pseudo-aléatoire que celle ci. */
la ligne
rdnumber3 = (int) (nearbyint(rdnumber2));
a une erreur et comme je ne comprend pas nearbyint peut pas rectifier tout seul!!
sinon linstrution printf me provoque toujour une erreur ,je suit obliger de la remplacer par cout , pourquoi?
ps merci bob ,je peut savoir comment tu a appris a maitriser le c++ ,par ton metier tes etude dans les livre...
rdnumber3 = (int) (nearbyint(rdnumber2));
a une erreur et comme je ne comprend pas nearbyint peut pas rectifier tout seul!!
sinon linstrution printf me provoque toujour une erreur ,je suit obliger de la remplacer par cout , pourquoi?
ps merci bob ,je peut savoir comment tu a appris a maitriser le c++ ,par ton metier tes etude dans les livre...
salut
tu peut me dire se que tu pense de ca stp :
#include <iostream.h>
#include <stdlib.h>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
unsigned amorce = time(NULL);
srand(amorce);
int min, max;
min = 0;
max = 1000;
int plage = max -min +1;
int x = rand()/100%plage +min;
cout << x << '\n';
system("PAUSE");
return 0;
}
sa marche pas mal le seul probleme c que lamorce depend du temps , et si on execute le programme a intervalle regulier ,le nombre generer est lui aussi "regulier" , c pas tres clair mais je trouve pas comment lexpliquer!!
ps tu peut me trouver lerreur dans:
cout << "amorce = " amorce << endl;
ca vien dun livre et il y a une erreur de compilation!!
tu peut me dire se que tu pense de ca stp :
#include <iostream.h>
#include <stdlib.h>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
unsigned amorce = time(NULL);
srand(amorce);
int min, max;
min = 0;
max = 1000;
int plage = max -min +1;
int x = rand()/100%plage +min;
cout << x << '\n';
system("PAUSE");
return 0;
}
sa marche pas mal le seul probleme c que lamorce depend du temps , et si on execute le programme a intervalle regulier ,le nombre generer est lui aussi "regulier" , c pas tres clair mais je trouve pas comment lexpliquer!!
ps tu peut me trouver lerreur dans:
cout << "amorce = " amorce << endl;
ca vien dun livre et il y a une erreur de compilation!!
Bonjour à tous les deux,
Je prend votre dicussion en cours pour vous préciser qu'il est normal que que les nombres aléatoires soient "réguliers" lorsque les racines (le temps ici) sont régulières. En effet, à partir de la racine que vous entrez, l'algorithme génère une suite de nombres pseudo aléatoire. Evidemment, si les racines ont des pt communs, les suites de nombres en auront aussi.
Dans le cadre de ton jeu Mick, je pense que ça fera l'affaire. Tu initialises une fois, en début de partie, ton générateur de nombre aléatoire, puis tu tires un nombre à chaque fois que tu en as besoin.
Si vraiment tu veux des générateurs plus performants, tu peux chercher sur le web celui de Mersenne Twister. Une bonne source de doc est aussi un livre qui s'intitule "Numerical Recipes in C" que tu peux trouver on-line. "Numerical Recipes in C++" existe également et conviendrait mieux ici mais il n'est pas en ligne.
Voila, j'espère vous avoir un peu éclairer.
Cordialement
Pierre
Je prend votre dicussion en cours pour vous préciser qu'il est normal que que les nombres aléatoires soient "réguliers" lorsque les racines (le temps ici) sont régulières. En effet, à partir de la racine que vous entrez, l'algorithme génère une suite de nombres pseudo aléatoire. Evidemment, si les racines ont des pt communs, les suites de nombres en auront aussi.
Dans le cadre de ton jeu Mick, je pense que ça fera l'affaire. Tu initialises une fois, en début de partie, ton générateur de nombre aléatoire, puis tu tires un nombre à chaque fois que tu en as besoin.
Si vraiment tu veux des générateurs plus performants, tu peux chercher sur le web celui de Mersenne Twister. Une bonne source de doc est aussi un livre qui s'intitule "Numerical Recipes in C" que tu peux trouver on-line. "Numerical Recipes in C++" existe également et conviendrait mieux ici mais il n'est pas en ligne.
Voila, j'espère vous avoir un peu éclairer.
Cordialement
Pierre
merci, je vais essayer
jai saisi toutes les conditions, et cetait bien chian, il ne me reste plus qua tout essayer pour voir si jai tout prevu.
dans les deux livres sur le c++ ,aucun ne parle dinterface graphique , je voudrai savoir si cest possible den faire et si oui comment
merci
jai saisi toutes les conditions, et cetait bien chian, il ne me reste plus qua tout essayer pour voir si jai tout prevu.
dans les deux livres sur le c++ ,aucun ne parle dinterface graphique , je voudrai savoir si cest possible den faire et si oui comment
merci
Soit les MFCs (Microsoft) avec <windows.h> ou bien d'autres bibliothèques graphiques style QT (Trolltech), WxWindows (?), GTK (?) ... mais bien faire attention à la licence avant toute chose, le langage utilisé par la bibliothèque (C ou C++), l'aspect pratique de programmation, la variété des objets, le pluri-plateformisme puis l'aspect esthétique. Fait une recherche tu trouvera certainement une multitude d'article comparant les bibliothèques entre elles avec leurs forces et faiblesses.
tu peut maider a trouver ,parceque jai trouver quelque site mais je comprend rien certain cest niveau maitrise , jai pas se niveau......!!!!
je veux juste ouvrir une fentre ,avec un champ pour le jouer quil rempli avec 4 nombre et un champ pour donner le resultat, et un dernier champ pour lui dire sil a perdu ou gagner,je veux pas faire un truc bon ni bien fait , jusque queque chose de simple pour apprendre les base
merci
je veux juste ouvrir une fentre ,avec un champ pour le jouer quil rempli avec 4 nombre et un champ pour donner le resultat, et un dernier champ pour lui dire sil a perdu ou gagner,je veux pas faire un truc bon ni bien fait , jusque queque chose de simple pour apprendre les base
merci
desoler pour le message precedent qui est illisible
tu peut me dire comment on fait pour effacer lecran, il faut peut etre utiliser linstruction clrscr() mai je ne connait pas le fichier den tete qui i est assosier
sinon jai continuer a chercher pour linterface graphique jai rien trouver dinterressant , soit cest trop compliquer , soit cest trop vague
tu peut pas maider stp
tu peut me dire comment on fait pour effacer lecran, il faut peut etre utiliser linstruction clrscr() mai je ne connait pas le fichier den tete qui i est assosier
sinon jai continuer a chercher pour linterface graphique jai rien trouver dinterressant , soit cest trop compliquer , soit cest trop vague
tu peut pas maider stp