Posez votre question Signaler

[C] Tirage aléatoire

Sting - Dernière réponse le 4 mai 2010 à 04:44
Salut,

j'ai écrit ce code qui me permet d'avoir 3 chiffres compris entre 0 et 99 de façon aléatoire.

Je voudrais savoir comment faire pour que le chiffre 100 puisse être pris en compte or avec mon code, ce n'est pas le cas.

Merci

Code :
#include <stdio.h>
#include <stdlib.h> 
#include <time.h>



int main(void){
  int val1, val2, val3;
  char buff[BUFSIZ];
  
  srand((unsigned)time(NULL));

  val1 = rand()%100;
  val2 = rand()%100;
  val3 = rand()%100;
  sprintf(buff, "%d,%d,%d",val1,val2,val3);
  printf("%s\n", buff);
  
  return 0;
}

Lire la suite 

[C] Tirage aléatoire »

20 réponses
Réponse
+1
moins plus
http://tinyurl.com/osxke
Ajouter un commentaire
Réponse
+1
moins plus
Salut,

en suivant le lien que tu as donné, j'ai écrit ceci pour avoir un nombre compris entre 0 et 100:
#include <stdio.h>
#include <stdlib.h> 
#include <time.h>



int main(void){
  int val1, val2, val3;
  char buff[BUFSIZ];
  
  srand((unsigned)time(NULL));
  
  //Pour avoir des nombres a>=0 et b<=100 
  val1 = (int)((float)rand()*(100+1)/(RAND_MAX+1));
  val2 = (int)((float)rand()*(100+1)/(RAND_MAX+1));
  val3 = (int)((float)rand()*(100+1)/(RAND_MAX+1));
  
  sprintf(buff, "%d,%d,%d",val1,val2,val3);
  printf("%s\n", buff);
  
  return 0;
}


Le problème est que j'obtiens ceci :
aleatoire.c: In function ‘main’:
aleatoire.c:14: attention : débordement d'entier dans l'expression
aleatoire.c:15: attention : débordement d'entier dans l'expression
aleatoire.c:16: attention : débordement d'entier dans l'expression
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Je voudrais savoir comment faire pour que le chiffre 100 puisse être pris en compte or avec mon code, ce n'est pas le cas.

Ben, met au lieu de 100 met 101
#include <stdio.h>
#include <stdlib.h> 
#include <time.h>



int main(void){
  int val1, val2, val3;
  char buff[BUFSIZ];
  
  srand((unsigned)time(NULL));

  val1 = rand()%101;
  val2 = rand()%101;
  val3 = rand()%101;
  sprintf(buff, "%d,%d,%d",val1,val2,val3);
  printf("%s\n", buff);
  
  return 0;
}
et 100 va sortir, aussi 0. J'ai testé.

lami20j
Ajouter un commentaire
Réponse
+0
moins plus
Je voudrais savoir comment je pourrais pour faire apparaître les chiffres de 1 à 100 (merci pour le code de départ il m'a donné un peu espoir déjà)
Merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
Tu veux un tirage aléatoire ou afficher tous les chiffres de 1 à 100 ?

Si c'est le premier cas, le code est au dessus (et génère 3 nombres), si c'est le deuxième :
int main()
{
   int i=1;
   while (i < 101)
   {
      printf("%d ",i);
      i++;
   }
   return 0;
}
Ca te les affichera tous à la suite ... Tu peux introduire des sauts de ligne avec \n dans le printf.
Ajouter un commentaire
Réponse
+0
moins plus
Pour un nombre entre 1 et 100
1 + rand() % 100
Ajouter un commentaire
Réponse
+0
moins plus
plus général. On veut un interval [xmin,xmax]
alors la solution est:
rand()%(xmax-xmin+1)+xmin;
voila, pour anticiper la prochaine question :
et pour avoir des nombre alléatoire compris entre 1 et 101, comment faut-il que je fasse ?
Ajouter un commentaire
Réponse
+0
moins plus
aucun des codes ne marchent j'ai besoin d'un code de tirage au sort de 1 a 100 et un autre de 1 à 3
des codes en entier qui marche svp




merci ce qui m'aide
Ajouter un commentaire
Réponse
+0
moins plus
Salut!


Si tu veux un code de tirage au sort de 1 a 100 et un autre de 1 à 3, je te propose ceci:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
/* déclarations */
int i;
int ch100,ch3,ch3_1,ch3_2,ch3_3;

srand(time(NULL));

/* boucle pour 5000 tirages, histoire de voir ci 1 et 100 sont pris en compte */
for (i=0;i<5000;++i)
{
/* Nb de 1 a 100 */
ch100 = rand () % 100;

/* Nb de 1 a 3 */
ch3 = rand () % 3;

/* affichage */
printf ("*** TIRAGE No %d:\nNb hazard de 1 a 100: %d\nNb hazard de 1 a 3: %d\n",i+1,ch100+1,ch3+1);

/* test pour voir si 1 et 100 sont bien pris en compte */
if (ch100+1==100 || ch100+1==1)
{
printf("\n* TOUVE %d au tirage: %d *\n",ch100+1,i+1);
system ("pause");
}
}
system("PAUSE");
return 0;
}


Maintenant, si tu veux un code qui tire au sort 3 chiffres de 1 a 100 je te propose ceci:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
/* déclarations */
int i;
int val_1,val_2,val_3;

srand(time(NULL));


/* 3 Nb de 1 a 100 */
val_1 = rand () % 100;
val_2 = rand () % 100;
val_3 = rand () % 100;


/* affichage */
printf ("*** TIRAGE de 3 nombres entre 1 et 100:\n\n"
"nombre 1: %d\nnombre 2: %d\nnombre 3: %d\n\n",val_1+1,val_2+1,val_3+1);

system("PAUSE");
return 0;
}

En fait, il faut ajouter 1 à ta valeur de base.
Ajouter un commentaire
Réponse
+0
moins plus
désolé sa ne marrche aps
Ajouter un commentaire
Réponse
+0
moins plus
Salut, antoine03

Quelle est ta question precise?
Car les 2 petits progs que je t'ai donnés plus haut fonctionnent bel et bien à condition que tu soit sous Windows Xp ou 98 pour la compilation et l'execution.
Si tu es sous Vista, il faut trouver le bon compilateur avec d'éventuelles retouches (ex: IccWin32), mais l'exe marche tout aussi bien.
(Les 2 progs ci-dessus ont été fait en C sous dev Cpp).
Ajouter un commentaire
Réponse
+0
moins plus
des xp et 98 on en trouve plus en magazin bien sur que j'ai vista xD
je n'y connais rien du tous moi je cherhe un tirage au sort de 1 à 100 pour que sa tire au sort un seul numéro de 1 à 100 et un autre de 1à3.
Ajouter un commentaire
Réponse
+0
moins plus
Voici donc un prog que tu peux recopier, et qui t'affichera 1 nombre au hazard de entre 1 et 100, et un autre entre 1 et 3.
Chaque fois que tu relanceras le prog, tu auras un chiffre different entre 1 et 100 etun autre entre 1 et 3.
Dans tous les cas, le resultat n'affichera jamais 0, mais il pourra afficher 100 pour de 1 à 100 et 3 pour de 1 à 3.
Si tu fais un copier-coller de ce prog dans Iccwin32, ou visual, tu auras le resultat decrit plus haut!


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
/* déclarations */
int nb1_100,nb1_3;

srand(time(NULL));


/* Nb de 1 a 100 au hazard */
nb1_100 = rand () % 100;

/* Nb de 1 a 3 au hazard */
nb1_3 = rand () % 3;

/* affichage */
printf ("*** Nb pris au hazard de 1 a 100: %d\n*** Nb pris au hazard de 1 a 3: %d\n",nb1_100+1,nb1_3+1);

system("PAUSE");
return 0;
}
Char Snipeur - 31 mars 2008 à 08:56
Tu es trop gentil.
Moi, il me faudrait un programme C qui me demande les types de fichier multimédia que je veux et qui va les cherché sur mon disque dur, qui me fait une liste et les trie.
Tu peux me faire ça ?
Ajouter un commentaire
Réponse
+0
moins plus
d'accord merci donc il me reste plus qua installé Iccwin32 ou visual c'est bien sa ?
Ajouter un commentaire
Réponse
+0
moins plus
Oui.Pourquoi, tu utilise quoi comme compilateur?
Ajouter un commentaire
Réponse
+0
moins plus
je croyais t'avoir dis que je n'y connaisé rien donc je te le dis je n'y coné rien mdr enfaite je sais pas se que c'est un compilateur on peus dire que j'en aprend tous les jours moi j'avais fais copier collé sur mon site en croyant que sa allez marché mdr !!!!
Char Snipeur - 1 avril 2008 à 08:40
faut dire, tu n'expose pas non plus ton problème correctement, et tu ne dit pas ce que tu veux faire.
Là tu es dans le forum programmation, sur un message qui parle d'un programme écris en C. Donc, on te répond comme à quelqu'un qui fait du C.
Vu que tu parle de site, je devine que c'est pour une page internet. Le mieux est d'ouvrir un nouveau message dans le forum Webmastering et de poser exactement ta question (ce que tu veux faire dans quel domaine et avec quels outils)
tux - 4 mai 2010 à 04:43
int array_rand(int *p, int limit, born_down, born_up);
{
int i, difference=born_up-born_down+1;

for (i = 0, i<limit; i++)
p[i] = (rand % difference)+born_down;
}

lol
tux - 4 mai 2010 à 04:44
correctif : void
Ajouter un commentaire
Ce document intitulé « [C] Tirage aléatoire » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook