Elementy programu w jzyku FORTRAN Znaczenie FORTRAN 77

  • Slides: 23
Download presentation
Elementy programu w języku FORTRAN Znaczenie FORTRAN 77 Onaczenie w Fortranach FORTRAN 95 FORTRAN

Elementy programu w języku FORTRAN Znaczenie FORTRAN 77 Onaczenie w Fortranach FORTRAN 95 FORTRAN 77 FORTRAN 95 Program główny PROGRAM Bez oznaczenia Podprogram SUBROUTINE Funkcja FUNCTION Obszar wspólny Blok danych Moduł COMMON BLOCK DATA MODULE

Elementy segmentów w języku FORTRAN Instrukcje czynne • Instrukcja przypisania (arytmetyczna, logiczna, ASSIGN) •

Elementy segmentów w języku FORTRAN Instrukcje czynne • Instrukcja przypisania (arytmetyczna, logiczna, ASSIGN) • Instrukcje wejścia/wyjścia (READ, WRITE, operacje na plikach) • Instrukcja warunkowa (prosta IF i złożona IF. . THEN…ELSE…ENDIF) • Instrukcje skoku (zwykła, obliczona i wyznaczona GO TO) • Instrukcje pętli (DO, DO…WHILE, DO…WHERE) • Instrukcja wyboru (CASE, tylko Fortran 95) • Instrukcja odwołania do podprogramu (CALL) • Instrukcja zakończenia (STOP) • Instrukcja powrotu z podprogramu (RETURN)

Deklaracje (instrukcje bierne, dyrektywy) • Deklaracja typu (INTEGER, REAL, LOGICAL, COMPLEX, CHARACTER) • Deklaracja

Deklaracje (instrukcje bierne, dyrektywy) • Deklaracja typu (INTEGER, REAL, LOGICAL, COMPLEX, CHARACTER) • Deklaracja stałych (PARAMETER) • Deklaracja obszaru wspólnego (COMMON) • Deklaracja etykiety • Dyrektywa reguł nazw typów zmiennych (IMPLICIT) • Deklaracja (dyrektywa) FORMAT • Dyrektywa inicjalizacji (DATA) • Dyrektywa uwspólniania tablic (EQUIVALENCE)

Komentarzem jest tekst nieinterpretowalny przez kompilator, stanowiący informację dla użytkownika. Zarówno w Fortranie 77

Komentarzem jest tekst nieinterpretowalny przez kompilator, stanowiący informację dla użytkownika. Zarówno w Fortranie 77 jak i Fortranie 95 rozpoczyna się od wykrzyknika, np. ! To jest komentarz a=0. 0 ! Zeruję zmienną a W Fortranie 77 komentarz stanowi również tekst w linii zaczynającej się od C lub c w pierwszej kolumnie (w niższych wersjach Fortranu była to jedyna możliwość), albo gwiazdką w pierwszej kolumnie, np. : C Dalej leci tekst programu * To jest inny komentarz

Zapis źródła programu w Fortranie 77 i niższych Kolumy kontynuacja etykieta 7 -72 73

Zapis źródła programu w Fortranie 77 i niższych Kolumy kontynuacja etykieta 7 -72 73 -80 Tekst instrukcji lub deklaracji komentarz 1 -5 6

Uwaga! W większości kompilatorów Fortranu 77 na ogół istnieje opcja rozszerzająca pole tekstu instrukcji

Uwaga! W większości kompilatorów Fortranu 77 na ogół istnieje opcja rozszerzająca pole tekstu instrukcji do 132 kolumny. Fragment programu w Fortranie 77 program fit implicit real*8 (a-h, o-z) parameter (nmax=200) C Tekst wycięty 10 rmsd=sqrt(sum/(npoint-n)) do i=1, n std(i)=rmsd*sqrt(a 1(i, i)) enddo do i=1, n write (iout, '(2 hx(, i 2, 2 h)=, 1 pe 15. 5, 2 h (, 1 pe 15. 5, 1 h))') & i, x(i), std(i) enddo

Zapis źródła programu w Fortranie 95 (swobodny format linii) <etykieta> tekst instrukcji Nie ma

Zapis źródła programu w Fortranie 95 (swobodny format linii) <etykieta> tekst instrukcji Nie ma żadnych ograniczeń co do długości linii <etykieta> część tekstu instrukcji & kontynuacja tekstu & … koniec tekstu instrukcji

Fragment programu w Fortranie 95 use vparam use generic_ran_num implicit none integer : :

Fragment programu w Fortranie 95 use vparam use generic_ran_num implicit none integer : : i, isample, iseed real(kind(0 d 0)) : : x, y, z character(3) : : liczba write (*, '(a, $)') 'iseed ', iseed read (*, *) iseed call vrndst(-iabs(iseed)) do isample=1, 1000 do i=1, 130 x=ran_number(0. 0 d 0, 20. 0 d 0) y=ran_number(0. 0 d 0, 20. 0 d 0) z=ran_number(0. 0 d 0, 20. 0 d 0) write (liczba, '(bz, i 3. 3)') i write (11, 10) 1, 'C'//liczba(3: 3), ' ', i, x, y, z enddo write (11, '(a)') 'TER' enddo 10 format('ATOM', I 7, 2 x, a 3, 1 x, A 3, I 6, 4 X, 3 F 8. 3) stop end

Rodzaje znaków w Fortranie Ø Fortran używa znaków ASCII Ø Litery: [A-Z] i [a-z]

Rodzaje znaków w Fortranie Ø Fortran używa znaków ASCII Ø Litery: [A-Z] i [a-z] oraz $. Można używać dużych i małych liter ale duże litery są nieodróżnialne od małych, z wyjątkiem łańcuchów tekstowych. Ø Cyfry: [0 -9] (uwaga: w reprezentacji szestnastkowej do cyfr zalicza się też [A-E] Ø Pozostałe znaki łącznie z odstępem, znakiem nowej linii, itp.

Elementy tekstu kodu źródłowego w Fortranie Ø Słowa kluczowe (np. REAL, IF, DO) Ø

Elementy tekstu kodu źródłowego w Fortranie Ø Słowa kluczowe (np. REAL, IF, DO) Ø Literały: ciągi znaków reprezentujące wartości typów prostych (np. 1, 3. 05 e+5, . TRUE. , “Ala ma kota”) Ø Operatory (np. +, -, . AND. ) Ø Identyfikatory typów, stałych i zmiennych: dowlone ciągi liter i cyfr zaczynające się od litery.

Typy danych: Ø Proste Ø Złożone (definiowane przez użytkownika; rozszerzenia Fortranu 77 i Fortran

Typy danych: Ø Proste Ø Złożone (definiowane przez użytkownika; rozszerzenia Fortranu 77 i Fortran 95. Proste typy danych: Ø INTEGER (całkowity) Ø REAL (rzeczywisty) Ø COMPLEX (zespolony) Ø LOGICAL (logiczny) Ø CHARACTER (znakowy)

Typ INTEGER FORTRAN 77 FORTRAN 95 Zakres wartości INTEGER*1 BYTE INTEGER(KIND=1) BYTE [-128, 127]

Typ INTEGER FORTRAN 77 FORTRAN 95 Zakres wartości INTEGER*1 BYTE INTEGER(KIND=1) BYTE [-128, 127] INTEGER*2 INTEGER(KIND=2) [-32768, 32767] INTEGER*4 INTEGER(KIND=4) [-2147483648, 2147483647] Pogrubienie wskazuje domyślny rodzaj typu INTEGER W Fortranie 95 “KIND=“ można pominąć i pisać np. INTEGER(2)

Zapis liczb typu INTEGER Dziesiętny: np. 1235, -23987 Dwójkowy: np. B” 10001001”, -B’ 111100011’

Zapis liczb typu INTEGER Dziesiętny: np. 1235, -23987 Dwójkowy: np. B” 10001001”, -B’ 111100011’ Ósemkowy: np. O’ 7777777’, -O’ 4442777777’ Szesnastkowy: np. Z’EEEA 01’, -Z’ 123 E’

Typ REAL Najmniejsza Największa Liczba wartość dodatnia dopuszczalne dziesiętnych różna od 0 wartość dodatnia

Typ REAL Najmniejsza Największa Liczba wartość dodatnia dopuszczalne dziesiętnych różna od 0 wartość dodatnia cyfr znaczących (TINY) (HUGE) FORTRAN 77 FORTRAN 95 REAL*4 REAL(KIND=4) REAL 1. 175494 E-38 3. 402823 E+38 7 REAL*8 DOUBLE PRECISION REAL(KIND=8) 2. 225074 D-308 1. 797693 D+308 15 Jeżeli liczba jest co do modułu większa od HUGE, zastępowana jest przez stałą ±Inf a jeżeli jest mniejsza od TINY, jest zastępowana zerem.

Reprezentacja maszynowa liczb rzeczywistych s – bit znaku e – bity cechy f –

Reprezentacja maszynowa liczb rzeczywistych s – bit znaku e – bity cechy f – bity mantysy liczba = s manstysa * 2 cecha

Zapis liczb rzeczywistych Stałopozycyjny: np. 1234. 5, -2345. 5677 Zmiennopozycyjny: np. 1. 235 E+12,

Zapis liczb rzeczywistych Stałopozycyjny: np. 1234. 5, -2345. 5677 Zmiennopozycyjny: np. 1. 235 E+12, -. 235 E-20 0. 2345 D-20

Typ COMPLEX FORTRAN 77 FORTRAN 95 COMPLEX*4 COMPLEX(KIND=4) COMPLEX*8 DOUBLE COMPLEX(KIND=8) DOUBLE COMPLEX

Typ COMPLEX FORTRAN 77 FORTRAN 95 COMPLEX*4 COMPLEX(KIND=4) COMPLEX*8 DOUBLE COMPLEX(KIND=8) DOUBLE COMPLEX

Reprezentacja i zapis liczb typu COMPLEX Liczby typu COMPLEX składają się z częśći rzeczywistej

Reprezentacja i zapis liczb typu COMPLEX Liczby typu COMPLEX składają się z częśći rzeczywistej i urojonej; do każdej z nich stosują się reguły reprezentacji i zapisu liczb rzeczywistych. Tak zapisujemy liczby typów COMPLEX w Fortranie: a+ib=(a, b) Np. 2. 0+i*3. 5=(2. 0 E 0, 3. 5 E 0)

Typ LOGICAL FORTRAN 77 FORTRAN 95 LOGICAL*1 BYTE LOGICAL(KIND=1) BYTE LOGICAL*2 LOGICAL(KIND=2) LOGICAL*4 LOGICAL(KIND=4)

Typ LOGICAL FORTRAN 77 FORTRAN 95 LOGICAL*1 BYTE LOGICAL(KIND=1) BYTE LOGICAL*2 LOGICAL(KIND=2) LOGICAL*4 LOGICAL(KIND=4) Zapis: . TRUE. , . FALSE. albo T, F. Zakres wartości . TRUE. . FALSE.

Typ CHARACTER FORTRAN 77 CHARACTER*1 CHARACTER*n FORTRAN 95 Reprezentacja CHARACTER(1) ‘x’, “x” x jest

Typ CHARACTER FORTRAN 77 CHARACTER*1 CHARACTER*n FORTRAN 95 Reprezentacja CHARACTER(1) ‘x’, “x” x jest znakiem 1 Hx CHARACTER(n) ‘xxxx…x’ “xxxx…x” n. Hxxxx…x Łańcuch tekstowy n jest długością łańcucha zapis z H: stała Holleritha

Deklaracje typów zmiennych lub stałych <typ> nazwa_zmiennej 1, nazwa_zmiennej 2, … np. INTEGER i,

Deklaracje typów zmiennych lub stałych <typ> nazwa_zmiennej 1, nazwa_zmiennej 2, … np. INTEGER i, j, k, l, n_atoms DOUBLE PRECISION promien CHARACTER*16 nazwa_pliku Zmiennym można nadawać wartości początkowe przy ich deklaracji: INTEGER n_atoms /100/, n_molekul /3/ CHARACTER*16 nazwa_pliku /’moj_plik. txt’/

Deklaracje stałych PARAMETER (nazwa 1=wartość1, nazwa 2=wartość2, …) Np. PARAMETER (max_number_of_atoms=1000) PARAMETER (stala_plancka=6. 626

Deklaracje stałych PARAMETER (nazwa 1=wartość1, nazwa 2=wartość2, …) Np. PARAMETER (max_number_of_atoms=1000) PARAMETER (stala_plancka=6. 626 D-34)

Reguła pierwszej litery Jeżeli zmienna lub stała nie jest zadeklarowana bezpośrednio, to obowiązuje reguła

Reguła pierwszej litery Jeżeli zmienna lub stała nie jest zadeklarowana bezpośrednio, to obowiązuje reguła pierwszej litery nazwy: Nazwy zaczynające się od I, J, K, L, M, N: INTEGER Pozostałe: REAL Można to zmienić przy pomocy dyrektywy IMPLICIT (musi być pierwszą dyrektywą programu lub segmentu): IMPLICIT NONE – anulowanie reguły pierwszej litery; deklarujemy wszystko IMPLICIT REAL*8 (A-H, O-Z) – domyślnym typem zmiennych lub stałych zaczynających się od tej litery jest typ podwójnej precyzji