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
số điểm n càng cao thì pi càng chính xác khoản trên 50k
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);
}