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

Podobne dokumenty