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

230 views

Category:

Documents

11 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>1</p><p>FORTRAN 77Introduzione</p><p>FORTRAN 77Introduzione</p><p> PROGRAM {nome} {dichiarazioni}</p><p> {istruzioni (statements)}</p><p> STOP</p><p> END</p><p>FORTRAN 77Struttura</p><p>col. 01-05 : statement label (opzionale)</p><p>col. 06 : continuazione linea</p><p>col. 07-72 : FORTRAN statements</p><p>col. 73-80 : numero sequenziale (opzionale)</p><p>FORTRAN 77Esempio 1</p><p> PROGRAM VOLUME REAL R,H,VOL</p><p>C</p><p>C VOLUME CONO CIRCOLARE RETTO</p><p>C</p><p> WRITE(*,*) R=? H=?</p><p> READ(*,*)R,H</p><p> VOL=3.14159*R*R*H/3</p><p> WRITE(*,*) VOLUME=,VOL</p><p> STOP</p><p> END</p><p>FORTRAN 77Nomi</p><p> non pi di 6 caratteri</p><p> lettera iniziale</p><p> maiuscole</p><p> ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</p><p>FORTRAN 77Costanti</p><p> 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)</p></li><li><p>2</p><p>FORTRAN 77Variabili</p><p>INTEGER {lista variabili} (dichiarazioni)REAL {lista variabili}DOUBLE PRECISION {lista variabili}COMPLEX {lista variabili}LOGICAL {lista variabili}CHARACTER {lista variabili}</p><p>IMPLICIT INTEGER(I-N)</p><p>nomevariabile = espressione (assegnazioni)</p><p>FORTRAN 77Variabili</p><p>INT(argomento) R,D,I I (conversioni)REAL(argomento) R,D,I RDBLE(argomento ) R,D,I DICHAR(argomento) C ICHAR(argomento) I C</p><p>es: X = (I/J)*(J/I) X real; I,J integer o real</p><p>es: Z = DBLE(X)*DBLE(Y) X,Y real; Z double precision</p><p> Z = DBLE(X*Y)</p><p>es: F = (9/5)*C +32</p><p> F = (9.0D0/5.0D0)*C +32.0D0</p><p>FORTRAN 77Espressioni</p><p>Operatori aritmetici:</p><p>** elevamento a potenza precedenza &gt;* moltiplicazione/ divisione+ addizione- sottrazione</p><p>es: ax2+bx+c=0, x=(-b b2-4ac)/2a</p><p>X = (-B + SQRT(B*B - 4.*A*C)) / (2.*A)</p><p>X = -B + SQRT(B*B - 4.*A*C)/2.*A NO</p><p>FORTRAN 77Espressioni</p><p>Operatori relazionali:</p><p>.LT. minore di (less than)</p><p>.LE. minore o uguale a (less than or equal)</p><p>.EQ. uguale a (equal)</p><p>.NE. non uguale a (not equal)</p><p>.GT. maggiore di (greater than)</p><p>.GE. maggiore o uguale a (greater than or equal)</p><p>es: b2-4ac0(B**2 - 4.*A*C) .GE. 0.</p><p>FORTRAN 77Espressioni</p><p>Operatori logici:</p><p>.NOT. (not)</p><p>.AND. (and)</p><p>.OR. (or)</p><p>.EQV. (equivalent)</p><p>.NEQV. (not equivalent)</p><p>es: b2-4ac0 e b=0((B**2 - 4.*A*C) .GE. 0.) .AND. (B .EQ. 0.)</p><p>FORTRAN 77Espressioni</p><p>Operatori aritmetici precedenza &gt;Operatori relazionaliOperatori logici</p><p>es: b2-4ac0 e b=0((B**2 - 4.*A*C) .GE. 0.) .AND. (B .EQ. 0.)</p><p>B**2-4.*A*C.GE.0..AND.B.EQ.0.</p></li><li><p>3</p><p>FORTRAN 77Espressioni</p><p>Manipolazioni di stringhe:</p><p>S1//S2 (concatenazione)S(e1:e2) (sottostringa)LENGTH(S) (lunghezza)INDEX(S,T)(ricerca)</p><p>es: S1=ABC,S2=DEF S=S1//S2 S=ABCDEF</p><p> S(3:5)=546 S=AB546F</p><p> S=S(1:4) S=AB54</p><p> L=LENGTH(S) L=4</p><p> L=INDEX(S,B5) L=2</p><p>FORTRAN 77IF</p><p> IF ({espressione logica}) {istruzione}</p><p>in generale:</p><p> IF ({espressione logica}) THEN {istruzioni}</p><p> ELSEIF ({espressione logica}) THEN {istruzioni}</p><p> ...</p><p> ELSE {istruzioni}</p><p> ENDIF</p><p>FORTRAN 77IF</p><p>es: b2-4ac0 radici reali</p><p> IF (B**2-4.*A*C.GE.0.) WRITE(*,*) reali</p><p>es: b2-4ac0,</p></li><li><p>4</p><p>FORTRAN 77 UNTIL - loops</p><p>label CONTINUE {istruzioni} IF ({espressione logica}) GOTO label</p><p>es: READ(*,*) X</p><p>10 CONTINUE WRITE(*,*) X X=X+1</p><p> IF (X.LE.100) GOTO 10</p><p>FORTRAN 77 DO - loops</p><p> DO label {var} = {espr1},{espr2},{espr3} {istruzioni}</p><p>label CONTINUE</p><p>es: READ(*,*) X</p><p> DO 10 I=X,100,1 WRITE(*,*) I10 CONTINUE</p><p>nota: DO-loops nidificati (nested)</p><p>nota: DO WHILE in alcuni compilatori</p><p>FORTRAN 77 Array</p><p>Unidimensionali ( vettori)es: REAL A(15) equivale a REAL A(1:15)</p><p>es: DO 10 I=1,15 WRITE(*,*) X(I)10 CONTINUE</p><p>Bidimensionali ( matrici)es: REAL A(15,10) equivale a REAL A(1:15,1:10)</p><p>Pluridimensionali (7)es: REAL A(15,10,5,1,1,5,10)</p><p>FORTRAN 77 Sottoprogrammi - FUNCTION</p><p> {tipo} FUNCTION {nome} ({variabili}) {dichiarazioni}</p><p> {istruzioni}</p><p> RETURN END</p><p>es: REAL FUNCTION DELTA(A,B,C) REAL A,B,C</p><p> DELTA=B**2-4.*A*C</p><p> RETURN out in END</p><p>FORTRAN 77 Sottoprogrammi - SUBROUTINE</p><p> SUBROUTINE {nome} ({argomenti}) {dichiarazioni}</p><p> {istruzioni}</p><p> RETURN END ...</p><p> CALL {nome} ({argomenti})</p><p>es: SUBROUTINE DELTA(A,B,C,D) REAL A,B,C,D</p><p> D=B**2-4.*A*C</p><p> RETURN in out END</p><p>FORTRAN 77 LIBRERIE</p><p>LIBRERIA = raccolta di sottoprogrammi</p><p>FUNCTIONes: SQRT(X) radice quadrata</p><p> EXP(X) esponenziale</p><p> SIN(X) seno</p><p>SUBROUTINEes: SSWAP(N,X,INCX,Y,INCY) scambio X-Y</p><p> STRSL(T,TDIM,N,B,JOB,INFO) sistemi Tx=b</p></li><li><p>5</p><p>FORTRAN 77 Input - Output</p><p> READ ({#unit},{#FORMAT}) {variabili} WRITE ({#unit},{#FORMAT}) {variabili}</p><p>es: READ(*,*)I,J READ*,I,Jes: READ(*,10)I,J10 FORMAT(I5,I6)</p><p>es: WRITE(*,*)I,J PRINT*,I,Jes: WRITE(*,*)riga=,I,colonna=,Jes: WRITE(*,10)I,J10 FORMAT(riga=,I5,2X,colonna=,I6)</p><p>FORTRAN 77Esempio 2 [1/3]</p><p> PROGRAM ORD PARAMETER (N=10)</p><p> REAL X(N),XCOPY(N),TEMP</p><p>C</p><p>C ORDINAMENTO CRESCENTE VETTORE X (N ELEMENTI)</p><p>C</p><p>C inserimento vettore:</p><p> WRITE(*,*) INSERIRE,N,ELEMENTI</p><p> DO 10 I=1,N</p><p> READ(*,*) X(I)</p><p> XCOPY(I)=X(I)</p><p>10 CONTINUE</p><p>FORTRAN 77 Esempio 2 [2/3]</p><p>C ordinamento vettore:</p><p> DO 30 I=1,N-1</p><p> MIN=I</p><p> DO 20 J=I+1,N</p><p> IF (X(J).LT.X(MIN)) MIN=J</p><p>20 CONTINUE</p><p> IF (MIN.GT.I) THEN</p><p> TEMP=X(MIN)</p><p> X(MIN)=X(I)</p><p> X(I)=TEMP</p><p> ENDIF</p><p>30 CONTINUE</p><p>FORTRAN 77 Esempio 2 [3/3]</p><p>C stampa vettori:</p><p> WRITE(*,*) VETTORE INSERITO</p><p> DO 40 I=1,N</p><p> WRITE(*,*) XCOPY(I)</p><p>40 CONTINUE</p><p> WRITE(*,*) VETTORE ORDINATO</p><p> DO 50 I=1,N</p><p> WRITE(*,*) X(I)</p><p>50 CONTINUE</p><p> STOP</p><p> END</p></li></ul>