/ 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 Rekursion
RECURSIVE 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 Funktionale
PROGRAM 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). Records
type 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: Thu, 09 May 2013 . |