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 :

Prob : Generation aleatoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut Prob : Generation aleatoire
    Bonjour,

    voila avec mon code je cree un carre de point. Je voudrais savoir comment, aleatoirement, remplacer X point(s) par des 0 dans ce carre.
    Merci beaucoup d'avance.

    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    int     my_putchar(char c)
    {
      write(1, &c, 1);
    }
     
    int     test(int total)
    {
      int nb;
      int i;
     
      nb = 0;
      i = 0;
      while(nb <= total)
        {
          while (i <= 30)
            {
              my_putchar('.');
              i++;
            }
          my_putchar('\n');
          nb++;
          i = 0;
        }
    }
     
    int     main(int argc, char **argv)
    {
      test(9);
    }

  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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    J'ai compris ce qu'il y a d'expliqué dans les liens, mais je ne vois pas où le mettre dans mon code.

  4. #4
    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
    Tes points sont indicés de (0,0) à (30, total) ce qui revient à les indicer de 0 à 30*total. Tu dois donc tirer une valeur aléatoire comprise entre 0 et 30*total, ce qui te donnera l'indice du point à remplacer par un zéro.
    Maintenant, pour être vraiment juste, il faudrait que tu retires au fur et à mesure les points remplacés par des zéros et que tu tires entre 0 et 30*total-x (où x varie entre 0 et X-1) pour éviter de tirer deux fois le même point.

    Ou alors tu peux décider aléatoirement avant chaque my_putchar si le caractère doit être un point ou un zéro. Tu tires une valeur entre 0 et 1 et si la valeur est inférieur à X/(30*total), tu décides que c'est un point, un zéro autrement. Mais la répartition des points et des zéros ne sera pas uniforme (en particulier, risque de ne se retrouver qu'avec des zéros ou des points à la fin car tu auras déjà tiré ou non les X points).

    Autrement, corrige ceci
    prob.c: In function `my_putchar':
    prob.c:4: warning: implicit declaration of function `write'
    prob.c:5: warning: control reaches end of non-void function
    prob.c: In function `test':
    prob.c:25: warning: control reaches end of non-void function
    prob.c: In function `main':
    prob.c:30: warning: control reaches end of non-void function

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Pour creer mon nombre aleatoire j'utilise --> randomValue = rand() % (N+1);
    C'est bon ?

    Je voudrais utiliser la seconde methode. Mais je ne vois pas comment faire. Je dois faire ca avec un if et mettre comme condition si la valeur tiree est inferieur a X/(30*total) remplacer par un 0 ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Question subsidiaire: Es-tu à EPITA ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    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 I_Will_Be_back Voir le message
    Pour creer mon nombre aleatoire j'utilise --> randomValue = rand() % (N+1); C'est bon ?
    Non, les tirages ainsi ne sont pas très bons. Regarde la section NOTES de cette page http://man.developpez.com/man3/rand.3.php.

    Je voudrais utiliser la seconde methode. Mais je ne vois pas comment faire. Je dois faire ca avec un if et mettre comme condition si la valeur tiree est inferieur a X/(30*total) remplacer par un 0 ?
    Oui mais ce n'était qu'une proposition de méthode. Tu peux en imaginer une autre. Comme je te le disais avant, cette méthode ne peut pas garantir que tu auras exactement X points mais tu peux espérer en avoir à peu près X. Ou alors si tu veux exactement X points, il faut que tu vérifies au fur et à mesure que tu pourras toujours placer X points et si nécessaire placer arbitrairement que des zéros ou des points à la fin mais ça ne devient plus très intéressant. Autant alors opter pour la première méthode qui est plus propre. Vu ce que tu as déjà fait, cette méthode a l'avantage d'être rapide à coder et de donner quelque chose de potable.

Discussions similaires

  1. generation aleatoire des nombres avec C ou C++
    Par lima2010 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/06/2010, 12h37
  2. Generation aleatoire d'un fichier XML
    Par lord_djidaniya dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 11/03/2009, 10h06
  3. generation aleatoire entre 0 et 3000
    Par canary dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/04/2008, 20h25
  4. generation aleatoire de polygones
    Par cedriku dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 25/07/2005, 18h56
  5. Génération aléatoire et gestion de mots de passe
    Par thomine dans le forum Sécurité
    Réponses: 5
    Dernier message: 23/03/2005, 16h58

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