228 66 9MB
German Pages 157 [160] Year 1980
de Gruyter Lehrbuch Spieß • Ehinger • Programmierübungen in FORTRAN
Programmierübungen in FORTRAN
von
Wolfgang E. Spieß und Gerd Ehinger 2., durchgesehene und erweiterte Auflage
w DE
G Walter de Gruyter • Berlin • New York 1980
CIP-Kurztitelaufnahme der Deutschen
Bibliothek
Spieß, Wolfgang E.: Programmierübungen in FORTRAN / Wolfgang E. Spieß ; Gerd Ehinger. - 2., durchges. u. erw. Aufl. - Berlin, New York : de Gruyter, 1980. (De-Gruyter-Lehrbuch) ISBN 3-11-008367-1 NE: Ehinger, Gerd:
© Copyright 1980 by Walter de Gruyter & Co., vormals G. J. Göschen'sche Verlagshandlung, J. Guttentag, Verlagsbuchhandlung Georg Reimer, Karl J. Trübner, Veit & Comp., Berlin 30. Alle Rechte, insbesondere das Recht der Vervielfältigung und Verbreitung sowie der Übersetzung, vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (durch Photokopie, Mikrofilm oder ein anderes Verfahren) ohne schriftliche Genehmigung des Verlages reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. - Satz: Arthur Collignon GmbH, Berlin 30. - Druck: Karl Gerike, Berlin. - Bindearbeiten: Wübben & Co., Berlin. - Printed in Germany
Vorwort
Dieses Buch wendet sich an all diejenigen, die das Programmieren einer digitalen Datenverarbeitungsanlage mit der Programmiersprache FORTRAN erlernen wollen, denen aber ein Computer während ihres Studiums nur begrenzt oder gar nicht zur Verfügung steht. Es ist ein Übungsbuch, mit dessen Hilfe der Lernende seine erworbenen Fähigkeiten überprüfen und festigen kann, denn nur ständige Übung vermittelt allmählich die Fähigkeit, ein Problem in angemessener Zeit als Programm zu gestalten und fehlerfrei vom Computer bearbeiten zu lassen. In dem Buch werden nicht einzelne Lektionen der FORTRAN-Programmiersprache gelehrt, sondern Aufgaben gestellt, Anleitungen gegeben und eine mögliche Lösung für das Problem vorgestellt. Die Aufgabe steht im Mittelpunkt, am Ende jeder Aufgabe werden die in ihr enthaltenen FORTRAN-Sprachelemente zur Wiederholung und Einprägung zusammengestellt. Die Lösung der Aufgaben erfordert keine Mathematikkenntnisse, die über das Niveau des 9. Schuljahres hinausgehen. Damit soll jedem die Möglichkeit gegeben werden, die Programmiersprache FORTRAN zu erlernen und erfolgreich einzusetzen. Die einzelnen Aufgaben sind nach wachsendem Schwierigkeitsgrad geordnet. Dennoch entspricht die Reihenfolge der in den Aufgaben angesprochenen FORTRAN-Sprachelemente im wesentlichen auch der Ordnung, wie sie in dem FORTRAN-Lehrbuch von Spieß/Rheingans „Einfuhrung in das Programmieren in FORTRAN", 3. Auflage, de Gruyter, Berlin 1972, enthalten ist. So ist das vorliegende Buch als Ergänzung zu dem genannten Lehrbuch zu sehen und ermöglicht im Verbund mit diesem den für erfolgreiches Lernen notwendigen individuellen Lernprozeß. Im Kapitel 0. „Anleitung zur Benutzung dieses Buches" sind Hinweise gegeben, wie der Leser dabei am besten vorgeht. An dieser Stelle möchten wir uns bei Frau Gisela Spieß für die sorgfältige Durchsicht des Manuskripts und der Fahnen bedanken. Unser Dank geht auch an den Verlag Walter de Gruyter & Co. für das bereitwillige Eingehen auf unsere Wünsche bei der Gestaltung dieses Buches.
Berlin, Juni 1973
Dr.-Ing. Wolfgang E. Spieß Dr.-Ing. GerdEhinger
Vorwort zur 2. Auflage
Die 2. Auflage der Programmierübungen in FORTRAN unterscheidet sich von der ersten neben der Verbesserung einiger Druckfehler und der Berücksichtigung der Anregungen unserer Leser insbesondere durch den umfangreichen „Lexikalischen Überblick der FORTRAN-Sprachelemente" im Anhang des Buches. Er ermöglicht dem FORTRAN-Schüler die Wiederholung des Erlernten in kompakter Form, ähnlich wie eine Grammatik beim Erlernen einer Fremdsprache. Darüberhinaus bietet diese Zusammenstellung ein Kontrollmöglichkeit, wenn man sich einer bestimmten Regel zu einem Sprachelement nicht sicher ist. Von dem FORTRAN-Lehrbuch „Spieß/Rheingans, Einführung in das Programmieren in FORTRAN" ist zwischenzeitlich die 6. Auflage erschienen, so daß wir dem Leser empfehlen, als Begleitbuch zu diesem Übungsbuch auch die neueste Auflage der „Einführung" zu benutzen. Für die uns zugegangenen Leserzuschriften und Hinweise in Besprechungen bedanken wir uns und hoffen, auch in Zukunft Anregungen von unseren Lesern für die kommenden Auflagen zu erhalten.
Berlin, Juni 1980
Dr.-Ing. Wolf gang E. Spieß Dr.-Ing. Gerd Ehinger
Inhaltsverzeichnis
0. Anleitung zur Benutzung dieses Buches
9
1. Die Logik für den Computer — Das Flußdiagramm
11
1.1 Flußdiagrammtechnik (1. Aufgabe) 1.2 Flußdiagrammtechnik (2. Aufgabe)
11 14
2. Die Darstellung der Grundrechenarten in F O R T R A N — Einfache arithmetische Anweisungen 2.1 2.2 2.3 2.4
18
REAL-Konstante REAL-Variable Arithmetische Wertzuweisung Fehlererkennung
18 19 20 21
3. Wie der Computer liest und schreibt - Die einfache Ein- und Ausgabe . . 3.1 3.2 3.3 3.4
Ein- und Ausgabe von REAL-Variablen Ein- und Ausgabe von REAL-Variablen und Ausgabe von Leerstellen Erläuterungstexte Fehlererkennung
4. Wie man Programme kurz und übersichtlich gestaltet — Die Programmschleife 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9
Anweisungen für Entscheidungen und Sprünge Programmschleifen und die Verarbeitung von INTEGER-Größen Verarbeitung von INTEGER-Schleifen Vermischung von REAL und INTEGER Programmschleifen (Iteration) Standardfunktion Berechnete Sprünge Variante zu Aufgabe 4.7 Fehlererkennung
Gleichartige Daten Eindimensionale Felder Einfache DO-Schleife Einfache DO-Schleife Geschachtelte DO-Schleife Vermischung zweier Felder Mehrdimensionale Felder Fehlererkennung
24 27 29 30
33
5. Wenn große Datenmengen anfallen — Die Verarbeitung von Feldern . . . 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8
24
I
33 36 39 41 43 46 47 51 53 57 57 58 60 62 64 68 72 74
Inhaltsverzeichnis
8
6 . Spezielle Möglichkeiten beim L e s e n und Schreiben — Die verfeinerte Ein- und Ausgabe 6.1 6.2 6.3 6.4
78
Ein-und Ausgabe mit dem E-Konversionskode Vorgabe von Anfangswerten mittels DATA Variable Textverarbeitung Fehlererkennung
78 82 86 88
7 . Hierarchie der P r o g r a m m t e i l e - Die U n t e r p r o g r a m m t e c h n i k 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8
91
FUNCTION-Unterprogramme FUNCTION-Unterprogramme FUNCTION-Unterprogramme und DOUBLE PRECISION SUBROUTINE-Unterprogramme SUBROUTINE-Unterprogramme Übertragung von Daten mittels COMMON-Anweisung Übertragung von Daten mittels COMMON-Anweisung Fehlererkennung
91 94 98 103 107 108 112 115
8 . D e r C o m p u t e r irrt sich nie — Kleine Hinweise zu häufig a u f t r e t e n d e n F e h l e r n
120
8.1 Formale Fehler 8.2 Ausführungsfehler 8.3 Anleitung zur schnellen Fehlerbehebung
120 122 124
Sachverzeichnis Anhang: Lexikalischer Überblick der F O R T R A N - S p r a c h e l e m e n t e
126 . . . .
128
0. Anleitung zur Benutzung dieses Buches
Die Kapitel 1 bis 7 haben den gleichen Aufbau. Sie bestehen aus verschiedenen Übungsaufgaben, von denen jede neben der Aufgabenstellung und dem entsprechenden FORTRAN-Programm eine Anleitung zur Lösung, eine Erläuterung der vorgestellten Lösung, in den meisten Fällen ein Flußdiagramm, eine Erläuterung der in den Aufgaben zur Anwendung kommenden FORTRAN-Sprachelemente und eine Rekapitulation dieser Sprachelemente in kurzen Lehrsätzen enthält. Zur leichteren Orientierung ist statt eines Sachregisters eine tabellarische Übersicht (S. 126 und 127) über die einzelnen Übungsaufgaben beigegeben. Aus dieser Tabelle kann man sehr schnell entnehmen, welche Übungsaufgabe zur Erlernung eines bestimmten FORTRAN-Sprachelementes am besten geeignet ist. Das Zeichen • kennzeichnet die Aufgaben, in denen das betreffende Sprachelement ausfuhrlich besprochen wird. In Aufgaben, die durch o gekennzeichnet sind, wird das Sprachelement zwar verwendet, aber nicht weiter erläutert. Aufgaben, die das entsprechende FORTRAN-Sprachelement überhaupt nicht oder in für Lernzwecke unwesentlicher Form enthalten, haben in der entsprechenden Zeile kein Zeichen. Alle Programme sind auf einer Rechenanlage erfolgreich getestet worden. Sie sind im Hinblick auf elegantes Programmieren teilweise verbesserungsfähig; wir haben jedoch der eleganten immer die didaktisch bessere Lösung vorgezogen. Wir glauben, dem Leser so mehr gedient zu haben. Beim Erlernen von FORTRAN mit Hilfe dieses Buches empfehlen wir, in folgenden Schritten vorzugehen: 1. Schritt: Man lese die Aufgabe, durchdenke sie und entscheide, ob man sie lösen kann. 2. Schritt: Sieht man einen Lösungsweg, so skizziere man ihn stichpunktartig und leite daraus die Programmlogik ab, die ergänzt durch Ein- und Ausgabe das Flußdiagramm ergibt. Sieht man keinen Lösungsweg, so lese man sich den Text unter Lösung bis zum Flußdiagramm durch und versuche dann, das Flußdiagramm zu erstellen. 3. Schritt: Man vergleiche das eigene Flußdiagramm mit dem unter dem Punkt Lösung von uns angegebenen und durchdenke die sich ergebenden Abweichun-
10
0. Anleitung zur Benutzung dieses Buches
gen. (Bei einigen Aufgaben haben wir aus Platzgründen auf das Flußdiagramm verzichtet. Der Leser kann in diesem Fall auch auf das Flußdiagramm verzichten und sofort zum 4. Schritt übergehen.) 4. Schritt: Auf der Basis des von uns angegebenen Flußdiagramms kodiere man die gestellte Aufgabe in FORTRAN. (Fehlt das Flußdiagramm, so halte man sich an die unter Lösung gegebenen Hinweise.) 5. Schritt: Man lese sich den am Anfang der Aufgabe angegebenen Abschnitt in der Einführung 1 durch und überprüfe, ob man in seinem Programm die dort besprochenen FORTRAN-Sprachelemente verwendet hat, und ob die dort angegebenen Regeln für die Verwendung beachtet wurden. Ist das nicht der Fall, verbessere man sein Programm. 6. Schritt: Man kontrolliere den unter Rechenergebnisse des Programms abgebildeten Computerausdruck dahingehend, ob er den WRITE-Anweisungen des eigenen Programms entspricht. 7. Schritt: Man präge sich die am Ende der Aufgabe stehenden eingerahmten Merksätze ein. Wir haben versucht, zusammengehörige Aufgaben jeweils in Abschnitten zusammenzufassen und das verbindende Thema in der Abschnittsüberschrift zum Ausdruck zu bringen. Jede der Übungsaufgaben trägt zu diesem Thema einen Teilaspekt bei, indem Programme zu schreiben sind, die die entsprechenden FORTRAN-Techniken erfordern. Am Ende des Abschnitts wird das Thema in einer Aufgabe, die mit „Fehlererkennung" bezeichnet wird, noch einmal von einer anderen Seite beleuchtet. Hier sind fertige Programmstücke vorgegeben, in denen die im Abschnitt besprochenen FORTRAN-Techniken fehlerhaft verwendet wurden. Mit diesen Aufgaben zur Fehlersuche verfolgen wir zwei Ziele: Zum einen soll die im Abschnitt geübte Programmiertechnik noch einmal rekapituliert werden, und zum anderen soll sich der Leser im Fehlersuchen üben. Erfahrungsgemäß muß man nämlich in ein vermutlich fertiges Programm nach der Kodierung noch Arbeit investieren, um die Programmierfehler, die sich erst bei den Probeläufen auf dem Computer ergeben, auszumerzen. Der Notwendigkeit, sich im Erkennen solcher Fehler zu üben, trägt die Aufgabe „Fehlererkennung" Rechnung. Abschließend möchten wir dem Leser empfehlen, sich beim Durcharbeiten dieses Buches konsequent an die oben aufgeführten Schritte zu halten und nicht in den Fehler zu verfallen, nur die von uns vorgestellten Programme nachzuvollziehen.
1
Mit dem Wort Einführung wird in diesem Buch der Bezug zu dem FORTRAN-Lehrbuch von Spieß/Rheingans „Einführung in das Programmieren in F O R T R A N " , 6. Auflage, W. de Gruyter, Berün 1979, hergestellt.
1. Die Logik für den Computer — Das Flußdiagramm
Das Flußdiagramm stellt die logische Reihenfolge der einzelnen Programmschritte dar, so wie etwa ein Schaltplan die Logik einer elektrischen Apparatur oder ein Wegweiser den Weg durch ein verzweigtes Gebäude darstellen. Die Aufgaben 1.1 und 1.2 in diesem Kapitel sind Beispiele, an denen man üben kann, einen Vorgang in seine Elemente zu zerlegen. Diese Elemente müssen im Flußdiagramm so miteinander verknüpft werden, daß das auf ihm basierende Programm das gewünschte Ergebnis liefert. Zur erfolgreichen Benutzung des Computers gehören die Analyse des Problems, die Erstellung des Flußdiagramms und die Kodierung der Anweisungen in einer Programmiersprache. In diesem Abschnitt soll die Erstellung von Flußdiagrammen geübt werden.
Aufgabe 1.1: Flußdiagrammtechnik
A) Aufgabenstellung: Das folgende Flußdiagramm zeigt eine (nicht ganz ernst zu nehmende) Handlungslogik für jemanden, der die unangenehme Aufgabe hat, Chef zu sein. Er kann daraus ablesen, wie er sich zu verhalten hat, je nachdem, ob er Chef bleiben will oder nicht. Der Leser überprüfe eingehend, ob die Darstellung in sich logisch ist. Weiterhin sind alle Ausgänge aus dem Ablaufplan und die dazugehörigen Ergebnisse aufzuzählen.
1
Ein Flußdiagramm ist eine Mischung von Programmablaufplan und Datenflußplan.
1. Die Logik für den Computer - Das Flußdiagramm
© ©
1.1 Flußdiagrammtechnik
B) Lösung: Das dargestellte Flußdiagramm gibt Zusammenhänge an, die kaum mit arithmetischen Beziehungen wiedergegeben werden können. Die Überprüfung, ob das Bild in sich logisch ist, ist daher auch in mathematischer Hinsicht nicht möglich. Das Flufidiagramm enthält nur einen Ausgang. Er ist durch das Wort „ST0P" gekennzeichnet und führt zu dem Ergebnis „Werde Mitglied in einer demokratisch geführten Arbeitsgruppe".
13
14
1. Die Logik für den Computer - Das Flußdiagramm
Aufgabe 1.2: Flußdiagrammtechnik (Einführung, Abs. 1.1)
A) Aufgabenstellung: An viele Registrierkassen ist heute ein Automat angeschlossen, der das Wechselgeld, die Differenz zwischen Rechnungsbetrag und eingezahltem Betrag, in den richtigen Hartgeldmengen ausgibt. Man erstelle ein Flußdiagramm, das die Bestimmung der einzelnen Hartgeldmengen wiedergibt. B) Anleitung zur Lösung: Die DM hat folgende Hartgeldarten: 5 , - DM, 7 — DM, 1 , - DM, 50 Pfg., 10 Pfg., 5 Pfg., 2 Pfg. und 1 Pfg. Während eine Kassiererin nach Gefühl und Augenmaß die Geldstücke ausgeben würde, wird das Wechselgeld vom Automaten entsprechend der minimalen Gesamtzahl der Geldstücke ausgegeben. Das bedeutet, daß zunächst bestimmt werden muß, wieviele 5,— DM-Stücke, dann wieviele 2 , - DM-Stücke, dann wieviele 1 , - DM-Stücke usw. auszugeben sind. Bei der Aufstellung des Flußdiagramms benutze man folgende Bezeichnungen: DIFF
=
15DM
=
12DM
=
11DM
=
I50P
=
hop
=
I5P I2P
=
hp
=
C) Lösung:
=
der an den Kunden zurückzuzahlende Betrag Zahl der Fünf-DM-Stücke Zahl der Zwei-DM-Stücke Zahl der Ein-DM-Stücke Zahl der Fünfzig-Pfennig-Stücke Zahl der Zehn-Pfennig-Stücke Zahl der Fünf-Pfennig-Stücke Zahl der Zwei-Pfennig-Stücke Zahl der Ein-Pfennig-Stücke
1.2 Flußdiagrammtechnik
15
16
1. Die Logik für den Computer - Das Flufidiagramm
1.2 Flußdiagrammtechnik
17
D) Bemerkungen zur Lösung: Die einzige Größe, die eingelesen werden muß, ist der Auszahlbetrag (DIFF), alle anderen sind als Konstanten im Programm enthalten. Die Zeilen DIFF = DIFF-5,0 oder 12DM = I2DM+1 sind keine Gleichungen im mathematischen Sinn, sondern sind zu lesen als „Der neue Wert von DIFF ergibt sich aus dem alten Wert von DIFF vermindert um 5,0", etc.. Das Flußdiagramm zeigt die ständige Wiederholung einer Schleife, die aus drei Anweisungen besteht: 1. Abfrage, 2. Erhöhung der Zählgröße um 1 und 3. Verminderung von DIFF um den jeweiligen Geldbetrag. Ein weitaus einfacheres Flußdiagramm ergäbe sich, wenn die Schleife nur einmal programmiert würde. Dazu müßte eine Möglichkeit gefunden werden, die Geldbeträge und die Namen der Zählgrößen bei jeder wiederholten Benutzung der Schleife zu ändern. Die Unterprogrammtechnik — wie im Kap. 7 gezeigt — ermöglicht diese wünschenswerte Programmvereinfachung. • Ein Flußdiagramm stellt die Logik des Programmablaufs dar. • Ein Flußdiagramm muß alle Ein- und Ausgabedaten ausweisen. • Beziehungen der Art A=A+B sind in FORTRAN zulässig, sie bedeuten „Der neue Wert von A ergibt sich aus dem alten Wert von A, vermehrt um den Wert von B."
2. Die Darstellung der Grundrechenarten in FORTRAN — Einfache arithmetische Anweisungen
Ein Computer ist eine Rechenmaschine, die viele Aufgaben ohne Eingriff des Menschen hintereinander lösen kann, wenn sie entsprechend programmiert ist. In diesem Kapitel wird die Programmierung einfacher Berechnungen, die nur die vier Grundrechenarten enthalten, geübt. Dabei kommt es sowohl auf die Darstellung der Rechenvorschrift als auch auf die Zahlendarstellung an, die in der Programmiersprache FORTRAN bestimmten Regeln entsprechen müssen, damit sie der Computer versteht.
Aufgabe 2.1: REAL-Konstante (Einfuhrung, Abs. 2.2.1) A) Aufgabenstellung: Man bestimme drücke: a) 7.0/3.5 b) 170.*1E c) 900E-2/2.0*3.0-1.0 d) 9.0-3.0/3.0 e) 16.0/2.0/0.4E2 f) (1E3-1E2)*(15.0-50E-1) g) 3.0» »4.0/2.0 h) 3.0«*(4.0/2.0) i) (2.0-3.0)*»(3.7-2.0) j) 3.0*2.0**2.0*2.0**3.0
den Wert folgender arithmetischer Ausk) (3.0+4.0)/(3.0-4.0) »7.0-5.3 1) (((2.3E1 *3.0)/2.0)-4.5)»*2.0 m).3*1E1 n) ((7.0-3.0)**3.0)**(1./3.) o) (7.0-3.0)**3.0**(1 ./3.) p) (7.0-3.0) »*(3.0**(1./3.)) q) (4.0*2.0)/(6.0-4.)**2.0 r) 4.0*2.0/(6.0-4.**2.0) s) 45.3-47.7-15.0 t) 45.3-(47.7-15.0)
B) Lösung: a) 2.0 b) IE ist keine REAL-Konstante, daher nicht auswertbar c) 12.5 d) 8.0 e) 0.2 f) 9000.0
g) 40.5 h) 9.0 i) nicht auswertbar, da - 1.0 nicht mit gebrochenem Exponenten potenziert werden kann j) 96.0 k) -54.3
19
2.1 REAL-Konstante
1) 900.0 (die beiden inneren Klammerungen sind überflüssig) m)3.0 n) 4.0 o) 4.0 (identisch mit n)
p) q) r) s) t)
~ 7,38 2.0 -0.8 -17.4 + 12.6
• Als erste werden geklammerte Ausdrücke ausgewertet. • Punktrechnung (Multiplikation und Division) geht vor Strichrechnung (Addition und Subtraktion). • Potenzierung geht vor Punktrechnung. • Bei gleicher Priorität wird von links nach rechts ausgewertet.
Aufgabe 2.2: REAL-Variable (Einführung, Abs. 2.1.1 und 2.2.1)
A) Aufgabenstellung: Man schreibe die folgenden arithmetischen Ausdrücke in FORTRAN o b ) ( y + 7,3) 2
'
g ) ( ^ ) a- b
a0 + b0
D
~
M
1
2
a+5
d ) ( a ' - j ) * ( B - ^b )
i) A • 10 3 + B • 10 6
e)(a-p)a-(7 + — )
j) *
— + l
B) Lösung: a) b) c) d) e)
(X/BK+C)*B (Y+7.3)*«2.0 (A+B)/(A0+B0) (ASTRI-1./AMB-1./BSTRI) (SIGMA-R0)»»A-(GAMMA+1./(SIGMA*R0))
f) g) h) i) j)
(100.0-A)/B ((A+B)/(A-B))**2. ((X-Y)/(A+5.0))**(2./3.) A*1.E3+B»1.E6 (A/6.+B/7.)/(X/Y+1.)
20
2. Die Darstellung der Grundrechenarten in FORTRAN
C) Bemerkungen zur Lösung: In der algebraischen Schreibweise von Aufgabe a) kommen große und kleine Buchstaben vor. Da in FORTRAN zwischen Großund Kleinbuchstaben nicht unterschieden wird, wurde für b zur Unterscheidung von B in FORTRAN BK geschrieben. Mit ähnlichen Maßnahmen muß man sich helfen, wenn Sonderzeichen vorkommen. So wurde in Aufgabe d) für a' in FORTRAN ASTRI geschrieben, da Sonderzeichen in Variablennamen unzulässig sind. Aufgabe f) enthält Dimensionsangaben (DM) zum Hinweis, daß die einzusetzenden Beträge sich auf die Einheit Mark und nicht z. B. Dollar beziehen. Eine äquivalente Kennzeichnung ist in FORTRAN nicht möglich, es sei denn, man bezieht die Dimension mit in den Variablennamen (z. B. ADM oder AD0LAR). • FORTRAN-Namen haben maximal 6 Zeichen, beginnen mit einem Buchstaben und enthalten keine Sonderzeichen. • Besondere Kennzeichnungen lassen sich nur durch die Namenwahl erreichen.
Aufgabe 2.3: Arithmetische Wertzuweisung (Einführung, Abs. 2.2.1 und 2.2.2)
A) Aufgabenstellung: Die folgenden algebraischen Gleichungen und Handlungsanweisungen übertrage man in FORTRAN-Anweisungen. a) Der Zahlenwert eines Speicherplatzes A ergibt sich aus der Multiplikation der Konstanten 2,538 mit dem Wert eines weiteren Speicherplatzes B. In Kurzschreibweise wird dieser Sachverhalt durch «- 2,538 • (B> dargestellt. symbolisiert „Inhalt von A". b) x = 3,7y + 7,8z c) x + y = 7xy - ax d) Der neue Zahlenwert eines Speicherplatzes X ergibt sich aus seinem alten, vermehrt um den Zahlenwert des Speicherplatzes y. Kurzschreibweise: «- + (Y> e) Zinsen =
• Kapital • Zinssatz • Zeit
f) neue Geschwindigkeit = alte Geschwindigkeit + Beschleunigung • Zeitspanne g) x = a • t + b • t 2 + c • t 3 + d • t 4 + e • t 5 h) u + vx - — = 0 u
2.4 Fehlererkennung
21
B) Lösung: a) A=2.538*B b) X=3.7*Y+7.8*Z c) Die Gleichung muß entweder nach x oder nach y aufgelöst werden, da auf der linken Seite des Zeichens = der Name nur eines Speicherplatzes stehen darf. Diesem wird das Ergebnis des rechts stehenden arithmetischen Ausdrucks zugewiesen. Auflösung nach x: X=Y/(7.*Y-A-1.) Auflösung nach y: Y=(X+A*X)/(7.0*X-1.) d) X=X+Y e) Wählt man für die in der Aufgabe vorkommenden Begriffe folgende symbolische Speicherplatznamen ZINSEN = Zinsen; DMKAP = Kapital; ZISATZ = Zinssatz; ZEIT = Zeit, so lautet die zugehörige FORTRAN-Anweisung ZINSEN=DMKAP*ZISATZ»ZEIT/100. f) Symbolische Namen: V = Geschwindigkeit (alte und neue), B = Beschleunigung; DT = Zeitspanne V=V+B*DT g) X=A»T+B«T»*2.+C*T»*3.+D*T»*4.+E*T»»5. h) Löst man nach x auf, so hat man x = ——— w — v u
und in FORTRAN X=U/(W/U-V)
•
Eine arithmetische Wertzuweisung besteht aus dem symbolischen Namen eines Speicherplatzes, dem Sonderzeichen = und einem arithmetischen Ausdruck. • Eine arithmetische Wertzuweisung hat nicht die Bedeutung einer algebraischen Gleichung. • Der Wert des rechts vom Zeichen = stehenden arithmetischen Ausdrucks wird der links stehenden Variablen zugewiesen.
Aufgabe 2.4: Fehlererkennung
A) Aufgabenstellung: Zur Wiederholung der Themen von Aufgabe 2.1 bis 2.3 folgen nun einige fehlerhafte und einige verbesserungsfähige, jedoch nicht falsche FORTRAN-Ausdrücke mit den zugehörigen algebraischen Formu-
22
2. Die Darstellung der Grundrechenarten in FORTRAN
lierungen. Man finde die Fehler bzw. nehme die entsprechenden Verbesserungen vor. a) X=B/C/D»Y
für
x=— v c•d
b) X=2.*Y/(A+B)*»2.*C+Y
für
x=
c) A=((B+C)/D*E)*(B-C)
für
a=^ ^ e d
d) BETA=(30.+70.)»ALPHA/50.
für
ß = (30 + 70) • ^
e) P*Q=1E3.0»A*«2.0
für
p • q = 1000a 2
\ (a + b) • c + y
2
+ b
b-c
2 .
2
f) P=((A*»2.0)+(B*»2.0)-(C*»2.0))/(2.*B) für p = - — " * 2b g) H=2/A-B • (S(S-A+B) (S-C) (S-D)) * * (1 ./2.) 2 für h = — - \/s(s - a + b) (s - c) (s - d) a-b h) SPESEN=RICHTSA+P*UMSATZ-(AUSGABEN-RICHTSA)/100
für
Spesen = Richtsatz + Prozentsatz • (Umsatz - (Ausgaben - Richtsatz)) • i) Ri»R 2 =R'i*R2
für
r
i
r
2 = r'i
r
2
j) D=(((A*B)/(B*C)+R)**3.)/(P*Q-A)+(B*R-S) für B) Lösung:
d=
p -q-a
+b • r - s
a) richtig, günstiger wäre jedoch X=B/(C*D)«Y, da eine Division mehr Rechenzeit erfordert als eine Multiplikation b) falsch, da C und Y nicht im Nenner stehen, richtig ist X=2.» Y/{ (A+B) * *2. »C+Y) c) falsche Klammerung, richtig ist A=(B+C)/D*E«B-C Die Klammer um B-C war falsch, und die um B+C/D*E war überflüssig d) Der Ausdruck kann durch einfache Kopfrechnung sehr vereinfacht werden BETA=2.*ALPHA und erspart in der neuen Form Rechenzeit und Speicherplatz e) falsch, da links des Zeichens = kein zulässiger symbolischer Name eines Speicherplatzes steht, weiterhin ist 1E3.0 keine zulässige REAL-Konstante; richtig ist P=1E3»A»*2./Q
Fehlererkennung
23
f) richtig, aber besser ist: P=(A»*2.+B**2.-C»*2.)/(2.»B) g) falsch sind: — die 2 ist keine REAL-Konstante — A-B muß in Klammern gesetzt werden — zwischen einigen Klammern fehlen die Multiplikationszeichen richtig ist: H=2./(A-B)»(S * (S-A+B) * (S-C)«(S-D)) * * 0.5 oder: H=2./( A-B )*SQRT(S* (S-A+B) * (S-C) * (S-D)) h) falsch sind: - die Namen RICHTSA und AUSGABEN, da sie mehr als 6 Zeichen haben — die 100, da es keine REAL-Konstante ist — die Klammerung richtig ist: SPESEN=RISA+P*(UMSATZ-(AUSGAB-RISA))/100. i) falsch sind: — die Indizes bei den Namen — die Sonderzeichen bei R't und R'2 — die links von = stehenden Zeichen bilden keinen zulässigen Variablennamen richtig ist: R1=R1ST*R2ST/R2 bzw. R2=R1ST*R2ST/R 1 j ) Der arithmetische Ausdruck ist richtig in FORTRAN geschrieben, jedoch sind einige Klammern überflüssig, die im folgenden Ausdruck weggelassen sind: D=(A/C+R)**3.0/(P*Q-A)+B»R-S
3. Wie der Computer liest und schreibt — Die einfache Ein- und Ausgabe
Nachdem anhand der Aufgaben in Kapitel 2 die Darstellung einfacher Rechenaufgaben geübt wurde, werden in diesem Kapitel die Ein- und Ausgabeanweisungen geübt. Sie sind notwendig, um dem Computer Zahlenwerte für die Variablen einzugeben, die zur Berechnung der Ergebnisse erforderlich sind, und um die erzeugten Ergebnisse vom Computer zu erfahren. Da das Eintippen von Zahlenwerten über ein Tastenfeld wie etwa bei einer Tischrechenmaschine zu viel wertvolle Computerzeit kosten würde, werden Zahlenwerte und Texte dem Computer gewöhnlich auf vorbereiteten Lochkarten eingegeben. Bei den folgenden Übungsaufgaben wird daher auch immer die Eingabe von der Lochkarte vorgesehen. Um dem Benutzer Rechenergebnisse mitzuteilen, verfügt der Computer über eine sehr leistungsfähige Schreibeinrichtung — den Schnelldrucker - , der Zahlen und Worte drucken kann. Die Programmierung des Ausdruckvorgangs ist in FORTRAN recht einfach, da dem Computer nur gesagt zu werden braucht, welche Zahlen nach welchem Schema ausgedruckt werden sollen. Die dazu notwendigen FORTRAN-Anweisungen werden in den folgenden Aufgaben geübt.
Aufgabe 3.1: Ein- und Ausgabe von REAL-Variablen (Einführung, Abs. 2.5)
A) Aufgabenstellung: Man schreibe ein Programm, das den Wert von a nach der Beziehung a = (b + 5,0) 2 - — berechnet. Der Zahlenwert für b (z. B. 37,53) soll von der dargestellten Lochkarte in den Speicherplatz mit dem symbolischen Namen B eingelesen werden. Auf der Lochkarte sollen 8 Spalten für die Zahl vorgesehen werden, und es sollen bis zu zwei Dezimalstellen hinter dem Komma gelesen werden können.
3.1 Ein- und Ausgabe von REAL-Variablen
25
37.53
33 • EtjtlS
• cm
9l||
sisisjiiiMi'ililliii
RECHENINSTITUT OER TECHNISCHEN UNIVERSITÄT BERLIN
Das Ergebnis soll auf dem Zeilendrucker in einem 15 Zeichen breiten Feld mit 3 Dezimalstellen hinter dem Komma ausgegeben werden. Der Lochkartenleser habe die Gerätenummer 1, der Zeilendrucker die Gerätenummer 2. B) Lösung: Die Anweisung zum Einlesen des Zahlenwertes für die Variable B lautet: READ (1,10) B t
Vaiiablenname Anweisungsnummer der FORMAT-Anweisung Gerätenummer des Eingabegerätes
Zu dieser Eingabeanweisung gehört eine FORMAT-Anweisung, die Aussagen über das Schema enthält, wie der Zahlenwert auf der Lochkarte gelocht ist. Sie lautet 10 FORMAT (1F8.2) Anweisungsnummer
^
Anzahl der aufeinanderfolgenden Felder gleicher Art (Wiederholungsfaktor)
_
t _ Zahl der Dezimalstellen hinter dem Komma Gesamtzahl der reservierten Spalten auf der Lochkarte Kode-Buchstabe für REAL-Zahlen
Die READ- und die FORMAT-Anweisung zusammen mit der oben abgebildeten Datenkarte bewirken, daß nach ihrer Ausführung der Speicherplatz B den Zahlenwert 37,53 hat.
26
3. Wie der Computer liest und schreibt
Die Anweisung zum Ausdrucken des berechneten Zahlenwertes von A lautet W R I T E (2,20) A
M i
1
Variablenname Anweisungsnummer der FOR MAT-Anweisung Gerätenummer des Ausgabegerätes
Das Schema, wie dieser Zahlenwert ausgedruckt werden soll, wird in der FORMAT-Anweisung angegeben. Jede WRITE-Anweisung für den Schnelldrucker muß sich auf eine FORMAT-Anweisung beziehen. Mit den Forderungen der Aufgabenstellung lautet sie: 20 F O R M A T (1H ,1F15.3) J
Anweisungsnummer 1 Zeile Papiervorschub
1
Wiederholungsfaktor —
t l t l Zahl der Dezimalstellen hinter dem Komma • Gesamtzahl der reservierten Zeichen auf dem Papier (incl. Leerzeichen) - Kode-Buchstabe für REAL-Zahlen
Das komplette Programm für die Aufgabe lautet: PROGRAM DWP3(INPUT,OUTPUT,TAPE1=INPUT,TAPE2=UUTPUT) RE AD /2.0 WRITE(2,20)A ¿1) FORHATCIH , 1 F1 5 . 3 ) STOP
END
C) Bemerkungen zur Lösung: Die erste Anweisung gehört nicht zum StandardFORTRAN und ist in dieser Form nur fiir eine bestimmte Rechenmaschine (CD 6400) gültig. Jede Maschine benötigt jedoch solche Steueranweisungen (s. a. Einführung, Abs. 5.1), in denen u. a. die Zuordnung der peripheren Geräte — hier des Kartenlesers und des Schnelldruckers - zu den im Programm verwendeten Gerätenummern bewirkt und der Programmname (DWP3) festgelegt wird. Im folgenden wird auf diese typenabhängigen Anweisungen verzichtet. Das Eingabegerät (hier Lochkartenleser) erhält in allen folgenden Programmen die Gerätenummer 1, während das Ausgabegerät (hier Schnelldrucker) die Gerätenummer 2 erhält. 1
Beim Papiervorschubzeichen 1H ist der Zwischenraum (Leertaste) von Bedeutung und muß unbedingt vorgesehen werden, wenn man eine Zeile Vorschub erzielen will.
3.2 Ein- und Ausgabe von REAL-Variablen und Ausgabe von Leerstellen
27
D) Rechenergebnis des Programms: Nach Ablauf des Programms steht eine einzige Zahl auf dem Papier des Schnelldruckers: 1791.536
Das Ergebnis umfaßt entsprechend der FORMAT-Angabe 7 Leerstellen, 4 Ziffern vor und 3 Ziffern hinter dem Komma. Etwaiger erläuternder Text wie z. B. A= oder die Einheit des Ergebnisses fehlen. Die Ausgabe von Texten wird erst in Aufgabe 3.3 geübt.
• Die Anweisung für die Eingabe heißt READ • Eine Eingabe-Anweisung enthält die Namen der Speicherplätze, in die die gelesenen Zahlenwerte gespeichert werden sollen: READ( , )B • Eine Eingabe-Anweisung enthält die Gerätenummer des Gerätes, von dem gelesen wird: READ(1, ) • Eine Eingabe-Anweisung enthält die Nummer der zugehörigen FORMATAnweisung: READ( ,10) • Die FORM AT-Anweisung hat immer eine Anweisungsnummer: 10 F0RMAT( ) • Die FORM AT-Anweisung enthält das Schema, nach dem der zu lesende Zahlenwert auf der Lochkarte steht: 10 F0RMAT(1F8.2)
Aufgabe 3.2: Ein- und Ausgabe von REAL-Variablen und Ausgabe von Leerstellen (Einführung, Abs. 2.5)
A) Aufgabenstellung: Man schreibe für das Übungsbeispiel e) aus Aufgabe 2.3 Zinsen = y ^ • Kapital • Zinssatz • Zeit ein komplettes Programm, in dem von einer Lochkarte die Zahlenwerte für Kapital, Zinssatz und Zeit eingelesen werden. Für die Formulierung der FORM AT-Anweisung bei der Eingabe lege man die folgende Lochkarte zugrunde.
28
3. Wie der Computer liest und schreibt 10371344.33
4.3
2.31
I Slälilj gjlliällll ,nl»li siili H Hill, 3 9 ? I ill 5.9 9 jiata!» 9 tä 9 RECHENINSTITUT OER TECHNISCHEN UNIVERSITÄT BERLIN
Nach dem Einlesen der Zahlenwerte sollen sie zur Kontrolle ausgedruckt werden. Die drei Werte werden in eine Zeile gedruckt, und zwischen ihnen ist ein Mindestabstand von 10 Zeichen einzuhalten. Anschließend soll der Zahlenwert von ZINSEN berechnet und in der auf die Eingabewerte folgenden Zeile ausgedruckt werden. B) Lösung: Die Eingabe programmiert man analog zu den Anweisungen, wie sie in der vorangehenden Aufgabe gezeigt sind. Bei der Ausgabe muß der Mindestabstand von 10 Zeichen zwischen den Zahlen vorgesehen werden, was durch .mehrfache Verwendung des X-Konversionskodes erreicht wird. 6
WRITE (2,6)DM KAP,ZISATZ,ZE IT F0RMAT(1H ,1F15.2,10X,1F5.1,10X,1F6.2)
T
Papiervorschub um 1 Zeile
•
\
jeweils 10 Zeichen Abstand zwischen den Feldern
Das komplette Programm lautet: READ(1»5)DHKAP,ZISATZ»ZE1T F0RMAT(1F12.2.1F5.1,1F6.2) WRITE(2»6)DMKAP»ZISATZ#ZEIT 6 FORMAT(1H , 1 Fl 5 . 2 , 1 0 X , 1 F 5 . 1 , 1 0 X , 1 F 6 . 2 ) ZINSEN»DMKAP»ZISATZ*ZEIT/100. WRITE(2>7)ZINSEN 7 FORMAT(1H , 1 F 1 5 . 2 ) STOP END 5
C) Rechenergebnis des Programms: 10371344.35 11 PI 443 . 34
4.5
2.51
Die Leerstellen sind im Ausdruck nur durch den Zahlenabstand erkennbar.
3.3 Erläuterungstexte
29
• Mit dem X-Konversionskode werden Leerstellen auf dem Ausgabepapier erzeugt. • Der H-Konversionskode wird für den Papiervorschub auf dem Schnelldrucker verwendet. • Der F-Konversionskode wird zum Ausdrucken von REAL-Daten verwendet.
Aufgabe 3.3: Erläuterungstexte (Einführung, Abs. 2.5.2.2 und 4.2.3.1)
A) Aufgabenstellung: Sowohl bei der Eingabe von Lochkarten als auch bei der Ausgabe auf dem Schnelldrucker sind zum besseren Verständnis und zur leichteren Überprüfbarkeit Erläuterungstexte dienlich. Man schreibe daher ein Programm, in dem die gleiche Rechenoperation wie in der vorhergehenden Aufgabe ausgeführt wird, das die Daten jedoch von der folgenden Lochkarte liest, auf der hinter den Zahlenwerten die zugehörigen Einheiten vermerkt sind. Von der Lochkarte sollen nur 10371344.33011 4.35: 2.51JHHR
die Zahlenwerte, nicht aber die Einheiten gelesen werden. Beim anschließenden Kontrollausdruck der Eingabedaten sollen die Einheiten jedoch wieder auf dem Ausdruck erscheinen. Ebenso soll die Einheit DM hinter dem Zahlenwert von ZINSEN erscheinen. B) Lösung: In dem Programm aus Aufgabe 3.2 müssen in den FORMAT-Anweisungen für die Ein- und Ausgabe Veränderungen vorgenommen werden:
30
3. Wie der Computer liest und schreibt
FORMAT für die Eingabeanweisung: 5
FORMAT(1F12.2,2X,1F5.1,1X,1F6.2,4X)
I
I
\
Spezifikationen für Leerstellen zum Überlesen von Lochungen
FORMAT für die Ausgabeanweisungen: 6 FORMAT(1H ,1F15.2,3H DM,7X,1F5.1,2H %,8X,1F6.2,5H JAHR) * Textkonstanten rextkonstanten zum Drucken von Texten —'t 1
7 FORMAT(1H ,1F15.2,3H DM) Werden dièse drei FORMAT-Anweisungen statt der Anweisungen 5 , 6 und 7 in das Programm von Aufgabe 3.2 eingefügt, so erhält man das gewünschte Resultat. C) Rechenergebnisse des Programms: 1 0 3 7 1 3 4 4 . 3 5 DM 1 1 7 1 4 4 3 . 3 4 DM
• • • •
4.5 *
2.51
JAHR
Mit dem X-Konversionskode können bei der Eingabe Lochungen auf der Lochkarte überlesen werden. Die Spezifikation wX bewirkt w Leerstellen. Mit dem H-Konversionskode können Erläuterungstexte ausgedruckt werden. Sollen w Zeichen gedruckt werden, so heißt die entsprechende Feldspezifikation wH, gefolgt von den zu druckenden Zeichen.
Aufgabe 3.4: Fehlererkennung A) Aufgabenstellung: In den nachstehenden fehlerhaften Programmabschnitten sind die Fehler zu finden und zu korrigieren. . V
WRITE F , 8 F0BMAT(2F10.0)
11
Auf der zugehörigen Lochkarte könnte dann in den ersten 10 Spalten an beliebiger Stelle eine 5.0 und in den Spalten 11 bis 20 auch an beliebiger Stelle eine 6.0 gelocht sein. c) Die Feldspezifikation in der FORM AT-Anweisung bezieht sich auf 8 • 15 = 120 Spalten. Da eine Lochkarte nur 80 Spalten hat und sich Feldspezifikationen jeweils nur auf einen Datensatz (das sind bei der Lochkarte höchstens die 80 Spalten) beziehen dürfen, ist die FORM AT-Anweisung falsch und könnte richtig wie folgt lauten: 10
FOPMAT(8F10.0)
Daß sich die WRITE-Anweisung ebenfalls auf die FORM AT-Anweisung 10 bezieht, ist zwar nicht falsch, aber ungünstig, da das Steuerzeichen für den Zeilenvorschub fehlt. Besser wäre 11
WRITE(2,11)A,B,C,D,E,F.G,H FORMAT(1H ,8F15.3)
zu programmieren. Da auf dem Zeüendrucker gewöhnlich 120 Druckspalten zugelassen sind, ist in diesem Fall die Feldspezifikation 8F15.3 richtig. d) Die Anweisung DRUCKE existiert in FORTRAN nicht, sie muß WR1TE(2,11)A,X
lauten. Die FORM AT-Anweisung ist richtig, sie sollte aber besser ein Steuerzeichen für den Zeile.nvorschub enthalten. Man könnte meinen, daß die Feldspezifikation in der FORM AT-Anweisung falsch ist, da für zwei Variable (A und X) nur ein Datenfeld durch 1F12.1 beschrieben wird. Die FORMAT-
32
3. Wie der Computer liest und schreibt
Anweisung ist dennoch richtig, da sie so lange wiederholt verwendet wird, bis für alle Variablen ein Datenfeld spezifiziert wird. Dabei wird bei jedem Erreichen der schließenden Klammer in der F 0 R M AT-Spezifikation ein Datensatz abgeschlossen, so daß in diesem Beispiel der Zahlenwert von A und der von X in zwei Zeilen untereinander stehen.
4. Wie man Programme kurz und übersichtlich gestaltet — Die Programmschleife
Alle Aufgaben, die man von einer Datenverarbeitungsanlage erledigen läßt, enthalten Teilaufgaben, die sich innerhalb der Aufgabe wiederholen. So muß beispielsweise beim Sortieren von Daten der Vergleich zweier Zahlen ständig wiederholt werden. Es wäre nun sehr unvorteilhaft, würde man die Anweisungen zum Vergleich der Daten 100 oder 1000 mal hintereinanderfügen, um das Sortierprogramm zu erstellen. Viel besser ist es, die Anweisungen zum Vergleich der Daten nur einmal vorzusehen und diese 100 oder 1000 mal zu durchlaufen, so daß im Programm eine Schleife entsteht, die beliebig oft durchlaufen und auf Wunsch verlassen werden kann. Solche Programmschleifen bestehen aus einem Satz von Anweisungen, an deren Ende eine Abfrage steht, mit der geprüft wird, ob die Schleife erneut abgearbeitet werden oder verlassen werden soll. In den Aufgaben dieses Abschnitts soll die Programmierung von Abfragen, Sprüngen und Programmschleifen geübt werden.
Aufgabe 4.1: Anweisungen für Entscheidungen und Sprünge (Einführung, Abs. 3.1.1 und 3.1.2) A) Aufgabenstellung: Zur Berechnung der Beziehung 2 (0.25p2-q) werden die Zahlenwerte für p und q von Lochkarten eingelesen. Man schreibe ein Programm, das ein Zahlenpaar p und q von einer Lochkarte einliest, die eingelesenen Zahlenwerte zur Kontrolle auf dem Zeilendrucker ausdruckt und den zugehörigen x-Wert berechnet und ausdruckt. Nach der ersten Lochkarte und dem ersten Zahlenpaar p und q sollen beliebig viele weitere Lochkarten mit jeweils einem neuen Zahlenpaar in gleicher Weise verarbeitet werden können. Die letzte Lochkarte enthält die Zahlenwerte p = 0 und q = 0 und soll die Programmdurchführung auf der Datenverarbeitungsanlage beenden.
34
4. Wie man Programme kurz und übersichtlich gestaltet - Die Programmschleife
B) Lösung: Wenn ein q-Wert gleich dem Wert von 0,25p 2 ist, wird der Computer in irgendeiner Weise streiken, da eine beliebige Zahl dividiert durch 0 immer eine unendlich große Zahl ergibt, die er nicht darstellen kann. Ehe es also zur Rechnung kommen kann, muß dieser Fall entdeckt werden. Im Ergebnisausdruck kann durch besondere Kennzeichnung (z. B. ****) daraufhingewiesen werden, daß bei dieser Parameterkombination ein unendlich großer Zahlenwert berechnet werden müßte. Flußdiagramm:
Im Flußdiagramm sind zwei Entscheidungsrauten enthalten. Sie können in FORTRAN durch das logische IF oder durch das arithmetische IF ausgedrückt
35
4.1 Anweisungen für Entscheidungen und Sprünge
werden. Für die untere Entscheidungsraute programmiert man bei Verwendung des logischen IF: • ausführbare Anweisung
IF(Q.EQ.O.25*P**2.)G0T0 12 i
arithmet. Ausdruck arithmet. Ausdruck Vergleichsoperator logischer Ausdruck mit dem Wert „wahr" oder „falsch"
Dies besagt: Wenn der in Klammern stehende logische Ausdruck wahr ist, soll die auf die Klammer folgende Anweisung (hier also: GOT© 12) ausgeführt werden. Andernfalls wird das Programm mit der in der nächsten Zeile stehenden Anweisung fortgesetzt. Verwendet man dagegen das arithmetische IF, so lautet die Entscheidungsraute wie folgt: IF(Q-0.25«P* «2.16,12,6 arithmet. Ausdruck
Anweisungsnummern als Sprungziele
Die Anweisung besagt: Je nachdem, ob der geklammerte arithmetische Ausdruck kleiner, gleich oder größer als null ist, wird das Programm bei Anweisung 6,12 oder 6 fortgesetzt. Beide Anweisungen erzielen im Programm die gleiche Wirkung. Im folgenden Quellenprogramm wurde für beide Entscheidungsrauten das logische IF verwendet. Man hätte jedoch auch das arithmetische IF verwenden können; die erste Entscheidungsraute müßte dann lauten: 4 STOP Quellenprogramm: 1 READ(1,Z)P,Q 2 F ORMAT(2 F 1 0 . 2 ) WRITE(2,3)P,Q J FORMAT(1H # 2 F1 5 . 2 ) IF(P.EQ.0..AND.Q.EQ.0.)ST0P 5 I F ( Q . E Q . 0 . 2 3 * P « * 2 . ) G 0 T 0 1? 6 X»-P**2./(2.*(0.25*P**2.-Q)) WRITMZ,7>X 7 FORMAT(1H + ,32X,1 F 2 0 . 4 ) GO TO 1 12 URITE1 >3.3 3 I5DMaI5DM + 1 DIFF=DIFF-5. 60 TO 4 1 lF(DIFF-2.)5,6,6 6 I20M«I20M+1 01FF=DIFF-2. G 0 TO 1 5 IFCD1FF-1, ) 7 , 8 , 8 8 11DM=I1DM+1 DIFF»DIFF-1. G0 TO 5 7 IF(DIFF-0.5)9,10,10 10 I50P»I50P+1 DIFFrDIFF-O.S GO TO 7 9 IF(DIFF-0.1)11.12.12 12 I10P=I10P*1 HIFr=DIFF-ü.1 G0 TO 9 11 I F ( D I F F-0 . 0 5 ) 1 3 , 1 4 , 1 4 14 I 5P= I5P*1 DIFF=DIFF-0.05 G0 TO 11 13 l F C D l F F - 0 . 0 2 ) 1 5 , 1 6 , 1 6 16 I 2P= I2P + 1 DIFFSDIFF-0.02 G0 TO 13 15 1 F(Dl F F.LE.0.)GCTC 2 I1P=I1P*1 2 wRlTE(i,21)IbDM,I2DM,I1DM,l50P,l10P,I5P,l2P,I1P 21 F0RMAT(X/WA+WA)/2. (3.00000"/1.000000+1.000000)/2.«2.000000 Y»(WN-WA)/WA (2.oooooo-i.oooooo)/1 .000000 >1.000000 Y.LT.O.i Y>0 1.000000:0. Y.LE.G? Y>6 1.000000:0.000001 ? UA«WN
2.000000
>2.000000
WN«/2. : 3 . 0 0 0 0 0 0 / 2 . ¿ 0 0 0 0 0 * 2 . 0 0 0 0 0 0 ) / 2 . « 1 . 7 5 0 0 0 0 Y«(WN-WA)/WA , (14)
Einfacher wird die READ-Anweisung jedoch, wenn die DO-implizite Liste verwendet wird: READ(1,10)(T(I),I = 1,4) indizierte Variable -
J Index
L
Endwert des Indexes Anfangswert des Indexes
Die Wirkung dieser READ-Anweisung ist die gleiche wie die der weiter oben angegebenen, in der jedes Feldelement einzeln aufgeführt wurde. Gegenüber dem Programm in Aufgabe 5.1 ist bei Verwendung der indizierten Variablen T noch eine weitere Veränderung vorzunehmen. Es muß das Feld T
60
5. Wenn große Datenmengen anfallen - Die Verarbeitung von Feldern
dimensioniert werden, damit vom Übersetzerprogramm entsprechend viele Speicherplätze eingerichtet werden. Die dazu notwendige Anweisung lautet: DIMENSION T(4) Quellenprogramm: REAL MAX DIMENSION T(4) READ(1,10) IF(I.ECI.4)GPT0 11
1 = 1*1
GO TO 9 11 WRITEC2,20)T,MAX 20 FURMATOH «SX.4F6.1/1H STOP END
.5X,1F6.1>
C) Rechenergebnis des Programms: 18.3 21 . 7
19.2
15.9
21.7
• Die Größe von Feldern wird durch die DIMENSION-Anweisung festgelegt. • Felder oder Teile davon werden am einfachsten mittels einer DO-impliziten Liste eingelesen oder ausgeschrieben. • Eine indizierte Variable kann in Ein- und Ausgabeanweisungen ohne Nennung eines Indexes aufgeführt werden, wenn das ganze Feld gemeint ist. • In einem arithmetischen Ausdruck und in einer Wertzuweisung darf der Name eines Feldes nicht ohne Nennung eines Indexes verwendet werden.
Aufgabe 5.3: Einfache DO-Schleife (Einführung, Abs. 3.1.3)
A) Aufgabenstellung: Das Quellenprogramm aus Aufgabe S.l kann in der Schreibweise weiter vereinfacht werden, wenn die Schleife mit Hilfe der DO-Anweisung programmiert wird. Man füge eine DO-Anweisung in das Quellenprogramm ein und entferne alle dadurch überflüssig gewordenen Anweisungen. Weiterhin ändere man die Aufgabe so, daß vor jeder ausgedruckten Zahl der Name des zugehörigen Speicherplatzes steht.
5.3 Einfache DO-Schleife
61
B) Lösung: Die D0-Anweisung für das Programm lautet: DO 9 1=2,4 Nummer der letzten zur _ i t t t Schleife gehörenden Anweisung
Endwert des Indexes Anfangswert des Indexes (Schleifenparameter)
Schleifenindex
Ähnlich wie bei der D0-impliziten Liste der Ein- und Ausgabeanweisungen wird durch die D0-Anweisung eine automatische Indexerhöhung von einem Anfangswert bis zu einem Endwert und ein entsprechend häufiger Schleifendurchlauf veranlaßt. Da der Name jedes Speicherplatzes im Programm feststeht, kann die Ausgabe mit entsprechenden Textkonstanten für die Namen versehen werden. Quellenprogramm :
REAL MAX DIMENSION T < 4) READ , S S < 5 ) READ(1,1) I Z . 2 X > M Z . O 1,2X,2(F14.12,2X),12) C ABFRAGE OB DIE GEWUENSCHTE C UEBEREINSTIMMUNG ERZIELT C WURDE I F ( J 1 . L T . M ) G O T O 13 STOP END FUNCTION
WUPZ(X.G)
A05=0,5 WA»1 , 2 WN=(X/WA+WA)*AU5 IF(ABS((WN-WA)/WA).LE.G) 1 GOTO 1 WA»WN GO TO 2 1 WÜRZ =WN RETURN END
C ) Rechenergebnis des Programms: Der auf S. 104 abgebildete Ausdruck ist das Ergebnis eines Rechenlaufs des Programms mit DOUBLE PRECISION-Variablen.
•
Bei DOUBLE PRECISION-Rechnungen müssen alle Größen (Variablen und Konstanten), die an der Berechnung des Endergebnisses beteiligt sind, vom T y p DOUBLE PRECISION sein.
•
Die Ein- und Ausgabe von DOUBLE PRECISION-Variablen erfordert die D-Spezifikation.
•
FUNCTION-Segmente müssen als DOUBLE PRECISION erklärt werden, wenn ihr Wert erhöhte Genauigkeit haben soll.
Aufgabe 7.4: SUBROUTINE-Unterprogramme (Einführung, Abs. 3.2.3)
SUBROUTINE-Unterprogramme und FUNCTION-Unterprogramme unterscheiden sich in ihrer praktischen Anwendung kaum. Die meisten in der Praxis vorkommenden Unterprogramme können sowohl als S U B R O U T I N E als auch als
7. Die Hierarchie der Programmteile - Die Unterprogrammtechnik
©
_
G
o
US o o o O o o o © © © o o c © o o o © © o o o -4-
•iJ 00
oo >4 o o Kl © o rs.
UJ UJ t* o . •o »M O
o
©
flO o oo o >4 CO O N» CO
©
UJ fM «© CO © CO r\j c
© ©
O O tu m o >i•o o o •o in oo o o N. N. ao «4 ^o O IM r-d o> m m
UJ f^ KV f\i c^ CO o
©
©
©
•JJ UJ U< f - TK1 o © Kl K. vn - 4 •O K ) IM o i n •4 f O r\j fM Kl t o © «4 0 •c •c K l in m o •O >o IM rsj r v o o i n in in
M o IM >4 K ) rs- r ^ «M » O O« o m m o CO o o oC * o EM m f\l K l PO m m m o >o o rj fM o« O m »n m ^ «4 «4 « 4 > i « 4 «4
«
>
o ©
-NJ > I SO O 30 o « - Kl t (C o ra r- t o
>
»
>
ö
©
O
0
©
UJ Ui UJ h- n h« c - N. 0 o N. o m •4 ro CO «— in. © -4 oo et) m Kl in o (M o» «n
>
fM (M © CO OO O» CO OO
0 fs» O^ « m ro m c 'M «n
o00 m Kl vn
c 0
!M Kl «4 4n m Kl •O
0
s t ao (M 90 00 0 r^ h - •4 0 Kl «-
0
0 in «4 m Kl >4 00 -0
0
fM 1— O© K. a0 O »O in
©
O
©
©
O
UJ fO N» n 0 fM Ovn
1X1 M 1— ro »Y ao K» fM Kl »» N-
UJ
CALL W E C H S L ( D I F F , I 5 P , 0 . P 5 ) CALL U E C H S L f D I F F , I 2 P . 0 . 0 2 ) CALL W E C H S L ( D I F F , I 1 P , 0 . < , 1 > 2 WRITE Z(1C1 ,51 >=W(15> L*0 EINGABE DER KOEFFIZIENTEN FI'ER DAS POLYNOM IJND DER ST F UE RGROES S F K 9 READ(1,10)K,A 10 FORMAT(I1/6F10.4) L= L•1 ERZEUGUNG VON FUNCTIONSWERTTN DO 5 1*1,101 X*GOTO 7 K=0 : ENDE DER RECHNUNG STOP END SUBROUTINE DRUCK C0MM0N/BL01/Z(101,101) WRITE(2,20) URITE(2,21)((Z(I,J),I*1,101),J*1,101> 20 FORMAT(1 Hl ) 21 FURMATdH ,101A1) RETURN END
FUNCTION RUNDEN(X) INTEGER XH XH*X I f t X . L T ' . O.K.ÜTO 1 HUNDEN»XH+1 DX*X-XH GO TO 2 1 RUNDENaXH-1 DX»XH-X 2 IF ¿6
IN
LAST
STATEMENT,
GOTO 4 END gleich einer INTEGER-Größe (I) mit einer REAL-Größe (0.) in der dritten Anweisung des Unterprogramms. Dieser Vergleich verstößt gegen die Regeln von Standard-FORTRAN, ist jedoch bei vielen Übersetzerprogrammen kein Fehler. Ein schwerer Fehler ist der zweimalige rekursive Aufruf des Unterprogramms QUADRA, der auch unter der Nummer 26 von dem hier verwendeten Übersetzerprogramm erkannt wurde. Ein rekursiver Aufruf liegt vor, wenn ein Programmsegment sich selbst aufruft, wie es hier in QUADRA zweimal geschieht. Das folgende Programm ist eine korrigierte Form des in der Aufgabenstellung genannten Programms. CALL
END
QUADRA(X.Y)
SUBROUTINE COMHON I
4 2P 5
R-UADRA(XFY)
I F (I . LT. OCrTO 3 Z=X*»2+Y»*2 R = X-Y E*SQkT(P*Z> wRITE(2,20)y,Y,E FORMATdH < 3 F1 2 . 3) RETURN Z=X**?-Y**2 R=X+Y GOTO 4 END
8. Der Computer irrt sich nie — Kleine Hinweise zu häufig auftretenden Fehlern
Programmiersprachen sind sehr formal und prägen sich daher nur schwer ein, was die Begeisterung für das Programmieren bei Anfängern nicht gerade erhöht. Jeder Punkt, jeder Strich und jeder Buchstabe hat seine Bedeutung, und wenn er fehlt, rechnet der Computer entweder überhaupt nicht, oder er rechnet falsch. Die Folge ist, daß der Programmierer alle Fehler eliminieren muß, ehe das Programm einwandfreie Ergebnisse liefert. Meist meint man, der Computer habe sich geirrt, da ja das eigene Programm auf keinen Fall falsch sein kann! In 99,99 % der Fälle ist es jedoch der Programmierer, der den Fehler macht, und noch dazu sind es immer wieder die gleichen Fehler, die ihm unterlaufen. Wir haben in diesem Abschnitt daher einige häufig auftretende Fehler zusammengestellt, um dem Anfänger die Suche nach den eigenen Fehlern zu erleichtern und die bei jedem Programmierer vorhandene Betriebsblindheit etwas zu kompensieren. Zunächst sind einige formale Fehler aufgeführt. Dies sind Fehler, die gegen die Regeln von FORTRAN verstoßen. Die anschließend zusammengestellten Ausführungsfehler sind solche, die nicht vom FORTRAN-Übersetzerprogramm diagnostiziert werden können und deren Lokalisierung meist weitaus schwieriger ist als die der formalen Fehler. Ausführungsfehler verursachen falsche Rechenergebnisse. Die folgende Zusammenstellung ist nur eine Auswahl und erhebt keinen Anspruch auf Vollständigkeit.
8.1 Formale Fehler
Ein Programm, in dem formale Fehler enthalten sind, wird in der Regel nicht in ein Objektprogramm umgewandelt und kann daher nicht in der Maschine gerechnet werden. Die folgende Liste umfaßt die wichtigsten und häufig auftretenden formalen Fehler.
8.1 Formale Fehler
121
1. Falsch oder ungenügend gesetzte Klammern Beispiel: (A+B)*(C-(D+X*Z) t An der durch den Pfeil gekennzeichneten Stelle fehlt eine Klammer. 2. Nichtdefinierte Sprungziele Beispiel: Im Programm steht G 0 T 0 8 5 (oder DO 85 1 = 1,10), jedoch enthält das Segment keine Anweisung mit der Nummer 85. 3. Felder, die nicht oder unzureichend dimensioniert sind Beispiel: In einem Programmsegment steht die Anweisung DIMENSION A(10),B(20,3), und darauffolgend steht die Anweisung A(I,J)=B(I,J)*K. Der zweite Index bei A(I,J) ist falsch. 4. Mehrfach vorkommende Anweisungsnummer Beispiel: In einem Programmsegment haben zwei Anweisungen die Nummer 17. 5. FUNCTION-Unterprogramme ohne Parameter Beispiel: s. Aufgabe 7.8.a 6. Formale Parameter treten in C0MM0N-Anweisungen auf Beispiel: Die Anweisungen SUBROUTINE UPRT1(A.B.C) COMMON A ( 1 0 ) , 8 ( 1 0 )
dürfen nicht im gleichen Programmsegment stehen, da die formalen Parameter A und B in der COMMON-Anweisung stehen. 7. Falsche Feldspezifikationen Beispiel: READ (1 ,1())A 10 FORMAT(IM)
Wenn A nicht als vom Typ INTEGER deklariert ist, verstößt die Verwendung der I-Spezifikation in diesem Fall gegen die Regeln von FORTRAN. 8. Fehlerhaft geschachtelte DO-Schleifen Beispiel: DO 10
1=1,P0
¿1! J = 1 , 1 0 10 S * S + R ( I , J ) ¿o w r i t e ( ; , 1 1 ) ( r ( i , j ) , j = i , 1 d ) , b DO
Die Schachtelung ist falsch, da die Schleife für J über das Ende der I-Schleife hinausgeht. 9. Unzulässige Namen für Variablen oder Felder Beispiel: 1A, VOLUMEN, REAL, A* Alle drei Namen verstoßen gegen die Regeln von FORTRAN.
122
8. Der Computer irrt sich nie - Kleine Hinweise zu häufig auftretenden Fehlern
10. Mehrfache Typvereinbarung oder Dimensionierung Beispiel: REAL I ( 1 , K. ( m
11 !2 3
l i
-a z e si _ X «í © i .3 S o - ° s 'S i i 5 II s i i!ärn s - -3 2 > ! I I g. •S O , O O O O •§ I
tt*h i
«=1 •«a e'SE S g 5 M •S 1 u.
Feld Feld; F-Kc
126
127
00 r^ r-
o o o 0 0
0 o
o
o
SO r-' v> r^ Tf; r^ c> r^ (N r-'
0 o o 0 o o o o o o o
^so m vô es so so 00 vi r«o
0
o
0 o o o o o o
0 o
0
0 o o o
o
o
o o o 0 o 0 0 o o
0 0 o o o o o
o o o o o o o 0 o o
• o
o • o
o o
0 o
o o 0
0 o
0
0
o
o o
o o
o o
o o
o
o
o o • o
o o o o o
0 o
o
o
0
o o o o o o
0 o o o o
o o
o o
o
• o • o o
o o
0 0
o
o
o
o
o
0 o
• 0 o
o
o
o o o o o 0
o o
o
0 o
o
o
o
o
0
o 0 o
o
o •
o o o o
o
o o o 0 0 0
0 • o 0 o o o o o o o
• o o 0
o o 0
o o
o
o
o o 0 o 0 o 0 o o o o o 0 0 0 o 0 0 o o 0
o o
o 0 o o o o o o o o •
0
o
o
•
o
o
o
o o o o o 0 0 0
0 o
o o 0
o 0 o o o 0 0 0
o
o
o
o o
o
o
•
o
o
o
o
o
o o o
o
0
o
o
o
o o o o • o 0 0
o
o
0
o
o o
o
o
0
o 0
o 0 o 0 o
o o
o
o
o o
o o o o o
o o o o 0
vi •o vi
o
o o o o o o o 0
•
o o
vi rrj vi rs vi
o
o
o
o
0
o
o
o
o o o
o
o
o
o o
0
o
• o o o o o 0
vi Os Tf 00 Tf rTT NO
o
o 0 o
o
0
o
o •
o
0
• o o o 0 o 0
o
o o o
o 0 o o
0
o • o
o
o o 0 0 o o
0
o
o
o
o 0 o
0
0 0 0 o 0 o
o
o o o o o o
o
o
•
0
o • o
o
o o o 0 0 o
o
o
0
o
• o
o
0 o o o o
"O
o
0 o
o o
o
o o o o o o
o
o o
0 o
0
0 o
o o o • o
o
o o
o o • • o
fO Tf c B.C. . . laut.2. . . SU.M.HF. . . VC
1R.H.IA . .
L
. . . ff . . . S T .
.
.
25
3 . '
.é.4.4.4.4MS.' /.'
ft/f.ci.ri.R.Hl/< Ks1.4rfi.flHl.t fLAo.'. .$,.U.MM.£.
30
Betriebssystem
131
ASSIGN (Einführung, Kap. 3.1.1.3) Mit Hilfe der ASSIGN-Anweisung kann Variablen eine Anweisungsnummer zugeordnet werden. ASSIGN 25 TO ISPR t
INTEGER-Variable Anweisungsnummer
Sinnvoll ist diese Anweisung im Zusammenhang mit der G 0 T0-Anweisung (-^G0T0).
Ausgabeanweisung
(Aufgabe 3.1)
-*• WR ITE-Anweisung
BACKSPACE (Einführung, Kap. 4.3.2.2) Die BACKSPACE-Anweisung bewirkt das Zurücksetzen der Datei mit der angegebenen Nummer um einen Datensatz BACKSPACE 5
t
Dateiparameter vom T y p I N T E G E R (Nr. der Datei, die zurückgesetzt wird)
Betriebssystem (Einführung, Kap. 5.4) auch: operating system, executive system Der Begriff des Betriebssystems ist eine Sammelbezeichnung für alle diejenigen Programme, die benötigt werden, um die Arbeitsfähigkeit einer Datenverarbeitungsanlage herzustellen, zu sichern und die technischen Möglichkeiten auszuschöpfen. Das Betriebssystem ist grundsätzlich ausgerichtet auf eine bestimmte Anlage mit der jeweiligen Peripherie. Je größer die Anlage ist, desto komfortabler kann das betreffende Betriebssystem sein. So lassen sich zum Beispiel unterscheiden BOS (basic operating system), TOS (tape operating system), DOS (disc operating system) und OS (operating system).
132
Bit
Bit (Einführung, Kap. 1.2.2.) Informationselement, entspricht der Speicherkapazität der kleinsten physischen Speichereinheit im Computer. Beispiel: 0^1 ja •** nein wahr ++ falsch
Bitkette (Einführung, Kap. 1.2.2.) Eine Menge von Bits, die gemeinsam zur Darstellung eines Zeichens herangezogen werden. Üblich sind Bytes mit 8 Bits. Beispiel: 1 Byte = 2 Bits
1 Byte = 3 Bits
00 = 0 Ol = 1 4 Zeichen 10 = 2 darstellbar in 1 1 = 3 einem Byte
000 001 010 011 100 101 110 111
=0 =1 = 2 8 verschiedene = 3 Zeichen darstellbar = 4 in einem Byte =5 =6 =7
BLOCKDATA-Segment (Einführung, Kap. 3.3.3) Variablennamen, die in einer COMM0N-Anweisung stehen, dürfen nur innerhalb eines BLOCKDATA-Segments Zahlenwerte mittels einer DATA-Anweisung zugewiesen werden. In normalen Segmenten wie SUBROUTINE, FUNCTION etc. dürfen Variablennamen die in einer C0MM0N-Anweisung stehen nicht auch in einer DATA-Anweisung vorkommen. Beispiel:
BLOCKDATA INTEGER A,B DIMENSION A(2), B(4) C0MM0N/BL01 /A,B DATA A(1), A(2), B(1), B(2), B(3), B(4)/6*1/ END
133
C0NTINUE
CALL-Anweisung (Aufgabe 7.4) SUBROUTINE-Unterprogramm
C O M M O N (Aufgabe 7.6) Mittels der nicht ausführbaren COMMON-Anweisung ist es möglich, einen Speicherplatzbereich zu reservieren, auf den von allen Segmenten eines Programms zugegriffen werden kann. Die Zahl der erforderlichen Speicherplätze eines Programms wird dadurch gegenüber einer Weitergabe mittels Parameterliste reduziert. Beispiel: Programmsegment 1
Programmsegment 2
COMMON A , B , C
COMMON ALPH, BETA, GAM
A und ALPH B und BETA
haben Zugriff zum gleichen Speicherplatz
C und GAMMA
„
„
„
„
„
Compiler (Einführung, Kap. 1.3) Ein Compiler ist ein Programm, das ein in einer Programmiersprache geschriebenes Programm in ein Maschinenprogramm umwandelt. Der Compiler hat zwei Funktionen: 1. Die reine Übersetzung in die Maschinensprache 2. Das Einfügen von Standardprogrammteilen (vor allem organisatorische Befehle). COMPLEX-Vereinbarung (Einführung, Kap. 2.1.6) Typdeklaration Anweisung
COIMTINUE (Aufgabe 5.5) Die CONTINUE-Anweisung ist eine Anweisung, die an sich nichts bewirkt und lediglich als Sprungziel verwendet wird. Sie zählt zu den ausführbaren Anweisungen.
134
DATA
Beispiel: 135 CONTINUE ^
Anweisungsnummer
DATA (Aufgabe 6.2) Mit Hilfe der DATA-Anweisung können Variablen oder Feldern Anfangswerte zugewiesen werden, sofern diese Variablen nicht in einem COMMON-Block stehen. Beispiele: DATA A, B / 3.0, 5.0 / Bewirkt, daß A = 3,0 und B = 5,0 Beispiel: DATA TJ, TN / 2HJA, 4 H NEIN /
tt T 1
Text
H-Konversionskode Wiederholungsfaktor
Bewirkt, daß in TJ und TN die Worte ja bzw. nein stehen.
Datei (Einführung, Kap. 4.3.2) Eine Datei ist die Zusammenfassung logisch zusammengehöriger Datensätze gleichen Typs. Meist bezeichnet man solche zusammengehörigen Datensätze auf den peripheren Speichern (Platte, Band, Trommel) mit Dateien.
Daten (Aufgabe 3.1) Allgemeine Bezeichnung für Buchstaben, Ziffern, Symbole, Kombinationen von diesen bzw. Bezeichnung von Gegenständen, Begriffen, Situationen, Bedingungen und anderen Faktoren. (Singular: Datum).
Datenfeld (Aufgabe 3.1) Ein Datenfeld ist der Platz auf einem Datenträger der ein Datum aufnehmen kann.
DIMENSION
135
Beispiel: Die Zahl 1537 soll in ein Datenfeld geschrieben werden, das 7 Stellen lang ist 1537_ Datenfeld
Datensatz (Aufgabe 3.1) Ein Datensatz ist eine sachliche und/oder logische Einheit von Daten. Beispiel: Alle Daten, die auf einer Lochkarte gespeichert sind, sind ein Datensatz, denn die Karte ist eine Einheit. Alle Daten, die auf einer Zeile der Konsole ausgegeben werden, sind ein Datensatz, denn die Zeile ist eine Einheit.
Dezimalsystem (Einführung, Kap. 1.2.2) Das Dezimalsystem ist ein Zahlensystem, das über einen Zeichenvorrat von 10 Ziffernzeichen (0 9) verfügt und dessen Stellenwert von rechts nach links in Potenzen von 10 steigt: Die Dezimalzahl 728 hat den Stellenwert: 7 X 10 2 + 2 X 10 1 + 8 X 10° = 728
D I M E N S I O N (Aufgabe 5.2) Die DIMENSION-Anweisung dient der Reservierung von Speicherplätzen für Felder. Die in der DIMENSION-Anweisung vorgesehene Feldgröße darf während des Rechenvorganges nicht überschritten werden. D I M E N S I O N X(4,7), A(7) t
4 X 7 = Feldgröße Feldname
Die DIMENSION-Anweisung muß statisch vor der ausführbaren Anweisung stehen, in der ein von ihr erfaßtes Feld oder ein von ihr erfaßtes Feldelement zum ersten Mal auftritt.
DO-Anweisung
136
DO-Anweisung (Aufgabe 5.3) Um ständig sich wiederholende Rechenschritte zu programmieren, wird u. a. die D0-Anweisung herangezogen D 0 .Anweisungsnr.' .Index' - .Parameter 1' .Parameter 2' .Parameter 3'
D 0 325 l=1,IENDE,2
Die Bedeutung dieser Anweisung: Die Schleife, die mit dieser DO-Anweisung beginnt und mit der Anweisung Nr. 325 endet, soll für alle Indizes I von 1 bis IENDE mit der Schrittweite 2 durchlaufen werden.
DO-implizite Liste (Aufgabe 5.2) Vor allem für READ u. WRITE-Anweisungen ist die DO-implizite Liste o f t von großem Vorteil, z. B. um mehrere Werte eines Feldes in einer Zeile ausgeben bzw. einlesen zu können.
WRITE (9,1000) (l,(X(l,J),J=1,10), 1=1,11) äußere DO-implizite Schleife innere DO-implizite Schleife auszugebendes Feld X(I,J)
Mit dem F 0 R M A T 1000 F 0 R M A T O H ,2X,113,10(1X,1 F5.2)) wird eine Tabelle erstellt, in der jeweils 10 Werte des Feldes X und die Zeilennummer I davor ausgegeben werden. DO-implizite Listen werden genau wie geschachtelte D0-Schleifen behandelt. Die am häufigsten in Klammern stehende DO-implizite Liste entspricht der innersten D0-Schleife.
Dualsystem
137
DOUBLE PRECISION (Aufgabe 7.3) Bei DOUBLE PRECISION-Rechnungen müssen alle Größen (Variablen und Konstanten), die an der Berechnung des Endergebnisses beteiligt sind, vom Typ DOUBLE PRECISI0N sein. • Die Ein- und Ausgabe von DOUBLE PRECISION-Variablen erfordert die D-Spezifikation. • FUNCTION-Segmente müssen als DOUBLE PRECISION erklärt werden, wenn ihr Wert erhöhte Genauigkeit haben soll. •
Beispiel: DOUBLE P R E C I S I O N FUNCTION WURZ(X,G) D O U B L E P R E C I S I O N G,WA,WN,X,A05 A05 = 0.5D1 WA = 1.D1 2 W N =(X/WA+WA)*A05 IF(DABS( (WN-WA)/WA).LE.G) GOTO 1 WA = WN GO TO 2 1 W Ü R Z = WN RETURN END
Dualsystem (Einführung, Kap. 1.2.2.)
Das Dualsystem ist ein Zahlensystem, das über einen Zeichenvorrat von 2 Ziffernzeichen (0 und 1) verfügt und dessen Stellenwert von rechts nach links in Potenzen von 2 steigt: Die Dualzahl 10010 hat den dezimalen Wert
1 *2 4 + 0*2 3 + 0*2 2 + 1 «21 + 0*2° = 18
138
Eingabeanweisung
Dezimalzahl
Dualzahl
0 1 2
0 1 10
3 4 5
11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 10010
6 7 8 9 10 11 12 13 14 15 16 17 18
Eingabeanweisung (Aufgabe 3 . 1 ) •*- READ-Anweisung
E-Konversionskode (Aufgabe 6 . 1 ) Konversionskode zur Ausgabe von Zahlen in Exponentialschreibweise, d. h. 0 . 4 9 3 7 E - 0 4 für 4 9 3 7 , 0 WRITE(9,1001)A ^
Variable Anweisungsnr. der F 0 R M A T Anweisung Gerätenr. des Ausgabegerätes
ENTRY
139
1001 F0RMAT(1H ,2X,1E10.4) A
t
signifikante Stellen insgesamt reservierte Stellen E-Konversionskode Zahl der Wiederholungen Leerzeichen Vorschubzeichen
Wirkung: 0.4937E—04
t t
4 signifikante Stellen
•v
10 reservierte Stellen
END (Aufgabe 7.1) Die END-Anweisung ist eine nicht ausführbare Anweisung und muß zur Kennzeichnung des Endes eines Programmsegments (Hauptprogramm, FUNCTION oder SUBROUTINE) vorgesehen werden.
ENTRY (Einführung, Kap. 3.2.5) Es kann vorkommen, daß für bestimmte Berechnungen nur Teile einer SUBROUTINE benötigt werden. In diesem Fall ist es möglich, durch die Anweisung ENTRY in ein SUBROUTINE-Unterprogramm, an der durch diese Anweisung definierten Stelle einzuspringen. Die Wirkung ist wie bei der SUBR0UTINEAnweisung (nicht bei allen Computer-Herstellern möglich) ENTRY SUB 1(P1, P2, P3)
t
formale Parameter Unterprogrammname
Der Aufruf geschieht mit CALL SUB 1 (A,B,C) aktuelle Parameter Unterprogrammname
140
.EQ.
und die Berechnung beginnt am ENTRY-Punkt SUB1
S U B R O U T I N E SUB(P1,P) P=C0S(P1 )+3.0 E N T R Y SUB1(P1,P,PZ) PZ=SIN(P1 )+P RETURN END
.EQ. (Aufgabe 4.1) .EQ. = Equal (gleich) Vergleichsoperator für den Vergleich von Werten
EQUIVALENCE (Einführung, Kap. 3.3.2) Um in einem Programm den Speicherplatz möglichst gering zu halten, ist es möglich, einen Speicherplatz mittels der EQUIVALENCE-Anweisung mehrfach mit verschiedenen Variablennamen zu belegen. EQUIVALENCE (A,B), (C,D,E), (F(1,1),R) Diese Anweisung bewirkt, daß die Variablennamen A und B den gleichen Speicherplatz bezeichnen. Das gleiche gilt für C, D und E sowie für F(1,1) und R. (Achtung: Die EQUIVALENCE-Anweisung birgt besondere Tücken. Vor ihrer Anwendung möge man sich das Kapitel 3.3.2 in der Einführung genau einprägen)
EXTERNAL (Einführung, Kap. 3.2.4) Es kann vorkommen, daß bei bestimmten Berechnungen Fallunterscheidungen auftreten, die jeweils andere Unterprogramm- oder Funktionsaufrufe aber an der gleichen Stelle erfordern. In diesem Fall kann die Anweisung EXTERNAL eingesetzt werden. Sie definiert die Unterprogramme (z. B. FUNCTION), die alternativ aufgerufen werden können.
141
Feldspezifikation
Beispiel: EXTERNAL
COS, SIN, TRIG
CALL
SUBS(A, COS, B)
CALL
SUBS(A, T R I G , C)
CALL
SUBS(A, COS, D)
END
und das Unterprogramm SUBROUTINE SUBSfA, FU, B) B = FU(A)*»3 + FU(A)»*2 + FU(A) RETURN END
Der zweite Parameter in der SUBROUTINE ist der Funktionsparameter, der je nach Aufruf im Hauptprogramm COS, SIN oder eine andere trigometrische Funktion TRIG sein kann. Feld (Aufgabe 5.2) Liegen eine große Anzahl von Daten vor, die den gleichen oder ähnlichen Operationen unterworfen werden sollen, so werden diesen Daten zweckmäßigerweise nicht jeweils neue Variablennamen zugewiesen, sondern ein umfassender Name (Feldname) und die einzelnen Daten werden jeweils durch Indizes unterschieden. statt X1 wird X(1) X2 X(2) X3 X(3) X4 X(4)
verwendet
Feldspezifikation (Aufgabe 3.1) Die Feldspezifikation beschreibt Art und Weise, wie ein Datum eingelesen oder ausgegeben werden soll. Sie enthält 5 Angaben: 1. Konversionskode, d. h. die Art der Interpretation einer Speicherzelle 2. Die Länge des Datenfeldes 3. Einen Wiederholungsfaktor 4. Einen Maßstabsfaktor 5. Zahl der signifikanten Stellen
Festkomma-Darstellung
142
Beispiel: 3P5F10.3
ttttt
5. 2.
1. 3. 4.
Festkomma-Darstellung (Einführung, Kap. 1.2.2) Bei der Festkomma-Darstellung wird eine Zahl so behandelt als stünde das Komma immer an der gleichen Stelle (Festkomma).
F-Konversionskode (Aufgabe 3.1) Zum Ausdrucken von REAL-Zahienwerten mit Dezimalpunkt ohne Exponent wird der F-Konversionskode verwendet. Beispiel: WRITE (2,20) A |
|—
Feldspezifikationen
20 FORMAT ( I h T j ? ? ^ ) Anweisungsnummer
-
t
—I
ttttt L
1 Zeile Papiervorschub Wiederholungsfaktor
Zahl der Dezimalstellen hinter dem Komma
— Gesamtzahl der reservierten Zeichen auf dem Papier (incl. Leerzeichen)
-
Konversionskode für REAL-Zahlen
formaler Parameter (Aufgabe 7.1) Variablen und Feldnamen in Parameterlisten von FUNCTION- und SUBROUTINEUnterprogrammen zur Wiedergabe von Daten zwischen verschiedenen Segmenten. SUBROUTINE,
-»-FUNCTION
143
FORTRAN-Namen
FQRMAT-Anweisung (Aufgabe 3.1) -»-READ ,-^WRITE Die FORMAT-Anweisung dient der Spezifizierung, wie Daten eingelesen oder ausgegeben werden sollen. Beispiel: 1001 F 0 R M A T ( 1 H ,315/1H ,5F6.9) t
neues Vorschubzeichen Ende des Datensatzes Konveisionskode Vorschubzeichen
Formelfunktion (Anweisungsfunktion) (Einführung, Kap. 3.2.2.2) Häufig wiederkehrende Anweisungen können in Form von Anweisungsfunktionen zu Beginn eines Programmteils definiert werden. Diese Anweisungsfunktion gilt nur für das jeweilige Segment und besteht aus einer Anweisung. Formal verhält sich die Anweisungsfunktion wie ein Unterprogramm. Beispiel: FL(A,B,C)=2.*A»B+2.»A*C+2.»B»C F1=FL|BR1,TI1,H©1) F2=FL(BR2,TI2,H02)
FORTRAN-Namen (Aufgabe 2.2) FORT RAN-Namen haben maximal 6 Zeichen, beginnen mit einem Buchstaben und enthalten keine Sonderzeichen. Beispiel: AKON DMARK TAB1
Nicht erlaubt sind z. B. 1 KON DSA
FUNCTION-Unterprogxamm
144
FUNCTION-Unterprogramm (Aufgaben 7.1, 7.2, 7.3) FUNCTION-Unterprogramme sind Programmsegmente. Sie werden zur übersichtlichen Gliederung eines Programms verwendet. Durch mehrfache Verwendung desgleichen FUNCTION-Unterprogramms kann ein Programm wesentlich verkürzt werden. Standardfunktionen, Formelfunktion Hauptprogramm
Beispiel: Im Hauptprogramm wird das FUNCTI0N-Unterprogramm aufgerufen. READ(1,10)X,G 10 F0RMAT(1 F10.0/1 F10.0) WÜRZE L=WURZ(X,G) WRITE(2,20)X,WURZEL 20 F0fRMAT(1W //1W ,10X,50HDAS RESULTAT DER BERECHNUNG LAUTET : 2.WURZ 1E L AUS ,1 F9.6.3H = ,1 F9.6..2H ") ST0P END
F U N CT 10 N -Unterprogramm FUNCTI0N WURZ(X,G) WA=1. 2 WN=(X/WA+WA) »0.5 IF(ABS((WN-WA)/WA).LE.G)G© TO 1 WA=WN GO TO 2 1 WURZ=WN RETURN END
Der Aufruf im Hauptprogramm lautet: WURZEL=WURZ(X J G) t
aktuelle Parameter Name des FUNCTION-Unterprogramms
Gleitkommadarstellung
145
Das F UNCT 10N-Unterprogramm muß diesem Aufruf entsprechend programmiert werden, was in erster Linie dessen erste Anweisung betrifft. Sie lautet für den vorliegenden Fall FUNCTION WURZ(X,G) formale Parameter Name des FUNCTION-Unterprogramms
oder REAL FUNCTION WURZ(X,G) Die erste Form ist jedoch ausreichend, da der Name WÜRZ bereits wegen der impliziten Typvereinbarung vom Typ REAL ist.
.GE. (Aufgabe 4.9) GE = Greater or equal (größer oder gleich) Vergleichsoperator für den Vergleich von Werten
Gleitkommadarstellung (Einführung, Kap. 1.2.2.) Um auch sehr große Zahlen, für die aber relativ wenige signifikante Stellen vorliegen, ebenfalls mit wenig Speicherplatz verarbeiten zu können, wird die Gleitkomma-Darstellung gewählt. Z = p . Bq dabei bedeuten Z p B Bq q
= die darzustellende Zahl = normalisierte endlich gebrochene Zahl (Mantisse) = Basis des Zahlensystems = Maßstabsfaktor = Charakteristik
Die Zahl 3578.793 wird dargestellt z. B. als 0.3578793 • 10 4 . Zahlendarstellung
G 0 TO-Anweisung
146
G© TO-Anweisung (Aufgabe 4.1) 1. Das unbedingte GO TO GO TO ,Anweisungsnummer' (-»- Anweisungsnummer) Mit dieser Anweisung wird die Fortsetzung des Programms mit der Anweisung, der die Anweisungs-Nummer 135 zugeordnet ist, veranlaßt. Der Rechenvorgang „springt" zur Anweisungsnummer 135. Deshalb werden die GO TO-Anweisungen auch Sprunganweisungen genannt. Beispiel: GO TO 135 2. Das bedingte G 0 TO (Aufgabe 4.7) (auch: computed GO TO oder berechnetes GO TO) Hierbei springt der Rechenvorgang zu einer Anweisungsnummer, die sich mit dem Wert einer Variablen ändern kann. Diese Anweisung findet z. B. Anwendung bei Fallunterscheidungen. Beispiel: GO T0(135,111,119,130),ISEITE *
V
'
INTEGER-Variable 4 Anweisungsnummern
ISEITE=1 Sprung ISEITE=2 • — S p r u n g ISEITE=3 — x Sprung ISEITE=4' Sprung
nach nach nach nach
135 111 119 130
3. Assigned GO TO (Einführung, Kap. 3.1.1.3) Das Programm wird mit der Anweisungsnummer fortgesetzt, die mit dem Wert der Variablen übereinstimmt. Beispiel: GO TO ISPR, (13, 14,15, 16) ^
4 Anweisungsnummern INTEGER-Variable
Die Wertzuweisung zur Variablen ISPR muß mittels einer ASSIGN-Anweisung geschehen.
IF-An Weisung
147
.GT. (Aufgabe 4.8) GT = Greater than (größer als) Vergleichsoperator für den Vergleich von Werten
Hauptprogramm (Einführung, Kap. 3.2) Jedes Programm hat genau ein Hauptprogramm, von dem aus beliebig viele Unterprogramme aufgerufen werden können.
H-Konversionskode (Aufgabe 3.3) Zur Ausgabe von Text-Konstanten wird der H-Konversionskode verwendet; z. B. zur Ausgabe von erklärendem Text. Beispiel: 6 F0RMAT(1H .1F15.2,3jjJ3M,7X,1F5.1,2H %,8X,1 F6.2.5H JAHR)
t
*
+
*- T e x t k o n s t a n t e n z u m Drucken von T e x t e n
IF-Anweisung (Aufgaben 4.1,4.2) 1) Das logische IF Die Anweisung lautet: IF (,logischer Ausdruck'),Anweisung' Die .Anweisung wird ausgeführt, wenn der .logische Ausdruck' .TRUE. ist. Beispiel: arithmetische Ausdrücke
t IF(A.LT.B.AND.C.GT.D)B=C+D Vergleichsausdruck
J
Anweisung Vergleichsausdruck logischer O p e r a t o r
148
I-Konversionskode
2) Das arithmetische IF Die Anweisung lautet: IF (,arith. Ausdruck') ,Anweisungsnr.l' Anweisungsnr.2' ,Anweisungsnr.3' < 0. weiter bei Anweisungsnr. 1 = 0. weiter bei Anweisungsnr. 2 > 0. weiter bei Anweisungsnr. 3 Beispiel: IF(A-B*3.)25,3,7 arithmetischer Ausdruck
-Anweisungsnummer 3 • Anweisungsnummer 2 • Anweisungsnummer 1
Achtung! Der arithmetische Ausdruck darf nicht vom Typ C0MPLEX sein. Die logische IF-Anweisung prüft, ob eine Aussage wahr oder falsch ist, und veranlaßt oder verhindert die Ausführung der mit ihr gekoppelten Anweisung. Die arithmetische IF-Anweisung vergleicht den Zahlenwert eines arithmetischen Ausdrucks mit null und veranlaßt einen Sprung zu einer der in ihr enthaltenen Anweisungsnummern.
I-Konversionskode (Aufgabe 4.3) Der I-Konversionskode wird zum Ausdrucken ganzer sogenannter INTEGERZahlen verwendet. Beispiel: 7 F0RMAT(1H ,513) ^
auszudruckende 3 Stellen Kode Wiederholungsfaktor
IMPLICIT (Einführung, Kap. 2.1.6) Um lange Typdeklarationen (INTEGER, REAL, COMPLEX, LOGICAL) zu vermeiden, kann mit der IMPLICIT-Anweisung ein ganzer Bereich von Variablennamen deklariert werden
149
Konstante
Beispiel:
IMPLICIT REAL (L), INTEGER (T, U-W)
Die Wirkung dieser Anweisung ist: Alle Variablen, deren Namen mit dem Buchstaben L beginnen, sind vom Typ REAL, und alle Variablen, die mit T oder U bis W beginnen, sind vom Typ INTEGER. Damit wird ein Teil der impliziten Typvereinbarung (I bis N INTEGER und Rest REAL) aufgehoben. INTEGER-Vereinbarung (Aufgabe 4.3) INTEGER-Daten sind numerische Daten, die ganzen Zahlen entsprechen. Die interne Darstellung erfolgt in Festkommaform. In der Programmiersprache FORTRAN sind alle Variablen, die mit den Zeichen l , J , K, L, M, N („INTEGER = I - N " ) beginnen, a priori INTEGER-Größen. Sollen noch weitere Variablen zu INTEGER-Variablen werden, so geschieht dies durch die Typenvereinbarung INTEGER z . B . INTEGER RAMSCH, BOHR, ABER Mit dieser Typenvereinbarung werden die Variablen RAMSCH, BOHR und ABER zu INTEGER-Variablen, d. h. die Größe dieser Variablen kann nur eine ganze Zahl sein.
Kommentar (Einführung, Kap. 2.1.4) In jedes FORTRAN-Programm können an beliebiger Stelle Kommentare eingefügt werden, die zwar keinerlei Einfluß auf den Programmablauf haben, jedoch als Erläuterung zur Verständlichkeit des Programms beitragen. Beispiel: C B E R E C H N U N G AUS EINER SEITE UND OER 7 U G E H 0 E R I G E N HOEHE 3 F«X1*X2»0.5 W R I T E