IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

nombre aléatoire rand


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut nombre aléatoire rand
    Bonjour,
    Au début je souhaitait simplement générer un nombre aléatoire entre x et y j'ai donc fait une petite fonction et j'aimerais avoir quelque explications concernant ce code : (les nombres générée sont toujours les mêmes ,j'ai beau chercher je ne trouve pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int rand_n(void)
    {
    	int i = 0;
    	BYTE tmp[10] = {0};
     
    	while (i < 10){
    		tmp[i] = (BYTE)rand() % 9;
    		Sleep(200);
    		i++;
    	}
    	return (int)tmp;
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    J'aimerais aussi savoir pourquoi les nombre généré par rand sont seulement sur 16 bits ?

    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Tu as oublié d'utiliser srand.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    srand est bien là , a chaque exécution j'ai un nombre différent mais si j’appelle plusieurs fois cette fonction pendant une même exécution, j'ai toujours la même chose je ne comprend pas et aussi autre chose que je ne comprend pas c'est lorsque j'ajoute des nombres dans mon tableau d'octet les nombres sont par exemple 5,8,7,1,5,0,5,8,5,3 et après le cast j’obtiens : 4716572

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Mea culpa, j'ai pas vu qu'on pouvait scroller le code.

    Tu convertis un pointeur (ton tableau est implicitement convertit en un pointeur sur le premier élément) en entier. Tu retournes donc l'adresse de ton tableau.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Mea culpa, j'ai pas vu qu'on pouvait scroller le code.

    Tu convertis un pointeur (ton tableau est implicitement convertit en un pointeur sur le premier élément) en entier. Tu retournes donc l'adresse de ton tableau.
    Et comment je peut faire pour faire cette conversion ? (tableau d'octets en entier)

    Citation Envoyé par Emmanuel Deloget Voir le message
    srand(time(NULL)) ?

    time() ayant une précision de l'ordre de la seconde, cette fonction initialise 10 fois srand() avec la même valeur. Nécessairement, l'appel à rand qui suit va donner 10 fois de suite la même valeur.

    (et le % 9, c'est niet : ça rend plus probable l'apparition de certaines valeurs).

    Maintenant, puisqu'on est sur un forum C++, pourquoi ne pas utiliser des choses plus... C++ienne ? http://www.cplusplus.com/reference/random/
    mon srand n'est pas dans ma boucle.
    %9 ? pour avoir un nombre entre 0 et 9 non ?
    En faite rand me convient pour l'instant.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Tu ne peux pas vu que le plus grand entier est (u)int64_t (= 8 octets).

    Il te faut donc regarder du côté de bibliothèques permettant de manipuler de grands nombres.
    Sinon quel est l'intérêt de transformer ton tableau de nombres aléatoires en un seul entier ?

  7. #7
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par yohann2008 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	while (1){
    		cout << rand_n() << endl;
    		Sleep(100);
    	}
    	getchar();
    }
    srand est bien là , a chaque exécution j'ai un nombre différent mais si j’appelle plusieurs fois cette fonction pendant une même exécution, j'ai toujours la même chose je ne comprend pas et aussi autre chose que je ne comprend pas c'est lorsque j'ajoute des nombres dans mon tableau d'octet les nombres sont par exemple 5,8,7,1,5,0,5,8,5,3 et après le cast j’obtiens : 4716572
    srand(time(NULL)) ?

    time() ayant une précision de l'ordre de la seconde, cette fonction initialise 10 fois srand() avec la même valeur. Nécessairement, l'appel à rand qui suit va donner 10 fois de suite la même valeur.

    (et le % 9, c'est niet : ça rend plus probable l'apparition de certaines valeurs).

    Maintenant, puisqu'on est sur un forum C++, pourquoi ne pas utiliser des choses plus... C++ienne ? http://www.cplusplus.com/reference/random/
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. défaut des fonctions de génération de nombres aléatoire type rand()
    Par Christophe30 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 17/02/2008, 20h21
  2. Réponses: 13
    Dernier message: 08/12/2006, 10h31
  3. Nombre aléatoire rand()
    Par kissmytoe dans le forum C
    Réponses: 9
    Dernier message: 03/11/2006, 20h42
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo