Tính số PI dựa vào phương pháp xác xuất thống kê

các bước
1, tạo random số từ 0-1, cho vào 2 mảng X,Y, tất cả các điểm này thuộc hình vuông đơn vị
2, so sánh xem cặp tọa độ trong X,Y có thuộc hình tròn đơn vị hay k
3, pi = 4* ( số điểm thuộc hình tròn / số điểm thuộc hình vuông)
có thể bỏ qua bước tạo mảng, khi vừa có 1 cặp số thì ta sẽ so sánh ngay nó thuộc hình tròn k, như thế sẽ tiết kiệm bộ nhớ
code
Mã:
#include<stdio.h>
#include<ctime>
#include<stdlib.h>
#include<math.h>
void taotoado(int n,float X[],float Y[])
{
    srand(time(NULL));
    for ( int i = 1  ; i <= n ; i ++)
    {
        X[i] = (float)rand()/(float)RAND_MAX;
        Y[i] = (float)rand()/(float)RAND_MAX;
    }
}
int thuochinhtron(int n,float X[],float Y[])
{
    int sodiem=0;
    for ( int i = 1  ; i <= n ; i ++)
    {
        if ( sqrt ( pow( (X[i]-0.5),2 ) + pow( (Y[i]-0.5),2 ) ) <= (0.5))
            sodiem = sodiem+1;
    }
    return sodiem;
}
int main()
{
    long int n,sodiem;
    float X[100000],Y[100000],pi;
    scanf("%d",&n);
    taotoado(n,X,Y);
    pi = (float)4*((float)thuochinhtron(n,X,Y)/(float)n); 
    printf("pi = %f",pi);
}
số điểm n càng cao thì pi càng chính xác khoản trên 50k :D
 
Top