FORTRAN 77 FORTRAN 77 - ce.unipr.it FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col. 01-05 : statement label ...

Download FORTRAN 77 FORTRAN 77 - ce.unipr.it  FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col. 01-05 : statement label ...

Post on 08-May-2018

225 views

Category:

Documents

11 download

TRANSCRIPT

  • 1

    FORTRAN 77Introduzione

    FORTRAN 77Introduzione

    PROGRAM {nome} {dichiarazioni}

    {istruzioni (statements)}

    STOP

    END

    FORTRAN 77Struttura

    col. 01-05 : statement label (opzionale)

    col. 06 : continuazione linea

    col. 07-72 : FORTRAN statements

    col. 73-80 : numero sequenziale (opzionale)

    FORTRAN 77Esempio 1

    PROGRAM VOLUME REAL R,H,VOL

    C

    C VOLUME CONO CIRCOLARE RETTO

    C

    WRITE(*,*) R=? H=?

    READ(*,*)R,H

    VOL=3.14159*R*R*H/3

    WRITE(*,*) VOLUME=,VOL

    STOP

    END

    FORTRAN 77Nomi

    non pi di 6 caratteri

    lettera iniziale

    maiuscole

    ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

    FORTRAN 77Costanti

    intere n es: 15;-3 reali aEn;aDn es: 1.5;-0.078;1.E-4;0.3D5 complesse z=x+iy es: (5.3,-3.1);(2E3,5E-2) logiche .TRUE.;.FALSE. stringa es: TESTO con nome es: PI (PARAMETER PI=3.14159)

  • 2

    FORTRAN 77Variabili

    INTEGER {lista variabili} (dichiarazioni)REAL {lista variabili}DOUBLE PRECISION {lista variabili}COMPLEX {lista variabili}LOGICAL {lista variabili}CHARACTER {lista variabili}

    IMPLICIT INTEGER(I-N)

    nomevariabile = espressione (assegnazioni)

    FORTRAN 77Variabili

    INT(argomento) R,D,I I (conversioni)REAL(argomento) R,D,I RDBLE(argomento ) R,D,I DICHAR(argomento) C ICHAR(argomento) I C

    es: X = (I/J)*(J/I) X real; I,J integer o real

    es: Z = DBLE(X)*DBLE(Y) X,Y real; Z double precision

    Z = DBLE(X*Y)

    es: F = (9/5)*C +32

    F = (9.0D0/5.0D0)*C +32.0D0

    FORTRAN 77Espressioni

    Operatori aritmetici:

    ** elevamento a potenza precedenza >* moltiplicazione/ divisione+ addizione- sottrazione

    es: ax2+bx+c=0, x=(-b b2-4ac)/2a

    X = (-B + SQRT(B*B - 4.*A*C)) / (2.*A)

    X = -B + SQRT(B*B - 4.*A*C)/2.*A NO

    FORTRAN 77Espressioni

    Operatori relazionali:

    .LT. minore di (less than)

    .LE. minore o uguale a (less than or equal)

    .EQ. uguale a (equal)

    .NE. non uguale a (not equal)

    .GT. maggiore di (greater than)

    .GE. maggiore o uguale a (greater than or equal)

    es: b2-4ac0(B**2 - 4.*A*C) .GE. 0.

    FORTRAN 77Espressioni

    Operatori logici:

    .NOT. (not)

    .AND. (and)

    .OR. (or)

    .EQV. (equivalent)

    .NEQV. (not equivalent)

    es: b2-4ac0 e b=0((B**2 - 4.*A*C) .GE. 0.) .AND. (B .EQ. 0.)

    FORTRAN 77Espressioni

    Operatori aritmetici precedenza >Operatori relazionaliOperatori logici

    es: b2-4ac0 e b=0((B**2 - 4.*A*C) .GE. 0.) .AND. (B .EQ. 0.)

    B**2-4.*A*C.GE.0..AND.B.EQ.0.

  • 3

    FORTRAN 77Espressioni

    Manipolazioni di stringhe:

    S1//S2 (concatenazione)S(e1:e2) (sottostringa)LENGTH(S) (lunghezza)INDEX(S,T)(ricerca)

    es: S1=ABC,S2=DEF S=S1//S2 S=ABCDEF

    S(3:5)=546 S=AB546F

    S=S(1:4) S=AB54

    L=LENGTH(S) L=4

    L=INDEX(S,B5) L=2

    FORTRAN 77IF

    IF ({espressione logica}) {istruzione}

    in generale:

    IF ({espressione logica}) THEN {istruzioni}

    ELSEIF ({espressione logica}) THEN {istruzioni}

    ...

    ELSE {istruzioni}

    ENDIF

    FORTRAN 77IF

    es: b2-4ac0 radici reali

    IF (B**2-4.*A*C.GE.0.) WRITE(*,*) reali

    es: b2-4ac0,

  • 4

    FORTRAN 77 UNTIL - loops

    label CONTINUE {istruzioni} IF ({espressione logica}) GOTO label

    es: READ(*,*) X

    10 CONTINUE WRITE(*,*) X X=X+1

    IF (X.LE.100) GOTO 10

    FORTRAN 77 DO - loops

    DO label {var} = {espr1},{espr2},{espr3} {istruzioni}

    label CONTINUE

    es: READ(*,*) X

    DO 10 I=X,100,1 WRITE(*,*) I10 CONTINUE

    nota: DO-loops nidificati (nested)

    nota: DO WHILE in alcuni compilatori

    FORTRAN 77 Array

    Unidimensionali ( vettori)es: REAL A(15) equivale a REAL A(1:15)

    es: DO 10 I=1,15 WRITE(*,*) X(I)10 CONTINUE

    Bidimensionali ( matrici)es: REAL A(15,10) equivale a REAL A(1:15,1:10)

    Pluridimensionali (7)es: REAL A(15,10,5,1,1,5,10)

    FORTRAN 77 Sottoprogrammi - FUNCTION

    {tipo} FUNCTION {nome} ({variabili}) {dichiarazioni}

    {istruzioni}

    RETURN END

    es: REAL FUNCTION DELTA(A,B,C) REAL A,B,C

    DELTA=B**2-4.*A*C

    RETURN out in END

    FORTRAN 77 Sottoprogrammi - SUBROUTINE

    SUBROUTINE {nome} ({argomenti}) {dichiarazioni}

    {istruzioni}

    RETURN END ...

    CALL {nome} ({argomenti})

    es: SUBROUTINE DELTA(A,B,C,D) REAL A,B,C,D

    D=B**2-4.*A*C

    RETURN in out END

    FORTRAN 77 LIBRERIE

    LIBRERIA = raccolta di sottoprogrammi

    FUNCTIONes: SQRT(X) radice quadrata

    EXP(X) esponenziale

    SIN(X) seno

    SUBROUTINEes: SSWAP(N,X,INCX,Y,INCY) scambio X-Y

    STRSL(T,TDIM,N,B,JOB,INFO) sistemi Tx=b

  • 5

    FORTRAN 77 Input - Output

    READ ({#unit},{#FORMAT}) {variabili} WRITE ({#unit},{#FORMAT}) {variabili}

    es: READ(*,*)I,J READ*,I,Jes: READ(*,10)I,J10 FORMAT(I5,I6)

    es: WRITE(*,*)I,J PRINT*,I,Jes: WRITE(*,*)riga=,I,colonna=,Jes: WRITE(*,10)I,J10 FORMAT(riga=,I5,2X,colonna=,I6)

    FORTRAN 77Esempio 2 [1/3]

    PROGRAM ORD PARAMETER (N=10)

    REAL X(N),XCOPY(N),TEMP

    C

    C ORDINAMENTO CRESCENTE VETTORE X (N ELEMENTI)

    C

    C inserimento vettore:

    WRITE(*,*) INSERIRE,N,ELEMENTI

    DO 10 I=1,N

    READ(*,*) X(I)

    XCOPY(I)=X(I)

    10 CONTINUE

    FORTRAN 77 Esempio 2 [2/3]

    C ordinamento vettore:

    DO 30 I=1,N-1

    MIN=I

    DO 20 J=I+1,N

    IF (X(J).LT.X(MIN)) MIN=J

    20 CONTINUE

    IF (MIN.GT.I) THEN

    TEMP=X(MIN)

    X(MIN)=X(I)

    X(I)=TEMP

    ENDIF

    30 CONTINUE

    FORTRAN 77 Esempio 2 [3/3]

    C stampa vettori:

    WRITE(*,*) VETTORE INSERITO

    DO 40 I=1,N

    WRITE(*,*) XCOPY(I)

    40 CONTINUE

    WRITE(*,*) VETTORE ORDINATO

    DO 50 I=1,N

    WRITE(*,*) X(I)

    50 CONTINUE

    STOP

    END