Présentation de l'algorithme :

Calcul approché de Pi par la méthode des aiguilles de Buffon

Tester l'algorithme :


(cliquer sur le bouton ci-dessus pour lancer ou relancer l'exécution de l'algorithme)
Remarque : si les messages "Algorithme lancé" et "Algorithme terminé" n'apparaissent pas au bout d'un moment dans la zone ci-dessous, c'est que l'algorithme contient une erreur.

Résultats :

Code de l'algorithme :
1     VARIABLES
2       x EST_DU_TYPE NOMBRE
3       y EST_DU_TYPE NOMBRE
4       nb EST_DU_TYPE NOMBRE
5       i EST_DU_TYPE NOMBRE
6       nb_interieurs EST_DU_TYPE NOMBRE
7       approx_pi EST_DU_TYPE NOMBRE
8       n EST_DU_TYPE NOMBRE
9       l EST_DU_TYPE NOMBRE
10      angle EST_DU_TYPE NOMBRE
11      y_min EST_DU_TYPE NOMBRE
12      k_proche EST_DU_TYPE NOMBRE
13      j EST_DU_TYPE NOMBRE
14      nb_lattes_coupees EST_DU_TYPE NOMBRE
15    DEBUT_ALGORITHME
16      nb_lattes_coupees PREND_LA_VALEUR 0
17      LIRE n
18      l PREND_LA_VALEUR 1/n
19      POUR i ALLANT_DE 1 A n
20        DEBUT_POUR
21        TRACER_SEGMENT (0,i/n)->(1,i/n)
22        FIN_POUR
23      LIRE nb
24      POUR i ALLANT_DE 1 A nb
25        DEBUT_POUR
26        x PREND_LA_VALEUR random()
27        y PREND_LA_VALEUR random()
28        angle PREND_LA_VALEUR random()*2*Math.PI
29        SI (y<y+l*sin(angle)) ALORS
30          DEBUT_SI
31          y_min PREND_LA_VALEUR y
32          FIN_SI
33          SINON
34            DEBUT_SINON
35            y_min PREND_LA_VALEUR y+l*sin(angle)
36            FIN_SINON
37        POUR j ALLANT_DE 1 A n
38          DEBUT_POUR
39          SI (y_min < 0) ALORS
40            DEBUT_SI
41            k_proche PREND_LA_VALEUR 0
42            FIN_SI
43            SINON
44              DEBUT_SINON
45              SI (y_min>(j-1)/n ET y_min<=j/n) ALORS
46                DEBUT_SI
47                k_proche PREND_LA_VALEUR j
48                FIN_SI
49              FIN_SINON
50          FIN_POUR
51        SI (abs(l*sin(angle))>(k_proche/n - y_min)) ALORS
52          DEBUT_SI
53          TRACER_SEGMENT (x,y)->(x+l*cos(angle),y+l*sin(angle))
54          nb_lattes_coupees PREND_LA_VALEUR nb_lattes_coupees+1
55          FIN_SI
56          SINON
57            DEBUT_SINON
58            TRACER_SEGMENT (x,y)->(x+l*cos(angle),y+l*sin(angle))
59            FIN_SINON
60        FIN_POUR
61      approx_pi PREND_LA_VALEUR 2*nb/nb_lattes_coupees
62      AFFICHER "Valeur approchée de Pi : "
63      AFFICHER approx_pi
64    FIN_ALGORITHME