f95skrypt, języki programowania (fortran 2.0), Kurs
[ Pobierz całość w formacie PDF ]
1
Nauka Fortranu F90/95 przez przykłady dla
początkujących.
Skrypt internetowy (wersja z 31 III 2008)
Krzysztof Rościszewski i Romuald Wit
Instytut Fizyki Uniwersytetu Jagiellońskiego.
Copyright: K. Rościszewski, R. Wit
Licencja: do niekomercyjnego użytkowania, w szczególności do rozpowszechniania wśród
studentów w celach dydaktycznych .
Bardzo proszę Czytelnika aby w przypadku znalezienia, błędów i/lub nieścisłości
przekazał odpowiednią informację na adres e.mailowy:
(Poprawki będą wprowadzane do nowych wersji skryptu).
Spis treści
Wstęp
Literatura źródłowa
Plik źródłowy
I.Podstawowe elementy i konstrukcje F90/95
I.A.Blok główny – program
I.A.1. Najprostszy program
I.A.2.Zmienne i stałe podstawowe
I.A.3.Liczby oraz zmienne rzeczywiste
I.A.4.Liczby całkowite i zmienne typu integer
I.A.5.Stałe i zmienne logiczne
I.A.6.Stałe i zmienne zespolone
I.A.7.Stałe i zmienne znakowe, czyli napisy
I.A.8.Instrukcja pisania
I.A.9.Instrukcja czytania
I.A.10.Instrukcja warunkowa if
I.A.11.Instrukcja warunkowa case
I.A.12.Pętle, czyli instrukcja DO
I.A.13.Awaryjne przerywanie wykonywania pętli – instrukcje EXIT oraz CYCLE
I.A.14.Macierze
I.A.15.Segmenty (części) macierzy
I.A.16.Konstruktory macierzy
I.A.17.Funkcje standardowe lbound, ubound, size oraz shape
I.A.18.Funkcje standardowe działające na macierzach
I.A.19.Instrukcje i funkcje standardowe działające na macierzach – ciąg dalszy
I.A.20.Kilka przykładów prostych programów
I.B.Bloki: subrotines, functions (zewnętrzne, wewnętrzne); o macierzach ciąg dalszy
I.B.1.Interface, argumenty funkcji i subrutyn, atrybut “intent”
I.B.2.Funkcje i subrutyny wewnętrzne. CONTAINS
I.B.3.Funkcje mogą mieć wartości macierzowe
I.B.4.Cztery kategorie macierzy w fortranie F90/95: explicite shape array, automatic
array, assumed shape array, allocatable array. Atrybut SAVE
I.B.4.1.Explicte shape array, automatic array (macierze o określonych kształcie; oraz
macierze robocze w procedurach – automatyczne)
I.B.4.2.SAVE
I.B.4.3. Assumed shape array jako argumenty procedur
I.B.4.4.Macierze dynamiczne, “alokowalne” (allocatable); instrukcje: allocate, deallocate,
allocated.
I.B.5.Funkcje i subrutyny mogą być rekurencyjne, tzn. mogą wywoływać same siebie
I.B.5.1.Subroutyny rekurencyjne
I.B.5.2.Funkcje rekurencyjne
I.B.5.3. Dalsze przykłady
I.B.6.Argumenty warunkowe (optional) w procedurach; słowa kluczowe (keywords)
I.C.Podstawowe wiadomości o modułach: zmienne “globalne”; procedury w modułach
I.C.1.Najprostszy przypadek: same zmienne, brak procedur w module. Zmienne globalne
tworzymy przez umieszczenie ich w module.
I.C.2.Drugi prosty przypadek: zmienne oraz procedury w module, czyli tworzenie bloków
z narzędziami (do obsługi naszych programów)
3
II.Z krótką wizytą na średnim poziomie zaawansowania
II.A.Nowe typy zmiennych
II.A.1.Definiowanie, deklarowanie i używanie typów “pochodnych”, inaczej “złożonych”
lub strukturalnych (derived type)
II.A.2.Wstępne informacje o zmiennych wskaźnikowych (czyli zmiennych pointerowych
lub po prostu pointerach0 i o przydzieleniu danemu pointerowi (assigment) zmiennej (o
atrubucie target) na którą pointer pokazuje.
II.A.3.Różnica pomiędzy zwykłą instrukcją podstawienia a instrukcją podstawienia w
przypadku pointerów
II.A.4.Allocate i deallocate dla pointerów
II.A.4.1.Pointery jako składowe struktur (derived type)
II.A.4.2.Pointery jako składowe “derived type” – ciąg dalszy
II.A.5.1.Pointery jako argumenty subrutyn i funkcji
II.A.5.2.Pointery jako wartości funkcji
III.Zamiast zakończenia
III.A.1.Definiowanie swoich własnych operatorów
Wstęp
Niniejszy skrypt przeznaczony jest do szybkiej, praktycznej nauki Fortranu F90/95.
Adresujemy go do osób “niecierpliwych”, nieco bardziej zaawansowanych, które już wiedzą co
to jest programowanie. A więc do tych, które już gdzieś miały styczność ze starym Fortranem
F77 lub z językiem C, lub też do osób które znają Pascal ze szkoły średniej. Dlatego pojęcia
takie jak kompilacja (compilation
, konsolidacja (linking), pojęcie plików (files) i katalogów
(directories), nie będą wyjaśniane. Podobnie sprawy hardware’owe, związane z budową i
działaniem komputera oraz jego podjednostek też przyjmujemy (w domyśle) jako dobrze
znane Czytelnikowi.
Jedna z powszechnie przyjętych (i popularnych) metoda nauki jakiegoś języka
programowania polega na zapoznaniu się z prostymi przykładami i od samego początku
zakłada dużą aktywność Czytelnika (własnoręczne pisanie, uogólnianie i uruchamianie
przykładowych programów). Powinny to być w miarę proste przykłady. Taki punkt widzenia
został przyjęty w niniejszym opracowaniu. Drugie bardzo istotne zastrzeżenie, które robimy,
dotyczy prezentowanych przykładów i stopnia komplikacji przytaczanych algorytmów. Ze
względów dydaktycznych przedstawiamy proste przykłady i najbardziej prymitywne
algorytmy; zbyt proste, aby miały jakiekolwiek profesjonalne lub półprofesjonalne
zastosowania. Nasze przykłady mają jedynie ilustrować sens i wyjaśniać metody stosowania
poszczególnych elementów języka F90/95. Decyzja niniejsza jest czysto pragmatyczna. Stopień
komplikacji algorytmów stosowanych profesjonalnie jest bowiem taki, że wymaga od
Czytelnika dużego skupienia i poświęcenia im zbyt dużej uwagi, którą na obecnym etapie
kierujemy wyłącznie na poznanie podstawowych elementów nowego języka programowania.
Z tego samego powodu zdecydowaliśmy się nie omawiać niektórych zagadnień oraz opuścić
omawianie “rozwiązań alternatywnych”. Prawie każda rzecz w F90/95 może być zapisana lub
wykonana na kilka różnych sposobów i przy użyciu różnej składni. Dotyczy to zwłaszcza
elementów języka, które są nieco przestarzałe, a utrzymano je jedynie w celu zachowania
ciągłości w stosunku do starego Fortranu F77. W naszej opinii w pierwszym etapie należy
skoncentrować się na sprawach podstawowych. Na rzeczy bardziej skomplikowane i/lub
rzadziej używane kolej nadejdzie dopiero w drugim etapie nauki. Tak więc omawianie
niektórych elementów składni języka, oraz profesjonalnych metod numerycznych i algorytmów
w F90/95 odkładamy na póżniej
Jednym z wniosków wynikających z takiego postawienia sprawy jest to, że skrypt
raczej nie jest przeznaczony dla informatyków. Kierujemy go przede wszystkim do studentów
studiów wyższych i półwyższych: inżynierskich, technicznych, pedagogicznych, do inżynierów,
do chemików, fizyków, matematyków oraz maturzystów – entuzjastów komputera.
Literatura źródłowa
Istnieje wiele bardzo dobrych podręczników do nauki F90/95. Ich jedynymi wadami dla
polskiego czytelnika jest to, że są na ogół niedostępne oraz drogie. Większość z nich jest
napisana w języku angielskim (kilka po niemiecku). Każdy z nich pewne sprawy omawia
nadzwyczaj jasno i kompetentnie, a inne pobieżnie (czasami wręcz “mętnie”). Tak więc w
czasie nauki trzeba zazwyczaj mieć dostęp do książek 2 – 3 różnych autorów. Naszym zdaniem
najlepszy (i najłatwiejszy) podręcznik to:
800–stronicowy
Fortran 90 Programming
1
W nawiasach podajemy odpowiednie terminy angielskie. Większość dostępnych na rynku, “lepszych”
podręczników, to podręczniki w języku angielskim. Dalsze (zaawansowane) etapy nauki programowania F90/95,
bez korzystania z takich podręczników, są bardzo utrudnione
– w chwili obecnej prawie niemożliwe
.
5
autorzy: T. Ellis, I. Philips, T. Lahey
(Addison-Wesley Publishing Company, New York 1994)
Dodatkowa informacja: istnieje dobry opis do komercyjnego pakietu “ Lahey Fortran 90”,
sprzedawanego przez Lahey Computer Systems, Inc. Również dysk CD (dosyć
rozpowszechniony na polskim rynku) zawiera w sobie plik z niezłym manualem.
Dalsze podręczniki warte polecenia to:
400– stronicowy
Programmer’s Guide to Fortran 90
autorzy: W. Brainerd, C. Goldberg, J. Adams
(Springer, New York 1996)
350–stronicowy
Migrating to Fortran 90
autor: J. Kerrigan
(O’Reilly & Associates, Inc. Sebastopol, 1994)
350–stronicowy
Fortran 90/95 explained
Autorzy: M. Metcalf, J. Reid
(Oxford Science Publ.,Oxford ,1998)
Osoby zaawansowane, programujące na serio w F90/95 absolutnie powinny się
zaopatrzyć w rewelacyjny podręcznik (wraz z gotową, półprofesjonalną biblioteką numeryczną
na dysku CD):
Numerical Recipes in Fortran 90
, autorów W.H. Press, S.A. Teuklsky, W.T. Vetterling and
B.P. Flannery, Cambridge University Press Press,
Volume 2 of Fortran Numerical Recipes
autorzy: W. Press, S. Teukolsky, W. Vetterling, B. Flannery
(Cambridge University Press, Cambridge, New York, 1996)
Uwaga: do kompletu trzeba też kupić pierwszy tom
Numerical Recipes in Fortran
autorzy: W. Press, S. Teukolsky, W. Vetterling, B. Flannery
(Cambridge University Press, Cambridge, New York, 1992).
Zawiera on co prawda programy wyłącznie w F77, ale za to obszernie opisuje oraz dokładnie
tłumaczy stosowane (w pierwszym i w drugim tomie) algorytmy.
Plik źródłowy
Plik źródłowy programu sporządzamy posługując się jakimkolwiek edytorem tekstu
zapisującym tekst w zwykłym pliku tekstowym (ze znakami ASCII). W przybliżeniu oznacza to
standardowe litery alfabetu angielskiego, bez stosowania w pliku symboli specjalnych,
dotyczących sposobu formatowania tekstu. Tak więc dokument tekstowy napisany w WORD
nie może być plikiem źródłowym, chyba że pracując w WORD zapamiętamy plik jako zwykły
tekst (jest to jedna z opcji WORD’a).
Tekst programu można pisać w formacie starego Fortranu F77 (fixed form). Wymaga to
dostosowana się do wielu uciążliwych reguł. Np. w jednej linii tekstu możemy umieścić tylko
jedną instrukcję lub deklarację. Instrukcje piszemy poczynając od 7–go miejsca w linii (7–a
kolumna tekstu), aż do 72–giej kolumny itp. Jest to dosyć niewygodne. Preferowana,
[ Pobierz całość w formacie PDF ]