problème avec rand()

problème avec rand() - C - Programmation

Marsh Posté le 27-10-2004 à 18:49:34    

Bonjour,
 
Dans mon programme, je veux afficher 20 fois une valeur choisie aléatoirement entre 0 et 50. J'utilise la fonction rand() et elle me donne 20 fois la même valeur alors que je voudrais 20 valeurs différentes.
De plus, quand je compile, le warning suivant s'affiche dans mon shell :
"no new line at end of file", je ne comprends pas pourquoi.
 
Voici le programme :
 
/* Fichier nombre.c   */
//----------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
//----------------------------------------------------------------------
 
int main()
{
   int nb,i;
   
   for(i=0;i<20;i++)
   {
     srand(time(NULL));
     nb = rand() % 50;
     printf("%d",nb);
   }
   return 0;
}
 
 
Pouvez-vous me donner quelques conseils pour résoudre ce problème ?
 
Cordialement

Reply

Marsh Posté le 27-10-2004 à 18:49:34   

Reply

Marsh Posté le 27-10-2004 à 18:50:36    

... va prendre ton dictionnaire et recherche la définition du mot 'initialiser'

Reply

Marsh Posté le 27-10-2004 à 18:54:37    


Je suis d'accord mais quand j'initialise mes deux variables i et nb, c'est exactement le même résultat.

Reply

Marsh Posté le 27-10-2004 à 18:58:50    

Comme le dit Taz, il faut initialiser le generateur de random.

Reply

Marsh Posté le 27-10-2004 à 19:00:10    

//----------------------------------------------------------------------  
#include <stdlib.h>  
#include <stdio.h>  
#include <time.h>  
//----------------------------------------------------------------------  
 
int main()  
{  
   int nb,i;  
   srand(time(NULL));
   for(i=0;i<20;i++)  
   {  
       
     nb = rand() % 50;  
     printf("%d",nb);
   
   }  
   return 0;  
}


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 27-10-2004 à 19:00:56    

ca marchera surement mieux comme ca ;)
bonne soiree.


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 27-10-2004 à 19:01:44    

Pour moi c'est la ligne "srand(time(NULL));" qui initialise le générateur. Il y a-t-il une autre manière pour initialiser le générateur de random ?

Reply

Marsh Posté le 27-10-2004 à 19:02:24    

ton printf change le pour ca  
printf("%d\n",nb);
c'est plus clair ainsi.


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 27-10-2004 à 19:03:15    

le code que je t'ai donné marche
test tu verras !!!
srand(time(NULL));  
c'est avant la boucle ;)


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 27-10-2004 à 19:03:46    

Je te remercie CHAVEZ, c'était bien çà le problème.
 
Bonne soirée !  :-)

Reply

Marsh Posté le 27-10-2004 à 19:03:46   

Reply

Marsh Posté le 27-10-2004 à 19:03:58    

Ce que Taz t'a cordialement suggéré, c'est qu'une initialisation, ça se fait UNE fois en début de programme et pas à chaque tour de boucle.

Reply

Marsh Posté le 27-10-2004 à 19:04:41    

Smaragdus a écrit :

Ce que Taz t'a cordialement suggéré, c'est qu'une initialisation, ça se fait UNE fois en début de programme et pas à chaque tour de boucle.


 
C-Q-F-D


---------------
le roi de l'EDIT oui je sais :o / achète mb-D200
Reply

Marsh Posté le 27-10-2004 à 19:16:31    

rand() % 50;  
 
 
JAMAIS ÇA

Reply

Marsh Posté le 27-10-2004 à 19:17:05    

Reply

Marsh Posté le 27-10-2004 à 22:03:14    

Intéressant tout ça, mais pourquoi les bits de poids faibles des nombres générés par rand() ont une distribution peu aléatoire ? Ceux de poids forts sont plus aléatoires donc ?

Reply

Marsh Posté le 27-10-2004 à 22:58:23    

C'est le nombre tout entier qui est "aléatoire", ni sa partie faible, ni sa partie forte.
 
Exemple classique no1: les randoms qui te donnent tour à tour des entiers pairs et impairs (sisi, ça a existé!). Pas super pour simuler un pilouface.
 
Exemple classique no2: RAND_MAX vaut 30, et tu veux un nombre entre 0 et 19. En faisant un %20, tu as 2 fois plus de chances d'avoir un truc entre 0 et 10 qu'entre 10 et 20.

Reply

Marsh Posté le 28-10-2004 à 07:22:11    

OK, je vois à peu près. En fait j'avais entendu parler d'un générateur de nombres aléatoires pas si aléatoires que ça au niveau des bits de poids faibles (ou forts) (sous un vieil Unix).
Donc si j'ai bien compris le but c'est tout simplement d'utiliser tous les bits que rand() nous offre...


Message édité par blurk le 28-10-2004 à 07:23:35
Reply

Marsh Posté le 31-10-2004 à 14:38:59    

srand(time(NULL)); toujours au début de programme ou de de la fonction

Reply

Marsh Posté le 31-10-2004 à 14:47:25    

pas dans la fonction  :??:

Reply

Marsh Posté le 31-10-2004 à 17:48:00    

au début du prog ou au début de la fonction

Reply

Marsh Posté le 31-10-2004 à 17:51:08    

quand tu parles de "fonction", tu veux bien sûr parler de la fonction d'initialisation ?

Reply

Marsh Posté le 31-10-2004 à 17:56:34    

int main()  
{  
   int nb,i;  
   srand(time(NULL));  
   for(i=0;i<20;i++)  
   {  
       
     nb = rand() % 50;  
     printf("%d",nb);  
   
   }  
   return 0;  
}  
 
ou par exemple :
 
void fonction()  
{  
   int nb,i;  
   srand(time(NULL));  
   for(i=0;i<20;i++)  
   {  
       
     nb = rand() % 50;  
     printf("%d",nb);  
   
   }    
}

Reply

Marsh Posté le 31-10-2004 à 17:59:17    

Faut pas uiliser modulo avec rand(), c'est comme croiser les effluves.

Reply

Marsh Posté le 31-10-2004 à 17:59:51    

si ta fonction est appelée plusieurs fois par seconde (ce qui est tres probable :D) ca te sortira toujours les memes nombres

Reply

Marsh Posté le 31-10-2004 à 18:00:32    

oki

Reply

Marsh Posté le 31-10-2004 à 18:03:32    

Hhhm, si je puis me permettre, de toute façon c'est un générateur de nombres pseudo-aléatoire ... le vrai aléatoire c'est soit le résultat d'une experience impliquant des phénoménes physiques irréversibles soit un nombre proposé "comme ça" par un homme (cad un nombre qui nous passe par la tête, c'est dur à admettre mais c'est ça) et oui nous sommes tous de "vrai" générateurs de nombres aléatoires :)

Reply

Marsh Posté le 31-10-2004 à 18:07:27    

Petite parenthèse : Le seul moyen de générer un signal véritablement aléatoire (et non seulement chaotique), c'est d'utiliser un phénomène quantique.

Reply

Marsh Posté le 31-10-2004 à 18:09:16    

c vrai qu'il faut savoir faire la différence entre pseudo aléatoire et aléatoire.

Reply

Marsh Posté le 31-10-2004 à 18:11:20    

Smaragdus, c'est quoi la difference entre "chaotique" et "aléatoire" ?

Reply

Marsh Posté le 31-10-2004 à 18:17:03    

Un phénomène chaotique est un phénomène dont les trajectoires dans l'espace de phase sont situées autour d'un attracteur (étrange ou non). Les trajectoires des planètes du système solaire ou la météo par exemple.
 
Un phénomène aléatoire n'est régit par aucune loi de prévision. La désintégration beta ou l'expérience de Young par exemple.
 
Cas intermédiaire : La roulette est "presque" aléatoire tellement c'est un chaos compliqué.


Message édité par smaragdus le 31-10-2004 à 18:18:00
Reply

Marsh Posté le 31-10-2004 à 18:22:52    

Smaragdus a écrit :

Petite parenthèse : Le seul moyen de générer un signal véritablement aléatoire (et non seulement chaotique), c'est d'utiliser un phénomène quantique.


Information d'une inutilité impressionnante dans le cadre de ce thread puisque totalement inutilisable :sweat:  
(a moins que ton ordinateur soit capable de générer des systèmes chaotiques, auquel cas tu devrais le vendre ca te fera des tunes :sol: )
 
Comme on dit, la culture c'est comme la confiture, hein smara [:itm]


Message édité par masklinn le 31-10-2004 à 18:23:26

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 31-10-2004 à 18:26:39    

Dans la logique de ton raisonnement, ce que tu viens d'écrire est aussi d'une inutilité flagrante :)

Reply

Marsh Posté le 31-10-2004 à 18:27:30    

Masklinn a écrit :

Information d'une inutilité impressionnante dans le cadre de ce thread puisque totalement inutilisable :sweat:  
(a moins que ton ordinateur soit capable de générer des systèmes chaotiques, auquel cas tu devrais le vendre ca te fera des tunes :sol: )
 
Comme on dit, la culture c'est comme la confiture, hein smara [:itm]


 
Merci ton message d'une inutilité astronomique  :lol:

Reply

Marsh Posté le 31-10-2004 à 18:32:29    

Masklinn a écrit :

Information d'une inutilité impressionnante dans le cadre de ce thread puisque totalement inutilisable :sweat:  
(a moins que ton ordinateur soit capable de générer des systèmes chaotiques, auquel cas tu devrais le vendre ca te fera des tunes :sol: )
 
Comme on dit, la culture c'est comme la confiture, hein smara [:itm]


 
si tout les messages inutiles pouvais etre comme celui la

Reply

Marsh Posté le 31-10-2004 à 18:36:11    

Chronoklazm a écrit :

Dans la logique de ton raisonnement, ce que tu viens d'écrire est aussi d'une inutilité flagrante :)


Non, il apporte de l'information dans la mesure ou il explique aux personnes fréquentant ce topic qu'il n'est pas possible de générer informatiquement un système chaotique [:spamafote]  

Citation :

Laisse tomber, Masklinn est du genre à en vouloir à ceux qui pourraient lui apprendre qqc car il aurait l'impression de se sentir inférieur.


J'aime beaucoup apprendre des gens qui ont des choses à m'apprendre, mais ces gens ressemblent plus à Gfx, Stephen, Gregttr ou Taz qu'à toi [:itm] (en se limitant à hwfr)
En fait, ces gens ressemblent à des personnes en sachant plus que moi [:figti]  
 
Comprends bien, le débat sur l'obtention de valeurs réellements aléatoires par utilisation de systèmes chaotiques c'est très bien, mais c'est à faire dans la cat discu science, l'informatique actuelle étant par définition déterministe la génération d'un système chaotique et donc de quelque chose de mieux que les suites pseudo-aléatoires disponibles actuellement n'a même pas à être considéré, il est donc inutile et destructif d'en faire mention dans ce thread [:calin]

Citation :

si tout les messages inutiles pouvais etre comme celui la


 :pfff:  
j'ai pas dit inutile bordel, j'ai dit inutile dans le cadre de ce thread


Message édité par masklinn le 31-10-2004 à 18:37:01

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 31-10-2004 à 18:43:56    

Masklinn a écrit :

Non, il apporte de l'information dans la mesure ou il explique aux personnes fréquentant ce topic qu'il n'est pas possible de générer informatiquement un système chaotique [:spamafote]  


 
Dans la mesure où on m'a posé la question, je réponds et j'explique.


Message édité par smaragdus le 31-10-2004 à 19:09:09
Reply

Marsh Posté le 31-10-2004 à 18:54:36    

Smaragdus a écrit :

Dans la mesure où on m'a posé la question, je réponds et j'explique.


Question "habilement" amenée en en faisant mention [:itm]  
Quand bien même tu savais l'inutilité de la dite mention dans le cadre de suites (pseudo)aléatoires générées informatiquement [:itm]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 31-10-2004 à 18:59:02    

oui mais pas la peine d'en faire tout un troll, c'est la aussi que les post s'accumulent inutilement

Reply

Marsh Posté le 31-10-2004 à 19:08:53    

cris56 a écrit :

oui mais pas la peine d'en faire tout un troll, c'est la aussi que les post s'accumulent inutilement


 
Devant de telles dérives, j'ai prevenu un modo :jap:

Reply

Marsh Posté le 31-10-2004 à 19:47:35    

Masklinn a écrit :

Non, il apporte de l'information dans la mesure ou il explique aux personnes fréquentant ce topic qu'il n'est pas possible de générer informatiquement un système chaotique [:spamafote]  

Citation :

Laisse tomber, Masklinn est du genre à en vouloir à ceux qui pourraient lui apprendre qqc car il aurait l'impression de se sentir inférieur.


J'aime beaucoup apprendre des gens qui ont des choses à m'apprendre, mais ces gens ressemblent plus à Gfx, Stephen, Gregttr ou Taz qu'à toi [:itm] (en se limitant à hwfr)
En fait, ces gens ressemblent à des personnes en sachant plus que moi [:figti]  
 
Comprends bien, le débat sur l'obtention de valeurs réellements aléatoires par utilisation de systèmes chaotiques c'est très bien, mais c'est à faire dans la cat discu science, l'informatique actuelle étant par définition déterministe la génération d'un système chaotique et donc de quelque chose de mieux que les suites pseudo-aléatoires disponibles actuellement n'a même pas à être considéré, il est donc inutile et destructif d'en faire mention dans ce thread [:calin]

Citation :

si tout les messages inutiles pouvais etre comme celui la


 :pfff:  
j'ai pas dit inutile bordel, j'ai dit inutile dans le cadre de ce thread

Euh si, je crois: si tu veux un systeme reellement aleatoire, ca peut se faire, mais sous forme de systeme physique (une histoire d'agitation/bruit thermique il me semble) avec un capteur, dont les valeurs sont utilisées.
J'ai entendu parler de ce truc il y a un bail, mais je ne sais pas ou ca en est actuellement.
A+,


Message édité par gilou le 31-10-2004 à 19:49:02

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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