Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1634 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Tirage aléatoire et incrémentation d'un nombrdans un tableau!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tirage aléatoire et incrémentation d'un nombrdans un tableau!!

n°1808320
ceto13
Posté le 04-11-2008 à 19:38:39  profilanswer
 

Bonjours à vous. Je suis quelque peux en galère vis à vis d'une programme que je dois créer en C.
En fait l'énoncé est le suivant :

 

Ecrire un 1er programme qui réalise N lancers d'un seul dé et qui calcule la distribution des valeurs obtenues, c.à.d. le nb de fois où chacune des six faces apparait au cours des N lancers. Vous définirez pour cela un tableau d'entiers dont vs incrémenterez la case i chaque fois que la face i est obtenue. Pr terminé, vous afficherez le contenu du tableau

 

Pour la premiere parti pas de souci puisqu'en effet je maitrise désormais les commandes Srand et do...while.(Je sais rien de bien compliqué) par contre pour le tableau je ne comprend pas bien ce qui m'est demandé.

 

voila pour le moment ce que moi j'ai fait :

 
Code :
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main(void)
  6. {
  7.        int resultat, N,S;
  8.        S=0;
  9.        printf ("combien de lance voulez vous effectuer?" );
  10.        scanf ("%d",&N);
  11.        srand(time(0));
  12.        
  13.        do
  14.        {
  15.            resultat=1+rand()%6;
  16.            printf("resultat de lancement du de : %d\n",resultat);
  17.            S=S+1;
  18.        }
  19.        while (S!=N);
  20.        
  21.        
  22.        system("pause" );
  23.        return 0;
  24. }


Attention je ne demande pas une réponse car là n'est pas le but ce que je voudrais c'est comprendre ce qui m'est demandé et savoir comment je peux arriver par la suite à repondre aux exigences posées dans l'énoncé.

 

Ainsi je vous remercie d'avance de bien vouloir me faire partager vos connaissance en la matiere.

 

Édité par Elmoricq : ajout des balises code pour plus de lisibilité.


Message édité par Elmoricq le 04-11-2008 à 20:00:50
mood
Publicité
Posté le 04-11-2008 à 19:38:39  profilanswer
 

n°1808328
Elmoricq
Modérateur
Posté le 04-11-2008 à 20:08:42  profilanswer
 

Alors, plusieurs remarques en vrac :

  • la fonction time() attend comme argument un time_t*, donc une adresse. Dans l'absolu écrire time(0) est correct, mais il est beaucoup plus propre d'écrire time(NULL) dans ce contexte.


  • l'utilisation de scanf() est à proscrire tant que tu ne maîtrises pas la saisie formatée. Bien qu'enseignée par de trop nombreux professeurs, cette fonction est casse-gueule et son utilisation ne s'adresse pas à des débutants (par. ex. ici, essaie de saisir une chaîne de caractères au lieu du nombre attendu, et observe le désastre). Préfère la fonction fgets(), avec en plus la fonction de conversion chaîne=>entier strtol(). C'est non seulement plus propre, mais ça te servira bien plus à l'avenir de savoir manier ces fonctions.


  • Pour retenir le nombre de tirages effectués, tu dois stocker les différents résultats, dans un tableau. Tu dois donc mémoriser combien de fois chaque tirage a été obtenu, il te faut donc au moins 6 cases. Donc, résumons : déclarer un tableau d'entiers de 6 cases, initialiser chaque case à 0, puis incrémenter la bonne case en fonction du tirage obtenu. Ce petit bout de code devrait t'aider :
Code :
  1. unsigned foobar[6];
  2. for(unsigned i = 0; i < 6; ++i) {
  3.   foobar[i] = 0;
  4. }


(unsigned == entier non signé. Tu indiques ici explicitement dans ton code que tu ne travailles pas avec des nombres négatifs, mais si tu préfères tu peux utiliser int, ça n'a pas de conséquence ici)

 


Tu devrais avoir tous les éléments pour terminer ton exercice maintenant. [:dawa]


Message édité par Elmoricq le 04-11-2008 à 20:10:55
n°1808330
ceto13
Posté le 04-11-2008 à 20:17:51  profilanswer
 

Merci pour ton aide et tes conseil avisés je m'en vais de suite essayé et je reviens en cas de probleme.

n°1808345
ceto13
Posté le 04-11-2008 à 20:59:47  profilanswer
 

ceto13 a écrit :

   *  Pour retenir le nombre de tirages effectués, tu dois stocker les différents résultats, dans un tableau. Tu dois donc mémoriser combien de fois chaque tirage a été obtenu, il te faut donc au moins 6 cases. Donc, résumons : déclarer un tableau d'entiers de 6 cases, initialiser chaque case à 0, puis incrémenter la bonne case en fonction du tirage obtenu. Ce petit bout de code devrait t'aider :

Code :
  1. unsigned foobar[6];
  2. for(unsigned i = 0; i < 6; ++i) {
  3. foobar[i] = 0;
  4. }


 
 
(unsigned == entier non signé. Tu indiques ici explicitement dans ton code que tu ne travailles pas avec des nombres négatifs, mais si tu préfères tu peux utiliser int, ça n'a pas de conséquence ici)


 
Désolé mais en feit je ne maitrise pas du tout ces notions et je ne comprend donc pas leur utilisation. Du coup j'ai utilisé une autre méthode qui me semble néanmoins pas très pratique pourrais tu me donner ton avis stp.
 

Code :
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main(void)
  5. {
  6.         int resultat, N,S;
  7.         int u,d,t,q,c,s;
  8.         u=0;
  9.         d=0;
  10.         t=0;
  11.         q=0;
  12.         c=0;
  13.         s=0;
  14.         S=0;
  15.         srand(time(0));
  16.        
  17.         printf ("combien de lance voulez vous effectuer?" );
  18.         scanf ("%d",&N);
  19.        
  20.         do
  21.         {
  22.             resultat=1+rand()%6;
  23.             printf("resultat de lancement du de : %d\n",resultat);
  24.             S=S+1;
  25.            
  26.             if (resultat==1)
  27.                 u=u+1;
  28.             if (resultat==2)
  29.                 d=d+1;
  30.             if (resultat==3)
  31.                 t=t+1;
  32.             if (resultat==4)
  33.                 q=q+1;
  34.             if (resultat==5)
  35.                 c=c+1;
  36.             if (resultat==6)
  37.                 s=s+1;
  38.            
  39.         }
  40.         while (S!=N);
  41.        
  42.         printf ("il est sortie :\n%d fois le nombre 1\n%d fois le nombre 2\n%d fois le nombre 3\n%d fois le nombre 4\n%d fois le nombre 5\n%d fois le nombre 6\n",u,d,t,q,c,s);
  43.        
  44.          
  45.        
  46.        
  47.         system("pause" );
  48.         return 0;
  49. }


n°1808352
Elmoricq
Modérateur
Posté le 04-11-2008 à 21:37:29  profilanswer
 

L'exercice indique qu'il faut utiliser un tableau. Surtout que là c'est un dé de 6, mais si tu lances des dés de 100, tu ne vas quand même pas créer 100 variables ?
 
Un petit lien trouvé vite fait et qui me semble bien résumer l'affaire : http://inferno.cs.univ-paris8.fr/~ [...] urs-7.html

n°1810271
gee
Bon ben hon
Posté le 10-11-2008 à 08:23:18  profilanswer
 

Hormis le tableau, regarde ce que fait le couple if/ else if.
Dans ton cas j'aurai aussi remplace les if / else if par un switch car c'est bien plus rapide mais comme le dit Elmoricq tu dois utiliser un tableau :)
Aussi si N == 0 tu as une boucle infinie :) (de meme pour toute 'fausse' valeur)


Message édité par gee le 10-11-2008 à 08:24:00

---------------
"Phildar t'es vraiment une pute pas finie toi! Et Manu le gros porc arrete de t'marrer!"
n°1810439
jagstang
Pa Capona ಠ_ಠ
Posté le 10-11-2008 à 15:13:32  profilanswer
 

en pseudo code
 
uint tab[MAX]
 
for ()
{
int rand = rand(MAX)
tab[rand]++  
}


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Tirage aléatoire et incrémentation d'un nombrdans un tableau!!

 

Sujets relatifs
probleme simple avec un tableauINDEFORMABLE, INCASSABLE le tableau
Insérer une image dans un tableaucentrer un tableau
sauter une ligne dans un tableau en htmlSommes multi-conditionnelle
Simuler un tableau dans un formulaireProbleme Affichage Background dans Tableau
Utiliser les lignes d’un tableau JS 
Plus de sujets relatifs à : Tirage aléatoire et incrémentation d'un nombrdans un tableau!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR