Se connecter / S'enregistrer
Votre question

random en C++

Tags :
  • Time
  • Programmation
Dernière réponse : dans Programmation
15 Septembre 2005 21:39:23

Bonjour voilà je voulais savoir comment creer une variable de type int avec une valeur compise entre 0 et un autre nombre (disons 65)qui varie de 1 en 1.

Et également savoir cmoment l'ordi calcule un nombre aléatoirement ?
Je sais que c'est pas du pur hasard alors comment ça se fait ??

Merci et bonne soirée

Autres pages sur : random

15 Septembre 2005 21:43:55

en fait, l'ordi génère le chiffre en question à partir d'une horloge interne (en gros) ; c'est du hasard pour l'utilisateur mais, pour faire simple, regarde l'aiguille des secondes de ta montre et décide que ce sera ton chiffre ; c'est le principe général...

je ne me souviens plus trop de la commande en c++ ; mais je pense que ça te fournira un chiffre compris entre 0 et 1 ; tu devras donc faire un *100, je pense puis arrondir pour retirer les chiffres après la virgure
16 Septembre 2005 00:52:01

bon je te donne la version C qui marche donc en C++:
srand(time(NULL));
c'est pour pas que le programme te sorte tout le temps les mêmes chiffres à chaque éxécution.. En gros c'est une initiatlisation de la fonction rand...

pour génèrer un nombre entre a et b-1 :

int nombre = a + (int)((double)rand() / ((double)RAND_MAX + 1) * b);

surtout ne pas employer des modulo par exemple
rand()%10 devrait génèrer des nombres aléatoires entre 0 et 9... et bien dans la pratique cela marche très mal et il vaut mieux utiliser la formule au dessus
Contenus similaires
Pas de réponse à votre question ? Demandez !
a b L Programmation
16 Septembre 2005 01:03:24

Citation :

szdavid a écrit :
en fait, l'ordi génère le chiffre en question à partir d'une horloge interne (en gros) ; c'est du hasard pour l'utilisateur mais, pour faire simple, regarde l'aiguille des secondes de ta montre et décide que ce sera ton chiffre ; c'est le principe général...

En fait en C, le random n'est pas initialisé sur l'horloge. Il faut le faire soit même, sinon à chaque redémarrage du programme, on aura le même nombre :-D

Je crois que la fonction random du C est à congruence linéaire: y = (ax+b) modulo c (mais je suis pas certain)
16 Septembre 2005 18:09:15

Donc si je veux générer un nombre entier compris entre 1 et 10 je dois faire :
Ouvrir une bibliothèque (je sais pas laquelle)
Je fais

int nb
nb = 1 + (int)((double)rand() / ((double)RAND_MAX + 1) * 10);
cout << nb;

C'est ça ??
a b L Programmation
16 Septembre 2005 18:26:07

C'est bien ça, 1 et 10 pouvant sortir.
et pour initialiser le générateur aléatoire, tu peux utiliser srand(valeur)
par exemple : srand(time())
16 Septembre 2005 18:36:42

time() est une valeure ?
Et dans ce cas je dois inclure time.h ??
Merci en tout cas poru toutes les réposnes
a b L Programmation
16 Septembre 2005 19:01:24

  1. #include <time.h>
  2.  
  3. time_t time(time_t *tloc);


time_t est un entier en fait.
pout l'utiliser tu fais:
srand(time(NULL));
(j'avais oublié le paramètre).

et time() est une fonction qui retourne le nombre de secondes écoulées depuis le 1 janvier 1970 à minuit.
bref c'est un nombre imprévu que l'on donne au générateur pour avoir un random imprévisible ;-)
16 Septembre 2005 19:29:40

Ooook bin encore merci
16 Septembre 2005 21:18:02

Euh ej comprends pas là .. Dev C++ fais une erreur à chaque ligne ... tu peux me montrer un petit code simple qui commence comme

int nb (un random entre 1 et 10)
int i = 0;
while (i < 10);
{
cout << nb ;
i++;
}

Merci beaucoup je pense que je comprendrais mieux comme ça parce que là ya 15 commandes différentes depuis le début du topic
:-D
a b L Programmation
16 Septembre 2005 23:48:25

En voilà un, je l'ai testé ça marche

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <iostream>
  6.  
  7. // utilisation du nom d'espace std pour ne pas avoir à mettre std::cout
  8. // mais directement cout
  9. using namespace std;
  10.  
  11. // Point d'entrée du programme
  12. int main( int argc, char *argv[] )
  13. {
  14. // initialisation du générateur de nombres pseudo-aléatoire
  15. srand( time( NULL ) );
  16.  
  17. // 10 boucles
  18. for( int i = 0 ; i < 10 ; ++i )
  19. {
  20. // génération d'un nombre aléatoire
  21. int nb = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 10.0 );
  22.  
  23. // Affichage ('é' remplacé par \x82 pour remplacer le codage
  24. // latin-1 en ASCII)
  25. cout << "Nombre g\x82n\x82r\x82 n\xA7" << i << ": " << nb << endl;
  26. }
  27.  
  28. system("PAUSE");
  29. return 0;
  30. }


Edit: il y a 2 retour de lignes qui ont foiré à l'affichage, remet comme il faut ;-)
17 Septembre 2005 07:33:22

WOW :-o

merci beaucoup c'est vraiment parfait (ça fait jamais que la 10 eme fois que je te dis ça non ?)

;-)
17 Septembre 2005 23:43:08

En fait :
J'ai un petit problème.
Voilà je voulais creer un qui permet de générer un nombre entre 1 et 6 jsuque là tout va bien ...
Et en suite si le nombre = 1 : écrire A
si le nombre = 2 écrire E etc etc
donc j'ai fait

  1. if (voyelles = 1)
  2. {
  3. cout << "A";
  4. }
  5. else
  6. {
  7. if (voyelles = 2)
  8. {
  9. cout << "E";
  10. }
  11. else
  12. {
  13.  
  14. if (voyelles = 3)
  15. {
  16. cout << "I";
  17. }
  18. else
  19. {
  20. if (voyelles = 4)
  21. {
  22. cout << "O";
  23. }
  24. else
  25. {
  26. if (voyelles = 5)
  27. {
  28. cout << "U";
  29. }
  30. else
  31. {
  32. if (voyelles = 6)
  33. {
  34. cout << "Y";
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }


Et bien sur ça marche pas (sachant que avant j'avais initialisé une variable voyelle en random entre 1 et 6.

Alors je sais que c'est bidon mais unpeu d'aide serait la bienvenue :-D

Merci et bonne soirée
a b L Programmation
18 Septembre 2005 00:32:01

il faut testert comme ça:
voyelle == 2

si tu fais : if(voyelle=2), c'est équivalent à if((voyelle=2) != 0) car tu affectes à voyelle la valeur de 2 et tu teste si c'est non nul.
Donc je suppose que ça n'entrais que dans le 1er if (je n'ai pas testé ton code).

une chose pour simplifier ton code, utiliser "else if" au lieu d'embriquer un if dans un else:
  1. if (voyelles == 1)
  2. {
  3. cout << "A";
  4. }
  5. else if (voyelles == 2)
  6. {
  7. cout << "E";
  8. }
  9. else if (voyelles = 3)
  10. {
  11. ...

et s'il n'y a qu'une ligne, tu n'es pas obligé de mettre les accolades (ça prend l'instruction suivant le if mais pas plus), donc si tu mets plusieurs instructions dans le if ou que tu comptes en mettre garde les {}
18 Septembre 2005 09:02:19

Merci beaucoup encore une fois .. je viens de me rendre compte que c'est logique et que je suis légèrement .....
Bon enfin bref merci
Tu saurais pas comment écrire le "è" et le "à" en iso latin 1 en ascii ?
18 Septembre 2005 09:40:38

switch, c'est pas pour les chiens :-D
a b L Programmation
18 Septembre 2005 12:01:25

Citation :

bluedylc a écrit :
switch, c'est pas pour les chiens :-D

Moi j'aime pas trop les switchs (une question de goûts ;-) ), mais c'est effectivement pareil (au niveau du code compilé si on met des break partout).

Sinon pour avoir le code qui correspond au caractère ASCII:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <iostream>
  6.  
  7. // utilisation du nom d'espace std pour ne pas avoir à mettre std::cout
  8. // mais directement cout
  9. using namespace std;
  10.  
  11. // Point d'entrée du programme
  12. int main( int argc, char *argv[] )
  13. {
  14. for( int i = 0 ; i < 256 ; ++i )
  15. cout << "Caract\x8are \\x" << hex << i << " : " << char(i) << endl;
  16.  
  17. system("PAUSE");
  18. return 0;
  19. }

Tu entendras un bip, car les caractère 7 est la fonction "bell" (cloche).
Pour connaitre les touches fonctionnelles, mieux vaut voir une table ascii déjà faite comme ici: http://www.lookuptables.com/
les plus uxtiles sont 0x13 (touche entrée) et 0x1B (touche Echap).
Anonyme
29 Novembre 2008 18:54:05

Salut, voila je cherche un programme/logiciel/addon perméttan dans mon jeu gratuit en ligne que quand je fasse /rand avoir un chiffre compri entre 80 et 100 vous penser que ça existe merci d'avance de vos réponses^^
Contenus similaires
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS