/ Home / software / in_Fortran /
in FortranFortran Überblick DateinamenDie Namen der Quellcode-Dateien sollten in .f90 enden. ProgrammskelettPROGRAM xyz IMPLICIT NONE ... END ... hier kann was stehen, dass NICHT ignoriert wird O_o Kommentare! Bis zum Ende der Zeile ignoriert Kompilationgfortran -o thing thing.f90 gfortran -o thing thing.f90 -lkernlib -lmathlib Intrinsische DatentypenREAL DOUBLE PRECISION INTEGER CHARACTER LOGICAL Intrinsische Konstanten.TRUE. .FALSE. Intrinsische Operatoren+ - * / ** .EQ. .NE. .LT. .LE. .GT. .GE. .EQV. .NEQV. .OR. .AND. .NOT. Intrinsische FunktionenABS, IABS, SIN, COS, TAN, EXP, LOG, ASIN, ACOS, ATAN, SQRT, NINT, MIN, MAX, AMAX1, AMAX0, MAX0, MAX1, AMIN1, AMIN0, MIN0, MIN1 Eigene Konstanten definierenPARAMETER (PI=3.141592d0) KonditionalIF (2 .EQ. 3) THEN PRINT *, "the world is ending" ELSE IF (3 .EQ. 3) THEN PRINT *, "everything alright" ELSE PRINT *, "what did you expect?" END IF SELECT CASE (i) CASE default ... CASE (1:5) ... CASE (7) ... END SELECT AssignabledefinitionINTEGER x INTEGER :: x Assigningx = 5 x = 3 x = 42 Die Schachtel x enthält am Ende 42. FunktionenPURE FUNCTION f(x) RESULT (result) IMPLICIT NONE DOUBLE PRECISION, INTENT(in) :: x DOUBLE PRECISION :: result result = 42d0 END RekursionRECURSIVE PURE FUNCTION fac(n) RESULT (result) IMPLICIT NONE INTEGER, INTENT(in) :: n INTEGER :: result IF (n .EQ. 0) THEN result = 1 ELSE result = n*fac(n - 1) END IF END PROGRAM f INTEGER r INTEGER fac r = fac(10) WRITE(*,*) r END SubroutinenSUBROUTINE doStuff(x, y, z) IMPLICIT NONE REAL x REAL y REAL z READ(*,*) x, y, z RETURN END PROGRAM f REAL a REAL b REAL c CALL doStuff(a, b, c) END FunktionalePROGRAM a IMPLICIT NONE EXTERNAL f EXTERNAL g DOUBLE PRECISION f DOUBLE PRECISION g DOUBLE PRECISION b ! Funktional g bekommt f übergeben. b = g(f) WRITE(*,*) b END FUNCTION f(x) RESULT (result) IMPLICIT NONE DOUBLE PRECISION :: x DOUBLE PRECISION :: result result = 2.4d0 END FUNCTION g(callback) RESULT (result) IMPLICIT NONE DOUBLE PRECISION result ! gibt die Schnittstelle (den Prototyp) für callback an: INTERFACE FUNCTION callback(x) DOUBLE PRECISION :: callback DOUBLE PRECISION :: x END END INTERFACE result = callback(2.0d0) END I/OSpezielle Nummern, genannt I/O-Channels, repräsentieren die Verbindung zum Zielgerät * ist der Default Channel
WRITE(*,*) "hello", 42
PRINT *, 42, 43
OPEN(11, FILE="bli", STATUS='REPLACE')
WRITE(11,*) 42
CLOSE(11)
READ(*,*) v
FORMAT existiert. Operator Precedence
ArraysINTEGER values(5) ! Index fängt bei 1 an INTEGER values(0:10) ! Endindex INKLUSIVE DATA values/5,4,3,2,1/ ArrayfilterSUM(c, mask=c .GT. 0) Fixgröße-DatentypenINTEGER*8 ist ein Integer, der 8 Byte groß ist (wenn möglich). Recordstype Student character*20 last_name character*16 first_name character*6 comp_id integer id real score character*2 grade end type type (Student) cs(100) cs(55) = Student('a', 'b', 'c', 2, 1.2, 'A') cs(i)%score ModulsystemMODULE END MODULE USE things TypkonversionINT(x) REAL(x) DBLE(x) CMPLX(x,y) SchleifenDO WHILE (i .LE. 10) ... END DO DO i=0,10,1 ! der Endindex 10 ist komischerweise INKLUSIVE. ... EXIT ... CYCLE END DO Author: Danny (remove the ".nospam" to send) Last modification on: Sat, 04 May 2024 . |