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 :

Déclaration variable dans un intervalle


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut Déclaration variable dans un intervalle
    Bonsoir

    est il possible de déclarer une variable en étant comprise dans un intervalle laissant ainsi une façon aléatoire de déclarer la variable.

    Par exemple une variable x qui soit comprise entre 0 et 25 en int ou en float en fin de compte le cpu choisit la valeur.

    merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Non, ce n'est pas possible mais ce que tu veux peut-être, c'est tirer une valeur aléatoire comprise entre 0 et 25.
    http://man.developpez.com/man3/srand.3.php

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    bonsoir

    merci l'info bien reçus 5/5.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    au fait il est déja possible d'avoir une variable sans rien déclarer :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main(void)
     
    {
     
    int                  x , y ;
    	      y = abs(x);
     
     
    printf("voici la valeur de x %d\n",y);
     
    return 0;
     
    }
    sauf que je voulais une variable entre 0 et 100.

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La variable x est non initialisée. Cela ne veut pas nécessairement dire que sa valeur est aléatoire.

    Reporte toi sur le générateur de nombres aléatoires cité par aoyou

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    bonsoir

    merci pour ta réponse,oui je suis bien d'accord et pour cause le fait qu'elle ne soit pas initialisée ne veut pas dire qu'elle est vide (bien sur vous le savez déja).

    ceci dit (je peux me tromper) c'est façon de générer un nombre aléatoire.

    qu'est ce que vous en pensez.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    ceci dit (je peux me tromper) c'est façon de générer un nombre aléatoire
    Non, certains compilateurs mettent une valeur précise mais toujours la même dans les variables non initialisées

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Sinon sur Linux t'as le périphérique "/dev/random" que tu peux lire de façon classique (fopen/fgetc/fclose). Chaque octet que tu y lis seras aléatoire (c'est le noyau Linux qui génère les octets au moment de la lecture)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 165
    Par défaut
    bonsoir tout le monde

    vous avez raison,une variable non initialisé ne produit pas forcément un nombre aléatoire (à quelques exception près).

    srand et la solution de Sve@r sont plus approprie quoique je ne sais les utiliser.

    Pouvez vous svp m'expliquer ce code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
     
    int main ( int argc, char** argv )
    {
        long nombreMystere = 0, nombreEntre = 0;
        const long MAX = 100, MIN = 1;
     
          srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;// Génération du nombre aléatoire
    merci d'avance.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Citation Envoyé par abdelilah Voir le message
    srand et la solution de Sve@r sont plus approprie quoique je ne sais les utiliser.
    http://man.developpez.com/man3/srand.3.php à lire en entier. La méthode que tu cites n'est pas bonne.

  11. #11
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    bonsoir,

    const long MAX = 100, MIN = 1;
    Ceci permet de fixé l'intervalle du nombre que l'on veut (un nombre entre 0et 100)


    srand(time(NULL));
    Sans rentrer dans le détail par début rand va te sortir une suite de nombre aléatoire mais qui seront toujours les mêmes . Donc pour évider cela et avoir un vrai nombre aléatoire on utilise srand qui permet d'initialiser le générateur de nombres aléatoire avec la valeur de time (qui sera différente à chaque exécution du programme).

    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    on génère un nombre aléatoire (placer dans la variable nombreMystere), le modulo permet d'avoir un chiffre compris entre 0 et l'écart max possible entre la valeur minimale et la valeur maximale que peu prendre le chiffre désiré. on rajoute ensuite MIN a ce nombre pour ne plus avoir comme valeur minumale 0 mais la valeur minimale voulut...

    Edit : en effet l'exemple n'est pas correct

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Citation Envoyé par aoyou Voir le message
    http://man.developpez.com/man3/srand.3.php à lire en entier. La méthode que tu cites n'est pas bonne.
    Bah si elle est très bien sa méthode, relis le lien que tu indiques :

    Les versions de rand() et srand() de la bibliothèque C de Linux utilisent le même générateur de nombres aléatoires que random() et srandom(), ainsi les bits de poids faibles sont tout aussi imprévisibles que les bits de poids forts.

    C'est sûr qu'il faut que les bibliothèques non-linux utilisent une implémentation similaire, mais quand même le livre cité date de 1990, aujourd'hui les générateurs sont capables de générer des nombres aléatoires couvrant tous les bits...

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Oh bah oui mince il faut que je me remette à la page. J'étais toujours resté à la méthode du Numerical Recipes.

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Loïc M Voir le message
    Sans rentrer dans le détail par début rand va te sortir une suite de nombre aléatoire mais qui seront toujours les mêmes . Donc pour évider cela et avoir un vrai nombre aléatoire on utilise srand qui permet d'initialiser le générateur de nombres aléatoire avec la valeur de time (qui sera différente à chaque exécution du programme).
    Cette méthode comporte un petit bug potentiel => si tu lances le programme dans deux shells parallèles (je parle ici d'implémentation Unix/Linux) en même temps ben le time étant le même pour les deux processus, les deux programmes sortiront les mêmes nombres en parallèle.
    On peut améliorer l'initialisation en y introduisant le n° de processus en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    srand(time(NULL) ^ getpid());
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Déclaration Variable dans Userform et ThisWorkbook
    Par grimgrim dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/09/2018, 08h14
  2. [Batch] Déclaration variable dans un boucle FOR
    Par mouelhi0712 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/09/2012, 20h33
  3. déclaration variable dans un module
    Par jemigo dans le forum Langage
    Réponses: 5
    Dernier message: 09/10/2008, 10h16
  4. Problème déclaration variable dans "if"
    Par doremib dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/07/2007, 12h42
  5. Réponses: 7
    Dernier message: 02/08/2006, 15h51

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