FORTRAN - notatki
Transkrypt
FORTRAN - notatki
FORTRAN - notatki Jarosław A. Miszczak 10 lipca 2003 Spis treści 1 Wstęp 1.1 Trochę historii . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 Kompilatory Fortranu 2.1 G77 . . . . . . . . . . 2.2 f2c . . . . . . . . . . . 2.3 OpenWatcom . . . . . 2.4 ifc . . . . . . . . . . . 2.5 Projekt G95 . . . . . . 2.6 Lahey/Fujitsu Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 4 4 3 Podstawy 3.1 Format zapisu w FORTRANIE 77 3.2 Alfabet języka FORTRAN 77 . . . 3.3 Typy, zmienne, stałe . . . . . . . . 3.4 Operatory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 5 6 4 Pętle 4.1 Stnadarowa instrukcja DO . . . . . . . . . . . . . . . . . . . . 4.2 DO-ENDDO . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 5 Instrukcje warunkowe 5.1 Instrukcja IF . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 IF arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 7 6 Podprogramy - wstęp 6.1 Segment SOUBROUTINE . . . . . . . . . . . . . . . . . . . . 6.2 Segment FUNCTION . . . . . . . . . . . . . . . . . . . . . . 7 7 8 . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . 7 Biblioteki i zasoby 1 8 Wstęp FORTRAN (FORmula TRANslation ) powstał w 1954 roku i w ciągu pół wieku swojej historii przeszedł ogromne zmiany i zdobył wielką popularność wsród ludzi zajmujących się wszelkimi zagadnieniami numerycznymi. 1.1 Trochę historii Pierwszy kompilator języka OFRTRAN powstał w latach 1954-1957 w firmie IBM. Pracami nad nim kierował John W. Backus a w pracach brali udział między innymi Sheldon F. Best, Harlan Herrick, Peter sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Richard Goldberg, Lois Haibt and David Sayre. Backus był także współprojektantem komputera IBM 704, naktórym działał kompilator FORTRAN I. Powstał w ten sposób kompilator który przez 20 lat miał najlepsze osiągi jeżeli chodzi o optymalizację kodu. Nowy wynalazek bardzo szybko stał się popularny. FORTRAN wymagał mniejszych umiejętności programistycznych i pozwalał znacznie skrócić czas kodowania. Jego wielką zaletą była też przenośność. Krótko mówiąc miał on te wszystkie zalety których brakuje językom asemblerowym. W roku 1958 pojawiły się kolejne wersja języka - FORTRAN II i FORTRAN III. FORTRAN II pozwalał na oddzielnoą kompilację i linkowanie poszczególnych modułów programu w tym łączenie modułów fortranowskich z modułami asemblerowymi. Natomiast FORTRAN III nigdy nie został udostępniony publicznie. Pozwalał on na dodawanie wstawek assemblerowych do kodu FORTRANU. Trzy lata później ukazało się kolejne wydanie FORTRANU – tym razem oznaczone numerem IV. Wyparł on FORTRAN II z użytku. Pojawiły się nawet translatory z FORTRANA II na FORTRAN IV. Kolejnym krokiem było rozpoczęcie w maju 1962 r. prac komitetu ASA nad ogłoszeniem standardu języka FORTRAN. Nowy standard X3.9-1966 został opublikowany w 1966 r. i znany jest jako FORTRAN 66. Do opisu całego języka wystarczyło 36 stron! Warto dodać, że był to pierwszy na świecie zestandaryzowany język wysokiego poziomu. W połowie roku 1970 rozpoczęto prace nad kolejnym standardem. Został on opublikowany American National Standards Institute pod nazwą ANSI X3.9-1978, a w 1980 został częściowo zaakceptowany przez International Standards Organisation (ISO) jako międzynarodowy standard (IS 1539 : 1980). Język zdefinowany przez ten standard znany jest jako FORTRAN 77. 2 Pomimo swoich wad FORTRAN 77 do dzisiaj jest niesłychanie popularnym, zwłaszcza w kręgach naukowych, językiem programowania. Jednakże w ciągu ostatniego ćwierćwiecza ewolucja języka nie została zahamowana. Trwające 12 lat prace doprowadziły do zdefinowania nowego standardu znanego pod nazwą Fortran 90. Wprowadzono w nim wiele zmian zgodnych z tendencjami w rozwoju informatyki m.in. możliwość programowania obiektowego. Zachowana została przy tym pełna zgodność ze standardem FORTRAN 77. Dalsze prace doprowadziły do zdefiniowania w połowie lat ’90 standardu Fortran 95, który jest obecnine standardem języka Fortran zaakceptowanym przez komitet J3 (http://www.j3-fortran.org/). Obecnie mówi się o projektach Fortanu 2000 (http://www.fortran-2000. com/). Ma on umożliwiać między innymi wykorzystanie technik programowania obiektowego. 2 Kompilatory Fortranu W tej sekcji przedstawię najpopularniejsze kompilatory fortranu oraz znane mi źródła informacji na temat języka Fortran. 2.1 G77 Wraz z każdą dystrybucją systemu operacyjnego Linux rozprowadzany jest zestaw kompilatorów gcc – GNU Compiler Collection. Zawiera ona kopilatory jęyków C, Objective C, C++, Fortran 77, Java oraz Ada. Kod żródłowy oraz więcej informacji można znaleźć na stronie http://gcc.gnu.org/. Kompilator fortrana z tego zestawu jest dostępny także na system Windows - w postaci samodzielnej lub jako część gcc jeżeli instalujemy środowisko Cygwin (http://www.cygwin.com/, MinGW (http://mingw.sourceforge. net/ lub oparte o MinGW32 środowisko programistyczne Dev-C++ (http: //www.bloodshed.net/) . 2.2 f2c Program f2c nie jest kompilatorem lecz translatorem - pozwala ona na przetłumaczenie kodu zapisanego w Fortranie na kod języka C lub C++. 3 2.3 OpenWatcom W roku 2003 udostępniony został na zasadach OpenSource kompilator OpenWatcom dla systemu Windows. Zawiera on kompilatory języków Fortran oraz C/C++ http://www.openwatcom.org/ oraz zintegrowane środowisko deweloperskie. 2.4 ifc Firma Intel (http://www.intel.com/) udostępniła kompilatory języka Fortran 90 oraz C/C++ dla systemów Linux oraz Windows pracujących na procesorach tej firmy. Można go pobrać ze strony http://www.intel.com/ software/products/compilers/. 2.5 Projekt G95 Projekt G95 ma na celu stworzenie otwartego kompilatora języka Fortran 95. Strona projektu to http://g95.sourceforge.net/. Projekt jest w fazie rozwojowej... 2.6 Lahey/Fujitsu Fortran Komercyjny kompilator dostępny dla systemów Windows i Linux. Wersja dla Windows integruje się ze środowiskiem .NET!. Ze strony http://www. lahey.com/ można pobrać wersję próbną. 3 Podstawy 3.1 Format zapisu w FORTRANIE 77 Zapis kodu źródłowego w FORTRANIE 77 jest chyba jego największym anachronizmem. Obowiązują tu następujące reguły: • Instrukcje zapisujemy w kolumnach od 7 do 72 i wkażdym wierszu wolno zapisać tylko jedna instrukcję; znaki za 72 kolumną są ignorowane • Jeżeli instrukcja nie mieści się w jednej lini, to możemy ją kontynuować wpisując w następnym wierszu w szóstej kolumnie znak różny od zera i spacji *Wówczas taki wiersz nazywamy wierszem kontynuacji; jedna instrukcja moze być rozbita na maksymalnie 20 wiersz (wiersz początkowy + 19 wierszy kontynuacji). 4 • Kolumny od 1 do 5 są zarezerwowane na etykiety czyli ciągi cyfr złożone z co najwyżej 5 elementów; dzięki etykietom można w razie potrzeby odwołać się do wybranego miejsca w programie. • Jeżeli w pierwszej kolumnie umieścimy znak * lub C wszystkie w danym wierszu są uważane za komentarz i nie maja wpływu na wykonanie programu. Komentarze można umieszczać także po 72 kolumnie. 3.2 Alfabet języka FORTRAN 77 Standard języka FORTRAN 77 przewiduje iż w programach napisanych w tym języku wolno uzywać następujących znaków: • 26 dużych liter alfabety angielskiego; • cyfr; • 13 znaków specjalnych + - = * / ( ) . , $ ’ : oraz spacji 3.3 Typy, zmienne, stałe W FORTRANIE wyróżniamy następujące typy zmiennych: • INTEGER do reprezentacji liczb całkowitych • REAL do reprezentacji licz rzeczywistych • DOUBLE PRECISION do reprezentacji liczb rzeczywistych z podwójną precyzją • COMPLEX jako odpowiednik zbioru liczb zespolonych • CHARACTER do przechowywania cziągów znaków • LOGICAL czyli typ logiczny Ciekawostką może być fakt iż w FORTRANIE nie musimy, przeciwnie niż w C czy Pascalu, deklarować zmiennych. Zmienne których nazwy zaczynają się na litery i, j, k, l, m oraz n mają przez domniemanie typ całkowity. Pozostałe litery są zarezerwowane do rozpoczynania nazw zmiennych typu real. Na pierwszy rzut oka może to wydawać się pewnym ułatwieniem, jednak deklarowanie zmiennych to dobry zwyczaj którego warto przestrzegać choćby dla większej czytelnośći programów. 5 3.4 4 4.1 Operatory Pętle Stnadarowa instrukcja DO W fortranie isnieje jedna instrukcja odpowiadająca za realizację cyklu jest instrukcja DO. Standard definuje ją według następującegi schematu. DO etykieta, licznik=od, do, krok instr_1 instr_2 . . . etkieta instr_n Przy takiej konsrtukcji pętli często przdaje się instrukja CONTINUE, która nie robi nic i pozwala na kolejne wykonanie cyklu. Pza tym instarukcja ta logicznie zamyka pętlę. 4.2 DO-ENDDO Jednym z popularnych rozszrzeń FORTRANA akceptowanym przez wiele kompilatorów jest inna postać instrukcji DO. Schemat ma postać; DO [etykieta,] licznik=od, do, krok instr_1 instr_2 . . . instr_n ENDDO [etykieta,] Etykietę można dodać dla oznaczenia pętli. 5 5.1 Instrukcje warunkowe Instrukcja IF Podstawowa forma instrukcji warunkowej if ma postać 6 IF warunek1 THEN . ELSE IF waunek2 THEN . . ELSE . END IF Warunkiem mogą być wyrażenia, które mają wartość logiczną. Jeżeli chcemy wybrać jedną z kilku dostępnych możliwości to dopisujemy kolejne segmenty ELSE IF warunek_n THEN. Instrukcję warunkową można uprościć do tzw. instrukcji IF logiczne, która ma postać IF (warunek) instrukcja W tym przypadku instrukcja wykonana jest jeżeli warunek jest prawdziwy. W ciele instrukcji nie można umieścić instrukcji DO oraz innych instrukcji warunkowych. 5.2 IF arytmetyczne Dostępna jest także instrukcja tzw. arytmetyczne IF. Pozwala ona wybrać jedną z instrukcji w zależności od tego czy zadane wyrażenie jest mniejsze, równe lub większe od zera IF (wyrażenie) mniejsze, rowne, wieksze gdzie mniejsze, rowne, wieksze to etykiety wskazujące na instrukcje które mają być wykonane przy zajsciu odpowiedniego warunku. 6 6.1 Podprogramy - wstęp Segment SOUBROUTINE Segment SOUBROUTINE pozwala zdefiniować procedurę. Przykładowo możemy posłużyć się porcedurą do wypisywania kilkakrotnie jakiegoś ciągu znaków; program podprogramy01 implicit none 7 real x call gwiazdki write *, ’Podaj wartosc x:’ read *, x call gwiazdki write *, ’Wpisales’, x call gwiazdki write *, ’Dziekuke za wspolprace ;-)’ end * * * tutaj definujemy procedurę gwiazdki subroutine gwiazdki write *, ’*************’ end Dzięki temu możemy zaoszczędzić sobie wstukiwania kilkakrotnie tych samych lini kodu. Naturalnie nie zawsze chcemy by została wypisana ta sama ilość gwiadek możemy procedurę sparametryzować. 6.2 Segment FUNCTION Za pomocą słowa kluczowego function możemy - zupełnie jak w matematycze - definować funkcje. Funkcja różni się od procedury tm że zwraca jakąś wartość czyli tak jak zmienna posiada typ. Poza wywołanie funkcji odbywa się poprzez jej nazwę. * * * program do zliczania sumy potęg liczb w tablicy 10-elementowej program podprogramy04 implicit none real arr(1:10), wynik 7 Biblioteki i zasoby 1. Repozytorium bibliotek numerycznych http://www.netlib.org/ 2. Biblioteki numeryczne http://www.nag.co.uk/ 8 Literatura [1] Anna Trykózko. Ćwiczenia z języka fortran. Mikom, 1999. 9