Dans le cadre d'un exercice d'apprentissage, je dois créer 2 nombres
aléatoires.
J'ai utilisé 2 srand, mais la solution utilisée ne me semble pas très
élégante...
Si vous avez autre chose à suggérer, cela serait bienvenu. :-)
int main()
{
int a,b,c;
while (true)
{
srand(time(0));
a=rand()%10+1;
srand(time(0)/4);
b=rand()%10+1;
cout << "Combien font " << a << "x" << b << " ?" << endl;
cin >> c;
if (c==a*b)
cout << "Bravo ! Résultat exact !" << endl;
else
cout << "Désolé... Mauvaise réponse." << endl;
cout << endl;
}
Il est préférable de déclarer les variables dans le plus petit bloc possible, donc à l'interieur de la boucle
while (true) { srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même programme. Il faut sortir cette ligne de la boucle
a=rand()%10+1; srand(time(0)/4);
De même, cette ligne ne devrait pas être
b=rand()%10+1; cout << "Combien font " << a << "x" << b << " ?" << endl; cin >> c; if (c==a*b) cout << "Bravo ! Résultat exact !" << endl; else cout << "Désolé... Mauvaise réponse." << endl; cout << endl; }
return 0; }
Le reste m'a l'air plutot bien... Le nom des variables (a,b,c) est assez mal choisi (pour a, b, ca se concoit, pour c, ca pourrait être reponse) Certains chipoteraient qu'utiliser % avec rand ne permet pas d'obtenir une répartition uniforme... Je pense pas que ce soit vraiment critique ici :)
-- Vincent
int main()
{
int a,b,c;
Il est préférable de déclarer les variables dans le plus petit bloc
possible, donc à l'interieur de la boucle
while (true)
{
srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même
programme. Il faut sortir cette ligne de la boucle
a=rand()%10+1;
srand(time(0)/4);
De même, cette ligne ne devrait pas être
b=rand()%10+1;
cout << "Combien font " << a << "x" << b << " ?" << endl;
cin >> c;
if (c==a*b)
cout << "Bravo ! Résultat exact !" << endl;
else
cout << "Désolé... Mauvaise réponse." << endl;
cout << endl;
}
return 0;
}
Le reste m'a l'air plutot bien...
Le nom des variables (a,b,c) est assez mal choisi (pour a, b, ca se concoit,
pour c, ca pourrait être reponse)
Certains chipoteraient qu'utiliser % avec rand ne permet pas d'obtenir une
répartition uniforme... Je pense pas que ce soit vraiment critique ici :)
Il est préférable de déclarer les variables dans le plus petit bloc possible, donc à l'interieur de la boucle
while (true) { srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même programme. Il faut sortir cette ligne de la boucle
a=rand()%10+1; srand(time(0)/4);
De même, cette ligne ne devrait pas être
b=rand()%10+1; cout << "Combien font " << a << "x" << b << " ?" << endl; cin >> c; if (c==a*b) cout << "Bravo ! Résultat exact !" << endl; else cout << "Désolé... Mauvaise réponse." << endl; cout << endl; }
return 0; }
Le reste m'a l'air plutot bien... Le nom des variables (a,b,c) est assez mal choisi (pour a, b, ca se concoit, pour c, ca pourrait être reponse) Certains chipoteraient qu'utiliser % avec rand ne permet pas d'obtenir une répartition uniforme... Je pense pas que ce soit vraiment critique ici :)
-- Vincent
Cyrille
Bonjour,
Dans le cadre d'un exercice d'apprentissage, je dois créer 2 nombres aléatoires. J'ai utilisé 2 srand, mais la solution utilisée ne me semble pas très élégante...
Euh, pour ce que vous voulez faire, vous n'avez besoin que d'un srand() *pour toute l'application*. srand() initialise le générateur de nombres aléatoires. Après, chaque appel à rand() vous donnera un nombre aléatoire différent.
Donc écrivez ceci: int main() { srand(time(0)); while (true) { int a = rand()%10 + 1; int b = rand()%10 + 1; ....
-- win the yes need the no to win against the no!
Bonjour,
Dans le cadre d'un exercice d'apprentissage, je dois créer 2 nombres
aléatoires.
J'ai utilisé 2 srand, mais la solution utilisée ne me semble pas très
élégante...
Euh, pour ce que vous voulez faire, vous n'avez besoin que d'un srand()
*pour toute l'application*. srand() initialise le générateur de nombres
aléatoires. Après, chaque appel à rand() vous donnera un nombre
aléatoire différent.
Donc écrivez ceci:
int main()
{
srand(time(0));
while (true)
{
int a = rand()%10 + 1;
int b = rand()%10 + 1;
....
Dans le cadre d'un exercice d'apprentissage, je dois créer 2 nombres aléatoires. J'ai utilisé 2 srand, mais la solution utilisée ne me semble pas très élégante...
Euh, pour ce que vous voulez faire, vous n'avez besoin que d'un srand() *pour toute l'application*. srand() initialise le générateur de nombres aléatoires. Après, chaque appel à rand() vous donnera un nombre aléatoire différent.
Donc écrivez ceci: int main() { srand(time(0)); while (true) { int a = rand()%10 + 1; int b = rand()%10 + 1; ....
-- win the yes need the no to win against the no!
Fabien LE LEZ
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux" :
srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même programme. Il faut sortir cette ligne de la boucle
En fait, c'est même catastrophique : on réinitialise le générateur avec time(0), c'est-à-dire toujours la même valeur si le programme s'exécute en moins d'une seconde. Du coup, rand() renvoie à chaque fois le même nombre.
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux"
<nospam@nospam.org>:
srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même
programme. Il faut sortir cette ligne de la boucle
En fait, c'est même catastrophique : on réinitialise le générateur
avec time(0), c'est-à-dire toujours la même valeur si le programme
s'exécute en moins d'une seconde. Du coup, rand() renvoie à chaque
fois le même nombre.
--
Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux" :
srand(time(0));
Il n'est pas nécessaire de faire plusieurs appels à srand dans un même programme. Il faut sortir cette ligne de la boucle
En fait, c'est même catastrophique : on réinitialise le générateur avec time(0), c'est-à-dire toujours la même valeur si le programme s'exécute en moins d'une seconde. Du coup, rand() renvoie à chaque fois le même nombre.
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
Fabien LE LEZ
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux" :
int a,b,c;
Il est préférable de déclarer les variables dans le plus petit bloc possible, donc à l'interieur de la boucle
Et surtout, de donner des noms plus explicites ! -- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux"
<nospam@nospam.org>:
int a,b,c;
Il est préférable de déclarer les variables dans le plus petit bloc
possible, donc à l'interieur de la boucle
Et surtout, de donner des noms plus explicites !
--
Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 00:27:44 +0200, "Vincent Lascaux" :
int a,b,c;
Il est préférable de déclarer les variables dans le plus petit bloc possible, donc à l'interieur de la boucle
Et surtout, de donner des noms plus explicites ! -- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
Vincent Lascaux
Et surtout, de donner des noms plus explicites !
Lire mon post jusqu'au bout... J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser a et b et de rajouter un commentaire type "a est le premier nombre saisi par l'utilisateur, b le second"...
-- Vincent
Et surtout, de donner des noms plus explicites !
Lire mon post jusqu'au bout...
J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser
a et b et de rajouter un commentaire type "a est le premier nombre saisi par
l'utilisateur, b le second"...
Lire mon post jusqu'au bout... J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser a et b et de rajouter un commentaire type "a est le premier nombre saisi par l'utilisateur, b le second"...
-- Vincent
Fabien LE LEZ
On Mon, 16 May 2005 02:38:33 +0200, "Vincent Lascaux" :
J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser a et b et de rajouter un commentaire type "a est le premier nombre saisi par l'utilisateur, b le second"...
Si une variable représente le premier nombre, un nom plus ou moins adapté serait premier_nombre.
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 02:38:33 +0200, "Vincent Lascaux"
<nospam@nospam.org>:
J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser
a et b et de rajouter un commentaire type "a est le premier nombre saisi par
l'utilisateur, b le second"...
Si une variable représente le premier nombre, un nom plus ou moins
adapté serait premier_nombre.
--
Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On Mon, 16 May 2005 02:38:33 +0200, "Vincent Lascaux" :
J'ai du mal à trouver un bon nom pour a et b... Je serais d'avis de laisser a et b et de rajouter un commentaire type "a est le premier nombre saisi par l'utilisateur, b le second"...
Si une variable représente le premier nombre, un nom plus ou moins adapté serait premier_nombre.
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
Pierre THIERRY
Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit :
on réinitialise le générateur avec time(0), c'est-à-dire toujours la même valeur
L'argument de time() est un pointeur vers une structure time_t où stocker le résultat (l'heure actuelle), en plus de le retourner.
Documentairement, Nowhere man --
OpenPGP 0xD9D50D8A
Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit :
on réinitialise le générateur avec time(0), c'est-à-dire toujours la
même valeur
L'argument de time() est un pointeur vers une structure time_t où
stocker le résultat (l'heure actuelle), en plus de le retourner.
Documentairement,
Nowhere man
--
nowhere.man@levallois.eu.org
OpenPGP 0xD9D50D8A
Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit :
on réinitialise le générateur avec time(0), c'est-à-dire toujours la même valeur
L'argument de time() est un pointeur vers une structure time_t où stocker le résultat (l'heure actuelle), en plus de le retourner.
Documentairement, Nowhere man --
OpenPGP 0xD9D50D8A
Fabien LE LEZ
On 16 May 2005 13:37:05 +0200, Gabriel Dos Reis :
Pierre THIERRY writes:
Est-ce que je suis le seul à ne pas voir les messages de Pierre THIERRY ? Ils n'apparaissent pas sur news.free.fr, et apparemment tu es le seul à y répondre -- donc peut-être le seul à les voir ?
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
On 16 May 2005 13:37:05 +0200, Gabriel Dos Reis
<gdr@integrable-solutions.net>:
Pierre THIERRY <nowhere.man@levallois.eu.org> writes:
Est-ce que je suis le seul à ne pas voir les messages de Pierre
THIERRY ? Ils n'apparaissent pas sur news.free.fr, et apparemment tu
es le seul à y répondre -- donc peut-être le seul à les voir ?
--
Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
Est-ce que je suis le seul à ne pas voir les messages de Pierre THIERRY ? Ils n'apparaissent pas sur news.free.fr, et apparemment tu es le seul à y répondre -- donc peut-être le seul à les voir ?
-- Le grand site de la philosophie animale : <http://perso.edulang.com/philo/>
Gabriel Dos Reis
Pierre THIERRY writes:
| Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit : | > on réinitialise le générateur avec time(0), c'est-à-dire toujours la | > même valeur | | L'argument de time() est un pointeur vers une structure time_t où | stocker le résultat (l'heure actuelle), en plus de le retourner.
ISO/IEC 9899:1999 (E), §7.23.2.4:
7.23.2.4 The time function
Synopsis
[#1]
#include <time.h> time_t time(time_t *timer);
Description
[#2] The time function determines the current calendar time. The encoding of the value is unspecified.
Returns
[#3] The time function returns the implementation's best approximation to the current calendar time. The value (time_t)(-1) is returned if the calendar time is not available. If timer is not a null pointer, the return value is also assigned to the object it points to.
-- Gaby
Pierre THIERRY <nowhere.man@levallois.eu.org> writes:
| Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit :
| > on réinitialise le générateur avec time(0), c'est-à-dire toujours la
| > même valeur
|
| L'argument de time() est un pointeur vers une structure time_t où
| stocker le résultat (l'heure actuelle), en plus de le retourner.
ISO/IEC 9899:1999 (E), §7.23.2.4:
7.23.2.4 The time function
Synopsis
[#1]
#include <time.h>
time_t time(time_t *timer);
Description
[#2] The time function determines the current calendar time.
The encoding of the value is unspecified.
Returns
[#3] The time function returns the implementation's best
approximation to the current calendar time. The value
(time_t)(-1) is returned if the calendar time is not
available. If timer is not a null pointer, the return value
is also assigned to the object it points to.
| Le Mon, 16 May 2005 02:27:35 +0200, Fabien LE LEZ a écrit : | > on réinitialise le générateur avec time(0), c'est-à-dire toujours la | > même valeur | | L'argument de time() est un pointeur vers une structure time_t où | stocker le résultat (l'heure actuelle), en plus de le retourner.
ISO/IEC 9899:1999 (E), §7.23.2.4:
7.23.2.4 The time function
Synopsis
[#1]
#include <time.h> time_t time(time_t *timer);
Description
[#2] The time function determines the current calendar time. The encoding of the value is unspecified.
Returns
[#3] The time function returns the implementation's best approximation to the current calendar time. The value (time_t)(-1) is returned if the calendar time is not available. If timer is not a null pointer, the return value is also assigned to the object it points to.
-- Gaby
Pierre THIERRY
Le Sun, 15 May 2005 23:42:29 +0200, Dudule a écrit :
J'ai utilisé 2 srand, mais la solution utilisée ne me semble pas très élégante...
Non, pas vraiment.
Si vous avez autre chose à suggérer, cela serait bienvenu. :-)
Là, ce n'est pas critique, mais en règle générale, il faut éviter de créer soi-même ses nombres aléatoires si on a besoin qu'ils soient de qualité.
Autant utiliser un bibliothèque d'objets fournissant des générateurs de nombres aléatoires de qualité, par exemple Coyotl :
http://www.coyotegulch.com/products/libcoyotl/
libcoyotl contient 5 PRNG différents, chacun avec la même interface.