CodeS-SourceS
Rechercher un code, un tuto, une réponse

Approximation pi par la méthode de monte carlo

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 490 fois - Téléchargée 10 fois

Contenu du snippet

programme qui donne une estimation de pi selon la méthode de monte carlo
                                                                                                                                    • /

/*** Approximation de pi par la méthode de monte carlo ***/
/*** crée par blackbird ***/
//-principe :
//--> un cercle est circonscrit dans un carré.
// la surafce du cercle / la surface du carré = pi / 4
//--> on remplit le carré par des points (surafce du carré)
// et on compte le nombre de points dans le cercle (surface
// du cercle).
// leurs rapport = pi / 4
//--> plus le nombre de points est élévé plus on s'approche de la
// valeur de pi
/******************************************************************/

Source / Exemple :


/******************************************************************/
/***      Approximation de pi par la méthode de monte carlo     ***/
/***                       crée par blackbird                   ***/
//-principe : 
//--> un cercle est circonscrit dans un carré.
//    la surafce du cercle / la surface du carré = pi / 4
//--> on remplit le carré par des points (surafce du carré)
//    et on compte le nombre de points dans le cercle (surface 
//    du cercle).
//    leurs rapport = pi / 4
//--> plus le nombre de points est élévé plus on s'approche de la 
//    valeur de pi
/******************************************************************/

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <conio.h>
#include <ctype.h>
#include <windows.h>

int main() {

	int Rep;

	float NbrePoint,CoordonneeX,CoordonneeY;
	float NbrePointDansCercle = 0 ,Compteur = 1;
	
	LARGE_INTEGER Debut,Fin,Frequence;
	double Duree;

	//
	//saisie du nombre de points total.
	//
	printf("Donner le nombre de points total :\n");
	scanf("%f",&NbrePoint);
	//

	QueryPerformanceFrequency(&Frequence);
	QueryPerformanceCounter(&Debut);

	//
	//extraire aléatoirement un point de coordonnées X et Y
	//si X²+Y² < 1 donc le point est dans le cercle
	//sinon elle est dans le carré.
	//
	srand(time(NULL));
	do {
		CoordonneeX = rand()/(RAND_MAX+1.0);
		CoordonneeY = rand()/(RAND_MAX+1.0);
		if (CoordonneeX * CoordonneeX + CoordonneeY * CoordonneeY < 1)
			NbrePointDansCercle ++;
		printf("PI = %10f\n",4*NbrePointDansCercle / NbrePoint);
			Compteur++;
	}while(Compteur<=NbrePoint);
	//
    
	QueryPerformanceCounter(&Fin);
	Duree = (1000.0 * (Fin.QuadPart - Debut.QuadPart) / Frequence.QuadPart );
	printf("\n		Ex%ccut%c en %0.3f secondes\n",130,130,Duree/1000);

	printf("\n\nTaper sur Entr%ce pour continuer.\nTaper sur une autre pour quitter\n\n\n",130);
       Rep = _getch();
	   if (__toascii(Rep) == 13)  {system("cls");main();}
	   else exit(EXIT_SUCCESS);
}

A voir également

Ajouter un commentaire

Commentaires

Donnez votre avis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.