elementy programu w języku fortran
DESCRIPTION
Elementy programu w języku FORTRAN. 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) - PowerPoint PPT PresentationTRANSCRIPT
Elementy programu w języku FORTRAN
Znaczenie Onaczenie w Fortranach
FORTRAN 77 FORTRAN 95 FORTRAN 77 FORTRAN 95
Program głównyPROGRAM
Bez oznaczenia
Podprogram SUBROUTINE
Funkcja FUNCTION
Obszar wspólnyModuł
COMMONMODULE
Blok danych BLOCK DATA
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 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)
Komentarze
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
1-5 6 7-72 73-80
etykieta
kontynuacja
Tekst instrukcji lub deklaracji
komentarz
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(a1(i,i))enddodo i=1,n write (iout,'(2hx(,i2,2h)=,1pe15.5,2h (,1pe15.5,1h))')& i,x(i),std(i)
enddo
Fragment programu w Fortranie 77
Uwaga! W większości kompilatorów Fortranu 77 na ogół istnieje opcja rozszerzająca pole tekstu instrukcji do 132 kolumny.
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
use vparam use generic_ran_num implicit none integer :: i,isample,iseed real(kind(0d0)) :: 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.0d0,20.0d0) y=ran_number(0.0d0,20.0d0) z=ran_number(0.0d0,20.0d0) write (liczba,'(bz,i3.3)') i write (11,10) 1,'C'//liczba(3:3), ' ',i,x,y,z enddo write (11,'(a)') 'TER' enddo10 format('ATOM',I7,2x,a3,1x,A3,I6,4X,3F8.3) stop end
Fragment programu w Fortranie 95
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.
Słowa kluczowe (np. REAL, IF, DO)
Literały: ciągi znaków reprezentujące wartości typów prostych (np. 1, 3.05e+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.
Elementy tekstu kodu źródłowego w Fortranie
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]
INTEGER*2 INTEGER(KIND=2) [-32768,32767]
INTEGER
INTEGER*4
INTEGER
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’
Ósemkowy: np. O’7777777’, -O’4442777777’
Szesnastkowy: np. Z’EEEA01’, -Z’123E’
FORTRAN 77
FORTRAN 95
Najmniejsza wartość
dodatnia różna od 0
(TINY)
Największa dopuszczalne
wartość dodatnia
(HUGE)
Liczba dziesiętnych
cyfr znaczących
REAL*4
REAL
REAL(KIND=4)
REAL1.175494E-38 3.402823E+38 7
REAL*8
DOUBLE PRECISION
REAL(KIND=8) 2.225074D-308 1.797693D+308 15
Typ REAL
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 – bity mantysy
liczba = s manstysa * 2cecha
Zapis liczb rzeczywistych
Stałopozycyjny: np. 1234.5, -2345.5677
Zmiennopozycyjny: np. 1.235E+12, -.235E-20
0.2345D-20
FORTRAN 77 FORTRAN 95
COMPLEX
COMPLEX*4COMPLEX(KIND=4)
COMPLEX*8
DOUBLE COMPLEX
COMPLEX(KIND=8)
DOUBLE COMPLEX
Typ COMPLEX
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.0E0,3.5E0)
Typ LOGICAL
FORTRAN 77 FORTRAN 95 Zakres wartości
LOGICAL*1
BYTE
LOGICAL(KIND=1)
BYTE.TRUE.
.FALSE.LOGICAL*2 LOGICAL(KIND=2)
LOGICAL
LOGICAL*4
LOGICAL
LOGICAL(KIND=4)
Zapis: .TRUE., .FALSE. albo T, F.
FORTRAN 77 FORTRAN 95 Reprezentacja
CHARACTER
CHARACTER*1
CHARACTER
CHARACTER(1)
‘x’, “x”
x jest znakiem
1Hx
CHARACTER*n CHARACTER(n)
‘xxxx…x’
“xxxx…x”
nHxxxx…x
Łańcuch tekstowy
n jest długością łańcucha
zapis z H: stała Holleritha
Typ CHARACTER
Deklaracje typów zmiennych lub stałych
<typ> nazwa_zmiennej1,nazwa_zmiennej2,…
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 (nazwa1=wartość1,nazwa2=wartość2,…)
Np.
PARAMETER (max_number_of_atoms=1000)
PARAMETER (stala_plancka=6.626D-34)
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