Ganarateur d'un nombre aleatoire

rozalina Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Mins Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
rozalina Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
a ce que ti sais d'autre algorithmes.......???
0
rozalina Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
ou bien comment random est programme
0
rozalina Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   > rozalina Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
SVP aide moi
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
Mins Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   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