Arkadiusz Jadczyk Arkadiusz Jadczyk
870
BLOG

Program Pi

Arkadiusz Jadczyk Arkadiusz Jadczyk Kultura Obserwuj notkę 69

Dzisiejsza nota będzie inna od dotychczasowych. Chcę mianowicie pomóc tym, ktorzy chcieliby użyć komputera do zabaw z liczbami, a którzy tego dotąd nie robili. Wczoraj jeden z moich czytelników zachwycał się otwartością Galopującego Majora, który miał stwierdzić, że pisze „wyłącznie dla siebie”. Ja wyłącznie dla siebie nie piszę. Jeśli pomogę choć jednemu mojemu czytelnikowi – to już dobrze. Traktuję bowiem moje pisanie jako służbę. Służbę innym.


Kiedyś, dawno, dawno temu, częścią systemu operacyjnego Windows był interpreter języka programowania Basic. Później, z nieznanych mi powodów, to się zmieniło. Basic jakoś uległ bardziej wyrafinowanym językom, pojawiła się Java, zaczęła się walka dwóch koncernów – Microsoftu i Sun. W rezultacie wejście w świat programowania zostało znacznie utrudnione. Moim zdaniem cofnęliśmy się do tyłu.


Język Basic jest prosty, efektywny, łatwo dostępny. Dziś pokażę, na przykładzie, jak się nim posługiwać. Przykładem dzisiejszym będzie wyliczenie numeru iteracji przy której następuje ucieczka z zaklętego koła. Konieczne przygotowanie do tego, wprowadzenie do liczb zespolonych i formuły podałem w poprzedniej nocie.


Zaczniemy od instalacji kompilatora i interfejsu pakietu FreeBasic. Zrobię to na przykładzie systemu operacyjnego Windows. FreeBasic jest także dostępny dla innych systemów operacyjnych.


Ściągamy najpierw kompilator, bacząc by ściągnąć go dla naszego systemu operacyjnego, z tego linku. Przyda nam sie też interfejs-edytor IDE – Integrated Development Environment – jest wygodny. Można go, pod Windowsy, ściagnąć stąd. - wystarczy klik na „Download”. Po ściągnięciu należy pliki rozpakować i zainstalować. Ja zainstalowałem FreeBasic na dysku D w katalogu Programs. Normalnie instaluje się on na dysku C w katalogu Program Files. Natomiast IDE zainstalowałem wewnątrz katalogu FreeBasic. Przy pierwszym uruchomieniu IDE pyta gdzie jest compilator fbc.exe. Trzeba mu w tym pomóc i naprowadzić do wnętrza katalogu FreeBasic.


Zawodowy programista zapewne opisze to wszystko lepiej niż ja.


A oto program, który napisałem w dialekcie FreeBasic podający, dla danej wartości stałej c numer iteracji przy której następuje ucieczka z koła o promieniu 2:


''''''''''''''
' Najpierw deklarujemy zmienna numerujaca iteracje

' Integer to liczba calkowita
dim as integer i
' dalej deklarujemy zmienne uzywane w samym 
' programie
' double oznacza, ze potrzebna nam bedzie podwojna 
' precyzja
dim as double x,y,pom,a
'Ponizej deklarujemy stale. 
' cr to czesc rzeczywista, ci to 'czesc urojona
'liczby zespolonej c wystepujacej w naszej formule. 
'Przy 'innym c bedziemy musieli
'ponizsze formuly zmienic  
const as double cr=-0.75
const as double ci=0.0000001
'na poczatku z = x+yj=0, tzn x=0 oraz y=0
' zmienna iterujaca tez na ' poczatku ma wartosc 0:
x=0
y=0
i=0
' Zaczynamy petle. Petla w ' naszym dialekcie jezyka 'zaczyna sie od Do, konczy 
' na Loop
Do
'zwiekszamy o jeden 'wskaznik numerujacy iteracje  
i = i+1
' pom to zmienna pomocnicza. W niej chowamy czesc 
' rzeczywista liczby po itercaji
pom = x*x-y*y+cr
' y to czesc urojona liczby po iteracji
y=2*x*y+ci
' teraz juz mozemy zmienic ' wartosc x-a na obliczona w pom
x=pom
' obliczamy kwadrat modulu ' otrzymanej liczby zespolonej
a=x*x+y*y
' dalsze dwie linijki zmienilem na komentarze , 
' bo spowalniaja bieg programu
'mozna je odkomentowac dla 'ci=0.1 i ci=0.01
'print
'print "abs(z)=";sqr(a);",i=";i
' Sprawdzamy czy nastapila ' ucieczka poza okrag. Jesli nastapila - piszemy 
' komunikat i podajemy numer ' iteracji przy ktorej ucieczka nastapila.
' Nastepnie przerywamy petle - Exit Do
if a>4 then
    print "ucieczka przy i=";i
    Exit Do
end if
Loop
' Na koncu polecenie ' zapobiegajace natychmiastowemu zniknieciu okna
Sleep

'''''''''''''''''''''''''''

Każde polecenie poprzedziłem krótkim wyjaśnieniem. Komentarze wewnątrz programu poprzedzamy znakiem '. Opuściłem przy tym polskie ogonki. Nie byłem bowiem pewien czy kompilator je strawi.

Aby sprawdzić czy nasza instalacja działa uruchamiamy fbide – link do niego powinien się, po instalacji, pojawić na naszym stole roboczym. Klik na File/New i kopiujemy tam tekst programu – ten pomiędzy '''''''' i ''''''''.

Następnie sprawdzamy czy wszystko się dobrze skopiowało. Ważne, by każda linijka z komentarzem miała na początku znak '. Dalej klik na "File/Save as" i zapisujemy nasz program gdzieś na dysku. Ja zapisałem w katalogu D:\Programs\FreeBasic\examples\misc . Tam są bowiem inne przykładowe programy. Przy zapisie trzeba podać nazwę. Nazwa powinna mieć końcówkę .bas, np. pi.bas.


Teraz juz możemy wypróbować działanie. Klik myszą na "Run/Compile & run" (równoważnie – F9). Jeśli wszystko poszło dobrze, powinno się pojawić okienko DOSu z napisem:


ucieczka przy i = 31415927

Chcąc wypróbować inną wartośc stałej c, w edytorze zmieniamy z ci=0.0000001

na ci=0.1. Zapisujemy zmianę na dysku: File/Save, następnie znów F9 i powinniśmy zobaczyć komunikat, że tym razem ucieczka nastąpiła przy 3-ciej iteracji.


Oczywiście mój krótki programik możnaby ulepszyć. Może nawet ktoś z moich czytelników zechce to zrobić. Chodzi przede wszystkim o to, by nie odwoływać się za każdym razem do edytora, gdy chcemy zmienić wartość stałej c oraz o to, by na końcu otrzymać ładną tabelkę z kolejnymi przybliżeniami liczby Pi.


Wreszcie uwaga końcowa. Kiedy wczoraj się tym bawiłem, zauważyłem, że Dave Boll, który prawidłowość z Pi odkrył w roku 1992, dla c = -0.75+0.0000001j podał, że ucieczka następuje przy

i = 31415928. A mi wyszło 31415927. Niby niewielka różnica, ale skąd się ona wzięła? Przypuszczalnie z różnicy w precyzji obliczeń. FreeBasic liczy w podwójnej precyzji – to bodaj 16 miejsc znaczących. Nie wiem jakiej precyzji uzywał Boll. Dla sprawdzenia więc napisałem ten sam program w Pascalu, gdzie mam 20 miejsc znaczących. Wyszło to samo, co dawał FreeBasic. Więc to raczej Boll używał mniejszej precyzji .... choć na 100% nie jestem pewien.

Naukowiec, zainteresowany obrzeżami nauki. Katalog SEO Katalog Stron map counter Życie jest religią. Nasze życiowe doświadczenia odzwierciedlają nasze oddziaływania z Bogiem. Ludzie śpiący są ludźmi małej wiary gdy idzie o ich oddziaływania ze wszystkim co stworzone. Niektórzy ludzie sądzą, że świat istnieje dla nich, po to, by go pokonać, zignorować lub zgasić. Dla tych ludzi świat zgaśnie. Staną się dokładnie tym co dali życiu. Staną się jedynie snem w "przeszłości". Ci co baczą uważnie na obiektywną rzeczywistość wokół siebie, staną się rzeczywistością "Przyszłości" Lista wszystkich wpisów  

Nowości od blogera

Komentarze

Inne tematy w dziale Kultura