[c]Wyznaczyc pi metoda geometryczna
-
- Użytkownik
- Posty: 13
- Rejestracja: 7 wrz 2008, o 14:12
- Płeć: Mężczyzna
- Lokalizacja: Dąbrowa Górnicza
- Podziękował: 1 raz
[c]Wyznaczyc pi metoda geometryczna
Czy ktos moglby mi podpowiedziec jak zabrac sie za taki program, nie mam zielonego pojecia o co chodzi?
- Althorion
- Użytkownik
- Posty: 4541
- Rejestracja: 5 kwie 2009, o 18:54
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 9 razy
- Pomógł: 662 razy
[c]Wyznaczyc pi metoda geometryczna
Kod: Zaznacz cały
http://tnij.org/f1kx
I zauważenie, że \(\displaystyle{ \pi}\) jest związane ze stosunkiem pola powierzchni koła do kwadratu jego promienia.
Czyli - "strzelamy" do koła o założonym środku i promieniu, sprawdzamy przy użyciu nierówności koła czy "trafiliśmy" i liczymy stosunek "trafień" do wszystkich "strzałów". I zastanawiamy się, co z nim zrobić.
- steal
- Użytkownik
- Posty: 1043
- Rejestracja: 7 lut 2007, o 18:35
- Płeć: Mężczyzna
- Lokalizacja: Białystok|Warszawa
- Podziękował: 6 razy
- Pomógł: 160 razy
[c]Wyznaczyc pi metoda geometryczna
Wydaje mi się, że chodzi o przybliżanie okręgu n-kątem foremnym. Jak wiemy, długość okręgu wynosi \(\displaystyle{ L = 2\pi R}\), więc wartość pi \(\displaystyle{ \pi = \frac{L}{D}}\). Teraz jeżeli w ten okrąg wpiszemy n-kąt foremny to długość jego boku wyniesie \(\displaystyle{ x=D\sin\frac{180^o}{n}}\) czyli obwód tego n-kąta \(\displaystyle{ L=x\cdot n=Dn\sin\frac{180^o}{n}}\). Podstawiając to do wzoru na pi mamy:
\(\displaystyle{ \pi=\frac{L}{D}=n\sin\frac{180^o}{n}}\).
\(\displaystyle{ \pi=\frac{L}{D}=n\sin\frac{180^o}{n}}\).
-
- Użytkownik
- Posty: 13
- Rejestracja: 7 wrz 2008, o 14:12
- Płeć: Mężczyzna
- Lokalizacja: Dąbrowa Górnicza
- Podziękował: 1 raz
[c]Wyznaczyc pi metoda geometryczna
dobra, a jak to teraz przelozyc na jezyk c?mam cos takiego ale wynik jest zly :
Kod: Zaznacz cały
#include <stdio.h>
#include <math.h>
int n,i,pi,z;
float x,y;
int main()
{
printf("Podaj liczbe punktow");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("Podaj x:");
scanf("%lf", &x);
printf("Podaj y:");
scanf("%lf", &y);
if(x*x+y*y<=1)
{
z=z+1;
}
}
pi=4*(z/n);
printf("Pi wynosi:%f", pi);
getch();
}
Ostatnio zmieniony 3 mar 2010, o 15:47 przez Althorion, łącznie zmieniany 1 raz.
Powód: Wyróżniaj kod programu ze swojego posta.
Powód: Wyróżniaj kod programu ze swojego posta.
-
- Użytkownik
- Posty: 13
- Rejestracja: 7 wrz 2008, o 14:12
- Płeć: Mężczyzna
- Lokalizacja: Dąbrowa Górnicza
- Podziękował: 1 raz
[c]Wyznaczyc pi metoda geometryczna
no ale co zmienia wpisywanie ich losowo? w przypadku wpisywania to nie zadziala?
[c]Wyznaczyc pi metoda geometryczna
Tak to możesz cały czas wpisywać punkty będące poza kołem, a poza tym to nie będzie do końca zdarzenie losowe, czy trafisz w kółko czy nie. Ja troche przerobiłem kod metody monte-carlo z wikipedii tak, że dzieli się kwadrat na mniejsze kwadraciki i pole koła to stosunek liczby rogów kwadracików w kole do liczby wszystkich rogów kwadracików.
Najlepiej wpisać 100 000, u mnie wykonuje się 40 sekund, wylicza pi=3.14153.
Najlepiej wpisać 100 000, u mnie wykonuje się 40 sekund, wylicza pi=3.14153.
Ukryta treść:
- steal
- Użytkownik
- Posty: 1043
- Rejestracja: 7 lut 2007, o 18:35
- Płeć: Mężczyzna
- Lokalizacja: Białystok|Warszawa
- Podziękował: 6 razy
- Pomógł: 160 razy
[c]Wyznaczyc pi metoda geometryczna
Czy przeczytałeś cokolwiek na temat tej metody? Jej działanie opiera się na procesie losowym. Wpisywanie wymyślonych przez Ciebie liczb nie będzie spełniało tego warunku (co zresztą sam zauważyłeś, bo wynik nie jest poprawny), ponieważ człowiek zawsze będzie się sugerował jakimiś przesłankami przy wymyślaniu liczby. Oprócz tego, potrzebujesz dużą ilość tych punktów - jesteś w stanie wprowadzić ręcznie do programu np. 100000 współrzędnych?