Ganarateur d'un nombre aleatoire

rozalina Messages postés 8 Statut Membre -  
Mins Messages postés 45 Statut Membre -
Bonjour,

SVP aidez moi a realiser un petit programme en pascal de ganarateur d'un nombre aleatoire mais sans utiliser la commande random,par exemple on utilise l'algorhitme de monte carlo.SVP
Configuration: Windows XP Internet Explorer 6.0

3 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Je ne connais pas la méthode de Monte-Carlo...
    Pour simuler des nombres aléatoires tu peux faire :
    program SansTitre;
    
    const PAS=153243;
    const GENERATEUR=4123;
    var CURSEUR:integer;
    
    
    function aleatoire(a,b:integer):integer; // nombre compris entre a et b
    begin
    CURSEUR:=CURSEUR+PAS;
    result:=a+ (CURSEUR mod GENERATEUR) mod (b-a);
    end;
    
    var i:integer;
    begin
    CURSEUR:=17;
    
    for i:=1 to 50 do
        writeln(aleatoire(0,9));
    
    writeln; write('Fin du programme. Appuyer sur Entree pour terminer'); readln;
    end.
    L'avantage d'utiliser random, c'est que les valeurs de GENERATEUR PAS et CURSEUR sont modifiés au début du programme...
    1
    1. rozalina Messages postés 8 Statut Membre
       
      a ce que ti sais d'autre algorithmes.......???
      0
    2. rozalina Messages postés 8 Statut Membre
       
      ou bien comment random est programme
      0
      1. rozalina Messages postés 8 Statut Membre > rozalina Messages postés 8 Statut Membre
         
        SVP aide moi
        0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Générer un nombre aléatoire n'est pas évident, il y a beaucoup d'études dessus...
    Voici un code un peu plus complexe que je viens de faire, il se base sur l'heure d'exécution du programme
    program SansNom;
    
    uses dos;
    
    var memoire:real;
    
    function random:real; // renvoie un nombre entre 0 et 1
    var h,m,s,c:word; u,v,w,x,y:real; s1,s2:string; i:integer;
    begin
    gettime(h,m,s,c);
    memoire:=(memoire*17*c)/7451;
    u:=h*m+s+c;
    v:=h+m*s+c;
    w:=h+m+s*c;
    x:=u*v+w;
    y:=u+v*w;
    
    str(x*y*memoire,s1);
    s2:='0.';
    for i:=1 to length(s1) do
        if (s1[i]>='0') and (s1[i]<='9') then s2:=s2+s1[i];
    val(s2,result);
    end;
    
    var i:integer;
    begin
    memoire:=1;
    
    for i:=1 to 15 do
        writeln(random:0:10);
    
    writeln; write('Fin du programme. Appuyer sur Entree pour terminer'); readln;
    end.
    1
  3. Mins Messages postés 45 Statut Membre 9
     
    Sinon il y a ceci :

    https://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9rateur_de_nombres_pseudo-al%C3%A9atoires#Exemples_d.27algorithmes_connus C'est à lire car ça donne des algorithmes très simples (Von Neumann)

    https://fr.wikipedia.org/wiki/Mersenne_Twister Bon générateur
    https://fr.wikipedia.org/wiki/Blum_Blum_Shub Très bon générateur...

    Mais faut des bases solides en maths si tu ne veux pas te contenter du Von Neumann...

    Courage :)
    1