De eenvoudigste leesopdracht voor het inlezen van een aantal variabelen
``var1, var2, ...'' heeft de volgende vorm:
READ (UNIT=5, FMT=*, END=kkkkk) var1, var2, ....
De variabelen worden ingelezen van unit 5, dit is meestal het
toetsenbord. Met ``FMT=*'' wordt aangeduid dat het FORMAT aan de compiler
overgelaten wordt en ``kkkkk'' is een FORTRAN LABEL (1 tot 5 cijfers),
waarheen het programma springt als een END-OF-FILE (afgekort EOF) conditie
gedetecteerd wordt (in DOS gebeurt dit na invoer van het character CTRL-Z
van het toetsenbord).
Het schrijven naar het scherm gaat als volgt:
WRITE (UNIT=6, FMT=*) var1, var2, ...
Hierbij geeft unit 6 het scherm aan. Merk op dat er bij het schrijven van
informatie geen EOF konditie op kan treden.
Voorbeeld:
C PROGRAMMA VOOR KWADRATEN:
C DIT PROGRAMMA BEVAT EEN LOOP DIE VERLATEN WORDT ALS ER EEN EOF CONDITIE
C ONTDEKT WORDT (DO UNTIL EOF).
C
DOUBLE PRECISION QUADR
C
100 CONTINUE
READ (UNIT=5, FMT=*, END=200) QUADR
WRITE (UNIT=6, FMT=*) 'HET KWADRAAT IS: ', QUADR*QUADR
GO TO 100
C
200 CONTINUE
END
In het write statement wordt een character constante tezamen met een
double precision real naar het scherm geschreven.
Merk op dat vermenigvuldiging in FORTRAN met een ``*'' aangegeven wordt.
Statement ``GO TO 100'' is een niet-conditionele sprongopdracht, waarbij
100 het label van het executeerbare statement CONTINUE is.
Dit laatste statement doet niets (het is een ``dummy'' opdracht), de
programmacontrole zorgt ervoor dat het erop volgende executeerbare statement
(in dit geval de READ) wordt uitgevoerd.
Bij EOF detectie springt het programma naar het
statement dat label 200 heeft.
Het programma wordt --- net zoals alle FORTRAN (sub)programma's --- afgesloten met een END statement. Dit statement vertelt de compiler dat dit het einde van de programmacode is en dat er geen andere statements van dit (sub)programma meer volgen.
In het volgende voorbeeld wordt een real array A van dimensie 1000 gedeclareerd. Integer LA geeft de lengte van het array. In de GO TO loop wordt het array gevuld vanaf het toetsenbord; de loop wordt beëindigd ofwel door EOF (de normale konditie), ofwel door uit het array te lopen (de abnormale conditie), waarop executie van het programma stopt (met het STOP statement). We komen later terug op het IF ... THEN ... ELSE statement.
In de tweede helft van het programma worden de ingelezen
variabelen (de elementen van A) met behulp van een DO loop naar
het scherm geschreven. Het WRITE statement wordt achtereenvolgens
uitgevoerd voor de waarden I=1,2,...,N. Het CONTINUE
statement wordt gewoonlijk gebruikt om het einde van een DO loop aan
te geven. Het commando DO 30 I=1,N laat de computer alle
statements t/m het statement met label 30 uitvoeren voor
I oplopend van 1 t/m N.
DIMENSION A(1000)
LA = 1000
C
C LEES RECORDS VAN TOETSENBORD TOT 'END OF FILE'.
C HET TOETSENBORD IS GEWOONLIJK UNIT 5.
C
I = 0
10 I = I + 1
C LEES ALLEEN VOLGENDE GETAL ALS WE NIET UIT HET ARRAY LOPEN
IF (I .LT. LA) THEN
READ (UNIT=5, FMT=*, END=20) A(I)
ELSE
WRITE (UNIT=6, FMT=*) 'TE VEEL VARIABELEN, PROGRAMMA STOPT'
STOP
ENDIF
GO TO 10
C
C MERK OP DAT A(I) OP DIT PUNT GEEN WAARDE HEEFT, HET ARRAY
C IS INGELEZEN TOT EN MET I-1
20 N = I - 1
WRITE (UNIT=6, FMT=*) 'AANTAL INGELEZEN DATA', N
C
DO 30 I=1,N
WRITE (UNIT=6, FMT=*) A(I)
30 CONTINUE
C
END
OPGAVEN:
N! = 1 * 2 * 3 * ... * N
Zet het hele programma in een loop tot EOF,
zoals in de vorige opgave, en bereken de faculteit van 1 t/m zo hoog
mogelijk. Voor zekere N krijg je een foutenboodschap, waarom?
log (N!) = log ((N-1)!) + log(N) voor N <= 100
Zet de tussenresultaten in een double precision array
DOUBLE PRECISION DLFAC(100) en schrijf de waarde
EXP(DLFAC(N)) naar het scherm ter controle.