Tirage aléatoire de 7 nombres compris entre 1 et 49

Tirage aléatoire de 7 nombres compris entre 1 et 49 - C - Programmation

Marsh Posté le 03-11-2007 à 09:48:15    

Hello tout le monde, je dois dois donc faire un genre de loto flash pour tirer aléatoirement de 7 nombres compris entre 1 et 49.
 
Je dois utiliser int rand(void) void srand(int) x=time(NULL) et il est précier que diviser un nombre entier par un nombre entier non nul n permet d'obtenir un reste <n....
 
Voila ce que j'ai fais, sauf qu'il me sort a chaque fois les mêmes nombres :D  
 


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    int i,X,s;
int n=rand()%49+1;  
 
int rand(void);
{
   
X=time(NULL);
srand(X);
 
 
for (i = 1; i <= 7; i = i+1)
 
printf("%d\n", n/i);
}
 
system("pause" );
return 0;
 }


 
En vous remerciant de votre futur aide.

Message cité 1 fois
Message édité par zondervan le 03-11-2007 à 09:49:11
Reply

Marsh Posté le 03-11-2007 à 09:48:15   

Reply

Marsh Posté le 03-11-2007 à 12:22:56    

Il faut appeler srand une et une seule fois, au debut de ton programme.
Tu n'as pas le droit d'imbriquer des fonctions en C. La prochaine fois, poste au moins un exemple qui compile.

Reply

Marsh Posté le 03-11-2007 à 14:29:09    

zondervan a écrit :

Voila ce que j'ai fais, sauf qu'il me sort a chaque fois les mêmes nombres


En plus de ce qui a été dit, rand() est une fonction standard. Tu n'as pas le droit de la redéclarer. C'est fait dans <stdlib.h>.

 

http://mapage.noos.fr/emdel/notes.htm#rand

Message cité 1 fois
Message édité par Emmanuel Delahaye le 03-11-2007 à 17:11:50

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-11-2007 à 14:51:08    

Emmanuel Delahaye a écrit :


En plus de ce qui a été dit, rand() est une fonction standard. Tu n'as pas le droit de la redéfinir.
 
http://mapage.noos.fr/emdel/notes.htm#rand


En fait, dans son exemple, il ne la redefinit pas, il la redeclare ( a cause du point-virgule, mais a mon avis ca n'est pas fait expres ...)

Reply

Marsh Posté le 03-11-2007 à 17:13:06    

Ace17 a écrit :

En fait, dans son exemple, il ne la redefinit pas, il la redeclare ( a cause du point-virgule,<...> )


Exact, je me suis laissé aveugler par d'autres commentaires, et je n'ai pas vu le ';'. J'ai corrigé.


Message édité par Emmanuel Delahaye le 03-11-2007 à 19:20:11

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-11-2007 à 17:22:14    

j'ai essayer de corriger mes fautes mais j'ai toujours un problème! merci de votre aide!
 


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
int i,X,s;
int n=rand()%49+1;  
 
   
X=time(NULL);
srand(X);
 
 
for (i = 1; i <= 7; i = i+1)
 
printf("%d\n", n%i);
 
 
system("pause" );
return 0;
 }  

Reply

Marsh Posté le 03-11-2007 à 17:24:58    

Peut-etre qu'il faut faire appel à srand() avant de faire appel à rand() ?

 

Et surtout qu'il faut faire appel à rand() dans la boucle et pas à l'initialisation de n.
(Chaque fois que tu écris n ça n'appelle pas rand(), hein ?)

 

Et je vois pas bien l'utilité de ton %i si tu veux des nombres entre 1 et 49 inclus...


Message édité par mcyrb le 03-11-2007 à 17:31:51
Reply

Marsh Posté le 03-11-2007 à 17:55:25    

excusez moi je peux pas tous savoir....
 


 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
int i,X,s;
 
 
   
X=time(NULL);
 
for (s = 1; s <= 7; s++)  
 {
for (i = 1; i <= 49; i++)
srand(X);
int n=rand()%49+1;  
printf("%d\n", n%X);
}
 
system("pause" );
return 0;
 }  

Reply

Marsh Posté le 03-11-2007 à 18:08:59    

zondervan a écrit :

excusez moi je peux pas tous savoircomprendre....
 


 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
int i,X,s, n;
   
X=time(NULL);
srand(X);
for (s = 1; s <= 7; s++)  
{
    n=rand()%49+1;  
    printf("%d ", n);
}  
system("pause" );
return 0;
 }  



Cela dit faut ensuite vérifier que chaque nombre est unique -> au boulot


Message édité par breizhbugs le 03-11-2007 à 18:11:55
Reply

Marsh Posté le 03-11-2007 à 19:25:17    

zondervan a écrit :

excusez moi je peux pas tous savoir....

 
 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
int i,X,s;

 


   
X=time(NULL);

 

for (s = 1; s <= 7; s++)
 {
for (i = 1; i <= 49; i++)
srand(X);



On te dit que srand() ne doit être appelé qu'une seule fois. Tu es dur d'oreille ou quoi  ?

 

D'autre part, je rappelle que si une structure de code agit sur plus d'une instruction, les {} sont obligatoires. Ton code une fois ré-indenté donne :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {
  6.    int i, X, s;
  7.    X = time (NULL);
  8.    for (s = 1; s <= 7; s++)
  9.    {
  10.       for (i = 1; i <= 49; i++)
  11.          srand (X);
  12.       int n = rand () % 49 + 1;
  13.       printf ("%d\n", n % X);
  14.    }
  15.    system ("pause" );
  16.    return 0;
  17. }


ce qui n'est probablement pas ce que tu veux...

 


Message édité par Emmanuel Delahaye le 03-11-2007 à 19:26:14

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-11-2007 à 19:25:17   

Reply

Marsh Posté le 04-11-2007 à 01:56:39    

Avec remise :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6.     int i;
  7.     srand(time(NULL));
  8.     for (i = 0; i < 7; i++)
  9.         printf("%i\n", (rand() % 50) + 1);
  10.     getchar();
  11.     return (0);
  12. }


 
Sans remise :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main()
  5. {
  6.     int i, j, r, s[7];
  7.     srand(time(NULL));
  8.     r = ((rand() % 50) + 1);
  9.     for (i = 0; i < 7; i++)
  10.     {
  11.         do
  12.         {
  13.             r = ((rand() % 50) + 1);
  14.             for (j = 0; j < i; j++)
  15.                 if (r == s[j])
  16.                 {
  17.                     r = 0;
  18.                     break;
  19.                 }
  20.         }
  21.         while (r == 0);
  22.         s[i] = r;
  23.         printf("%i\n", r);
  24.     }
  25.     getchar();
  26.     return (0);
  27. }


Reply

Marsh Posté le 04-11-2007 à 09:44:56    


T'as tout compris a la pedagogie toi ... Tous les gars qui ont poste sur ce topic sont capables d'ecrire cette fonction. Mais si on l'a pas fait, c'est que y'avait une raison ... :sarcastic:  
 

Reply

Marsh Posté le 04-11-2007 à 15:04:24    

Ace17 a écrit :


T'as tout compris a la pedagogie toi ... Tous les gars qui ont poste sur ce topic sont capables d'ecrire cette fonction. Mais si on l'a pas fait, c'est que y'avait une raison ... :sarcastic:  
 


La pédagogie c'est aussi d'arrêter les frais quand tu vois que la personne n'a absolument rien compris et part à totonnement sur des algorithmes sans queue ni tête.
Autant lui donner la correction et une bonne base de travail pour l'aider à comprendre/apprendre (du moins si elle est assez intelligente pour ne pas faire un copier/coller sans chercher à comprendre). :)


Message édité par AthlonSoldier le 04-11-2007 à 15:06:28
Reply

Marsh Posté le 05-11-2007 à 07:34:06    

OK, donc le jour ou j'ai besoin d'un code tout fait, je sais qu'il me suffira de poster ici une fonction sans queue ni tete a la limite du compilable dont la seule qualite sera de comporter quelques appels aux bonnes API (histoire de dire que c'est pas completement au pif) ... jusqu'a ce que quelqu'un me prenne en pitie et m'ecrive mon code.
 
D'autant plus que balancer la solution juste apres que deux intervenants aient pris la peine de rediger des reponses comportant des indications, c'est un peu un manque de respect envers eux.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed