Sugestão enviada por David Sena :)
Como a quantidade de pontos dentro de um quadrado é igual a cardinalidade dos reais. Podemos utilizar duas estratégias:
1) Desenvolver um algoritmo que escolhe pontos aleatórios dentro do quadrado e conta quantos pontos caem dentro do círculo com raio 1 com centro no ponto (0,0) inscrito no quadrado.
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(){ int n; int cont; double x; double y; while(1){ printf("Entre com quantidade de pontos escolhidos:"); scanf("%d",&n); cont = 0; srand ( time(NULL) ); for(int i=0;i<n;i++){ x = (double)rand()/RAND_MAX; y = (double)rand()/RAND_MAX; if(x*x + y*y <= 1 ) cont++; } printf("%lf\n",(4.0*cont)/n); } }
Execução do Algoritmo:
Entre com quantidade de pontos escolhidos:100 3.240000 Entre com quantidade de pontos escolhidos:1000 3.128000 Entre com quantidade de pontos escolhidos:10000 3.157200 Entre com quantidade de pontos escolhidos:100000 3.142200 Entre com quantidade de pontos escolhidos:1000000 3.140468 Entre com quantidade de pontos escolhidos:10000000 3.141982 Entre com quantidade de pontos escolhidos:100000000 3.141579 Entre com quantidade de pontos escolhidos:1000000000 3.141509 Entre com quantidade de pontos escolhidos:2000000000 3.141525
1) Desenvolver um algoritmo que analisa todos os pontos inteiros dentro do quadrado de lado 2*r e conta quantos pontos caem dentro do círculo com raio r com centro no ponto (0,0) inscrito no quadrado.
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(){ int r; int cont; int total; while(1){ printf("Entre o raio do circulo:"); scanf("%d",&r); total = 0; cont = 0; for(int i=-r;i<=r;i++){ for(int j=-r;j<=r;j++){ total++; if(i*i + j*j <= r*r) cont++; } } printf("%lf\n",(4.0*cont)/total); } system("PAUSE"); }Execução do algoritmo:
Entre o raio do circulo:10
2.875283
Entre o raio do circulo:100
3.110517
Entre o raio do circulo:1000
3.138410
Entre o raio do circulo:10000
3.141276
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(){ int r; long long cont; long long total; while(1){ printf("Entre o raio do circulo:"); scanf("%d",&r); total = 0LL; cont = 0LL; for(int i=0;i<=r;i++){ for(int j=0;j<=i;j++){ total++; if(i*i + j*j <= r*r) cont++; } } printf("%lf\n",(4.0*cont)/total); } system("PAUSE"); }
Execução do Algoritmo:
Entre o raio do circulo:10
2.969697
Entre o raio do circulo:100
3.116288
Entre o raio do circulo:1000
3.138961
Entre o raio do circulo:10000
3.141331
Nenhum comentário:
Postar um comentário