Transcript
Page 1: FORTRAN 77 FORTRAN 77 - ce.unipr.it · 1 FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col

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)

Page 2: FORTRAN 77 FORTRAN 77 - ce.unipr.it · 1 FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col

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-4ac≥0(B**2 - 4.*A*C) .GE. 0.

FORTRAN 77Espressioni

Operatori logici:

.NOT. (not)

.AND. (and)

.OR. (or)

.EQV. (equivalent)

.NEQV. (not equivalent)

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

FORTRAN 77Espressioni

Operatori aritmetici precedenza >

Operatori relazionaliOperatori logici

es: b2-4ac≥0 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.

Page 3: FORTRAN 77 FORTRAN 77 - ce.unipr.it · 1 FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col

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-4ac≥0 ⇒ ‘radici reali’

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

es: b2-4ac≥0,<0 ⇒ ‘radici reali, complesse’

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

ELSE WRITE(*,*) ‘complesse’

ENDIF

FORTRAN 77GOTO

GOTO label

es: b2-4ac<0,=0,>0 ⇒ go to labels 30,40,50

DELTA = B**2 - 4.*A*C IF (DELTA.LT.0.) THEN

GOTO 30 ELSEIF (DELTA.EQ.0.) THEN GOTO 40 ELSE

GOTO 50 ENDIF

FORTRAN 77IF aritmetica

IF ({espressione}) label1,label2,label3

espressione <0 ⇒ GOTO label1espressione =0 ⇒ GOTO label2espressione >0 ⇒ GOTO label3

es: b2-4ac ⇒ go to labels 30,40,50

DELTA = B**2 - 4.*A*C IF (DELTA) 30,40,50

FORTRAN 77 WHILE - loops

label IF ({espressione logica}) THEN {istruzioni}

GOTO label ENDIF

es: READ(*,*) X

10 IF (X.LE.100) THEN WRITE(*,*) X

X=X+1

GOTO 10 ENDIF

Page 4: FORTRAN 77 FORTRAN 77 - ce.unipr.it · 1 FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col

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

Page 5: FORTRAN 77 FORTRAN 77 - ce.unipr.it · 1 FORTRAN 77 Introduzione FORTRAN 77 Introduzione PROGRAM {nome} {dichiarazioni} {istruzioni (statements)} STOP END FORTRAN 77 Struttura col

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


Top Related