problème avec rand() - C - Programmation
Marsh Posté le 27-10-2004 à 18:50:36
... va prendre ton dictionnaire et recherche la définition du mot 'initialiser'
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.
Marsh Posté le 27-10-2004 à 18:58:50
Comme le dit Taz, il faut initialiser le generateur de random.
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;
}
Marsh Posté le 27-10-2004 à 19:00:56
ca marchera surement mieux comme ca
bonne soiree.
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 ?
Marsh Posté le 27-10-2004 à 19:02:24
ton printf change le pour ca
printf("%d\n",nb);
c'est plus clair ainsi.
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
Marsh Posté le 27-10-2004 à 19:03:46
Je te remercie CHAVEZ, c'était bien çà le problème.
Bonne soirée ! :-)
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.
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
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 ?
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.
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...
Marsh Posté le 31-10-2004 à 14:38:59
srand(time(NULL)); toujours au début de programme ou de de la fonction
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 ?
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);
}
}
Marsh Posté le 31-10-2004 à 17:59:17
Faut pas uiliser modulo avec rand(), c'est comme croiser les effluves.
Marsh Posté le 31-10-2004 à 17:59:51
si ta fonction est appelée plusieurs fois par seconde (ce qui est tres probable ) ca te sortira toujours les memes nombres
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
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.
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.
Marsh Posté le 31-10-2004 à 18:11:20
Smaragdus, c'est quoi la difference entre "chaotique" et "aléatoire" ?
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é.
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
(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 )
Comme on dit, la culture c'est comme la confiture, hein smara
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
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 |
Merci ton message d'une inutilité astronomique
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 |
si tout les messages inutiles pouvais etre comme celui la
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
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 (en se limitant à hwfr)
En fait, ces gens ressemblent à des personnes en sachant plus que moi
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
Citation : si tout les messages inutiles pouvais etre comme celui la |
j'ai pas dit inutile bordel, j'ai dit inutile dans le cadre de ce thread
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 |
Dans la mesure où on m'a posé la question, je réponds et j'explique.
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
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
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
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
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
|
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+,
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