elementy programu w języku fortran

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

Upload: ervin

Post on 28-Jan-2016

44 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Elementy programu w języku FORTRAN

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

Page 2: 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)

• 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)

Page 3: Elementy programu w języku FORTRAN

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)

Page 4: Elementy programu w języku FORTRAN

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

Page 5: Elementy programu w języku FORTRAN

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

Page 6: Elementy programu w języku FORTRAN

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.

Page 7: Elementy programu w języku FORTRAN

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

Page 8: Elementy programu w języku FORTRAN

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

Page 9: Elementy programu w języku FORTRAN

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.

Page 10: Elementy programu w języku FORTRAN

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

Page 11: Elementy programu w języku 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)

Page 12: Elementy programu w języku FORTRAN

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)

Page 13: Elementy programu w języku FORTRAN

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’

Page 14: Elementy programu w języku FORTRAN

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.

Page 15: Elementy programu w języku FORTRAN

Reprezentacja maszynowa liczb rzeczywistych

s – bit znaku

e – bity cechy

f – bity mantysy

liczba = s manstysa * 2cecha

Page 16: Elementy programu w języku FORTRAN

Zapis liczb rzeczywistych

Stałopozycyjny: np. 1234.5, -2345.5677

Zmiennopozycyjny: np. 1.235E+12, -.235E-20

0.2345D-20

Page 17: Elementy programu w języku FORTRAN

FORTRAN 77 FORTRAN 95

COMPLEX

COMPLEX*4COMPLEX(KIND=4)

COMPLEX*8

DOUBLE COMPLEX

COMPLEX(KIND=8)

DOUBLE COMPLEX

Typ COMPLEX

Page 18: Elementy programu w języku FORTRAN

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)

Page 19: Elementy programu w języku FORTRAN

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.

Page 20: Elementy programu w języku FORTRAN

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

Page 21: Elementy programu w języku FORTRAN

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’/

Page 22: Elementy programu w języku FORTRAN

Deklaracje stałych

PARAMETER (nazwa1=wartość1,nazwa2=wartość2,…)

Np.

PARAMETER (max_number_of_atoms=1000)

PARAMETER (stala_plancka=6.626D-34)

Page 23: Elementy programu w języku FORTRAN

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