Fortran/Wprowadzenie

O języku Fortran

edytuj

Język Fortran jest językiem kompilowanym. Oznacza to, że aby uruchomić nasz pierwszy program w Fortranie musimy go skompilować, czyli przetworzyć z postaci czytelnej dla człowieka na kod maszynowy. Historyczne uwarunkowania doprowadziły do tego, że kompilatory języka Fortran generują zoptymalizowany kod, dzięki czemu wykonanie programu, napisanego w Fortranie jest bardzo szybkie. Oprócz tego ważną cechą Fortranu jest jego przenośność. Podobnie, jak język C, także i Fortran jest językiem przenośnym - ale tylko w postaci kodu źródłowego. Natomiast w przeciwieństwie do języka C, Fortran posiada niejako "wbudowane" funkcje obsługi wejścia i wyjścia (Input-Output - I/O) oraz funkcje matematyczne. Np. potęgowanie posiada swój specjalny operator (o nich później). Język Fortran oferuje też ciekawe możliwości dla osób piszących programy pod systemy wieloprocesorowe lub programy równoległe.

 
Użycie Fortranu do symulacji kolizji dwóch galaktyk

Zastosowanie języka Fortran

edytuj

Z rozdziału historia poznałeś niektóre zastosowania języka Fortran. Jednak nie są to jedyne jego zastosowania. W jednym z dialektów napisano nawet system operacyjny.

Czego potrzebujesz

edytuj

Aby rozpocząć przygodę z językiem Fortran musisz koniecznie zaopatrzyć się w:

  • dowolny system operacyjny
  • dowolny edytor tekstowy, który nie formatuje tekstu, lub ma funkcję zapisywania plików bez formatowania.
  • kompilator języka Fortran - tutaj natrafisz na bardzo duży wybór

Edytor

edytuj

Zamiast zwykłego edytora możesz wybrać Zintegrowane Środowisko Programistyczne (IDE), na przykład Code::Blocks for Fortran lub wtyczkę Photran do środowiska Eclipse, lub środowisko Firmy Intel dla linuxa Intel® Parallel Studio XE for Linux* wersja niekomercyjna.

Kompilator

edytuj

Jak już wspomniałem, wybór kompilatora może sprawić Ci trudność. Będzie on zależał od systemu operacyjnego oraz możliwości Twojego budżetu. Oczywiście do nauki wystarczy Ci najprostszy, darmowy kompilator. W niniejszym podręczniku będziemy opierali się na najnowszym dziecku projektu GCC - gfortran. Krótką listę dostępnych kompilatorów, zawiera artykuł w polskiej Wikipedii. Niezłym punktem startu jest też anglojęzyczna strona The Fortran Company, na której oprócz informacji o komercyjnych pakietach, znajdziesz też sporo darmowych bibliotek i tutoriali.

Dość ciekawą rzeczą jest natomiast działanie kompilatora. Każdy kompilator języka Fortran składa się z dwóch części

  • kompilatora właściwego, przetwarzającego program na kod maszynowy
  • biblioteki uruchomieniowej

To właśnie w tym drugim elemencie przechowywane są najbardziej podstawowe funkcje. Bibliotekę uruchomieniową możemy porównać do biblioteki języka C w systemach UNIX (tak naprawdę, w systemach Uniksowych część biblioteki uruchomieniowej korzysta z biblioteki języka C). Kompilatory Fortranu umożliwiają także łączenie w jeden program kilku modułów napisanych zarówno w języku Fortran, jak i C. Temu zagadnieniu poświęcony jest ostatni rozdział tego podręcznika (Łączenie języka C z językiem Fortran).


instalacja

edytuj

Instalacja gfortrana na ubuntu:

  apt-get install gfortran


Po udanej instalacji sprawdzamy wersję:

  gfortran --version

Przykładowy wynik :

GNU Fortran (Ubuntu 5.4.1-2ubuntu1~16.04) 5.4.1 20160904
Copyright (C) 2015 Free Software Foundation, Inc.

GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING

Pierwsze spojrzenie na FORTRAN 77

edytuj

Witaj świecie!

edytuj

Przykład w języku FORTRAN77.Program składa się z 15 linii kodu. Na początku jest 10 linii komentarza, który objaśnia działanie programu.

Następnie jest 5 linii "suchego kodu". Każda linia (w naszym przykłądzie) jest oddalona 6 znaków od lewej krawędzi. 6 pierwszych znaków jest wykorzystywanych do celów "technicznych" (mówiąc w uproszczeniu). Program jest określony słowem kluczowym PROGRAM i nazwą przykładową. Następnie pojawia się instrukcja IMPLICIT NONE (nieobowiązkowa, ale bardzo zalecana), aby kompilator nie rozpoznawał domyślnie typów zmiennych. Trzecia instrukcja programu zawiera instrukcję wypisania na ekranie napisu. Program jest zatrzymany instrukcją STOP.

Program jest zawarty pomiędzy parą słów kluczowych PROGRAM - END. Instrukcja PROGRAM mówi, że nastąpi deklaracja programu głównego. Instrukcja END mówi, że nastąpił koniec bloku programu głównego.

C PROGRAM TINY. PROGRAM WYŚWIETLA NAPIS "Hello World!"
C Na podstawie:
C
C1) Clive G. Page 
C Professional Programmers Guide to Fortran77
C University of Leicester, UK
C 7th June 2005
C
C 2) en.wikibook Fortran 77 Tutorial
C kompilacja - Marcin Kulbaka 2021
      PROGRAM TINY
      IMPLICIT NONE
      WRITE(UNIT=*, FMT=*) 'Hello, world!'
      STOP
      END

kompilacja programu:

gfortran HELLO.F -o hello.run

Aby uruchomić program należy wywołać ścieżkę dostępu do pliku, np.:

./hello.run

Organizacja znaków w kolumnach

edytuj

Język FORTRAN 77 był tworzony z uwzględnieniem zapisu na kartach perforowanych. W użyciu były jeszcze stare komputery, zbyt cenne aby były beztrosko zezłomowane.

Karta perforowana posiada 80 kolumn i może pomieścić jedną linię kodu.

 kol. 1    : pusty, lub "c" lub "*" dla komentarza
 kol. 1-5  : etykieta instrukcji (opcjonalna)
 kol. 6    : kontynuacja linii (opcjonalna)
 kol. 7-72 : instrukcja
 kol. 73-80: numer sekwencji (opcjonalny, obecnie rzadko używany)

Jeżeli w karcie pierwsza kolumna jest literą C, lub znakiem *, wówczas linia zawiera komentarz. Komentarz jest ignorowany (zazwyczaj) przez kompilator. Zawiera instrukcje opisujące program. Co robi program, jak robi, kto napisał, kiedy napisał, z jakich książek korzystano, jakie wzory. Komentarze mogą być zauważalnie dłuższe od "suchego kodu". Często programista po latach pracy pamięta niewiele i taka pomoc jest bezcenna.

Jeżeli w kolumnach 1-5 jest liczna całkowita, wówczas jest ona etykietą jakiejś instrukcji. Może ona oznaczać np. adres do skoku GOTO.

Jeżeli w kolumnie 6 jest znak, wówczas linia taka jest kontynuacją linii z poprzedniej karty. Rozwiązuje to problem długich instrukcji na kartach.

Kolumny 7-72 zawierają "normalne" instrukcje programu.

Pierwsze spojrzenie na Fortran 90/95

edytuj

Witaj świecie!

edytuj

Przykład programu Hello w języku Fortran 95.

Zgodnie z tradycją pierwszym przykładem języka programowania powinien być program wyświetlający radosny napis "Hello World!". Oto kod tego programu w Fortranie 95 (albo w Fortranie 90, gdyż niewiele się między sobą różnią):

 !
 ! To jest program przykładowy w Fortranie 90/95  
 !
program helloworld            ! nieobowiązkowy ale zalecany początek programu
    implicit none
    print *, "Hello, world!" ! wyświetlenie na ekranie napisu
end program helloworld        ! koniec programu - obowiązkowy, jeśli wcześniej jest słowo program

Zapiszmy nasz program w pliku hello.f95. Aby go uruchomić musisz wykonać czynność, zwaną kompilacją. Nasze przykłady oprzemy na kompilatorze gfortran. Aby uzyskać program wykonywalny w konsoli musisz wykonać:

gfortran hello.f95 -o hello

Aby uruchomić program należy wywołać ścieżkę dostępu do pliku, np.:

./hello

lub po prostu jego nazwę, jeśli katalog w którym się znajduje został dopisany do zmiennej środowiskowej $PATH.

Wiedza elementarna

edytuj
  • Język Fortran (niezależnie od wersji) nie rozróżnia wielkości znaków, czyli print* i PRINT* to dla kompilatora dokładnie ta sama instrukcja.
  • W jednym wierszu można umieścić do 132 znaków.
  • Spacje są ważne - służą do oddzielania słów kluczowych i identyfikatorów (oprócz spacji tę funkcję pełnią także inne białe znaki i znaki przestankowe). Nie wolno wstawiać spacji (ani innego znaku) wewnątrz słowa kluczowego lub identyfikatora.
  • Komentarzem jest tekst od symbolu wykrzyknika do najbliższego znaku końca linii. Wyjątkiem jest sytuacja, gdy znak ! pojawia się w cytowaniu.
  • Znak końca linii jest znakiem kończącym instrukcję.
  • Jeśli chcemy kontynuować instrukcję w następnym wierszu musimy na końcu linii postawić znak &. Jeśli jednak chcemy przełamać napis otoczony cudzysłowem lub apostrofami to znak & musimy umieścić na końcu pierwszego i na początku drugiego wiersza.
  • W przypadku, gdy chcemy umieścić kilka instrukcji w jednym wierszu oddzielamy je znakiem ;
  • Język Fortran pozwala na używanie niezadeklarowanych zmiennych (co nie jest zalecane) - typ zmiennej zależy wówczas od pierwszej litery nazwy zmiennej. Nazwy zaczynające się na I,J,K,L,M,N to liczby całkowite, pozostałe to liczby zmiennoprzecinkowe. Możemy zrezygnować z tej możliwości (zalecamy!) umieszczając instrukcję implicit none zaraz po wierszu ze słowem program.
  • Używany alfabet to litery małe: a-z i duże: A-Z, cyfry 0-9, znak podkreślenia _. Dozwolone są również następujące znaki specjalne: spacja, enter oraz +-*/<=>().,'";:!&%$?. Oprócz tego znane nam kompilatory w komentarzach i łańcuchach tekstowych pozwalają na użycie innych znaków, w tym polskich liter "z ogonkami".
  • Struktura programu rozdziela część deklaracyjną od wykonywalnej - tzn. po użyciu jakiejkolwiek instrukcji wykonywalnej, nie można już deklarować zmiennych, stałych itp.
  • Do cytowania napisów (stałych tekstowych) można używać zarówno znaku cudzysłowu " jak i apostrofu '. Przy czym jeśli rozpoczęliśmy cytowanie jednym znakiem, to trzeba zamknąć je tym samym - dzięki temu bez problemu można umieścić w łańcuchu same znaki cytowania np. "User's guide" (ten sam efekt uzyskamy pisząc 'User''s guide').