next up previous contents
Nächste Seite: Erweiterte Ein-/Ausgabe Aufwärts: FORTRAN Vorherige Seite: CONTAINS- und END-Anweisung   Inhalt


Ein-/Ausgabe (Standard-Ein-/Ausgabe)

Bei der Eingabe von Daten, auch ,,Lesen`` genannt, werden Daten an das Programm übergeben. Bei der Ausgabe, auch ,,Schreiben`` genannt, werden Daten vom Programm an eine Datei übergeben. Bei den hier zunächst behandelten Standard-Ein-/Ausgabemöglichkeiten bedeutet ,,Datei`` die Standard-Ein-/Ausgabeeinheit. Das meint im Allgemeinen die Tastatur und den Bildschirm. Die erweiterten Ein-/Ausgabemöglichkeiten werden im Abschnitt 4.2.14 ,,Erweiterte Ein-/Ausgabe`` behandelt.

Die einfachste Ein-/Ausgabe ist das listengesteuerte Lesen bzw. Schreiben. Dabei werden codierte (d.h. lesbare) Datensätze ohne Angaben zur Formatierung verarbeitet. Jeder Datensatz besteht aus einer Liste von Werten in freier Form; man spricht deshalb auch von ,,freiem Format`` (nicht zu verwechseln mit ,,formatfrei``).

Die Ein-/Ausgabeanweisungen lauten in diesem einfachsten Fall

READ *, iolist (Lesen, Eingabe von der Tastatur)

PRINT *, iolist (Schreiben, Ausgabe auf dem Bildschirm)

Die Ein-/Ausgabeliste iolist kann Variablennamen, Feldnamen, Namen von Feldelementen, Namen von Teilzeichenketten und Listen mit impliziter Schleife enthalten. Die Elemente der Liste werden durch Komma getrennt. Ein Feldname ohne Indexangabe bezeichnet das gesamte Feld in der der internen Speicherbelegung entsprechenden Reihenfolge; es wird also das ganze Feld gelesen oder geschrieben.

Beim Lesen werden Daten von der Eingabeeinheit nach Umwandlung in die rechnerinterne Darstellung (siehe Kapitel 5) an die in der Eingabeliste iolist symbolisch aufgeführten Speicherplätze (i.a. Variablen) übertragen.

Beispiel:

READ *, zahl1, zahl2, zahl3

Die einzelnen Eingabedaten der Eingabeeinheit (hier: Tastatur) müssen dabei durch Trennzeichen (Komma oder Leerzeichen) voneinander getrennt werden. Korrekte Eingaben für die obige Leseanweisung sind beispielsweise:

3.14159,-17.400,4.567890

oder

2.9, 9.8765 -7.182e-4

Jede READ-Anweisung liest einen neuen Datensatz (d.h. eine neue Zeile). Die Eingabeliste darf keine Konstanten, Ausdrücke oder Zeichenketten enthalten.

Beim Schreiben werden Daten von den in der Ausgabeliste iolist symbolisch aufgeführten Speicherplätzen nach Umwandlung von der rechnerinternen Darstellung in die externe Darstellung (siehe Kapitel 5) an die Ausgabeeinheit übertragen.

Beispiel:

PRINT *, 'DIE WURZEL IST:', wurzel

Das Beispiel zeigt, daß in der Ausgabeliste neben symbolischen Namen auch Zeichenausdrücke vorkommen können. Außerdem sind auch Konstanten sowie arithmetische und logische Ausdrücke zugelassen.

Eine implizite Schleife in einer Ein-/Ausgabeliste hat die Form

(dlist, $v = e_1 , e_2 , e_3$ )

Die Elemente $v$, $e_1 $, $e_2 $, $e_3 $ haben dieselbe Bedeutung wie bei DO-Schleifen, und dlist ist eine Ein-/Ausgabeliste.

Beispiel:

READ *, max, (number(i), i = 1, max)

Einzelne Elemente von dlist können ihrerseits wieder implizite Schleifen enthalten.

Beispiel:

PRINT *, ((hfi(i,j), i = 1,4), j = 1,5)

Die Elemente werden dabei in der folgenden Reihenfolge ausgegeben (der erste Index läuft als erster):

hfi(1,1), hfi(2,1), hfi(3,1), hfi(4,1), hfi(1,2), hfi(2,2),

hfi(3,2), hfi(4,2), hfi(1,3), hfi(2,3), ...

Jede READ- oder PRINT-Anweisung beginnt einen neuen Datensatz. Die Reihenfolge der zu übertragenden Daten wird durch die Liste bestimmt. Daher bezeichnet man diese Art der Ein-/Ausgabe auch als ,,listengesteuert``. Die Anzahl der eingelesenen Daten wird nur durch die Liste bestimmt, nicht durch die tatsächlich vorhandenen Daten. Enthält ein Datensatz mehr Daten als Elemente in der Liste sind, werden die überzähligen Daten ignoriert. Sind in der Liste mehr Elemente angegeben als ein Datensatz enthält, so werden mehrere Datensätze gelesen. Erfolgen die Eingaben nicht Typengerecht, so wird das Programm beendet. Möglichkeiten, dies zu verhindern, werden in Abschnitt 4.2.14 beschrieben.


next up previous contents
Nächste Seite: Erweiterte Ein-/Ausgabe Aufwärts: FORTRAN Vorherige Seite: CONTAINS- und END-Anweisung   Inhalt
Lars Tornow 2003-03-31