• Non ci sono risultati.

1 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77

N/A
N/A
Protected

Academic year: 2021

Condividi "1 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77"

Copied!
5
0
0

Testo completo

(1)

FORTRAN 77

Introduzione

FORTRAN 77

Introduzione

PROGRAM {nome}

{dichiarazioni}

{istruzioni (statements )}

STOP END

FORTRAN 77

Struttura

col. 01-05 : statement label (opzionale) col. 06 : continuazione linea

col. 07-72 : FORTRAN statements

col. 73-80 : numero sequenziale (opzionale)

FORTRAN 77

Esempio 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 77

Nomi

• non più di 6 caratteri

• lettera iniziale

• maiuscole

• ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

FORTRAN 77

Costanti

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

Variabili

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 77

Variabili

INT(argomento) R,D,I I (conversioni) REAL (argomento) R,D,I R

DBLE (argomento ) R,D,I D ICHAR(argomento) C I CHAR (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 77

Espressioni

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 77

Espressioni

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 77

Espressioni

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 77

Espressioni

Operatori aritmetici precedenza >

Operatori relazionali Operatori 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.

(3)

FORTRAN 77

Espressioni

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 77

IF

IF ({espressione logica}) {istruzione}

in generale:

IF ({espressione logica}) THEN {istruzioni}

ELSEIF ({espressione logica}) THEN {istruzioni}

...

ELSE

{istruzioni}

ENDIF

FORTRAN 77

IF

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 77

GOTO

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 77

IF aritmetica

IF ({espressione}) label1,label2,label3

espressione <0 ⇒ GOTO label1 espressione =0 GOTO label2 espressione >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

(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(*,*) I 10 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

FUNCTION

es: SQRT(X) radice quadrata EXP(X) esponenziale SIN(X) seno

SUBROUTINE

es: 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,J es: READ(*,10)I,J

10 FORMAT(I5,I6)

es: WRITE(*,*)I,J PRINT*,I,J es: WRITE(*,*)’riga=‘,I,’colonna=‘,J es: WRITE(*,10)I,J

10 FORMAT(‘riga=’,I5,2X,‘colonna=’,I6)

FORTRAN 77

Esempio 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

Riferimenti

Documenti correlati

Marco Lapegna Laboratorio di Programmazione 15 – Linguaggio Fortran.. LABORATORIO DI PROGRAMMAZIONE Corso di laurea

1978 Fortran 77, standard ANSI ANSI X.39-1978, che introduce costrutti per la programmazione strutturata.. 1991 Fortran 90, standard ISO 1539:1991, che introduce ulteriori

Basic Fortran, Paolo Bison, FI08, 2008-09-30 –

Basic Fortran (cont.), Paolo Bison, FI08, 2008-09-29 –

Basic Fortran (cont.), Paolo Bison, FI08, 2008-09-29 –

Fondamenti di Informatica Ingegneria Meccanica. Università di

Nel comando WRITE può essere utilizzata al posto di una variabile direttamente un'espressione numerica con il vantaggio di non dover definire una nuova variabile per contenere

I Si può anche specificare una binding label (di default è la versione lower-case del codice Fortran),