la fonction random en c

Voir le sujet précédent Voir le sujet suivant Aller en bas

la fonction random en c

Message par lina le Mer 29 Avr - 2:34

bonjour, j'ai un tp en langage c ,qui est un programme de simulation de deux files d'attente l'une des clients prioritaires et l'autre des non prioritaires et la priorité est absolue et preenptive ,je suis oubliger d'utliser la fonction radom pour generer les nombres aleatoires et je ne sai pa comment la utiliser je demande une aide sur ça.et merci d'avance.

lina
Entier Naturel
Entier Naturel

Féminin
Nombre de messages : 7
Localisation : algerie
Réputation : 2
Points : 3168
Date d'inscription : 27/04/2009

Revenir en haut Aller en bas

Re: la fonction random en c

Message par Napoléon le Mer 29 Avr - 12:06

En C, la fonction rand() donne des valeurs aléatoires
en 0 et MAX_RAND de (si je me rappelle bien du nom de la constante). La fonction rand() génère des entiers uniformément distribués sur l'intervalle [0, RAND_MAX].

Il est conseillé d'appeler une seule fois, avant "rand()", la fonction
Code:
srand( time(NULL));

pour pouvoir générer des valeurs aléatoires vraies. çàd à chaque exécution du programme, la fonction rand() génère une nouvelle séquence de nombre différente de ce qui a été généré.

Pour générer des nombres aléatoires entre [0, 1], il suffit de diviser les valeurs données par rand() par la plus grande valeur MAX_RAND :
Code:
#include
int main()
{
    float r;
    srand( time(NULL));
    r = (float)(rand()) / (float)(MAX_RAND);   
}

On peut en déduire une méthode pour générer des valeurs aléatoires entre dans l'intervalle [a, b]:

Code:
  r = a + (b-a)*((float)(rand()) / (float)(MAX_RAND));   

En effet, les inégalités suivantes permettent de démontrer la validité de la formule :

Code:
0 <= rand()/MAX_RAND <= 1
0 <= (b-a) * rand()/MAX_RAND <= (b-a)
a <= a + (b-a)* rand()/MAX_RAND <= b
CQFD.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Mar 1 Juin - 19:21

c'est faisable aussi avec la fonction random() qui retourne un entier entre o et MAX_RAND
donc si on veut un entier entre a et b on fait

random()%(b-a)+a

bonne continuation

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par informix le Mar 1 Juin - 19:48

moudhafer a écrit:c'est faisable aussi avec la fonction random() qui retourne un entier entre o et MAX_RAND
donc si on veut un entier entre a et b on fait

random()%(b-a)+a

bonne continuation

Ce n'est pas conseillé d'utiliser cette méthode @moudhafer, parce que les entiers générés ne sont pas "très aléatoires" vu le MODULO.

pefff, c'est un peu compliqué à expliquer et/ou à prouver aussi...

Essaie de la développer en C et poste nous le résultat, tu vas voir que ce n'est pas satisfaisant.

_________________
informix, Ecole d'ingénieurs
Les passions font vivre l'Homme; sa sagesse le fait seulement durer.
avatar
informix
Nombre Rationnel
Nombre Rationnel

Nombre de messages : 399
Réputation : 4
Points : 3994
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Mar 1 Juin - 20:01

okkk je la ferai ce soir je suis pas devant mon pc.
mais je crois qu'il n'y a aucun problem si on utilise le modilo(mon avis) le puisque le random() retourne un entier trés aleatoires je crois en lui appliquant un modulo,il va rester tjrs aléatoires,nn?

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par methodiX le Mar 1 Juin - 23:21

moudhafer a écrit:okkk je la ferai ce soir je suis pas devant mon pc.
mais je crois qu'il n'y a aucun problem si on utilise le modilo(mon avis) le puisque le random() retourne un entier trés aleatoires je crois en lui appliquant un modulo,il va rester tjrs aléatoires,nn?

Ca devient moins aléatoire que la méthode indiqué précédemment. Tu seras plus convaincu si tu programmes toi même ta méthode et tu nous postes le résultat de la simulation Smile

Je ne peux pas prouver mathématiquement cette conjecture.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4722
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Mer 2 Juin - 0:13

salem Smile
voila j'ai essayé
voila le code
Code:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main(){
srand( time(NULL));
int x,i;
int a=10;
int b=500;
for(i=0;i<20;i++){
    x=random()%(b-a)+a;
    printf("%d ",x);
}
return 0;}
[code/]

et voila l'execution je vois que les entiers sont trééééés aléatoires en plusieurs executions
Code:

salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
120 212 29 274 106 25 203 353 85 301 186 285 359 460 142 18 263 162 457 318 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
32 254 399 478 13 383 278 52 367 274 207 184 44 50 302 201 390 103 168 386 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
179 418 266 399 299 39 338 317 340 319 128 36 45 410 235 195 344 271 338 335 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
213 158 202 103 153 363 37 298 166 119 414 218 353 150 225 177 419 288 353 125 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
107 449 74 260 423 51 246 479 416 235 265 199 299 187 367 111 433 339 387 427 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
364 46 331 436 95 81 137 202 45 94 358 364 314 277 81 202 455 116 454 409 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
109 339 220 488 408 412 129 310 341 186 148 34 42 318 66 276 349 62 72 294 salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$
[code/]
Smile

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par methodiX le Mer 2 Juin - 0:25

Pourquoi tu as choisi un intervalle large Smile
tu triches Very Happy

Essaie avec I = [0, 20]

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4722
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Mer 2 Juin - 18:24

mdrrrrrrrrrr
tu m'as fait trop rire Very Happy
lool
alah ybarek tetdalel
voila :
Code:

salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
4 8 8 2 13 18 8 15 13 1 19 4 19 10 2 19 1 16 11 16 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
4 0 13 0 5 14 10 15 14 16 13 7 6 15 15 16 15 13 18 18 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
3 7 19 5 9 15 15 4 15 8 9 19 18 17 18 11 11 17 0 4 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
19 13 0 11 5 17 2 14 3 9 7 14 16 19 17 14 12 8 13 19 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
1 9 10 16 10 7 3 4 5 2 5 18 11 15 1 5 18 7 15 6 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
15 7 16 19 3 1 9 5 12 19 4 12 16 19 8 3 15 12 17 13 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
2 10 5 11 5 17 12 16 14 19 13 8 4 12 9 1 13 15 14 14 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$ ./alea
13 0 18 16 1 10 1 13 1 0 4 18 19 15 2 16 13 12 18 16 
salhi@salhi-laptop:~/Bureau/MOUDHAFER/tt/jeux$
Smile

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par methodiX le Mer 2 Juin - 21:55

Je ne sais pas si tu as deviné ou pas où je veux aller Smile

Je veux que tu m'aider à vérifier statistiquement que la suite que tu génère par le modulo est plus stable, moins aléatoire que la suite générée par la première méthode citée en haut.

Je te propose de faire un grand nombre de simulation et tu calcule la moyenne est l'écart type de l'échantillon que tu as obtenu.

Tu dois trouver une moyenne proche de M = (a+b)/2, et un écart type proche de l'écart type théorique non biaisé.

Je conjecture que les nombres générés par ta méthode n'ont pas une distribution uniforme.

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4722
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Jeu 3 Juin - 3:54

a333 tu peux dire que je suis presque nulle en math et statistique :p
tu sais ce que je vais faire pour te convaincre???je vais ecrire les deux manieres ,generer un grand nombre des entiers aleatoires(+que 10000) et dessiner les deux courbes.
je le ferai demain nchalah et je vais poster les courbes Wink

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par methodiX le Jeu 3 Juin - 23:53

Waiting for you ... Smile

_________________
Sami - Methodix, tunis
Le génie de Newton a consisté à dire que la lune tombe alors que tout le monde voit bien qu'elle ne tombe pas.
(Paul Valéry)
_____
Cliquer ici: Voir les nouveaux messages depuis votre dernière visite
Cliquer ici: Astuce: Utiliser l'outil "Recherche" du forum
avatar
methodiX
Admin
Admin

Masculin
Nombre de messages : 1260
Localisation : Le couloir de l'école polytechnique de Tunis
Réputation : 68
Points : 4722
Date d'inscription : 22/03/2007

Feuille de personnage
Capacité linguistique:
1000/1000  (1000/1000)

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Dim 6 Juin - 17:33

salut c'est fait j'ai dessiné la courbe de 100 entiers aléatoires dans l'intervalle [0..100],j'ai vu que c tréééées aléatoires.mais j'ai un probleme je sais pas comment poster ma courbe wur le forum O^o lool
quelqu'un peut m'aider???

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par Napoléon le Dim 6 Juin - 23:42

Smile Vous rigoler bien sur le forum @methodiX et @moudhafer.
Il vaut mieux donner des chiffres (moyenne, écart type, ou d'autres indicateurs) que de construire une courbe.

Pour poster une courbe sur le forum, il faut l'héberger quelques part puis mettre un lien vers elle en utilisant le bouton "insertion d'une image" qui se trouve dans la barre en haut.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: la fonction random en c

Message par moudhafer le Mar 8 Juin - 14:37

mdrr
okkk bon en mathématique j'avoue que je ne suis pas assez compétent,en plus la statistique!!lool
ca passe avec facebook??

merci

moudhafer
Entier Naturel
Entier Naturel

Masculin
Nombre de messages : 58
Age : 28
Localisation : france
Réputation : 0
Points : 2832
Date d'inscription : 26/05/2010

Revenir en haut Aller en bas

Re: la fonction random en c

Message par Napoléon le Mer 9 Juin - 3:03

moudhafer a écrit:mdrr
okkk bon en mathématique j'avoue que je ne suis pas assez compétent,en plus la statistique!!lool
ca passe avec facebook??

merci

je n'ai pas essayé de le faire à travers facebook. Je pense que ce n'est pas faisable.
Par contre c'est très faisable à travers le forum lui même, il y a un espace réservé à chaque membre. C'est l'icône "Héberger une image" qui est devant toi en mode Édition.

_________________
Nabil - tunis
خير الناس أنفعهم للناس
avatar
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 5340
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
999/1000  (999/1000)

http://infomath.online-talk.net

Revenir en haut Aller en bas

Re: la fonction random en c

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum