Sprawdź się
Za pomocą metody Monte Carlo wyznacz stosunek pola koła wpisanego w kwadrat do pola tego kwadratu. Użyj n losowych punktów. Przetestuj działanie programu dla n = 10000.
Specyfikacja problemu:
Dane:
n– liczba naturalna
Wynik:
stosunek pola koła wpisanego w kwadrat do pola tego kwadratu
Przykładowe rozwiazanie zadania:
#include <iostream>
#include <cstdlib>
using namespace std;
double wyznacz_stosunek(int liczba_losowan) {
int liczba_trafien = 0;
for (int i = 0; i < liczba_losowan; ++i) {
// losowe liczby z przedziału <-1, 1>
double x = 2 * double(rand()) / RAND_MAX - 1;
double y = 2 * double(rand()) / RAND_MAX - 1;
if (x * x + y * y <= 1) {
++liczba_trafien;
}
}
return double(liczba_trafien) / liczba_losowan;
}
int main() {
int n = 10000;
cout << wyznacz_stosunek(n) << endl;
return 0;
}Za pomocą metody Monte Carlo wyznacz stosunek objętości kuli wpisanej w sześcian do objętości tego sześcianu. Użyj n losowych punktów. Wykorzystaj równanie kuli o środku w punkcie :
Przetestuj działanie programu dla n = 10000.
Specyfikacja problemu:
Dane:
n– liczba naturalna
Wynik:
stosunek objętości kuli wpisanej w sześcian do objętości tego sześcianu
Przykładowe rozwiazanie zadania:
#include <iostream>
#include <cstdlib>
using namespace std;
double wyznacz_stosunek(int liczba_losowan) {
int liczba_trafien = 0;
for (int i = 0; i < liczba_losowan; ++i) {
// losowe liczby z przedziału <-1, 1>
double x = 2 * double(rand()) / RAND_MAX - 1;
double y = 2 * double(rand()) / RAND_MAX - 1;
double z = 2 * double(rand()) / RAND_MAX - 1;
if (x * x + y * y + z * z <= 1) {
++liczba_trafien;
}
}
return double(liczba_trafien) / liczba_losowan;
}
int main() {
int n = 10000;
cout << wyznacz_stosunek(n) << endl;
return 0;
}Napisz program, który za pomocą metody Monte Carlo obliczy pole koła. Przetestuj swój program dla koła o promieniu Wynik wypisz z dokładnością do trzech miejsc po przecinku (nie zaokrąglaj).
Specyfikacja:
Dane:
r- promień koła, którego pole należy obliczyć; liczba rzeczywista
Wynik:
pole koła o promieniu
r
Przykładowe rozwiazanie zadania:
#include <iostream>
#include <cstdlib>
using namespace std;
double wyznaczPoleKola(double promien, int liczba_losowan) {
int liczba_trafien = 0;
for (int i = 0; i < liczba_losowan; ++i) {
// losowe liczby z przedziału <-promien, promien)
double x = 2 * promien * (rand()) / RAND_MAX - promien;
double y = 2 * promien * (rand()) / RAND_MAX - promien;
if (x * x + y * y <= promien * promien) {
++liczba_trafien;
}
}
return 4 * promien * promien * liczba_trafien / liczba_losowan;
}
int main() {
double r = 2;
double wynik = wyznaczPoleKola(r, 10000000);
cout << wynik << endl;
return 0;
}