Quale versione del fortran utilizzi?
A cura di Giuseppe Ciaburro
Pubblicato il 09/12/2001
Un programma fortran 77 che fornisce un diagramma del nostro codice fortran.
Diagramf è
in grado di fornire un attento e dettagliato diagramma del codice fortran analizzato,
in esso saranno indicate:la nuemrazione delle righe,il numero di colonne utilizzate,saranno
evidenziati tutti i costrutti if-else-elseif-endif, do-enddo e case, l'inizio
e la fine di ogni routine,le definizioni di tipi, modiuli ed interfacce,ed infine
sarano evidenziati i goto, return, cycle, exit, stop, end= and err=.
Il programma è stato scritto da Mitchell R Grunes, ATSC/NRL (grunes@nrlvax.nrl.navy.mil).
E' scritto in fortran 77 ma può essere compilato anche in fortran 90
e 95.
Una volta compilato dovrete porre il file da analizzare nella stessa cartella
del file eseguibile e digitare al prompt il seguente comendo:
diagramf
FORTRAN source
filename?
Dovrete allora digitare il noem del file da analizzare completo di estensione.Premendo invio otterrete:
Output file (blank=screen)?
Che vi chide se
memorizzare il diagramma in un file oppure sullo schermo, nel primo caso digitare
il nome del file.Ci saranno in seguito delle scelte da effettuare.
Il risultato è del tipo:
=============--prova.f90--=============
....,....1....,....2....,....3....,....4....,....5....,....6....,....7....,....8....,....9....,....
+-------- PROGRAM tstcls | 1
| INTEGER, DIMENSION (8192) :: jindt | 2
| REAL, DIMENSION (8192) :: xdont | 3
| REAL, DIMENSION (1:33) :: xsept | 4
| INTEGER, DIMENSION (1:32) :: jhist | 5
|+------------- INTERFACE | 6
||+--------------- SUBROUTINE TRIIND (XVALT, IRNGT) | 7
||| ! triind = tri par interclassement suivant xvalt croissant | 8
||| REAL, DIMENSION (:) :: XVALT | 9
||| INTEGER, DIMENSION (:) :: IRNGT | 10
||+--------------- END SUBROUTINE TRIIND | 11
||+--------------- SUBROUTINE CALCLS (XVALT, IRNGT, xsept) | 12
||| ! calcul des abscisses l'histogramme de l'ensemble XVALT | 13
||| REAL, INTENT (IN), DIMENSION (:) :: XVALT | 14
||| INTEGER, INTENT (IN), DIMENSION (:) :: IRNGT | 15
||| REAL, INTENT (OUT), DIMENSION (:) :: xsept | 16
||| ! Separations des classes, dont la taille donne la proportion | 17
||| ! souhaitee dans chaque classe | 18
||+--------------- END SUBROUTINE CALCLS | 19
||+--------------- SUBROUTINE CALHIN (XVALT, IRNGT, xsept, NHIST) | 20
||| ! calcul de l'histogramme de l'ensemble XVALT | 21
||| REAL, INTENT (IN), DIMENSION (:) :: XVALT | 22
||| INTEGER, INTENT (IN), DIMENSION (:) :: IRNGT | 23
||| REAL, INTENT (IN), DIMENSION (:) :: xsept | 24
||| ! Separations des classes | 25
||| INTEGER, INTENT (OUT), DIMENSION (:) :: NHIST | 26
||| ! Tableau qui sera rempli avec l'histogramme | 27
||+--------------- END SUBROUTINE CALHIN | 28
| ! | 30
| ndon = 8192 | 31
|+------------- DO idon = 1, ndon | 32
|| READ (*,*, IOSTAT=iferr) xdont (idon) | 33
||+--------------- IF (iferr /= 0) THEN | 34
||| ndon = idon - 1 | 35
*||| EXIT | 36
||+--------------- END IF | 37
|| ! xdont (idon) = ceiling (xdont (idon)) | 38
|+------------- END DO | 39
| WRITE (*,*) minval (xdont(1:ndon)), maxval (xdont(1:ndon)) | 40
| CALL TRIIND (xdont(1:ndon), jindt(1:ndon)) | 41
| CALL CALCLS (xdont(1:ndon), jindt(1:ndon), xsept) | 42
| CALL CALHIN (xdont(1:ndon), jindt(1:ndon), xsept, jhist) | 43
| WRITE (*, "(f10.2, i6)") (xsept(i), jhist(i), i=1, size(jhist))
| WRITE (*,*) ndon, sum (jhist) | 45
+-------- END PROGRAM tstcls | 46
Per scaricare il programma diagramf cliccare sul link seguente: