Your Federal Quarterly Tax Payments are due April 15th Get Help Now >>

FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN 77 FORTRAN by hcw25539

VIEWS: 147 PAGES: 5

									                                     FORTRAN 77                                                  FORTRAN 77
                                           Introduzione                                                Introduzione


                                                                 PROGRAM {nome}
                                                                 {dichiarazioni}



                                                                 {istruzioni (statements )}



                                                                 STOP
                                                                 END




                                     FORTRAN 77                                                  FORTRAN 77
                                              Struttura                                                 Esempio 1


                                                                 PROGRAM VOLUME
col. 01-05 : statement label (opzionale)                         REAL R,H,VOL
col. 06    : continuazione linea                          C
                                                          C VOLUME CONO CIRCOLARE RETTO
col. 07-72 : FORTRAN statements                           C
                                                                WRITE(*,*) ‘R=? H=?’
col. 73-80 : numero sequenziale (opzionale)                     READ(*,*)R,H
                                                                VOL=3.14159*R*R*H/3
                                                                WRITE(*,*) ’VOLUME=‘,VOL
                                                                STOP
                                                                END




                                     FORTRAN 77                                                  FORTRAN 77
                                                 Nomi                                                      Costanti



•   non più di 6 caratteri                                •   intere    n         es: 15;-3
•   lettera iniziale                                      •   reali     aEn;aDn   es: 1.5;-0.078;1.E-4;0.3D5
•   maiuscole                                             •   complesse z=x+iy    es: (5.3,-3.1);(2E3,5E-2)
•   ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789                  •   logiche             .TRUE.;.FALSE.
                                                          •   stringa             es: ‘TESTO’
                                                          •   con nome            es: PI (PARAMETER PI=3.14159)




                                                                                                                      1
                                    FORTRAN 77                                                   FORTRAN 77
                                              Variabili                                                    Variabili


INTEGER {lista variabili}          (dichiarazioni)        INT(argomento)         R,D,I      I     (conversioni)
REAL {lista variabili}                                    REAL(argomento)        R,D,I      R
DOUBLE PRECISION {lista variabili}                        DBLE(argomento )       R,D,I      D
COMPLEX {lista variabili}                                 ICHAR(argomento)       C          I
LOGICAL {lista variabili}                                 CHAR(argomento)        I          C
CHARACTER {lista variabili}

IMPLICIT INTEGER(I-N)                                     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)
nomevariabile = espressione        (assegnazioni)         es : F = (9/5)*C +32
                                                              F = (9.0D0/5.0D0)*C +32.0D0




                                    FORTRAN 77                                                   FORTRAN 77
                                          Espressioni                                                   Espressioni


Operatori aritmetici:                                     Operatori relazionali:

**       elevamento a potenza        precedenza >         .LT.   minore di ( less than)
*        moltiplicazione                                  .LE.   minore o uguale a ( less than or equal)
/        divisione                                        .EQ.   uguale a (equal )
+        addizione                                        .NE.   non uguale a (not equal )
-        sottrazione                                      .GT.   maggiore di (greater than)
                                                          .GE.   maggiore o uguale a (greater than or equal)
es: ax2+bx+c=0, x=(-b± b2-4ac)/2a
X = (-B + SQRT(B*B - 4.*A*C)) / (2.*A)                    es: b2-4ac≥0
X = -B + SQRT(B*B - 4.*A*C)/2.*A                NO        (B**2 - 4.*A*C) .GE. 0.




                                    FORTRAN 77                                                   FORTRAN 77
                                          Espressioni                                                   Espressioni


Operatori logici:
                                                          Operatori aritmetici                     precedenza >
.NOT.         (not)                                       Operatori relazionali
.AND.         (and)                                       Operatori logici
.OR.          (or)
.EQV.         (equivalent)
.NEQV.        (not equivalent)

                                                          es: b2-4ac≥0 e b=0
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.)               B**2-4.*A*C.GE.0..AND.B.EQ.0.




                                                                                                                       2
                                        FORTRAN 77                                                 FORTRAN 77
                                             Espressioni                                                           IF


Manipolazioni di stringhe:                                         IF        ({espressione logica}) {istruzione}

S1//S2      (concatenazione)                                 in generale:
S(e1:e2)    (sottostringa )
LENGTH(S)   (lunghezza)                                            IF     ({espressione logica}) THEN
INDEX(S,’T’)(ricerca)                                                      {istruzioni}
                                                                   ELSEIF ({espressione logica}) THEN
es : S1=‘ABC’,S2=‘DEF’   S=S1//S2          S=‘ABCDEF’                      {istruzioni}
                         S(3:5)=‘546’      S=‘AB546F’              ...
                         S=S(1:4)          S=‘AB54’                ELSE
                         L=LENGTH(S)       L=4
                                                                           {istruzioni}
                         L=INDEX(S,’B5’)   L=2
                                                                   ENDIF




                                        FORTRAN 77                                                 FORTRAN 77
                                                        IF                                                   GOTO


es: b2-4ac≥0 ⇒ ‘radici reali’                                      GOTO     label

       IF (B**2-4.*A*C.GE.0.) WRITE (*,*) ‘reali’            es: b2-4ac<0,=0,>0 ⇒ go to labels 30,40,50

es: b2-4ac≥0,<0 ⇒ ‘radici reali, complesse ’                       DELTA = B**2 - 4.*A*C
                                                                   IF     (DELTA.LT.0.) THEN
       IF      (B**2-4.*A*C.GE.0.) THEN                                    GOTO 30
                WRITE(*,*) ‘reali’                                 ELSEIF (DELTA.EQ.0.) THEN
       ELSE                                                                GOTO 40
                WRITE(*,*) ‘complesse’                             ELSE
       ENDIF                                                               GOTO 50
                                                                   ENDIF




                                        FORTRAN 77                                                 FORTRAN 77
                                             IF aritmetica                                             WHILE - loops


       IF   ({espressione}) label1,label2,label3             label IF        ({espressione logica}) THEN
                                                                              {istruzioni}
espressione <0 ⇒ GOTO label1                                                  GOTO label
espressione =0 ⇒ GOTO label2                                       ENDIF
espressione >0 ⇒ GOTO label3
                                                             es:   READ(*,*) X
                                                             10    IF     (X.LE.100) THEN
es: b2-4ac ⇒ go to labels 30,40,50                                         WRITE(*,*) X
                                                                           X=X+1
       DELTA = B**2 - 4.*A*C                                               GOTO 10
       IF (DELTA) 30,40,50                                         ENDIF




                                                                                                                        3
                                    FORTRAN 77                                                FORTRAN 77
                                          UNTIL - loops                                                DO - loops


label CONTINUE                                                  DO label {var} = {espr1},{espr2},{espr3}
      {istruzioni}                                                 {istruzioni}
      IF ({espressione logica}) GOTO label                label CONTINUE

                                                          es:   READ(*,*) X
es:   READ(*,*) X                                               DO 10 I=X,100,1
10    CONTINUE                                                  WRITE(*,*) I
      WRITE(*,*) X                                        10    CONTINUE
      X=X+1
      IF (X.LE.100) GOTO 10                               nota: DO-loops nidificati (nested)
                                                          nota: DO WHILE in alcuni compilatori




                                    FORTRAN 77                                                FORTRAN 77
                                                 Array                                Sottoprogrammi - FUNCTION


Unidimensionali (⇔ vettori)                                     {tipo} FUNCTION {nome} ({variabili})
es:   REAL A(15)      equivale a REAL A(1:15)                          {dichiarazioni}
es:   DO 10 I=1,15                                                     {istruzioni}
      WRITE(*,*) X(I)                                                  RETURN
10    CONTINUE                                                         END

Bidimensionali (⇔ matrici)                                es:   REAL FUNCTION DELTA(A,B,C)
es:   REAL A(15,10) equivale a REAL A(1:15,1:10)                REAL A,B,C
                                                                DELTA=B**2-4.*A*C
Pluridimensionali (≤7)                                          RETURN                out     in
es:   REAL A(15,10,5,1,1,5,10)                                  END




                                    FORTRAN 77                                                FORTRAN 77
                          Sottoprogrammi - SUBROUTINE                                                  LIBRERIE


      SUBROUTINE {nome} ({argomenti})                     LIBRERIA = raccolta di sottoprogrammi
      {dichiarazioni}
      {istruzioni}                                        FUNCTION
      RETURN                                              es:   SQRT(X)     radice quadrata
      END                                                       EXP(X)      esponenziale
      ...                                                       SIN(X)      seno
      CALL {nome} ({argomenti})
                                                          SUBROUTINE
es:   SUBROUTINE DELTA(A,B,C,D)                           es:   SSWAP(N,X,INCX,Y,INCY)     scambio X-Y
      REAL A,B,C,D                                              STRSL(T,TDIM,N,B,JOB,INFO) sistemi Tx=b
      D=B**2-4.*A*C
      RETURN                   in   out
      END




                                                                                                                    4
                                    FORTRAN 77                                                   FORTRAN 77
                                          Input - Output                                          Esempio 2 [1/3]


      READ ({#unità},{#FORMAT}) {variabili}                     PROGRAM ORD
      WRITE ({#unità},{#FORMAT}) {variabili}                    PARAMETER (N=10)
                                                                REAL X(N),XCOPY(N),TEMP
es:   READ(*,*)I,J      READ*,I,J                          C
es:   READ(*,10)I,J                                        C ORDINAMENTO CRESCENTE VETTORE X (N ELEMENTI)
10    FORMAT(I5,I6)                                        C
                                                           C     inserimento vettore:
es:   WRITE(*,*)I,J      PRINT*,I,J                              WRITE(*,*) ‘INSERIRE’,N,’ELEMENTI’
es:   WRITE(*,*)’riga=‘,I,’colonna=‘,J                           DO 10 I=1,N
es:   WRITE(*,10)I,J                                                READ(*,*) X(I)
10    FORMAT(‘riga=’,I5,2X,‘colonna=’,I6)                           XCOPY(I)=X(I)
                                                           10       CONTINUE




                                    FORTRAN 77                                                   FORTRAN 77
                                        Esempio 2 [2/3]                                           Esempio 2 [3/3]


C     ordinamento vettore:                                 C     stampa vettori:
      DO 30 I=1,N-1                                              WRITE(*,*) ‘VETTORE INSERITO’
         MIN=I                                                   DO 40 I=1,N
         DO 20 J=I+1,N                                              WRITE(*,*) XCOPY(I)
            IF (X(J).LT.X(MIN)) MIN=J                      40       CONTINUE
20       CONTINUE                                                WRITE(*,*) ‘VETTORE ORDINATO’
         IF (MIN.GT.I) THEN                                      DO 50 I=1,N
         TEMP=X(MIN)                                                WRITE(*,*) X(I)
         X(MIN)=X(I)                                       50       CONTINUE
         X(I)=TEMP                                               STOP
         ENDIF                                                   END
30    CONTINUE




                                                                                                                    5

								
To top