Sie sind auf Seite 1von 327

Datenverarbeitung

für Bauingenieure
Von Dipl.-Math. J. Becker, Dipl.-Ing. W. Burghardt, Dr. W. Haacke,
Dipl.-Ing. W. Haselbach, Dipl.-Ing. F.-J. Kevekordes, Dr. O. Meltzow,
Dipl.-Math. R. Nabert, Dr. G. Patzelt, Dr. U. Schatz, Dipl.-Ing. M.
Thomsing, Dipl.-Ing. E. Weiper
Herausgegeben von Dr. W. Haacke

1973. Mit 238 Bildern und Tafeln und zahlreichen Beispielen

Springer Fachmedien Wiesbaden GmbH


Verfasser:
Dipl.-Ing. Werner Ha sei b ach
Dipl.-Ing. Martin T horn s i n g
Hochschullehrer an der
Fachhochschule Darmstadt
Dipl.-Ing. Will 8 u r g h a r d t
Dr. Ulrich Sc hat z
Hochschullehrer an der
Fachhochschule Frankfurt am Main
Dipl.-Math. Jürgen 8 eck e r
Dr. rer. nato Wolfhart H a a c k e
Dipl.-Ing. Franz-Josef K e ve kor des
Dr. rer. nato Dtto M e I t z 0 W
Dipl.-Math.Rudolf Na b e r t
Dr. math. Gerhard P atz e I t
Hochschullehrer an der
Gesamthochschule Paderborn
Dipl.-Ing. Erich We i per
Hochschullehrer an der
Gesamthochschule Siegen

ISBN 978-3-519-05229-6 ISBN 978-3-663-10244-1 (eBook)


DOI 10.1007/978-3-663-10244-1

Das Werk ist urheberrechtlich geschützt. Die da-


durch begründeten Rech te, besonders die der Über-
setzung, des Nachdrucks, der Bildentnahme, der
Funksendung, der Wiedergabe auf photomechani-
schem oder ähnlichem Wege, der Speicherung und
Auswertung in Datenverarbeitungsanlagen, bleiben,
auch bei Verwertung von Teilen des Werkes, dem
Verlag vorbehalten.
Bei gewerblichen Zwecken dienender Vervielflilti-
gung ist an den Verlag gemäß § 54 UrhG eine
Vergütung zu zahlen, deren Höhe mit dem Verlag
zu vereinbaren ist.

© Springer Fachmedien Wiesbaden, 1973


Ursprilnglich erschienin bei B. G. Teubner, Stuttgart in 1973

Satz: H. Aschenbroich, Stuttgart

Umschlaggestaltung: W. Koch, Stuttgart


Vorwort

Die Datenverarbeitung hat sich in wenigen Jahren vom Spezialfach zu einem Grundlagenfach für
alle Fachrichtungen des Ingenieurwesens entwickelt; daher muß jeder Ingenieur während seines
Studiums in dieses Gebiet eingeführt werden.
Dieses Lehrbuch ist eine Einführung in die Datenverarbeitung als Grundlagenfach für Ingenieur-
studenten und Ingenieure der Praxis. Weiterführend entwickelt das Buch die für Bauingenieure
wichtigen Grundsätze der anwendungsorientierten Ingenieur-Informatik, es kann deshalb als
Grundriß für den entsprechenden Studiengang Ingenieur-Informatik dienen.
Um den Erfordernissen der Fachrichtungen innerhalb des Bauingenieurwesens, in denen die
Datenverarbeitung benötigt wird, zu genügen, wirkten mehrere Verfasser an der Darstellung mit.
Das Buch entstand in enger Zusammenarbeit zwischen einer Arbeitsgruppe, die seit 1965 in
Paderborn eine Ingenieur-Informatik-Ausbildung aufgebaut hat, und mehreren Autoren aus den
Fachbereichen Bauingenieur- und Vermessungswesen verschiedener Fachhochschulen, die sich
besonders mit dem Einsatz der Datenverarbeitung befassen.
Nach einer knapp gehaltenen Einführung, in der vorwiegend Begriffe bereitgestellt werden, folgt
eine Beschreibung der Hardware in dem Maße, wie es für die Ingenieure, die vor allem an einer
Darstellung der Software interessiert sind, notwendig ist. Schwerpunkt des Lehrbuchs ist das
Programmieren im weitesten Sinn.
Nach grundlegenden Ausführungen über Programmiersprachen und Programmieren wird ein
Einblick in die Maschinen- und Assemblierersprachen gegeben. Das 3. Kapitel trägt die problem-
orientierten Sprachen FORTRAN, ALGOL und PL!I so weit vor, wie es im allgemeinen
während eines Programmierkurses geschieht. Die drei Sprachen werden vom Aufbau her ähnlich
vorgestellt, zum Teil sind die gleichen Beispiele behandelt, so daß derjenige Leser, der sich bis-
lang nur mit einer dieser Sprachen befaßt hat, einen überblick über Aufbau und Struktur der
bei den anderen Sprachen gewinnt und dadurch in die Lage versetzt wird, diese Sprachen, sobald
sie ihm begegnen, hinreichend zu verstehen.
Die Programmierfertigkeiten werden in drei Abschnitten des 4. Kapitels zunächst an einfachen
Beispielen geübt. Nach kurzer Einführung im folgenden Kapitel geht das Buch im 6. Kapitel zu
einer ausführlichen Behandlung größerer Probleme über, die für das Bauingenieurwesen typisch
sind. Dabei wurden die Fachbereiche ausgewählt, deren Aufgaben in besonderem Maß den Ein-
satz der Datenverarbeitung erfordern: Statik, Spannbeton, Straßenbau, Vermessungswesen und
Netzplantechnik. Für jeden Fachbereich werden die technischen Grundlagen vermittelt, so-
dann die Programme dargestellt und erläutert sowie die Programmbeispiele mit ihren Aus-
drucken angeführt. Dadurch vermag der Lernende an größeren Programmen seine Kenntnisse zu
prüfen.
Eine Angleichung der einzelnen Abschnitte erfolgte so weit, wie es im Interesse des Lesers
erforderlich schien. Ausgangspunkt dieser Koordination waren die Normen DIN 44 300,
66001 und 40 700 Blatt 14. Gewisse unterschiedliche Darstellungsgewohnheiten in Einzel-
fillen (z. B. 1 und L nebeneinander) wurden beibehalten.
IV Vorwort

Der gewählte Schreib satz bedingt, daß die einzelnen Zeichen räumlich von ihrer Darstellung auf
einer Lochkarte oder durch einen Schnelldrucker abweichen. Daher konnten die in den Pro-
grammen angegebenen Positionen in den Wiedergaben der Ausdrucke nur angenähert eingehalten
werden.
Die Autoren bitten alle Leser, insbesondere ihre Fachkollegen, um Hinweise und Anregungen
ftir die Weiterentwicklung des Werks. Dem Verlag sei Dank gesagt flir Geduld und Eingehen auf
z. T. recht unterschiedliche Wünsche.

Frühjahr 1973 Die Verfasser


Inhalt

1. Einführung (Dr. Haacke)


1.1. Zielsetzung der Datenverarbeitung ................................ .
1.2. Grundbegriffe der lnfonnationsverarbeitung ......................... 1
1.3. Zahlensysteme und -darstellungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4. Programmiersprachen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5. Historischer Rückblick ....................................... 7
1.6. Ausblick ................................................. 8

2. Technik einer elektronischen Datenvenubeitungsanlage (Dipl.-Ing. Kevekordes)


2.1. Verknüpfungsglieder ......................................... 9
2.1.1. Theorie der Verknüpfungsglieder ............................. 9
2.1.2. Technische Verwirklichung der Verknüpfungsglieder ............... 10
2.2. Speicherglieder .............................................. 12
2.2.1. Speichermedien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 12
2.2.2. Speicherglied aus Ringkernen ............................... 14
2.2.3. Flipflop-Speicherglied ................................... 15
2.3. Zentraleinheit ............................................. 18
2.3.1. Zentralspeicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 19
2.3.2. Prozessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 20
2.3.3. Ein-/Ausgabe-Werk und Bedienungselement ..................... 24
2.4. Periphere Geräte ........................................... 25
2.4.1. Periphere Ein-/Ausgabegeräte für maschinenlesbare Datenträger . . . . . . . .. 25
2.4.2. Periphere Ein-IAusgabegeräte für visuell und maschinenlesbare Datenttäger 1) 25
2.4.3. Periphere Speicher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 28

3. Programmierung von DVA


3.1. Vorbereitende Aufgaben zur Erstellung eines Programms (Dr. Patzelt) ........ , 31
3.2. Programmierungsarten und -hilfen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 36
3.2.1. Internprogramme (Dr. Meltzow) ............................. 36
3.2.2. Assembliererprogramme (Dipl.-Math. Becker) . . . . . . . . . . . . . . . . . . . .. 45
3.2.3. Programmiersprachen und Kompilierer (Dipl.-Math. Nabert) .......... , 52
3.2.4. Betriebssysteme (Dipl.-Math. Nabert) ......................... 55

1) Abschn. 2.4.2. ist z. T. von Herrn Dr. Schatz verlaßt.


VI Inhalt

4. Problemorientierte Sprachen

4.1. Einführung in FORTRAN (Dipl.-Math. Becker) . . . . . . . . . . . . . . . . . . . . . . . 58


4.1.1. Konstanten. Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.1.2. Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.1.3. Ergibtanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 65
4.1.4. Steueranweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 65
4.1.5. Anweisungen für die Eingabe und Ausgabe. . . . . . . . . . . . . . . . . . . . . .. 69
4.1.6. Prozeduren und Unterprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 78
4.1.7. Weitere FORTRAN-Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.1.8. Abschließendes Programm-Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2. Einführung in ALGOL (Dipl.-Math. Nabert) . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.2.1. Elemente der Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.2.2. Arithmetische Ausdrücke und Anweisungen .. . . . . . . . . . . . . . . . . . .. 99
4.2.3. Einfache Ein- und Ausgabeoperationen . . . . . . . . . . . . . . . . . . . . . . . 102
4.2.4. Programmaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.2.5. Logische Ausdrücke und Vergleiche . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.2.6. Vereinbarung und Anwendung von Feldern . . . . . . . . . . . . . . . . . . . . . 105
4.2.7. Aufbau von Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.2.8. Ausgabe von Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.2.9. Programm zur Berechnung von Mittelwert und Streuung ............. 110
4.2.10. Unbedingte und bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . 112
4.2.11. Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.2.12. Blockstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.2.13. Verteiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.2.14. Ein Programm für die Berechnung statischer Größen . . . . . . . . . . . . . . . 128
4.2.15. Berechnung der Biegelinie eines elastisch gebetteten Trägers ........... 132
4.3. Einführung in PL!I (Dipl.-Math. Becker) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.3.1. Verarbeitung arithmetischer Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4.3.2. Prograrnmsteuerungsanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
4.3.3. Verarbeitung von Kettendaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J 51
4.3.4. Reihenweise Ein- und Ausgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.3.5. Datengruppierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
4.3.6. Eingefligte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung ..... 175

5. Probleme beim Einsatz eines Digitalrechners (Dipl.-Math. Becker) . . . . . . . . . . . . . . . 184

6. Anwendungen der Datenverarbeitung im BauwesenI)


6.1. Statik und konstruktiver Ingenieurbau ............................. 189
6.1.1. Querschnittswerte (Dipl.-Ing. Haselbach) ....................... 195
6.1.2. Rahmenberechnung (Dipl.-Ing. Haselbach) . . . . . . . . . . . . . . . . . . . . . .. 207
6.1.3. Spannbeton (Dipl.-Ing. Thomsing) ........................... 225

1) Die Einführung zu Abschn. 6 wurde verfaßt von Dipl.-Ing. Haselbach, die zu Abschn. 6.2
von Dipl.-Ing. Weiper.
Inhalt VII

6.2. Straßenbau (Dipl.-Ing. Weiper) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242


6.2.1. Massenermittlung (Dipl.-Ing. Weiper) . . . . . . . . . . . . . . . . . . . . . . . . . 243
6.2.2. Trassierung (Dr. Schatz) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
6.3. Vermessungswesen (Dr. Schatz) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
6.3.1. Kleinpunktberechnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
6.3.2. Richtungswinkelberechnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
6.3.3. Vorausberechnung ..................................... 283
6.4. Netzplantechnik (Dipl.-Ing. Burghardt) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
6.4.1. Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
6.4.2. Voraussetzungen und Verfahren der Netzplantechnik . . . . . . . . . . . . . . . 297
6.4.3. Aufstellung und Berechnung von Netzplänen . . . . . . . . . . . . . . . . . . . . . 298
6.4.4. Analyse und Optimierung des Programms . . . . . . . . . . . . . . . . . . . . . . . 301
6.4.5. Auswertung über Datenverarbeitungsanlagen . . . . . . . . . . . . . . . . . . . . . 304
6.4.6. Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Weiterführendes Schrifttum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Sachveneichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
DIN-Ausgaben (Auswahl)

1333 BI. 1. Zahlenangaben. Dezimalschreibweise


BI. 2. Zahlenangaben. Runden
5474 Zeichen der mathematischen Logik
19226 Regelungstechnik und Steuerungstechnik. Begriffe und Benennungen
19233 Automatik und verwandte Begriffe
40700 BI. 14. Schaltzeichen. Digitale Informationsverarbeitung
BI. 18. Schaltzeichen. Analogrechentechnik
44300 Informationsverarbeitung. Begriffe
44301 Informationsverarbeitung. Begriffe
44302 Datenübertragung. Begriffe
44 302 BI. 11. Datenübertragung. Begriffe
66000 Mathematische Zeichen der Schaltalgebra
66001 Informationsverarbeitung. Sinnbilder für Datenfluß- und Programmablaufpläne
66025 BI. 1. Programmaufbau für numerisch gesteuerte Arbeitsmaschinen. Allgemeines
BI. 2. Programmaufbau für numerisch gesteuerte Arbeitsmaschinen. Weg-
bedingungen und Zusatzfunktionen
BI. 3. Programmaufbau für numerisch gesteuerte Arbeitsmaschinen. Vorschübe
und Spindeldrehzahlen
BI. 4. Programmaufbau für numerisch gesteuerte Arbeitsmaschinen. Beschreibung
der numerisch gesteuerten Arbeitsmaschine
66026 Informationsverarbeitung. Programmiersprache ALGOL
66027 Informationsverarbeitung. Programmiersprache FORTRAN
66201 Prozeßrechensysteme. Begriffe
66900 Netzplantechnik. Begriffe
1. Einführung

1.1. Zielsetzungen der Datenverarbeitung

In allen Gebieten der Technik, der Betriebs· und der Volkswirtschaft hat sich der forschende
Mensch mit immer komplizierteren Problemen auseinanderzusetzen. Ziel ist, die Gesetzmäßig-
keiten dieser Probleme zu erfassen, um darauf Vorhersagen, Planungen und Entwicklungen
aufzubauen. Es gibt u. a. zwei Möglichkeiten, ein komplexes Problem zu lösen:
1. durch Erprobung k 0 n k r e t e r M 0 deli e .
2. durch Abbildung auf ab s t r akt e M 0 deli e .
So kann man z. B. Prototypen von Kraftfahrzeugen bauen und dann diese unter unterschied-
lichen Anforderungen erproben. Diese Untersuchungen am konkreten Modell werden mit
wachsender Größe der Probleme immer teurer und zeitaufwendiger.
Daher werden mit Hilfe der Gesetze der Physik bzw. der Soziologie abstrakte Modelle
geschaffen. Zur Lösung dieser Modelle, die häufig in Gestalt von Gleichungen, Differential-
oder Integralgleichungen dargestellt sind, müssen nun geeignete m a t h e m a t i sc h e
Met h 0 den zu ihrer Lösung gewählt oder entwickelt werden. Bis zur Schaffung von Daten-
verarbeitungsanlagen (DVA) bevorzugte man a n a 1 y t i s c h e Met h 0 den, die es
erlaubten, die Lösung in geschlossenen Formeln anzugeben. In diese Formeln können dann
z. B. die technischen Größen eingesetzt und in ihnen variiert werden. Der wesentliche Nachteil
der analytischen Methoden ist, daß die überwiegende Anzahl der gestellten Aufgaben sich mit
diesen Methoden gar nicht oder nur sehr schwierig lösen läßt. Daher haben die nu m e r i -
sc h e n Met h 0 den immer größere Bedeutung gewonnen. Mit diesen Methoden werden
zwar die Lösungen nur angenähert, sie können aber meist mit jeder vorgebbaren Genauigkeit
ermittelt werden. Der Rechenaufwand ist jedoch sehr erheblich, so daß er vor der Entwicklung
von DV A bei größeren Problemen nicht bewältigt werden konnte.
In einer Pro b 1 e man a 1 y s e wird entschieden, welche numerische Methode jeweils
zweckmäßig und welche Genauigkeit zu fordern ist.
Nach dieser Analyse wird ein Al gor i t h mus aufgestellt, der angibt, wie diese numerische
Rechnung in einzelne Schritte aufgelöst werden kann. Besonders wichtig sind dabei Rechen-
gänge, die mit unterschiedlichen Zahlen mehrfach durchlaufen werden (Schleifen). Hieraus
entsteht dann ein Pro g r a m m abI auf p I an, der die Grundlage für das Pro g r a m m
bildet. Die Einzelheiten werden in diesem Buch ausführlich entwickelt. Wenn man sich ein
fehlerfreies Programm durch die erforderlichen Tests erarbeitet hat, ist man dann in der Lage,
mit einer DVA das gestellte Problem zu lösen und damit das abstrakte Modell zu prüfen.

1.2. Grundbegriffe der Informationsverarbeitung

In diesem Abschnitt werden in enger Anlehnung an das Normblatt DIN 44 300 (Informations-
verarbeitung, Begriffe) die Grundbegriffe der Informationsverarbeitung zusammengestellt.
2 1.3. Zahlensysteme und -darstellungen

Unter einer I n f 0 r m a t ion versteht man eine Angabe, Nachricht oder Unterlage, die den
Empfanger zu einem bestimmten Verhalten, insbesondere Denkverhalten veranlaßt. In der
Informationsverarbeitung werden physikalische Größen, S i g n ale genannt, Zur Darstellung
von Informationen benutzt. Die Kenngröße des Signals, die die Information trägt, heißt
S i g n alp ara met er. Man unterscheidet a n al 0 g e und d i g i tal e Signale. Bei
analogen Signalen wird ein kontinuierlicher Bereich des Signalparameters als Information
benutzt. Die der physikalischen Größe analoge Größe ist meist eine elektrische Spannung oder
ein Strom. Dieser Darstellung der Information begegnet man beim A n al 0 g r e c h n e r
(s. Abschn. 9) wie auch beim Pro z e ß r e c h n e r (s. Abschn. 8). Bei einem digitalen
Signal nimmt der Signalparameter nur eine endliche Anzahl von Werten an. Fast immer werden
nur zwei Werte angenommen, da diese Darstellung sich technisch besonders einfach und
fehlerfrei realisieren läßt. Dann spricht man von einem Bin ä r s i g n al .
Die der DVA zur Verarbeitung zugeleiteten Informationen bestehen in der Regel aus einer
größeren Anzahl Z e ich e n , meist sind es die 26 Buchstaben, die zehn Dezimalziffern
sowie eine Anzahl Sonderzeichen. Die geordnete Reihenfolge aller für eine DVA zugelassenen
Zeichen heißen das Alp hab e t für diese Anlage.
Die ersten DVA konnten nur Ziffern verarbeiten. Treten zu diesen Ziffern noch mindestens
die Buchstaben hinzu, so spricht man von einem alp h a n urne r i s c h e n Zeichenvorrat.
Da die intern in der DV A übertragenen und verarbeiteten Signale binär sind, muß eine
Zuordnung zwischen dem Alphabet und den internen Binärzeichenfolgen vorgegeben werden.
Eine solche eindeutige Zuordnung (Abbildung) heißt ein C 0 d e .
Ein Bit ist die kleinste Darstellungsform für Binärzeichenfolgen. Jedes einzelne Binär-
zeichen kann die Werte 0 oder 1 annehmen. bit kleingeschrieben ist zugleich die Zähl-
einheit, die angibt, wieviel Binärzeichen gleichzeitig in einem Speicher aufgenommen werden
können. Zeichenfolgen, die Informationen beinhalten, heißen D a t e n. Dabei bleibt es
offen, wieviele Zeichen zur Darstellung einer Date jeweils erforderlich sind.

1.3. Zahlensysteme und -darstellungen

Zur Darstellung von Zahlen benötigt man Ziffern. Die Anzahl der benötigten Ziffern hängt
von der Ba s i s des verwendeten Zahlensystems ab. So benötigt man bei Darstellungen im
Dezimalsystem insgesamt 10 Ziffern. Die Schreibweise 457 ist eine Abkürzung für die aus-
führliche (polynom-) Darstellung
4 . 102 + 5 . 101 + 7 . 100
Die übliche Kundarstellung 457 heißt Rad i x s c h r e i b w eis e. Die gleiche Zahl 457
kann man auch in einem Zweiersystem, dem D u als y s t e m, schreiben. Bei diesem System
sind nur zwei Ziffern 0 und 1 1) erforderlich. Bei gleichzeitiger Verwendung mehrerer Zahlen-
systeme kennzeichnet man das jeweils verwandte System durch einen Index, man schreibt also
z. B. 457 10 , Es ist
457 10 = 256 + 128 + 64 + 8 + 1
= 1 . 28 + 1 . 2 7 + 1 . 26 + 0 . 2 5 + 0 . 24
+ 1 . 23 + 0 . 22 + 0 . 2 1 + 1 . 20
= 111001001 2

1) Zur Dualdarstellung werden häufig auch die Zeichen 0 und L verwandt, s. z. B. Abschn. 2.
1.3. Zahlensysteme und -darstellungen 3

Der Vorteil des Dualsystems ist seine leichte technische Darstellung, da es nur aus zwei Ziffern
besteht. Damr muß aber der Nachteil in Kauf genommen werden, daß die Anzahl der
benötigten Stellen groß ist.
Die Umrechnung einer ganzen Zahl vom Dualsystem in das Dezimalsystem kann mit dem
H 0 r n e r - S c h e m a vorgenommen werden
1001001
x= 2 2 6 14 28 56 114 228 456
3 7 14 28 57 114 228 457
Eine Umrechnung vom Dezimalsystem zum Dualsystem erfolgt durch laufende Division durch
2; das bedeutet eine Umkehrung des HorneT-Schemas
457: 2 = 228 Rest 1
228: 2 = 114 0
114: 2 = 57 0
57: 2 = 28 1
28: 2 = 14 0
14: 2 = 7 0
7: 2 = 3 1
3: 2= 1
1: 2 = 0
Als zweckmäßige Schreibweise empfiehlt sich von rechts nach links gerechnet

o 1 3 7 14 28 57 114 228 457 10


1 1 1 0 0 1 0 0 12

Diese Umrechnungen werden von den DVA mit einem Hilfsprogramm (utility) durchgeführt,
falls intern mit Dualzahlen gerechnet wird.
Die Arithmetik im Dualsystem baut auf folgenden Grundoperationen auf:
0+0=0 o· 0= 0
0+1=1+0=1 0·1=1·0=0
1+1=10 1 . 1= 1
Als Beispiel wird jetzt 23 10 + 47 10 ,23 10 .47 10 und 91 10 : 13 10 im Dualen gerechnet. Es ist
23 10 = 10111 2 ,47 10 = 101111 2 ,91 10 = 1011011 2 und 13 10 = 1101.
10111 10111 . 101111 1011011 : 1101 = 111
+ 101111 10111 1101
10111 010011
10111 1101
10111 001101
10111 1101
10000111001 2 = 1081 10 0000

Bisher wurden nur ganze Zahlen betrachtet. Bei gebrochenen Zahlen wird in der Datenverarbei-
tung (DV) der gebrochene Teil (in allen Zahlensystemen) durch einen Punkt, den Rad i x -
pu n k t, abgetrennt. So ist z. B. 3.5 10 = 11.1 2 .
4 1.3. Zahlensysteme und -darstellungen

Bei Zahlenumwandlungen werden der ganzzahlige und der gebrochene Anteil getrennt
behandelt.
Den Dualbruch 0.11001 2 kann man mit Hilfe des Horner-Schemas in einen Dezimalbruch
umwandeln. Dazu sind die Ziffern von hinten beginnend in die erste Zeile zu schreiben, wo-
bei auch die flihrende Null berücksichtigt werden muß

x= 0,5 °° 1
0,5 0,25 0,125 1
0,5625 0,78125 °
0,5 0,25 1,125 1,5625 0,78125

Es ist also 0.11001 2 = 0.78125 10 , Bei der Umwandlung der Dezimalzahl 0.13 10 in einen
Dualbruch wird jeweils mit 2 multipliziert und der ganzzahlige Teil abgetrennt
0,13 . 2 =0,26
0,26 . 2 = 0,52
°°
0,52 . 2 = 1,04 1
0,04 . 2= 0,08
0,08 . 2 = 0,16 °°°
°1
0,16 . 2 = 0,32
0,32 . 2 = 0,64

°
0,64 . 2 = 1,28
0,28 . 2 = 0,56
0,56' 2 = 1,12
Man erhält den nichtabbrechenden Dualbruch 0.0010000101 .. '2 = 0.13 10 ,
Oben wurde bereits darauf hingewiesen, daß Dualzahlen sehr viele Stellen beanspruchen. Aus
diesem Grunde faßt der Mensch jeweils Dreier- oder Vierergruppen von Dualziffern zusammen.
So erhält man das Oktal- (Basis 8) oder das Sedezimalsystem (Basis 16). Das Oktalsystem
besteht aus den 8 Ziffern von Obis 7. Faßt man vom Radixpunkt einer Dualzahl ausgehend
jeweils Dreiergruppen zusammen, so erhält man unmittelbar die Oktaldarstellung
457 10 = 11110011001 2 = 711 8
Das Sedezimalsystem benötigt 16 Ziffern. Die meisten DVA verwenden bei Ausgabe von
Zahlen in diesem System außer den Ziffern Obis 9 noch zusätzlich als weitere Ziffern die
BUChstaben Abis F. So ist z. B.
3E9 16 = 3· 16 2 + 14· 16 1 + 9' 160 = 1001 10
Vom Dualsystem gelangt man unmittelbar zum Sedezimalsystem, indem man jeweils Vierer-
gruppen zusammenfaßt:
457 10 = 11110011001 2 = IC9 16
Dezimalzahlen werden bei kommerziell orientierten Anlagen vorwiegend so codiert, daß jede
Dezimalziffer einzeln in eine binäre Darstellung abgebildet wird. Hierzu sind mindestens 4 bit
(eine Te t rad e) erforderlich. Im folgenden werden zwei solcher Abbildungen dargestellt, die
beide häufig verwandt wurden.
1m allgemeinen werden 6 verschiedene derartige Codes verwandt, die unterschiedliche Vor-
und NaChteile bei ihrer technischen Realisierung haben.
1.3. Zahlensysteme und -darstellungen 5

Dezimalziffer Reiner Dual-Code Exzeß-3-Code


(8-4-2-1-Code)
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100

Heute sind vorwiegend DVA mit zwei Arten interner Zahlenverarbeitung auf dem Markt.
1. Es wird jede Dezimalzahl in die gleichwertige Dualzahl verwandelt und in der Anlage intern
rein dual gerechnet. Das gilt besonders für technisch-wissenschaftliche Anlagen.
2. Es werden jeweils in der kleinsten in diesen Rechnern ansprechbaren (adressierbaren)
Einheit von 8 bit (genannt 1 b y t e) zwei Dezimalziffern gespeichert.
In jedes Byte können anstelle der Zahlen bis 99 auch alphanumerische Zeichen gespeichert
werden. Hierfür haben sich zwei Codes durchgesetzt, der EBCDI- und der ASCII-Code 1 ). Bei
diesen Codes ist auch eine Unterscheidung zwischen Klein- und Großbuchstaben möglich.
Weiter können anstelle von Zeichen des Alphabets auch Steuerinformationen für die DV A
gespeichert werden. In einem Byte (8 bit) können insgesamt 256 unterschiedliche Zeichen
codiert werden.
Zahlen werden in zwei unterschiedlichen Darstellungsformen in einen Rechner eingegeben,
verarbeitet und ausgegeben: in der Fes t pu n k t - und in der GI e i t P unk t f 0 r m .
Bei der Festpunktform ist jede Zahl in der Radixschreibweise gegeben, die den Radixpunkt
an einem festen Punkt bzgl. dem Zahlenanfang oder dem Zahlenende unterstellt. Meist wird
der feste Platz bzgl. dem Zahlenende festgelegt.
Es sei eine Radixschreibweise fur Dezimalzahlen mit drei Ziffern rechts des Radixpunktes
festgelegt. Dann gilt
0.341 + 0.294 = 0.635
0.341 - 0.294 = 0.047
12.413' 0.677 = 8.403
0.038 : 40.318 = 0.000
Ergeben sich z. B. bei Multiplikationen oder Divisionen mehr Ziffern rechts vom Radixpunkt,
so werden diese abgeschnitten. Die Festpunktform ist die für die DVA einfachere, damit also
schneller zu verarbeitende Form. In vielen kommerziellen Anlagen gibt es nur diese Zahlen-
darsteIlung.
Die Gleitpunktform beschreibt die Zahl in einer sogenannten halblogarithmischen Form
z= X' bY
Hierbei heißt x die Mantisse, b die Basis und y der Exponent. Es ist im allgemeinen I xl < 1.
Der Exponent y ist ganzzahlig, sowohl positiv als auch negativ. Die Gleitpunktform z ist durch

1) Siehe hierzu DIN 66003, die sich auf einen analogen 7-Bit-Code bezieht.
6 1.4. Programmiersprachen

die beiden Zahlen x und y repräsentiert. Beide Zahlen werden in Radixschreibweise gegeben,
wobei der gedachte Radixpunkt bei x meist vor der ersten (von Null verschiedenen) Ziffer
steht, bei y immer nach der letzten Ziffer. DVA, die intern dezimal rechnen, haben meist die
Basis b = 10, neuerdings auch b = 100. Bei intern dual rechnenden Anlagen werden neben
b = 2 auch b = 16 oder b = 256 benutzt.
Es sei eine Gleitpunktrechnung mit b = 10, x und y als Dezimalzahlen festgelegt, die Mantisse x
habe 4 Ziffern. Weiter sei
Z2 = 0.2162.10- 1
Eine Multiplikation (bzw. Division) kann unmittelbar vorgenommen werden

ZI . z2 = 0.3145' 0.2162' 103 - 1 = 0.06799490' 102


Dieses Ergebnis entspricht nicht mehr der Forderung, daß bei der Mantisse rechts des Radix·
punktes eine von Null verschiedene Ziffer stehen muß. Diese Zahl wird daher vor der Speicherung
normalisiert
ZI . z2 = 0.6799 . 10 1
Eine Addition von Gleitpunktzahlen ist nur möglich, wenn beide Exponenten gleich sind.
Es sei
Z3 = 0.9922' 10- 2 Z4 = 0.9261 . 10- 4

Unter Verlust von Ziffern wird zunächst Z4 umgeformt


z4 = 0.0092,10- 2
Damit ergibt sich die Summe
Z3 + Z4 = 1.0014' 10- 2 = 0.1001 . 10- 1
Zum Schluß muß die Zahl wiederum normalisiert werden.

1.4. Programmiersprachen

Zur Abfassung von Pro g r a m m e n bedient man sich spezieller Sprachen. Unter einem
Programm versteht man eine Folge von An w eis u n gen zur Lösung einer Aufgabe mit
Hilfe einer DVA. Anweisungen, die in der benutzten Sprache nicht mehr in elementarere
Anweisungen zerlegt werden können, heißen B e feh I e. Wichtige Anweisungen sind
1. Arithntetische Anweisungen
2. Logische (boolesche)l) Anweisungen
3. Verzweigungsanweisungen
4. Sprunganweisungen
5. Transportanweisungen
Die Anweisungen können in einer beliebigen Programmiersprache abgefaßt sein. Man unter·
scheidet folgende Arten
1. Pro b 1 e m 0 r i e n t i e r t e S p r ach e n. Eine problemorientierte Sprache gestattet
es, Programme unabhängig von einer bestimmten DVA abzufassen. Man bedient sich dabei
weitgehend der im jeweiligen Anwendungsgebiet üblichen Schreibweise.

1) G. Boole, eng!. Mathematiker, 1815-1864.


1.5. Historischer Rückblick 7

So sind z. B. ALGOL, FORTRAN und PLII für technisch-wissenschaftliche Berechnungen


(s. Abschnitt 4), COBOL und PL/I für kommerzielle Probleme angemessene Sprachen;
EXAPT ist eine speziell für numerische Steuerungen von Werkzeugmaschinen zweckmäßige
Sprache (s. Abschn. 7).
2. M a s chi n e n 0 r i e n t i e r t e S p r ach e n. Hierbei handelt es sich um Sprachen,
die eine ähnliche oder gleiche Struktur haben wie die Anweisungen einer speziellen Anlage.
Diese Sprachen enthalten aber zahlreiche für den Programmierer nützliche Erleichterungen
gegenüber den Maschinensprachen (s. Abschn. 3.2.2).
3. M a s chi n e n s p r ach e. Diese Sprache läßt nur die der speziellen DVA eignen
Anweisungen zu (s. Abschn. 3.2.1).

Jede DVA kann nur Programme bearbeiten, die in ihrer Maschinensprache abgefaßt sind. Daher
müssen 0 b e r set zer zur Verfügung stehen, die das Ursprungsprogramm in ein elemen-
tareres Zielprogramm mit Hilfe der DVA umwandeln: übersetzer von problemorientierten
Sprachen in maschinenorientierte Sprachen (oder direkt in die Maschinensprache) nennt man
Kom p i 1 i e r er, übersetzer von maschinenorientierten Sprachen in Maschinensprachen
heißen Ass e m b I i e r er.

1.5. Historischer Rückblick

Bereits im 17. Jahrhundert wurden von Schickard, Pascal und Leibniz Rechenmaschinen
entworfen, doch erst 100 Jahre später war es der mechanischen Fertigung möglich, eine
wirklich brauchbare Maschine herzustellen (Hahn 1770). Nach Weiterentwicklung waren diese
Maschinen in der Lage, die vier Grundrechenarten durchzuführen sowie Zwischenergebnisse
zu speichern. Bei diesen Maschinen werden die einzelnen Ziffern der Dezimalzahlen durch
Wege von Zahnrädern bzw. Zahnstangen dargestellt. Sie wurden zunächst von Hand betrieben,
später erfolgte der Antrieb durch einen Elektromotor. Seit 1961 gewinnen elektronische
(anzeigende bzw. druckende) Tischrechner rasch an Bedeutung und haben heute bereits die
elektromechanischen Anlagen fast völlig verdrängt. In elektronischen Tischrechnern werden
die einzelnen Rechenoperationen elektronisch, also ohne mechanische Bewegungen, im
Prinzip wie in einer DVA durchgeführt.
Programmgesteuerte Rechenanlagen haben Vorläufer in einem lochkartengesteuerten Webstuhl
(Jacquard 1801 bis 1808) und in einem mit mechanischen Rechenspeichern ausgestatteten
lochkartengesteuerten Modell (Babbage, Difference engine 1823, Analytical engine 1833).
Ein weiterer Vorläufer ist die Lochkartenmaschine (Hollerith 1882). Erste theoretische Grund-
lagen der Programmsteuerung stammen von Couffignal (1938). Sie fanden aber keine Be-
achtung. Eine umfassende Theorie schuf J. von Neumann (1946). Die erste funktionsfahige
programmgesteuerte Rechenanlage war die relaisgesteuerte Z 3 von Zuse (1941). Unabhängig
von Zu se entwickelte Aiken (1944) eine Relaismaschine MARK 1, 1946 entstand die erste
Röhrenmaschine ENIAC. Hiermit begann die Zeit der 1. Generation. Die Röhrenmaschinen
waren noch sehr ausfall- und temperaturempfindlich. Mit den mit Transistoren bestückten
Anlagen (z. B. Siemens 2002 und Telefunken TR4) begann 1958 die Zeit der 2. Rechner-
generation. Mit der Kleinstbauweise (Monolith) ab 1966 entstand die 3. Generation (z. B.
IBM/360 und Siemens 4004). Zur Zeit findet man Rechner der 2. und der 3. Generation
nebeneinander auf dem Markt. Die Bedeutung der Datenverarbeitung nahm nach einer
Anlaufzeit von etwa 10 Jahren stürmisch zu und beeinflußt heute nahezu alle Bereiche unserer
Gesellschaft.
8 1.6. Ausblick

1.6. Ausblick

Zunächst fand die DV im kommerziellen Bereich Eingang und löste dort schrittweise konven-
tionelle Lochkartenanlagen ab. Wichtig für ihren Einsatz waren außer entsprechender Leistungs-
fähigkeit der Zentraleinheit sowohl in elektronischer (h a r d war e) als auch in logisch-
programmtechnischer Hinsicht (s 0 f t war e) die Eingabe- und Ausgabegeräte (z. B. Loch-
kartenleser, Schnelldrucker) und umfangreiche Zusatzspeicher (z. B. Magnettrommel, Magnet-
platte, Magnetbänder) flir große Datenmengen. Auch heute wird die überwiegende Zahl der
DV A vorwiegend oder ausschließlich für kommerzielle Aufgaben eingesetzt. Dennoch nimmt
die Anzahl von DVA für technisch-wissenschaftliche Probleme relativ zur ständig wachsenden
Gesamtzahl der DV A zu. Im technischen Bereich sind zwei grundsätzlich unterschiedliche
Einsatzmöglichkeiten zu trennen
1. die Berechnung technisch-wissenschaftlicher Probleme mit Hilfe mathematischer Methoden
(s. Abschn. 4 und 6),
2. die unmittelbare Auswertung physikalischer Größen bei technischen Prozessen (Prozeß-
rechner, s. Abschn. 8).
Im Grenzgebiet zwischen kommerziellen und technischen Anwendungen liegt das für die
Zukunft besonders bedeutungsvolle Gebiet der Dokumentation (Datenbank) und der
Organisation (z. B. Netzplantechnik, Optimierung), s. Abschn. 6.1.
Bereits die Entwicklung des letzten Jahrzehnts zeigt deutlich, daß alle Gebiete der Technik
durch die DV tiefgreifend beeinflußt werden. In keinem Gebiet wird man künftig diese
Entwicklung ohne eine gründliche Kenntnis der DV verstehen oder gar selbst mitgestalten
können.
2. Technik einer elektronischen Datenverarbeitungsanlage

Dieses Buch legt entsprechend seiner Zielsetzung vor allem Wert auf die An wen dun g
von DVA. Deshalb soll dem Benutzer solcher Anlagen nur ein kurzer überblick über die
h a r d war e (d. h. die gesamte maschinentechnische Ausstattung) und die Struktur der
Digitalrechner sowie die unbedingt notwendigen Begriffe und Grundlagen gegeben werden.
Dem speziell an der Technik und dem Bau von DVA interessierten Leser sei folgende Literatur
empfohlen [1, 9, 25, 27].
Digitalrechner bestehen aus vielen Tausend Bausteinen. Bei Rechnern der ersten und zweiten
Generation waren das Grundschaltungen aus diskreten Bauelementen der Elektronik wie
Röhren, Transistoren, Widerstände. Rechner der nachfolgenden Generation bestehen über-
wiegend aus Bausteinen der i n t e g r i e r t e n T e c h n i k. Ein solcher für Rechner-
hardware verwendbarer Baustein setzt sich aus einer bestimmten Anzahl gleicher oder einer
Fun k t ion sei n h e i t verschiedener S c h alt g 1 i e der zusammen. Man unter-
scheidet zwei Schaltgliederarten: Ver k n ü p fun g s - und S p e ich erg 1 i e der.

2.1. Verknüpfungsglieder

Im Abschn. 1.2 wird die Zweckmäßigkeit der binären Darstellung der Information in bezug auf
die leichte technische Realisation herausgestellt. Es werden also Bauelemente oder Grund-
schaltungen einzusetzen sein, die diesem binären Charakter Rechnung tragen. Das einfachste
Element ist der binäre Schalter mit seinen beiden Stellungen Ein bzw. Aus.

2.1.1. Theorie der Verknüpfungsglieder. Es ist möglich, das binäre Signal eines Schalters
(z. B. Ein == L-Signal; Aus == O-Signal) als physikalische Darstellung einer bin ä ren S c h alt -
va r i a b 1 e n zu verwenden. Funktionen dieser Variablen werden bin ä reS c ha 1 t-
fu n k t ion engenannt, wenn sie nur zwei Werte annehmen können. Derartige mit Hilfe
von Operatoren dargestellte Funktionen ergeben sog. Ver k n ü p fun gen.
Zunächst sei die Schaltfunktion a = f( e) betrachtet (Bild 2.1). Der Wertebereich der unab-
hängigen Eingangsvariablen e besteht aus zwei Elementen L und o. Die abhängige Ausgangs-
variable a kann auf vier verschiedene Arten mit e in Verbindung gesetzt, ver k n ü p f t
werden. Von diesen vier Möglichkeiten hat nur ein e (die 3.) praktische Bedeutung. Sie
bringt jeweils eine Signalumkehr ,eine N e g a t ion. Wird die Schaltfunktion auf zwei
unabhängige Eingangsvariable erweitert, ergeben sich bei vier verschiedenen Eingangs-
kombinationen schon sechzehn mögliche Verknüpfungsformen. Hiervon haben sechs keine
praktische Bedeutung. Von den übrigen zehn sog. booleschen Verknüpfungen sind die
ODER- sowie UND-Funktionen besonders wichtig.
Die 0 DER - Ver k n ü p fun g ergibt immer dann am Ausgang ein L-Signal, wenn
mindestens einer der vorhandenen Eingänge (Anzahl ~ 2) ein L-Signal fUhrt. Im Gegensatz
dazu liefert die UND - Ver k n ü p fun g nur dann ein L-Signal, wenn all e vor-
handenen Eingänge (Anzahl ~ 2) mit L-Signal beaufschlagt sind. Zusammen mit der Negation
10 2.1. Verknüpfungsglieder

bilden die UND· sowie ODER·Funktionen die sog. G run d ver k n ü p fu n gen (Bild 2.2).
Mit ihrer Hilfe können alle übrigen Verknüpfungen dargestellt werden. Das ist auch möglich
mit den NANO· mot and == neg. UND) und NOR· mot.Q! == neg. ODER) Funktionen.

OOER - Verknüpfung UND- Verknüpfung Negation


Fall 0 L e Disjunktion Konjunktion
1 0 0 e, e2 a e, e2 a
a.{(e) 2 0 L 0 0 0 0 0 0 0

~
3 L 0 0 L L 0 L 0 a
4 L L L 0 L L 0 0 o L
L L L L L L L 0
2.1 Verknüpfungsmöglichkeiten der Schalt·
funktion a = f (e)
e binäres Eingangssignal
a binäres Ausgangssignal

2.2
Zusammenstellung der drei boolesche.n Grundverknüpfungen mit ihren Bezeichnungen, (Wahrheits)tabellen
und Schaltzeichen

Die technische Verwirklichung der booleschen Verknüpfungen sind die Ver k n ü p fun g s .
g 1 i e der. Eine Kombination aus solchen Gliedern nennt man ein S c haI t n e t z. Der
Signalzustand am Ausgang l ) eines solchen Schaltnetzes ist zu jedem Zeitpunkt nur abhängig
von den Eingangssignalen zu diesem Zeitpunkt. Die theoretische Bearbeitung von Schalt·
netzproblemen kann mit der Booleschen Algebra oder ihrer Weiterentwicklung, der Schalt·
algebra, mit der Methode nach Karnaugh·Veitch und ähnlichen Verfahren durchgeführt
werden. Für eine Einarbeitung in diese Problemstellung wird folgende Literatur empfohlen
[13, 28, 30].

2.1.2. Technische Verwirklichung der Verknüpfungsglieder. Die technische Realisation von


booleschen Verknüpfungsgliedern wäre am einfachsten mit Schaltern oder Relais zu erreichen.
Diese Bauelemente sind allerdings flir den Computereinsatz zu langsam, brauchen zu viel Platz
und haben eine zu geringe Lebensdauer. Hier ist der Transistor (gleichgültig ob innerhalb einer
integrierten Schaltung (IS) oder als diskretes Bauelement) überlegen. Er stellt aber von Natur
aus kein binäres Bauelement dar, sondern muß erst in einer bestimmten Grundschaltung als
elektronischer, kontaktloser Schalter einsatzfähig gemacht werden. (Literatur über Transistoren
[11,14], insbesondere über Schaltbetrieb mit Transistoren [23, 26]).
Das Kennzeichen der Negation ist die Umkehrung des Eingangssignals. Zu ihrer technischen
Verwirklichung, dem Negator, auch Invertor oder Umkehrstufe genannt, verwendet man eine
Transistorschaltstufe (Bild 2.3). Die Zuordnung eines Symbols (L bzw. 0) zu den Schalt·
zuständen (Ein bzw. Aus) sowie eines Potentials zu diesen kann beliebig erfolgen. Beim
Arbeiten mit einem System aus Verknüpfungsgliedern muß man sich jedoch festlegen. Zur Wahl
steht entweder eine positive oder negative Logik. Hier wird positive Logik (P L-Si nal> Po -s - nal)
mit der Festlegung L-Signal'; positivem Potential, O·Signal == Null·Potential gewifhlt. Jg

Beaufschlagt man den Negator mit einem L·Signal, dann liegt eine positive Spannung UE an
seinem Eingang. Sie treibt über den Widerstand R v und die Basis-Emitterdiode des Transistors
den Steuerstrom I B . Dieser hat entsprechend dem Verstärkungsfaktor des Transistors eine

I) Übergangs- und Verzögerungszeiten bleiben unberücksichtigt.


2.1.2. Technische Verwirklichung der Verknüpfungsglieder 11

2.3 Schaltbild eines 2.4 Eingangskennlinie eines JB


Negators npn-Transistors

KollekloranschluB
BosisonschluB !!-

fmitteranschluB

-u
Vergrößerung des Kollektorstromes I c zur Folge. Bild 2.4 zeigt den nichtlinearen Zusammen-
hang zwischen Eingangsspannung UBE eines npn-Transistors mit dem steuernden Eingangs-
strom I B . Zur Größenordnung der Spannung UBE ist zu bemerken, daß die Schwellspannung
(gestrichelt gezeichnete, gradlinige Extrapolation) für Si-Transistoren bei etwa 0,7 V liegt.
Die anzulegenden Spannungen UBE müssen relativ klein sein, wenn der Transistor nicht
gefährdet werden soll. Um die Störanfälligkeit der Schaltstufen gering zu halten, wählt man
zwischen L- und O-Signal Spannungshübe, die meist höher liegen als die zulässigen Werte für
UBE . Demzufolge muß ein Schutzwiderstand Rv vorgeschaltet sein, an dem die überschüssige
Spannung des L-Signals derart abfallt, daß der Transistor gerade so weit aufgesteuert werden
kann, wie es fur sein Schaltverhalten optimal ist. An der Schaltstrecke liefert der Transistor
lediglich die geringe Spannung UCE Rest' Der Hauptspannungsabfall tritt am Kollektorwider-
stand auf. Das Ausgangspotential der Stufe liegt darum nur wenig (um UCE Rest) höher als das
Null-Potential. Da zwischen den Signalen L und 0 ein relativ großer Spannungshub vorgesehen
ist, kann man auch für die beiden Signalzustände jeweils ein Toleranzfeld zulassen (Vorteil der
Digitaltechnik). Bei Ansteuerung mit L-Signal befindet sich die Spannung UA folglich
funktionsgerecht im Pegel des O-Signals.
Legt man an den Eingang eines Negators ein O-Signal, reicht die Spannung nicht aus, den
Transistor aufzusteuern. Beim Negator nach Bild 2.3 wird der durch die Widerstände R v und
R sp gebildete Spannungsteiler so verstimmt, daß sich an der Basis des Transistors negatives

E7 Ez A
0 0 L
0 L L
L 0 L
L L 0

r---......,---~
+/lz
RZ RZ
n p
E7 E7
Ez E2o--!4IFE+-............-r
E3 E3 <>-:L B Basis
E Emiller
E+ E4 C Kollektor
E B
T7
c) d) e)
2.5 NANO-Verknüpfungen in TTL-Technik
a) Schaltzeichen des NANO-Gliedes mit Wahrheitstabelle für zwei Eingangsvariable
b) Ersatzschaltung des NAND-Gliedes mit zwei Grundverknüpfungen c) npn-Vielfach-
emittertransistor TI in schematischer Darstellung d) Ersatz schaltbild für Vielfachemitter-
transistor TI' Verknüpfung erfolgt über Dioden e) Schaltbild des NAND-Gliedes
12 2.2. Speicherglieder

Potential einstellt. Der sich demzufolge ergebende Steuerstrom verlagert den Arbeitspunkt des
Transistors in seinen Sperrbereich. Es fließt lediglich ein geringer Reststrom, der an Re nur
einen sehr kleinen Spannungsabfall zur Folge hat. Die gesamte Betriebsspannung Ub fällt
praktisch an der im Aus-Zustand sehr hochohmigen Kollektor-Emitterstrecke ab. Als Ausgangs-
spannung steht fast die gesamte Spannung Ub zur Verfügung. Diese befindet sich eindeutig
im L-Signal-Pegel. Auch hier liefert also der Negator funktionsgerecht das inverse Signal.
In der integrierten Technik bildet das NAND meist das Grundverknüpfungsglied (alle booleschen
Verknüpfungen sind mit NANO-Gliedern darstellbar). Sein Aufbau in !ransistor-Iransistor-~gik
(TTL) zeigt Bild 2.5. TTL-Technik ist eine von vielen Schaltungstechniken. Bei ihr werden die
Verknüpfungen mit Hilfe von "Transistoranordnungen" verwirklicht, die man in IS leicht in
großer Anzahl auf kleinstem Raum plazieren kann. In TTL-Technik gilt für die zwei stationären
Schaltzustände folgende Potentialdefinition:

+ U > U L-Signal > U O-Signal > 0 V


Befindet sich wenigstens an einem der NAND-Eingänge ein O-Signal, ist der Vielfach-Emitter-
Transistor Tl aufgesteuert (Bild 2.Sc, d, e). Die entsprechende(n) Eingangsdiode(n)
D 1 , •.• , D4 sind geöffnet. An die Basis von T2 gelangt über D s nicht genügend Spannung zum
Aufsteuern von T 2; er sperrt. Deswegen fließt durch R 2 nur der Reststrom. Am Emitter von
T 2 liegt praktisch O-Potential, denn der Spannungsabfall an R 3 ist sehr gering. Aus diesem
Grund sperrt auch T4' Am Kollektor von T2 stellt sich hohes Potential ein, das T 3 aufsteuert.
Durch den relativ niederohmigen Widerstand R4 , T 3 und die Diode D fließt der Strom über A
und wird vorwiegend vom dort wirksamen, gegenüber R 4 hochohmigeren Lastwiderstand
bestimmt. An A liegt also L-Signal.
Führen alle Eingänge des NAND-Gliedes L-Signal, dann sperren entsprechend der Ersatz-
schaltung in Bild 2.Sd die Dioden D 1 , . . . ,D 4 . Deswegen kann T2 über R 1 und Ds aufgesteuert
werdeni). An R 3 tritt deswegen ein hoher Spannungsabfall auf; T4 öffnet. T 3 sperrt praktisch,
da der Potentialunterschied zwischen der Basis von T3 und dem Ausgang A der Schaltung für
eine Aufsteuerung von T 3 nicht ausreicht. Um sicherzustellen, daß T3 eindeutig sperrt, befindet
sich die Diode D in der Schaltung. Die Restspannung am aufgesteuerten T4 ist sehr gering. Der
Ausgang des NANO-Gliedes führt O-Signal.

2.2. Speicherglieder

Neben den Verknüpfungsgliedern spielen für die technische Ausstattung von DVASp e ich e r -
g I i e der eine entscheidende Rolle. Unter Speicherung in einem Speicherglied wird die
Möglichkeit zur Aufnahme, Aufbewahrung und unveränderten Rückgabe der aufgenommenen
Information verstanden. Nach diesem Prinzip aufgebaute, lösch- oder überschreibbare Speicher
nennt man Leb end s p e ich er. Im Gegensatz dazu steht der Fes t s p e ich er, der
einmal mit Information geladen werden kann, die dann betriebsmäßig nicht mehr zu ver-
ändern (z. B. ohne Verdrahtungsänderung) ist.
Die kleinste Einheit der in DVA zu speichernden Informationsmenge stellt das bit dar.

2.2.1. Speichermedien. Um fur die DV-Technik Geräte zur maschinellen Speicherung von Daten
bauen zu können, sind Speichermedien notwendig, die als Informationsträger dienen.

I) Eigentlich hervorgerufen durch Inversbetrieb des Vielfach-Emitter-Transistors.


2.2.1. Speichermedien 13

L 0 c h kar t e n (LK; Bild 2.6) und L 0 c h s t r e i f e n (LS; Bild 2.7) stellen solche
Speichermedien dar. Senkrecht zur Längsrichtung der Medien sind die Zeichen als Loch-
kombinationen z. B. nach dem IBM-LK-Code oder den gebräuchlichen LS-Codes (5 bis 8
Spuren) verschlüsselt angeordnet. Beide Medien bedeuten für die Kommunikation zwischen
Mensch und OVA einen gewissen Umweg. Er war besonders in der Anfangszeit der DV
unumgänglich und ist noch heute von Bedeutung, obwohl das direkt lesbare Speichermedium
(mit Schriftzeichen und Ziffern) b e sc h r i e ben e s Pa pie r sich mehr und mehr
durchsetzt.

~123456789 ABCDEF~IJKLMHOPQRSTUVUXYZ
111111111

111111111 ";;
~.7171~11~1~1~1~17171711~1~1~1~1717171~11~1~1~1~17171~11~1~1~1~1~1.1.1~11~1~1~1~1~171~11~1~1~1~1~1~171~11~1~i~I~I~171~1~11~1~1~1~,71~'~II~'~I~I~I~I~ID~
~Zl41'J".11UUM~U"Uda~n~~3an.a.~D~M •• n ••• fl~u~e.Q ••• ~RDw •• u ••• ~aaM •• o ••• ~nnH~_n.n. ~
111111111 11111111111111111 111111111111111111111111111111111111 11 11 11 11 11 11 1 1 1 1 1 1 .~
2212222222 I 21 2 1 1 1 1 1 I I1 1 1 1 1 1 1 I1 1 1 1 1 1 1 1 1 1 1 I 1 1 1 IIIII 1 1 1 IIII III 1 I 1 1 1 1 1 1 1 1 2 1 I 1 I 1 I 1 III ~
z
3331333333333133333333133333331333333333333333333333 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 333 ~
11111111111111111111111111111111111111111 11 11111111111111 11 1111111111111111111 11 ;

5 5 5 5 515 5 5 5 5 5 5 5 515 5 5 5 5 5 5 515 5 5 5 5 5 515 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 555 55 5 5 5 5 ~


56111 I1 i 6 i i i i i i 1116 i 6 1 1 6 616 1 6 1 1 1 I1I i 1 1 I i i 1 i 1 1 i i II i i 1 i 1 1 1 1 1 1 1 i i 1 1 i i i 6 i 1 1 i i 1 1 1 i 1 1 1 ~
)))))))1)))))))))1))))))) JI J J J J J J JI J J J J J J J J J J J J J J J J J J J J J J J J J J J J J) J J J J J J J J J J)))) J ~

111111111I1111111111111111111111111111111111111111111111 i
1 21(~&II'Wl1un"~.11~~mvn~~~~na~~nnD~~.~.~~~Qo"e""q3~~~~~~~N~~~~~U~~~~~WM"nnM~~IJ~~m
IIIIIIIIIIIIIIIIIIIIIII~
I I I ! I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I ! ! ! ! I I I I I I I I ! ! ! I! I I I ! !

2.6 80-spaltige IBM-Code-Lochkarte

2.7
5-Spur-Lochstreifen mit Zeichen
im Fernschreib-Code
BU =Buchstabenumschaltung
ZU =Ziffernumschaltung •• • •• •
Im Anschluß an die Steuerzeichen
•••••••••••• •••••• •

Transpor/lochreihe
BU und ZU folgen hier jeweils
drei gleiche Lochkombinationen,
die aber wegen der vorstehenden """-~.~~.~.=-~.~-------'".~- unterste Spur
Steuerzeichen anders interpretiert
werden. ------
~=.=.==.=.=.==.========:::=Sc- eines 5-Spur-LS
Bewegungsrichtung des LS

Bel e g e mit Mag n e t sc h r i f t bzw. s t i 1 i sie r t e n Z eie h e n (fur das mensch-


liche Auge mit den üblichen Schriftzeichen noch kompatibel) sind als maschinenlesbare
Informationsträger für OVA schon weit verbreitet. Normale, auf einer geeigneten Unterlage
gedruckte, sogar handgeschriebene Zeichen gewinnen als Speichermedien zunehmend an
Bedeutung.
Allgemeine Anwendung, vor allem als löschbares Speichermedium, hat in der DV-Technik die
mag n e t i s ehe I n f 0 r m a t ion s s p eie her u n g gefunden. Besonders oft wird der
Informationsträger b ewe g t e Mag n e t s chi c h t (Bild 2.8) eingesetzt. Dabei handelt
es sich um eine, auf einen Träger aufgebrachte dünne, magnetisierbare Schicht, die an bzw.
unter einem Schreib-/Lesekopf mit konstanter Geschwindigkeit vorbeigeführt wird. Durch den
am Luftspalt des Kopfes austretenden, im Rhythmus der zu schreibenden Information sich
ändernden magnetischen Streufluß werden in der Schicht kleine remanente Elementarmagnete
gebildet. Diese magnetischen Dipole wechseln abhängig von der zu speichernden Information
14 2.2. Speicherglieder

ihre Richtung. Die Dipollänge hängt ab von der Luftspaltlänge des Schreibkopfes, dem Abstand
des Kopfes vom Speichermedium und der Ausbildung der Polschuhe. Je geringer die Luft-
spaltlänge und vor allem der Abstand Kopf-Medium, desto größer die erzielbaren bit-Dichten
und damit Speicherkapazitäten. Das an den Dipolgrenzen austretende Streufeld verursacht,
während des Lesebetriebs am Lesekopf vorbeibewegt, in diesem eine Flußänderung. In der
Lesewicklung wird dabei ein Doppelspannungssignal induziert, das dem negativen Differential-
quotienten der Flußänderung und der Geschwindigkeit des vorbeibewegten Informations-
trägers proportional ist. Wegen der Doppelpoligkeit des entstehenden Lesesignals für beide
Flußrichtungen ergeben sich gewisse Schwierigkeiten der Interpretation der Binärzeichen 0 und
L, die durch bestimmte Auswerteverfahren [24] vermieden werden müssen.
Verfahren zur Ausnutzung dünner, ruh end e r Mag n e t s chi c h t e n als Speichermedium
mit extrem kurzem Informationszugriff sind noch weiterzuentwickeln, bevor sie in der Praxis
in großem Umfang wir t s c h a f t I ich eingesetzt werden können.
Eine wichtige Rolle für die Informationsspeicherung spielt eine aus diskreten Bauelementen
(oder Anordnungen solcher Elemente in IS) aufgebaute Grundschaltung, das F I i P f I 0 p ,
sowie das vor allem in der zweiten und dritten Computergeneration verwendete Speichermedium
Mag n e t - R i n g k ern (Bild 2.9). Hierbei handelt es sich um aus Ferritmaterial bestehende
Ringkerne. Diese magnetisierbaren Kerne (bis herunter zu ca. 0,3 mm Außendurchmesser)
müssen eine möglichst rechteckförmige Hystereseschieife und relativ hohen ohmschen Widerstand
besitzen, der die Erwärmung durch Wirbelströme innerhalb der Kerne in Grenzen hält. Ein
durch den Ringkern greifendes (wie ein Kettenglied durch sein Nachbarglied), hinreichend
großes, in seiner Richtung um 1800 umkehrbares Magnetfeld ist in der Lage, den Kern nach
einem Ummagnetisierungsvorgang (Bild 2.10) entsprechend der Hysteresekurve entweder in
einem positiven oder negativen Magnetisierungszustand (Remanenz) zurückzulassen [20]. Diese
beiden stationären Zustände im Medium werden für die Speicherung eines bit ausgenutzt. Die
Zuordnung der Symbole 0 und L zum positiven oder negativen Remanenzpunkt ist beliebig
(hier Rp ,; L).

r---------'"
I I
o-~~I; rHI~~
7Spallendraht
2 Inhibit-Draht

Schichtlräger ___ Elementarmagnet


Bewegungsrichtung des Datenträgers
2.8 Informationsspeicherung im Medium 2.9 Magnet-Ringkern mit Verkettungs-
"bewegte Magnetschicht" drähten

2.2.2. Speicherglied aus Ringkemen. Ein Ringkern stellt ein Speicherelement - nicht weiter
zerlegbarer Teil eines Speichers - zur Aufbewahrung eines bit innerhalb eines Speichergliedes
(z. B. aus einer Matrixanordnung von Ringkernen bestehend) dar. Sollen die Kerne nach dem
Lebendspeicherprinzip Verwendung finden, muß das Speicherglied folgendermaßen konzipiert
sein: Das für den Speichervorgang erforderliche Magnetfeld (H/2 + H/2) wird durch einen impuls-
2.2.3. Flipflop-Speicherglied 15

artig fließenden elektrischen Strom, den Vollstrom I, aufgebracht (Bild 2.10). Liegt der Arbeits-
punkt vor Aufbringen des in positiver Richtung verlaufenden Vollstromes (I - H) an der Stelle
RN' dann wird in den Ringkern ein Lei n g e sc h r i e ben. Für R p als Ausgangspunkt wäre
L im Kern gespeichert geblieben.
Angenommen, der Kern sei gesetzt (R p ) und solle abgefragt, gel e sen werden, dann ist kurz-
zeitig ein negatives Magnetfeld aufzubauen. Der Arbeitspunkt verläuft von R p über P 2 nach RN'
Das hierzu erforderliche dB/dt induziert im Lesedraht (Bild 2.9) einen genügend großen
Spannungsimpuls, der mit Hilfe einer speziellen Auswerteschaltung als im Kern gespeichertes L
interpretiert werden kann. Wäre der Ringkern vor dem Lesevorgang nicht gesetzt gewesen,
würde das dB/dt beim Lesen unterhalb der L-Schwelle geblieben sein. Jeder Lesevorgang bewirkt
ein Löschen der Information des zu lesenden Kerns. Soll aber auf die gespeicherte Information
wiederholt zurückgegriffen werden, dann ist sie nach jedem Lesevorgang wieder einzuschreiben.
Die Zeitspanne vom Lesebefehlsaufruf über den Lesevorgang bis zur abgeschlossenen Bereit-
stellung der gelesenen Information nennt man Zug r i f f s z e i t zu einem Speicher. Verlängert
sich diese Spanne noch um die notwendige Wiedereinschreibzeit (z. B. bei einem Speicherglied
aus Ringkernen), spricht man von der (Speicher-) Z y k lu s z e i t .

2.10 Spalten-Drähte
Hysteresekurve eines Magnet- ~
Ringkernes S7 S2 S3 S4
II 0 7 C 3

-H-H, H H H-If.
H l2 (4 5 6 7
"2 "2 w zei/en-{
drähte l3 8 9~ 10 71)
,
*' L....o
l4 Ge 73 74 75
Lese/eitung
Hw" Schreibfeldstärke
Hr " Lesefeldstärke 2.11 Prinzip einer Kernspeichermatrix
aus 4 x 4 Ringkernen

Zum selektiven Ansteuern eines Kerns innerhalb einer Speichermatrix (Bild 2.11) aus Ringkernen
ist die Aufteilung in Spalten- und Zeilendrähte für die Adressierung von aufwandreduzierendem
Vorteil. Jedem Kern teilt man eine bestimmte Nummer, A d res se, zu (hier 0 ... 15).
Entsprechend dieser Kennzeichnung werden der zugehörige Spalten- und Zeilendraht mit jeweils
einem in gleicher Richtung wirkenden, etwa die Hälfte des Vollstromes betragenden Stromimpuls
z e i t k 0 i n z i den t angesteuert. Dadurch wird eine eindeutige Auswahl 1 aus n getroffen
(Kern 9 adressiert in Bild 2.11; n = 16), weil sich nur im adressierten Kern beide Teilströme
zum Vollstrom addieren. Da es möglich ist, jeden einzelnen Kern separat zu setzen oder zu
löschen, braucht man pro Matrix nur ein e mit allen Kernen verkettete Leseleitung.

2.2.3. Fliptlop-Speicherglied. Beim F I i P f I 0 p (FF) handelt es sich um ein Speicherglied mit


bistabilern Zustand für die Aufbewahrung ein er binären Schaltvariablen (Bild 2.12) [16].
Aus jedem der beiden stationären Zustände kann es durch eine geeignete Ansteuerung in den
anderen umgesteuert werden. Es besitzt zwei Eingänge S (Setzen) und R (Rücksetzen) sowie zwei
zugehörige Ausgänge Q und Q'1), die normalerweise bezüglich des Ausgangssignals ein antivalentes

1) Qmit Invertierungsstrich wird gelesen: nicht Q.


16 2.2. Speicherglieder

Verhalten zeigen. Die Arbeitsweise des FF wird durch die Tabelle in Bild 2.12 veranschaulicht.
Das im oberen Index stehende n deutet den Vorzustand am FF an. Hinter der wirksamen Takt-
flanke hat sich nach einer kurzen übergangszeit, die ein reales FF neben einer bestimmten
Flankensteilheit, Amplitude und Dauer des Eingangssignals braucht, zum Zeitpunkt n + 1 der
neue stationäre Zustand eingestellt. Die Tabelleninterpretation zu diesem Zeitpunkt: Zeile 1:
unbestimmt; Zeile 2: gelöschtes FF; Zeile 3: gesetztes FF; Zeile 4: keine Änderung.

5d!T Ö
sn
0
0 L
nn
0
ti"7

0
Ön' 7
unbestimmt
L
2.12
NAND-Basis-Flipflop

R~Q
0) b)
L 0
L L
L
an
0
än
c)
a) Flipflop aus zwei kreuzgekop-
pelten NAND-Gliedern
b) Tabelle
c) Schaltzeichen

Außer dem NAND-Basis-Flipflop gibt es noch viele FF-Arten (Bild 2.13). Eine wichtige
Erweiterung der Basis-FF stellt ihre Führung durch Impulse dar, die von einer (zentralen)
Taktversorgung kommen. Nur während des anliegenden Taktimpulses können die FF
umgesteuert werden. Taktgeflihrte FF arbeiten (takt)synchron. Ein synchrones FF ist das zu
den Auffang-FF gehörige D-FF 1) (Bild 2.14).

flipflops (FF)

synchrone od. laktgesleuerle FF asynchrone Basis FF

Ein - Speicher-FF Hehr - Speicher - FF


( Auffang-FFJ ( Zäh/-FF)

taklflankengesleuerfe FF taktluslandsgesleuer/e FF
(oder einflankengesleuerf) (oder zweiflankengesll!lletl)
JK-FF JK-Hasler-Slave-FF 2.13 Flipflop-Arten

[j' On If' rn an!~


o 0 0 o 0 0
L 0 L L 0 L

~~----t:~ o L
L L
L
L r~---3=~ o
L L 0
L L

a) b) a) b)

2.14 D-Flipflop 2.15 T-Flipflop


a) Schaltzeichen b) Tabelle a) Schaltzeichen b) Tabelle

Zähl- oder T-FF (Bild 2.15) benötigen intern noch einen Zwischenspeicher. Sie gehören des-
wegen zu den Mehr-Speicher-FF. Diese FF können über ihre Vorbereitungseingänge eine
Ein-bit-Information aufnehmen und gl e ich z e i t i g die eigentlich gespeicherte (auch

1) D von delay = verzögern.


2.2.3. Flipflop-Speicherglied 17

den anstehenden Eingangssignalen inverse) Information an den Ausgängen zur Verfügung


stellen. Rückkopplungen der FF-Ausgänge auf ihre Eingänge ohne interne Entkopplung über
Zwischenspeicherung fUhren bei bestimmten Signalkonstellationen an den Eingängen zu un-
defmiertem Verhalten eines solchen FF. Durch den Einsatz der komplexeren, trotzdem wirt-
schaftlicheren integrierten Technik ist es möglich geworden, dieses undefinierte Verhalten zu
vermeiden und außerdem an der Eingangsseite der FF Möglichkeiten für boolesche Verknüp-
fungen (J- und K-Eingangskonjunktionen) mit einzubauen, die einen universelleren Einsatz
der FF erlauben. Hierbei handelt es sich um taktflanken- oder taktzustandsgesteuerte FF.

tn t'"
J K a
0 0 an
l
0 L 0
L
L
0
L
L
ä ~u-L
c) t
R~~--------------------~

Jo-<p:.Ll::.::0--o a
2.16
JK-Flipflop
a) Schaltzeichen des JK-FF
b) Tabelle des JK-FF
c) Steuerimpuls für Takteingang T
d) Prinzipschaltbild des JK-FF,
s~~--------------------~
aufgebaut aus booleschen
Verknüpfungsgliedern d)

tn I n+1
J K a
0 0 an

H;---j:~
0 L 0
L 0 L lt L
0 ~
ä
1

L L ~7 4"-1L
2.17 b) Sund Rauf l ~ ~
JK-Master-Slave-Flipflop a)
a) Schaltzeichen des JK-
Master-Slave-FF
b) Tabelle des JK-Master-
Slave-FF
c) Schaltverhalten während
eines Steuerimpulses am Takt-
eingangT
1 Trennung des Slave vom T OLO
Master
2 Informationsübergabe von
J und K in Master Jo--~I-H~-o ä
3 J- und K-Eingänge sperren I
4 Informationsübergabe von IL ________JI
Master in Slave
d) Prinzipschaltbild eines JK-
Master-Slave-FF, aufgebaut aus
NAND-Gliedern (ohne S- und Haster Slave
R-Eingänge) d)
18 2.3. Zentraleinheit

Die Bilder 2.16 und 2.17 zeigen das JK- und das JK-Master-Slave-FF. In ihnen sind sie nur
durch Verknüpfungsglieder dargestellt. Diese Pr i n z i p -schaltungen haben den Nachteil,
daß die internen Steuermaßnahmen zu den verschiedenen Taktpotentialzuständen nicht
völlig exakt simuliert werden. Dafiir wird aber die Wirkungsweise der FF leichter verständlich,
als wenn ein Stromlaufplan der IS (z. B. allein für ein JK-Master-Slave-FF mehr als zwanzig
Transistoranordnungen) gezeigt würde. Während das weniger aufwendige (kapazitive
Zwischenspeicherung) JK-FF nur die Information, die sich unmittelbar vor der Taktschalt-
flanke im Zwischenspeicher befmdet, übernimmt, darf sich beim JK-Master-Slave-FF die an
den Eingängen anstehende Information innerhalb einer wirksamen Taktschaltphase nicht
ändern. Geschähe dies durch Störeinflüsse dennoch, würde der Master (Zwischenspeicher)
umgesteuert, ohne in der kritischen Phase wieder zurückgesetzt werden zu können. Bei der
Übergabe bekäme der Slave (Haltespeicher) dadurch eine falsche Information.
Das JK-FF ist also weniger störanfällig, erfordert aber eine genau definierte Taktflanken-
steilheit. Demgegenüber zeigt das JK-Master-Slave-FF Empfmdlichkeit gegen Signal-
zustandsänderungen an den Eingängen in der kritischen Übernahmephase, stellt dafür aber
nicht so hohe Ansprüche an die Steilheit der Taktflanke.
Hauptanwendungsgebiet der FF sind elektronische Speicher (Register), zunehmend Arbeits-
speicher von DVA, Verschiebe- (Schieberegister) und Zählschaltungen. Solche Schaltungen, so-
wie beliebige Kombinationen von Verknüpfungs- und Speichergliedern stellen ein Sc hai t-
wer k dar. Der Ausgangszustand eines Schaltwerkes hängt vom jeweiligen Stand der Eingangs-
variablen zu einem bestimmten Zeitpunkt und dem Zustand der Speicherglieder innerhalb
des Werkes zu diesem Zeitpunkt ab. Eine DVA besteht zum großen Teil aus einer Kombination
von Schaltwerken und -netzen.

2.3. Zentraleinheit

Bei der Zentraleinheit (ZE) handelt es sich um eine Funktionseinheit innerhalb eines digitalen
Rechensystems, die aus dem Zentralspeicher, dem Prozessor und den
Ein - / Aus gab e - Wer k e n besteht. Eine ZE kann auch mehrere Prozessoren (M ehr -
pro z e s s 0 r s y s t e m) oder mehrere Zentralspeicher besitzen. Um ein M ehr r e c h -
n e r s y s t e m handelt es sich dann, wenn mindestens zwei unabhängige ZE periphere
Geräte gemeinsam benutzen. Vom konstruktiven Aufbau her gesehen ist die ZE das Kern-
stück eines Digital r e c h n e r s. Die Bezeichnung "Rechner" besagt aber keinesfalls, daß
die ZE z. B. nur rechnerische Probleme lösen könnte. Verglichen mit anderen Möglichkeiten
des Rechners wie Daten-Ein-/Ausgaben, -Transfer, -Speicherungen, Sortieren und Durch-
fUhren von booleschen Verknüpfungen, machen diese vielmehr nur eine relativ kleine Unter-
r----------------l
I Leitwerk I
I I
I I
I I
I I 2.18
L__ _J Prinzipieller Aufbau der Zentraleinheit (ZE) eines digi-
talen Datenverarbeitungssystems
A Ausgabewerk, Verbindung zwischen ZE und Ausgabe-
geräten
E Eingabewerk, Verbindung zwischen ZE und Eingabe-
- - Steuerung --OatennuB geräten
2.3.1. Zentralspeicher 19

menge aus. Bild 2.18 zeigt den prinzipiellen Aufbau, die möglichen Informationsflüsse und
das Zusammenwirken der einzelnen Einheiten der ZE. Die Wirkungsweise der Funktions-
einheiten für das grundsätzliche Verstehen der ZE wird im folgenden kurz erklärt.

2.3.1. Zentralspeicher. Ein Zentralspeicher (ZS) stellt als Bestandteil der ZE einen Speicher
mit kurzem Direktzugriff dar, zu dem Ein-/Ausgabe-Werke sowie Prozessoren unmittelbar
Zugang haben. Er setzt sich zusammen aus dem bis zu jeder Speicherstelle adressierbaren
Hau p t s pe ich er, vielfach Arbeitsspeicher (aus ihm erfolgt die Verarbeitung der Befehle
(s. Abschn. 1.4) und Daten) genannt, und eventuell aus dem Erg ä n z u n g s s p e ich er.
In der zweiten und dritten Rechnergeneration bestehen die Hauptspeicher in der Regel aus
Magnetkern-Koinzidenz-Speichern, kurz K ern s pe ich er (KS). Sie sind aus Speicher-
blöcken aufgebaut, die so viele Matrizen (s. Abschn. 2.2.2) besitzen, wie ein Maschinenwort
bit hat, und die so viel Worte (entsprechend ebenso viele Maschinenadressen) Speicher-
kapazität erreichen, wie eine Matrix Kerne enthält (a = x' y). Bild 2.19 zeigt das Schema
eines Kernspeicherblocks mit der Zusatz-hardware. Alle gleichnummerierten Spalten- und
Zeilendrähte der Matrizen werden hintereinander geschaltet. Zum Schalten des jeweils
notwendigen Halbstromes für diese Serienschaltungen benötigt man besondere Verstärker-
stufen, sog. Treiber.

Operationsansto8
vom Leitwerk

Nahtstelle zur
Oalen-Ein/
Ausgabe
SI
2.19
Prinzipdarstellung eines
Magnetkernkoinzidenz-
speicherblockes
Speicherkapazität S des Adressen- beslehend
register aus z Flipflops
Blockes in K bit:
x·y·z
S = 1024 ;
K = 1024
St Verbindung mit
Zyklussteuerung
m Anzahl der Speicher-
elemente mit einzu- Eine der
schreibender Informa- z Einzelmatrizen
tion Null
Xi ausgewählter Zeilen-
draht
Yi ausgewählter Spalten-
draht

Die Zyklussteuerung läßt im richtigen Moment zeitkoinzidente Stromimpulse durch die mit
Hilfe der Maschinenadresse ausgewählten Spalten- und Zeilendrähte des Speicherblocks treiben.
Auf diese Weise erfolgt die in Bild 2.19 angedeutete Auswahl des Wortes mit der Maschinen-
adresse ~ aus der Gesamtmenge von aSpeicherzellen. Das Auslesen der Speicherwortinhalte
geschieht über je einen jeder Matrix zugeordneten Leseverstärker mit Auswerteschaltung.
20 2.3. Zentraleinheit

Alle gelesenen Worte werden im Lese-/Schreibregister bereitgestellt. Jede Kernspeicherzelle


wird beim Lesevorgang gelöscht (s. Abschn. 2.2.2). Darum erfolgt im normalen Zyklus ein
Wiedereinschreibvorgang in dieselbe Speicherzelle. Hierbei würden aber in ihr aufgrund der
koinzident in den Spalten- und Zeilendrähten fließenden Halbströme immer alle Kerne gesetzt.
Damit jedoch jedes gewünschte Binärmuster in der Zelle gespetGhert werden kann, ist eine
Möglichkeit vorgesehen, das Setzen der Kerne u. U. zu verhindern. Dies geschieht durch den
Inhibitdraht, der wie die Leseleitung für jede Matrix getrennt vorhanden und innerhalb jeder
Matrix mit allen zu ihr gehörenden Kernen verkettet sein muß. Die erforderliche Steuerung
der Inhibit-Drähte nimmt das Lese-/Schreibregister über die Inhibittreiber vor.
Bei einem regulären Einschreibvorgang beginnt der Speicher-Zyklus nach der Wortwahl mit
einem Lese-, besser Löschvorgang der Speicherzelle, wobei ihr Inhalt nicht ins Lese-/Schreib-
register transferiert wird. In diesem steht schon die Information, die im zweiten Teil des
Zyklus eingespeichert werden soll.
Der erläuterte KS hat Wort struktur. Zu jeder der unter den Maschinenadressen von 0 ... a
zugänglichen Speicherzellen besteht Direktzugriff bei gleicher Zugriffszeit. In jede Zelle kann
ein beliebiges Binärmuster eingeschrieben werden. Die Reihenfolge der Auswahl von Zellen
sowie die Aufeinanderfolge von Ein: oder Ausspeicherungen sind beliebig.

2.3.2. Prozessor. Der Prozessor besteht aus dem (wegen ihrer intensiven Zusammenarbeit nur
schwer gegeneinander abzugrenzendem) Re c h e n - und Lei t - oder S t e u e r wer k .
Das Re c h e n wer k (RW) stellt innerhalb eines digitalen Rechensystems eine Funktions-
einheit dar, die hautpsächlich Rechenoperationen, Verschiebungen, Vergleiche und boolesche
Verknüpfungen durchführen kann.
Als konstruktiver Bauteil setzt sich das RW in seinen wesentlichen Bestandteilen aus Registern,
dem Verknüpfungswerk, Schaltungen fur Datentransfers und einer internen Steuerung
(Bild 2.20) zusammen. Die meist wortlangen Rechenregister sind bei einfachem Aufbau eines
RW das akkumulative (AKR), das Multiplikand-Divisor- (MDR) und das Multiplikator-
Quotienten-Register (MQR) (als Fortsetzung des AKR). D~s die verknüpften Ergebnisse
sammelnde AKR und das MQR bestehen z. B. aus bipolaren Schieberegistern.

SI

SI Verbindung mit intemer


Operulionensteuerung
2.20
Vereinfachtes PrinzipschaJtbild eines Rechen-
werks mit Paralleladdierwerk
2.3.2. Prozessor 21

Die Schaltungen für den Datentransport werden gebildet aus Schaltwerken, die durch eine
interne, mit dem Leitwerk zusammenarbeitende Steuerung geführt, den Datenfluß im RW
bewirken.
Das Verknüpfungswerk setzt sich hauptsächlich aus dem A d die r wer k zusammen.
Grundelement eines Addierwerkes ist ein Schaltnetz (Bild 2.21), der Addierer, der alle
Möglichkeiten der binärenj\.ddition (für eine BinärsteIle) erfüllt. Wird innerhalb eines Addier-
werkes nur ein Addierer eingesetzt, dann handelt es sich um ein S e r i e n a d die r wer k .
Stimmt die Anzahl der Addierer mit der bit-Anzahl des Wortes überein, spricht man von
einem Par all el a d die r wer k (PWA). Ein Serienaddierwerk benötigt erheblich

~(ngang ~.usgang
Summanden Ubertrag Summe Ubertrag
An1 An2 Ün'7 Sn Ün
0 0 0 0 0
0 L 0 L 0
L 0 0 L 0
L L 0 0 L
-- --- --- - - ---
0 0 L L 0
0 L L 0 L
L 0 L 0 L
,-
I L
- - r---- --- --,
L L L L I
L_ '--- --- --- __--.J
a)

2.21 Binäre Addition


a) Tabelle b) Addierer
c) Symbol für Addierer n c} Sn b)

weniger hardware-Aufwand als ein PAW, arbeitet allerdings langsamer. Die sich im ungünstigsten
Fall ergebende Durchlaufzeit eines übertrags durch die gesamte Addiererkette bestimmt die
Arbeitsgeschwindigkeit eines PAW. Es gibt eine Reihe von Schaltungen, die den infolge des
durchlaufenden übertrags entstehenden Zeitverlust reduzieren.
Zur Ausführung z. B. einer A d d i t ion (Bild 2.20) kommen aufgrund entspr. Weichen-
stellungen für den Datenfluß die beiden Summanden in das AKR und das MDR. Nach der
Addierzeit öffnet die Internsteuerung die Durchschaltung; das Ergebnis gelangt in das AKR.
MQR wird für diese Operation nicht benutzt. Bei einer M u I t i pli kat ion (bzw. Division)
müssen die Operanden in den entspr. bezeichneten Registern stehen. Die eigentliche Multipli-
kation wird aufgelöst in Teiladditionen und Verschiebeschritte (s. Abschn. 1.3). In der
niedrigstwertigen Stelle von MQR (E) entscheidet ein L, ob beim jeweiligen Verschiebe schritt
der Multiplikator stellenrichtig zuaddiert oder nur geschoben werden soll. Das Ergebnis der
Multiplikation wird im AKR und MQR aufgebaut. Bei m BinärsteIlen des Multiplikanden und
n BinärsteIlen des Multiplikators ergibt sich ein m + n Stellen langes Produkt.
Eine D iv i s ion kann entspr. mit Hilfe von Subtraktionen und Verschiebe schritten, eine
Sub t r akt ion durch Komplementaddition verwirklicht werden. Mit einer Einrichtung
zur Komplementbildung im RW ist es folglich möglich, für a ll e arithmetischen Operationen
nur mit einem A d die r wer kauszukommen.
22 2.3. Zentraleinheit

Die bei der Befehlsausführung sehr zahlreich auftretenden Teiloperationen und ihre jeweilige
Aufeinanderfolge bei der Durchführung der Befehle werden von der internen Operationen-
steuerung des RW unter Zusammenarbeit mit dem Leitwerk vorgenommen.
Das Lei t wer k (LW) als Funktionseinheit eines digitalen Rechensystems liest, entschlüsselt
und modifiziert ggf. Befehle. Es steuert die Befehlsreihenfolge (Programmsteuerung) und gibt
alle für die Befehlsausführung erforderlichen digitalen Signale vor. Die wesentlichen Bestand-
teile des LW sind: Register, die den Informationsfluß zwischen LW und den angeschlossenen
Schaltwerken steuern, Dekodierer und Schaltglieder. Letztere sorgen tUr die ordnungsgemäße
Durchführung und eine begrenzte überwachung der vom Programm her vorgegebenen
Operationen. Im Fehlerfall bewirken sie eine entspr. Anzeige. Bild 2.22 gibt Auskunft über die
Taktversorgung Start

St Verbindung mit
LW-Steuerung

Anfangsadrssse
Holen und (z8.Urprogramm)
Interpretieren
der Befehle

Adressen
fürZS

Befehls-
ausfiihrung
2.22
Schematischer Aufbau des Leit-
werks einer Einadreßmaschine (Fest-
EAW ZS RW wortstruktur)

Funktion des LW. In den einzelnen Speicherstellen des ZS stehen normalerweise in beliebiger
Reihenfolge Daten und Befehle. Letztere müssen vom LW in sinnvoller Folge aus dem Speicher
geholt und interpretiert werden. Weiterhin sind die in den Befehlen implizit enthaltenen
einzelnen Steuerungs- und überwachungavorschriften zur richtigen Ausführung der Befehle
(z. B. Verknüpfungen, Transfers, Sprünge, Ein-/Ausgabe, Verschiebungen) vorzugeben. Die
Funktion des LW gliedert sich also in zwei Abschnitte: das Holen und Interpretieren sowie die
Befehlsausfiihrung. Das Holen der Befehle läuft über den Befehlszähler (BFZ), der in einfachster
Form ein voreinstellbarer hardware-Zähler sein kann. Die in ihm gespeicherte Adresse bewirkt
den Transfer des Inhaltes der zugehörigen Zelle aus dem ZS in das aus FF bestehende Befehls-
register (BFR). Bei einer Maschine mit Festwortstruktur besitzt auch das BFR meist Befehls-
wortlänge. Hat eine Maschine variable Wortlänge, muß das BFR mehrere Speicherstellen ver-
arbeiten können.
Der BFR-Inhalt wird von der Decodierung als Befehl interpretiert. Ein Befehl besteht aus zwei
Teilen: dem 0 per a n den t eil (ODT), der hauptsächlich die Adresse(n) von Operanden
oder Befehlen enthält und dem 0 per a t ion s t eil (OTT), in dem Angaben über die
2.3.2. Prozessor 23

auszuführende Operation stehen. Besitzt ein Befehl nie mehr als eine Adressenangabe im
Befehlswort, dann handelt es sich um eine Einadreßmaschine. Bei zwei oder mehr Adressen
pro Befehl spricht man von Zwei- oder Mehradreßmaschinen, die meist auch Einadreßbefehle
bearbeiten können. Die zweite oder die weitere(n) Adresse(n) bestimmen z. B. den zweiten
Operanden einer Verknüpfung, den Platz auf den das Verknüpfungsergebnis abgespeichert
werden soll und/oder die Adresse des nächsten Befehles. Die weit verbreitete (vor allem für
technisch-wissenschaftliche und Prozeßprobleme) Einadreßstruktur besitzt den Vorteil der
kleineren Befehlslänge (bestimmte Befehle erfordern zudem nur eine Adresse). Dagegen
benötigt die Mehradreßstruktur eine geringere Anzahl von Befehlen für ein Programm. Das
ergibt vor allem bei der kommerziellen Datenverarbeitung eine Speicher- und Zeitersparnis.
Bei technischen Problemen befindet sich der zu verknüpfende Operand meist schon im
Rechenregister und das Zwischenergebnis i~t weiterzuverarbeiten, so daß ein einfach zu
realisierendes Einadreßsystem gegenüber einer starren Mehradreßstruktur vorgezogen werden
kann. Eine Maschine mit variabler Wortlänge, die als Ein- und Mehradreßmaschine zu
arbeiten vermag, benötigt zwar mehr hardware-Aufwand, stellt aber in Bezug auf Speicher-
und Zeitausnutzung ein Optimum dar. Im folgenden wird die Erläuterung des LW am Beispiel
der Einadreß-Festwort-Maschine weitergeführt.
Das BFR als eigenständiges Register ist notwendig wegen der zeitlichen Entkopplung des Lese-/
Schreib registers vom LW. Durch das BFR wird die Decodierung angesteuert. Die dort
ermittelte Operation wird an die Befehlsausflihrung gegeben. Diese wickelt die einzelnen
Steuer- und Überwachungsvorgänge im LW, RW, ZS oder EAW ab. Im einfachsten Fall wird
nach rückgemeldetem Befehlsende mit der um I erhöhten Adresse des BFZ der nächste
Befehl des Programms aus dem ZS in das BFR geholt. Von dieser linearen Reihenfolge der
Befehle geht man nur dann ab, wenn die Decodierung des OTT (z. B. unbedingter Sprung-
befehl) oder des ODT (z. B. Adressenänderung durch Indizierung) eine Abweichung erkennt.
Bei einem Sprungbefehl wird das im ODT angegebene Sprungziel in den BFZ eingeschrieben.
Im Falle der Adressenmodifikation durch Indizieren muß der Inhalt der entsprechenden Index-
registerzelle (Maschinen mit Indizierung haben oft eine unterschiedliche Anzahl von Index-
registerzellen, deren jeweilige Adresse im ODT vom Programmierer anzugeben ist) rechtzeitig
und vorzeichenrichtig zum Inhalt des BFZ addiert werden können.
Nach Schilderung der Arbeitsweise der Interpretation von Befehlen im LW sei darauf hin-
gewiesen, daß eine DVA nur einen binär verschlüsselten Befehl, einen Maschinenbefehl im sog.
Maschinencode (MC), verstehen kann. Ein Programmieren im MC ist aber für den Menschen
schwierig. Deswegen müssen alle u. a. aus mnemotechnischen Gründen l ) in höheren Programm-
sprachen geschriebenen Programme vor einem "Laufen" auf Digitalrechnern erst in den
zugehörigen MC übersetzt werden.
Ist die Hol- und Interpretierphase eines Befehlswortes abgeschlossen, hat die LW-Steuerung für
die Befehlsausftihrung zu sorgen; z. B. muß bei Verknüpfungsbefehlen der im ODT genannte
Operand in ein Register des RW geholt, von dort mit dem Inhalt des AKR verknüpft und das
Ergebnis im AKR bereitgestellt werden. Bei Transferbefehlen ist der Operand entweder aus
dem AKR in den ZS oder auf dem entgegengesetzten Weg zu transportieren. Ein Verschiebe-
befehl verlangt das Hereinholen der unter der Operandenadresse im ZS stehenden Verschiebe-
zahl. Diese Zahl gibt an, um wieviel BinärsteIlen das LW den Operanden im AKR zu
verschieben hat. Die Richtung liefert der OTT. Bei anderen Befehlsgruppen liegen ähnliche
oder noch kompliziertere Problemstellungen für das LW vor. Insgesamt aber tauchen immer

l)Mnemotechnik = Verfahren und Hilfsmittel zur Unterstützung des Gedächtnisses.


24 2.3. Zentraleinheit

wieder kleine, gleiche, sich häufIg wiederholende Funktionssteuerungen (Mikrobefehle) auf.


Ein Befehl kann in entspr. Folgen solcher Mikrobefehle l ) zerlegt werden. Handelt es sich dabei
um festverdrahtete Steuerungen (z. B. für Division), ist die Ausftihrzeit gering, der hardware-
Aufwand dagegen relativ hoch. Man kann ihn durch Unterprogramme oder ein software-Mikro-
programm (flexibler gegenüber fester Verdrahtung) reduzieren. Als Nachteil sinkt dann
allerdings die Operationsgeschwindigkeit und die Speicherkapazität um den Platzanteil des
Mikroprogramms. Sind außer Festpunkt- auch Gleitpunktoperationen (ohne zeitaufwendige
Umwege über Unterprogramme) durchzuftihren, steigt der Aufwand für LW und RW
erheblich an.
Abschließend soll zur Funktion des LW noch gesagt werden, daß Hol- und Interpretier- sowie
Befehlsausftihrungsphase bei modernen Rechnern nicht nacheinander (sequentiell), sondern
zeitverschachtelt (zeitmultiplex) ablaufen. Wäluend ein decodierter Befehl noch zur Ausftihrung
ansteht, kann der nächste bereits geholt und interpretiert werden. Durch Weitertreiben der
Zeitmultiplexarbeit und software-seitigem M ehr pro g r a m m b e tri e b sowie hardware-
mäßig doppeltem Auslegen ganzer Prozessoren für wir k I ich e S i m u 1 t a n a r bei t
wird die Effektivität der DVA immer größer werden.

2.3.3. Ein-/Ausgabe-Werk und Bedienungselement. Unter dem zur ZE gehörenden Ein-I


Aus gab e - Wer k (EAW) versteht man eine Funktionseinheit zur Steuerung von Daten-
übertragungen (zeichen- bzw. wortweise parallel) im Nahbereich (~ 30 m) zwischen ZS und
peripheren Speichern sowie ZS und Ein-/Ausgabegeräten (s. Abschn. 2.4). Das EAW arbeitet
auf der einen Seite mit dem LW zusammen und zeigt auch ähnlichen Aufbau und ähnliche
Wirkungsweise, auf der anderen Seite ist es verbunden mit den jeweiligen Internsteuerungen
der angeschlossenen EA-Geräte. Besonders die Vorrangsteuerung und zeitliche Koordinierung
(Simultanarbeit der Peripherie) zwischen den z. T. sehr langsamen EA-Geräten und dem
schnellen ZS sind vorzunehmen.
So, wie das EAW eine Kommunikationsbrücke zwischen ZE und der Peripherie eines digitalen
Rechensystems darstellt, verkörpert das Be die nun g sei e me n t eine Verbindung
zwischen dem Menschen (Operateur), der die Anlage betreut, und der Maschine. Beim
Bedienungsfeld (BDF) sind über Tasten Eingriffe wie Ein-, Aus- und Umschalten der Gesamt-
anlage oder ihrer Teile, Urprogrammeingabe und Geben von Anforderungen oder Stellen von
Bedingungen sowie, wenn auch in einfacher Form, Eingabe von Befehlen und Daten möglich.
Eine überwachung der Anlage kann durch eine Reihe von meist auf einem Leuchttableau des
BDF angeordneten Funktionsmeldungen und mit Hilfe von Meldungen über Informations-
stände gewisser interessierender Register vorgenommen werden. Das Bedienungsfeld interessiert
vor allem den Wartungsdienst, der Operateur sollte es möglichst wenig gebrauchen. Ihm steht
- neben der Betreuung der peripheren Geräte wie Magnetbänder, LS- und LK-Geräte usw. -
für den programm technischen Dialog mit dem Rechner der zum Bedienungselement gehörende
Bedienungsblattschreiber zur Verfügung (s. Abschn. 2.4.2), über den der Rechner auch seine
Quittier- und Störungsmeldungen ausgibt.

l)Hier nicht Makrobefehl, da dieser Name schon für eine zusammengehörige Gruppe von
(Maschinen)-Befehlen anderweitig vergeben ist.
2.4.2. Periphere Ein-jAusgabegeräte flir visuell und maschinenlesbare Datenträger 25

2.4. Periphere Geräte

Eine DVA besteht aus der ZE und einer Vielfalt von peripheren Geräten. Sie stellen die
Kommunikation der ZE mit der Umwelt (Daten und Befehle in ZE herein, Ergebnisse nach
außen) für ein sinnvolles Arbeiten der Gesamtanlage her. Die folgende Kurzinformation über
die wichtigsten Geräte umfaßt die Prozeßperipherie nicht.

2.4.1. Periphere Ein-/Ausgabegeräte für maschinenlesbare Datenträger. Der LK-L e s erbesteht


im wesentlichen aus einer Vorrichtung, die sukzessiv von einem einzulegenden LK-Stapel
einzelne LK greift, an der wichtigsten Geräteeinrichtung, der Lesestation, vorbeiführt und in eins
von evtl. mehreren Ablagefachern einsortiert. Die Lesestation tastet die Lochkombinationen
entweder mit Metallbürsten oder fotoelektronisch ab. Auf jeder Abtastspur befindet sich bei
Bürstenabtastung ein isoliertes Kontaktsegment, das nur bei einer unter dem Segment vorbei-
geführten Lochung mit der gegenüberliegenden Bürstenreihe in Kontakt kommt. Bei fotoelektro-
nischer Abtastung erfolgt beim Abfühlen einer Lochung die Belichtung einer Fotodiode. So ist
es möglich, das pro Spur räumliche Nacheinander von Lochkombinationen in eine zeitliche
Impulsserie umzusetzeni). Normalerweise bringt die Z eil e n - gegenüber der S pa 1 t e n-
Abtastung der LK eine Steigerung der Abtastgeschwindigkeit, die allerdings neben erhöhtem
Abtastaufwand eine elektronische Zwischenspeicherung der LK-Information erfordert.
Der elektromechanische Aufbau des LK-L 0 c her s ist ähnlich dem des Lesers. Die Loch-
station besteht aus den flir das Einstanzen der Lochkombination notwendigen elektromagne-
tisch betätigten Stanzstempeln. Wegen der überwiegend mechanischen Ausrüstung werden nur
Lochgeschwindigkeiten bis ca. 10 LK/s gegenüber bis zu 30 LK/s beim Lesen erreicht 2 ).
Die wichtigsten Teile eines LS-G e rät e s sind die Auf- und Abspulvorrichtung, die Lese-/
Stanz-Station und die Streifentransporteinrichtung. Ähnlich wie beim LK-Gerät funktioniert
die zeichenweise parallel arbeitende Stanz- bzw. Abflihlstation. Als Abflihleinrichtung beim
LS gibt es darüber hinaus noch die kapazitive Abtastung, die aus dem der Lochkombination
proportionalen Dielektrikum des "Abtastkondensators" ein Kriterium flir die zu lesende
Information ableitet. Es werden im Start-Stop-Betrieb (z. B. zeichengerechtes Stoppen unter
der Lesestation; Zeichenabstand 2,5 mm!) beim LS Lesegeschwindigkeiten von 2200 Zeichen/s
und Stanzgeschwindigkeiten bis zu 300 Zeichen/s erreicht. Schwierigkeiten bereiten bei den
hohen Geschwindigkeiten vor allem die starken Beschleunigungen und Verzögerungen des
Streifens.

2.4.2. Periphere Ein-/Ausgabegeräte für visuell und maschinenlesbare Datenträger. Beim


B 1 a t t s ehr e i b e r (BS) handelt es sich um ein fernschreiberähnliches Gerät mit LS-
Zusätzen, das· sich flir die manuelle Erstellung eines Protokolls in Klartext (evtl. mit mehreren
Durchschlägen) über eine Tastatur im Zweifarbendruck sowie für die gleichzeitige, zeichenweise
Informationseingabe in den Rechner und einen mitlaufenden LS eignet. Die Informationsein-
gabe kann auch über den angebauten LS-Leser erfolgen, wobei ebenfalls ein Klartextprotokoll
ausgegeben wird. Ferner ist der BS in der Lage, im rechnergesteuerten Betrieb Informationen
im Klartext auf ein Protokoll und ggf. gleichzeitig über den angebauten LS-Stanzer in einen LS
auszugeben. Der BS kann auch, vom Rechner getrennt, manuell betrieben werden. BS
arbeiten mit einer maschinellen Ein-/Ausgabegesch,windigkeit von 7,5 bis 40 Zeichen/so

1) Meist (umschaitbar) binäres oder alphanumerisches Lesen möglich.


2) EjA-Geschwindigkeit kann abhängig von Anzahl der Zeichen pro LK sein.
26 2.4. Periphere Geräte

Der Sc h n e 11 d ru c k e r (SD) stellt eine weitere, allerdings sehr viel schnellere Möglichkeit
zur Zeichenausgabe dar. Ein elektromagnetisch arbeitender SD ermöglicht ein Drucken mit
einer Geschwindigkeit bis zu 20 Zeilen/s (bei max. 150 Schreibstellen/Zeile). Zwei mechanische
Druckarten haben sich durchgesetzt. Einmal sind alle anzugebenden Zeichen auf dem Umfang
eines Typenrades untergebracht. Es werden so viel Typenräder zu einer Typ e n t rom m e 1
vereinigt, wie der Drucker Schreibstellen/Zeile haben soll. Vor der Typentrommel befindet sich
in einer Reihe angeordnet pro Schreibstelle je ein Druckhammer. Zwischen der dauernd mit
konstanter Geschwindigkeit rotierenden Trommel und der Hammerreihe verläuft mit zeilen-
weisem Vorschub das zu bedruckende Papier. Kommt das auszugebende Zeichen an der Hammer-
reihe vorbei, wird elektronisch rechtzeitig ein Auslöse-Kommando gegeben, das den Hammer
elektromagnetisch gegen die Trommel schleudern läßt. Nach einer Umdrehung der Trommel ist
jeweils eine Zeile gedruckt. Diese Betriebsweise bedingt die elektronische Zwischenspeicherung
eines Zeileninhaltes.
Bei der zweiten Schnelldruckerart sind die Typen auf einer senkrecht zur Papierrichtung um-
laufenden, beweglichen Typ e n k e t t e untergebracht. Die an den Schreibstellen sitzenden
Druckhämmer werden dann elektronisch ausgelöst, wenn sich das auszugebende Zeichen an der
Schreibstelle befindet.
Sind höhere Druckgeschwindigkeiten gewünscht, setzt man nichtmechanische SD ein. Die
bekannteste Methode ist das elektrostatische Druckverfahren (Xerographie). Damit werden
Druckgeschwindigkeiten von 100 Zeilen/s erreicht. Leider kann man bei den nichtmechanischen
Verfahren meist keine Kopie gleichzeitig mit dem Originaltext erstellen.
Der einfachste Bel e g 1 es e r (s. Abschn. 2.2) ist der M ar k i e run g sie se r. Er liest die
in einem besonders gekennzeichneten Feld z. B. durch Striche eingetragenen Markierungen.
Speziell auf dem kommerziellen Sektor gewinnen die magnetischen und optischen Belegleser
zunehmend an Bedeutung. Als mit großen Schwierigkeiten verbunden erweist sich das direkte
maschinelle Erkennen von handgeschriebenen Zeichen. Eine ähnliche Problematik liegt bei der
maschinellen Spracherkennung und vollsynthetischen Sprachausgabe vor. Auf diesen Gebieten
gibt es beim derzeitigen Stand der Technik bereits vielversprechende Ansätze. Es ist jedoch auf
diesem Sektor bis zu einem verbreiteten Einsatz ausgereifter Geräte noch viel Entwicklungs-
'arbeit zu leisten.
Automatische Z e ich eng e rät e werden zum Zeichnen von Kurven oder Einzelpunkten
eingesetzt. Sie arbeiten nach dem Grundsatz der Koordinatensteuerung. Beschränkt man sich auf
rechtwinklig ebene Koordinaten, dann ergeben sich i. allg. folgende Konstruktionsmöglichkeiten
von Zeichengeräten:
Plot t e r - Pr i n z i p. Hierbei wird eine Bewegungsrichtung (x) durch Verschieben des
Zeichenträgers (papier) die andere (y) durch Bewegung eines Zeichenstiftes senkrecht zur
x-Richtung erzielt.
Eie k t rom e c h a n i s c h e s K 0 0 r d i n a t 0 g rap h e n - P r i n z i p. Bei diesem Prinzip
fuhrt der Zeichenstift, gesteuert durch vom Rechner vorgegebene (x, y)-Koordinaten, über dem
festliegenden Zeichen träger eine zusammengesetzte Bewegung aus.
Da beim Plotter der Zeichenträger die Vermittlung der Bewegungssteuerung übernehmen muß,
arbeitet er i. allg. ungenauer (etwa 0,2 bis 0,3 mm), während das Prinzip des Koordinatographen
eine höhere Zeichengenauigkeit (bis ca. 0,01 mm) zuläßt. Meist kann durch Wahl der Zeichen-
schrittlänge die Genauigkeit auf Kosten der Schreibgeschwindigkeit eingestellt werden. Je nach
verlangter Genauigkeit und Geräteform werden als Zeichenträger beschichtete Glasplatten, Folien
2.4.2. Periphere Ein-! Ausgabegeräte für visuell und maschinenlesbare Datenträger 27

sowie die verschiedensten Papiersorten und als Schreibvorrichtungen Graviernadeln, Tuschestifte


sowie Kugelschreiber verwendet.

Elektronisch fotografisches Koordinatographen-Prinzip. Beim


elektronischen, fotografischen Zeichengerät setzt ein vom Rechner koordinatengesteuerter,
sich über einen Mikroftlm bewegender Elektronenstrahl die Ausgabeinformation in die Kurven-
darstellung um. Man muß den Mikrofilm allerdings erst entwickeln, bevor das Ergebnis sichtbar
wird, daflir gibt es bei diesem Prinzip keine mechanisch bewegten Teile.
Zeichengeräte können direkt (on line) von einem Rechner in Simultanarbeit mit anderen peri-
pheren Geräten betrieben werden, aber auch "offline", d. h. nicht unmittelbar mit dem Rechner
verbunden, arbeiten. Dann übernimmt ein von einer DVA beschriebener Datenträger die
Steuerung des Gerätes.
Die allmählich preisgünstiger werdenden S ich t ger ä t e gewinnen im Zuge der Weiter-
entwicklung von DVA zur direkten Kommunikation zwischen Mensch und Maschine [19]
ständig an Bedeutung. Durch diese Geräte, auch Datensicht-, Schirmbildgeräte oder Displays
genannt, sind Kurven sowie Zeichnungen (analoge Sichtgeräte), und/oder Klartext (alpha-
numerische Sichtgeräte) auf einem Bildschirm (Elektronenstrahlröhre) geräuschlos sichtbar zu
machen. Das Erzeugen der optischen Anzeige auf dem Leuchtschirm kann auf folgenden Wegen
geschehen:
1. das auf dem Schirm darzustellende Bild wird (großer Programm-, Zentralspeicher, Rechen-
zeit- sowie Datenübertragungs-Aufwand bei geringstem hardware-Aufwand im Sichtgerät) per
Programm erzeugt, laufend regeneriert und ggf. variiert.
2. Der Bildwiederholspeicher wird als hardware-Speicher in das Sichtgerät verlegt, so daß die flir
flimmerfreie Darstellung alle 16 bis 50 Malls notwendige Bildregenerierung den Rechner und die
übertragungskanäle nicht mehr so stark belastet.
3. Der Rechner gibt nur Zeichen, ihre Position auf dem Schirm und/oder Koordinaten flir Anfangs-
und Endpunkte von Vektoren vor, die z. B. wie ein Polygonzug zu einem Diagramm zusammen-
setzbar sind, und sorgt flir evtl. Variieren der Schirrninformation. Im Sichtgerät übernehmen hard-
ware-Einrichtungen die laufende Bildsteuerung und -regenierung. Die flir die Darstellung von
alphanumerischen Zeichen erforderlichen Ablenk- und Helltastsignale des zu führenden Elektronen·
strahls der Bildröhre werden in Zeichengeneratoren z. B. durch Punkt- oder Strichraster, mit
aneinandergereihten Formelementen aus Strichen unterschiedlicher Länge und Neigung, durch
fortlaufende Kurvenzüge oder mittels starrer Speicherung des notwendigen Zeichenvorrats in einer
Spezialröhre erzeugt. Positionsgeneratoren fahren den Strahl dunkelgetastet meist über das
magnetische Ablenksystem des Bildrohres zu der jeweiligen Stelle im Schirmunterraster , wo das
Zeichen erscheinen soll. Die Elektronenstrahlablenkung (elektrostatische Ablenkung) im jeweiligen
Unterraster und die Helltastung für das auszugebende Zeichen steuert der Zeichengenerator . Dies
geschieht beispielsweise durch Abtasten einer dem abzubildenden alphanumerischen Zeichen
entspr. kleinen 5 x 7 Kernspeichermatrix im Strichraster (Darstellung des Zeichens aus horizon-
talen Strichen in der jeweils notwendigen, das Zeichen wiedergebenden Länge; Darstelldauer pro
Zeichen 10 bis 50 jJ.s). Komplexe Zeichnungen und Diagramme sind mit Hilfe von Vektor-
generatoren darstellbar.
Die Vorgabe von Zeichen flir die Sichtgeräte ist auch allein oder im Dialog manuell gezielt über
eine Tastatur möglich. Nach visueller Kontrolle der Eingabedaten und ggf. beliebigen Korrekturen
kann durch Tastendruck die Information in den Rechner übernommen werden. Bei entspr.
geräteseitigern und programmtechnischem Aufwand können auch Figuren und Funktionen im
28 2.4. Periphere Geräte

"rechnergestützten Entwurf' auf dem Schirm mit Hilfe eines Lichtgriffels manuell aufgebaut bzw.
gelöscht, oder im vorhandenen Bild verändert und u. U. auf Tastendruck in den Rechner abrufbar
eingespeichert werden. Außerdem lassen sich über eine Funktionstastatur verschiedene Pro-
gramme aktivieren, die ein flexibles Arbeiten mit dem Sichtgerät gestatten.
Sichtanzeigegeräte erlauben also je nach Komfort einen vielseitigen, direkten Dialog mit einer
DVA. Dokumentationen wichtiger Arbeitsphasen übernehmen ggf. fotografische Einrichtungen
und/oder an das Gerät anzuschließende Drucker bzw. LS-Stanzer. Sichtgeräte kann man auch
off Hne einsetzen.
E/A-Geräte sind nicht nur im Nahbereich an eine ZE anschließbar. Sie können ebenso über weite
Entfernungen durch eine D at e n s tat ion (Benutzerstation, Terminal) mit einer DVA
verbunden werden. Dafür ergibt sich ein zusätzlicher Aufwand an Einrichtungen, der die an der
Rechnernahtstelle wort- bzw. zeichenweise parallel vorhandene Information fur die serielle Über-
tragung auf Postleitungen umsetzen, übertragen und benutzerseitig an das E/ A-Gerät anpassen
muß. Beim Teilnehmer gehören neben dem Übertragungssystem noch Datensicherungseinrichtun-
gen sowie das eigentliche Gerät (z. B. BS, Sichtanzeigegerät, Tastaturen) zur Station. Mit Hilfe
dieser Einrichtungen kann man ein umfassendes Teilnehmer-Rechensystem (s. Abschn. 3.2.4)
mit räumlich weit entfernten Benutzern einer zentralen Großrechenanlage aufbauen.
im Rahmen umfangreicher Problemstellungen ist oft die unterstützende Zusammenarbeit
mehrerer Rechensysteme aktuell. In diesen Fällen übernehmen K 0 P P e 1 ger ä t e die Zusam-
menschaltung des meist hierarchisch gegliederten Verbundsystems. Sie können Anlagen im Nah-
bereich mit einer großen Datenübertragungsrate (einige 106 bit/s) verbinden. Diese sinkt aber
erheblich ab (nur bis max. einige 10 3 bit/s) durch die notwendige Zwischenschaltung der Ein-
richtungen für eine Datenfernübertragung.

2.4.3. Periphere Speicher. Unter peripheren Speichern versteht man alle Speichergeräte in DVA,
die nicht als Zentralspeicher fungieren. Es handelt sich also um Erweiterungsspeicher meist für
große Mengen von Informationen, die die Speicherkapazität des zentralen Speichers (Daten und
Befehle nur vom ZS aus in der Anlage zu verarbeiten) in geeigneter Weise vergrößern. Für solche
Speicher werden hohe Speicherkapazitäten, große Datenübertragungsraten zwischen ZE und
Peripherspeicher , geringe Zugriffszeiten, möglichst Direktzugriff zu dem kleinsten adressierbaren
Speicherbereich und geringe bit-Kosten angestrebt. Diese Forderungen haben sich bisher in einem
einzigen Gerät nicht erftillen lassen, so daß innerhalb der Konfiguration einer DVA durchaus
mehrere Peripheriespeicherarten anzutreffen sind. Tafel 2.23 zeigt eine Zusammenstellung von
Richtwerten zum Vergleich von peripheren Speichern, zu denen man auch KS rechnen kann.
Diese gelangen zum Einsatz, wenn periphere Speicher mit äußerst kurzen Zugriffszeiten benötigt
werden. Das Speichermedium "bewegte Magnetschicht" (s. Abschn. 2.2) findet seit Jahren auf
diesem Sektor als Datenträger fur Massenspeicher Verwendung. Dabei ist ein günstiger Kom-
prorniß zwischen kurzer Zugriffszeit und hoher Speicherkapazität bei möglichst geringen bit-
Kosten zu suchen.
Bei einem Mag n e t ban d ger ä t besteht das Speichermedium aus magnetisierbaren
Eisenoxyden, mit denen Kunststoffbänder überzogen werden. Die Information wird zeichen-
weise parallel (die einzelnen Zeichen nacheinander) in dem Magnetbandgerät auf 12,7 bzw.
25,4 mm breiten und 90 bis zu ca. 2000 m langen Bändern in mehreren, parallel zur Band-
bewegungsrichtung verlaufenden Spuren gelesen oder ge- bzw. überschrieben. Die Zeichen stehen
senkrecht zur Bandlaufrichtung in einer Dichte von bis zu 640 Zeichen/ern. Direktes Aufliegen
der Schreib- und Leseköpfe auf dem Band bewirkt diese hohe Dichte. Das zwischen zwei Spul-
körpern vor- und zurückspulbare Magnetband stellt einen Speicher mit sehr geringen bit-Kosten
2.4.3. Periphere Speicher 29

dar. Allerdings kann die in Blöcken mit variabler Zeichenanzahl gespeicherte Information nicht
in direktem Zugriff, sondern nur sequentiell abgerufen oder gespeichert werden. Dadurch
entstehen u. U.lange Zugriffszeiten zu den blockweise adressierbaren Daten. Die leichte
Austau~chbarkeit und die (klimatisch allerdings gewisse Anforderungen stellende) Lagerfahig-
keit der Bänder ermöglicht das Anlegen von Bandarchiven mit nahezu unbegrenzter Informations-
speicherung.

Tafel 2.23 Richtwerte für den Vergleich von peripheren Magnetspeichern

Typ Kernsp. Trommelsp. Plattensp. Kartensp. Bandsp.

mittlere 0,2 bis 1,5 bis 20 bis 0,2 bis bis einige
Zugriffs. einige 100 ms 400 ms 0,5 s Minuten
zeit J1s
Speicherkapazi- 104 bis 10 7 10 5 bis 10 8 10 5 bis 10 9 10 8 bis 10 10 bis 5 . 10 7
tät in bit pro Band
bit-Kosten in ~ 50 10 bis 20 0, I bis 0,5 0,002 bis 0,2 ~ 0,02
Pfennig pro bit
Datenüber- bis 5 . 107 106 bis 107 5 . 10 5 bis 10 5 bis 106 10 5 bis 10 6
tragungsrate in 5 . 10 6
bit pro Sekunde

Beim Mag n e t t rom m eIs p e ich e r ist das Speichermedium auf der Oberfläche einer
mit mechanisch hoher Präzision und konstanter Geschwindigkeit rundlaufenden Trommel auf-
gebracht. Meist ist den datentragenden Spuren (eine Umfangslänge der Trommel senkrecht zu
ihrer Achse, festgelegt durch den Kopf) jeweils ein Schreib-/Lesekopf fest zugeordnet, der, um
hohe bit-Dichten zu erzielen, in weniger als 10 J1 Abstand auf einern Luftpolster aerodynamisch
über seine Spur gleitet und bitseriell Information lesen oder ein- bzw. überschreiben kann. Die
Information ist adressierbar bis zu einern Sektor als Untermenge einer Spur. Im Gegensatz zum
sequentiellen Zugriff zur Information auf einern Magnetband hat das einen Direktzugriff
(Randomspeicher) zur Folge mit einer mittleren Zugriffszeit von einer halben Umlaufzeit der
Trommel bei fester Zuordnung eines Schreib-/Lesekopfes zu jeder der bis zu 1000 Trommel-
spuren.
Während die Speicherfahigkeit von Trommelspeichern Proportionalität zu ihrer Oberfläche
zeigt, verhält sich die Kapazität von PI at t e n s p e ich ern proportional dem (allerdings
schlecht genutzten) Volumen. Die Information wird auf besonders ebenen Plattenoberflächen
zentralsymmetrisch in das Medium auf mehreren Hundert konzentrischen Kreisen, den Spuren,
bitseriell gespeichert. Es werden mehrere (von Extremfallen abgesehen bis zu 50) solcher
Platten mit einern Durchmesser bis zu ca. I m auf einer stabilen, rotierenden Welle zu einern
starren Plattenstapel (beide Außenstirnflächen tragen keine Information) zusammengefaßt.
Anzahl und Anordnung der meist auf einern Schlitten montierten, kammartig in den Platten-
stapel hineingreifenden Magnetköpfe unterscheiden die einzelnen, Direktzugriff besitzenden
Plattenspeicher voneinander. Die Schreib-/Lesetechnik ähnelt derjenigen auf der Trommel,
wobei die mittlere Zugriffszeit neben der aus mechanischen Gründen geringeren Anzahl der
Umläufe pro Sekunde noch um die Positionierzeit der Köpfe verlängert wird. Als zusätzliches
Kriterium zur Adressierung kommt im Gegensatz zur Trommel die Plattenoberfläche bzw.
30 2.4. Periphere Geräte

Adresse der Spur hinzu. Durch die Auswechselbarkeit der Plattenstapel bei bestimmten
Speichertypen ist eine sehr hohe Archivspeicherkapazität erreichbar.
Bei Mag n e t kar t e n s p e ich ern erzielt man unter Beibehaltung des Direktzugriffes
durch noch bessere Raumausnutzung eine weitere Steigerung der Speicherkapazität. Karten-
speicher bestehen im Prinzip aus einem Trommelspeicher mit "auswechselbarer Speicher-
oberfläche", den Magnetkarten als Datenträger. Die Karten besitzen eine Reihe von Spuren und
befinden sich hängend in mehreren Magazinen (z. B. ä 256 Karten zu je ca. 105 bit) angeordnet.
Der Aufhängemechanismus erübrigt eine starre Reihenfolge der Datenträger und erlaubt
selektiven Zugriff zu ihnen. Eine durch ihre Adresse angesteuerte Karte fällt aus dem Magazin
in eine Zufiihrung und wird pneumatisch zur Informationsauf- bzw. -abnahme auf eine
Trommel gespannt. Die Magazine sind auswechsel- und damit archivierbar.
3. Programmierung von DVA

3.1. Vorbereitende Aufgaben zur Erstellung eines Programms

Vor der Aufstellung eines Rechenprogramms sind verschiedene vorbereitende Aufgaben


durchzuführen. In groben Zügen kann man diese wie folgt unterteilen:
1. Problemanalyse
2. Wahl eines geeigneten Verfahrens
3. Aufstellen eines Programmablaufplanes
4. Vereinbarungen über die Ein- und Ausgabe der Daten
Je nach Art und Umfang des Problems, der verwendeten Programmiersprache und den Test-
möglichkeiten der zur Verfügung stehenden Rechenanlage werden diese vorbereitenden
Arbeiten mehr oder weniger Zeit in Anspruch nehmen als das Erstellen und Testen des Pro-
gramms. I. a. werden sie bei größeren und komplizierteren Aufgaben wesentlich umfang-
reicher sein als die eigentliche Programmier- und Testarbeit.
Zur Pro b lern a n a I y seist eine genaue Kenntnis aller Zusammenhänge der zu
behandelnden Aufgabe erforderlich. In der Praxis ist dies meist nur durch Rücksprache mit
den zuständigen Sachbearbeitern oder durch Teamarbeit möglich.
Die W a h lei n e s g e e i g n e t e n Ver f a h ren s setzt bei vielen Problemen
Kenntnisse der numerischen Mathematik voraus. Auch ein überblick über bereits vorhandene
Programme oder Programmteile (U n t e r pro g r a m m e) ist hierbei von großem Nutzen.
Schließlich muß sich der Benutzer über die Leistungsfähigkeit der zur Verfügung stehenden
Rechenanlage im klaren sein.
Bei der Auf s tell u n gei n e s Pro g r a m m abi auf pi an e s (auch Bio c k -
dia g r am m, S t ru k t u r dia g r a m moder F lu ß dia g r a m m genannt) müssen
alle innerhalb eines Programms auftretenden Möglichkeiten und Sonderfälle von vornherein
berücksichtigt werden. Ein Programmablaufplan soll den Ablauf einer Rechnung möglichst
übersichtlich darstellen. Meistens wird man sich bemühen, ihn u n ab h ä n gig von der
Re c h e n a n 1 ag e oder der benutzten Programmiersprache aufzustellen. Manchmal wird
es jedoch erforderlich sein, gerade die jeweils g e g e ben e n B e s 0 n der h e i t e n der
Anlage günstig auszunutzen.
Der Anfanger sieht meist die größte Schwierigkeit im Erlernen einer Programmiersprache und
wird durch deren Vielzahl verwirrt. Man könnte hier vielleicht zum Vergleich das Verhalten
eines Fahrschülers heranziehen, der seine ersten Fahrversuche mit einem Kraftfahrzeug macht.
Dieser wird anfangs hauptsächlich mit der Beherrschung des Fahrzeugs beschäftigt sein. Die flir
ihn wichtigeren Aufgaben sind jedoch das Beobachten des Straßenverkehrs und das Erreichen
eines vorgegebenen Zieles. Diese Fähigkeiten können erst durch einige übung und Erfahrung
erworben werden. Die Umstellung auf ein anderes Fahrzeug bereitet einem erfahrenen Kraft-
fahrer hingegen keine große Schwierigkeit.
In der Datenverarbeitung ist die Beherrschung einer Programmiersprache ebenfalls erforderlich,
32 3.1. Vorbereitende Aufgaben zur Erstellung eines Programms

um Erfahrungen im Erstellen von Programmen zu machen. Die eigentliche Schwierigkeiten


liegen jedoch in der Problemanalyse, der Wahl eines geeigneten Verfahrens und in der
Erfassung des logischen Ablaufs des Programms. Einem erfahrenen Programmierer bereitet die
Umstellung von einer Programmiersprache auf eine andere ebenfalls keine große Schwierigkeit.
Die Behandlung von Pro b 1 e man a 1 y sen und zur Programmierung geeigneter
m a t h e m a t i s c her Ver fa h ren ist ein sehr umfangreiches Gebiet und daher nicht
die Aufgabe des vorliegenden Buches. Die Aufstellung von Pro g r a m m abi auf p 1 ä n e n
soll im folgenden jedoch etwas ausführlicher behandelt werden.
In diesem Zusammenhang muß auf einige wesentliche Unterschiede zwischen dem Arbeiten
mit einfachen Rechenhilfsmitteln wie Rechenschieber oder Tischrechenmaschine und einer
programmgesteuerten Rechenanlage hingewiesen werden: Beim Arbeiten mit ein f ach e n
Rechenhilfsmitteln ist der Benutzer beim Rechenablauf zu-
g e gen; er hat jederzeit die Möglichkeit, den Rechenablauf den Zwischenergebnissen anzu-
passen, auf ein anderes Verfahren überzugehen oder die Rechnung zu beenden. Bei der
Pro g r a m m i e run g müssen jedoch a 11 e möglichen Fälle von vor n her ein
berücksichtigt werden.
Der Programmierer steht a u ß e r hai b des R e c h e n vor g a n g es, muß diesen aber
bis in alle Einzelheiten überblicken können. Die erforderlichen E n t s c h eid u n gen
müssen ebenso festgelegt werden wie die R e i h e n f 0 1 g e a 11 e r ein z ein e n
R e c h e n 0 per a t ion e n. Die Entscheidungen sind dabei den Möglichkeiten der Rechen-
anlage bzw. der Programmiersprache anzupassen. Dies fUhrt häufig zu einer dem Menschen
sonst ungewohnten und ihm umständlich erscheinenden Denkweise. Selbst kleine Aufgaben,
wie z. B. die Berechnung eines Polynoms beliebiger Ordnung, können dem Anfänger daher
Schwierigkeiten bereiten.
Da ein Rechenprogramm im wesentlichen aus den aus f ü h r 1 ich e n Vor s c h r i f t e n
zur Lösung eines Problems nach einem b e s tim m t e n Ver f a h ren besteht und von
den jeweils verwendeten Eingangsdaten (auch Parameter oder Einflußgrößen genannt) unab-
hängig ist, kann es immer wieder zur Lösung dieser Aufgabe verwendet werden. Beim Arbeiten
mit einfachen Rechenhilfsmitteln hingegen muß die g e sam t e R e c h e n a r bei t vom
Menschen für j e den Fall neu geleistet werden.
Ein Pro g r a m m abi auf p 1 a n besteht aus einzelnen B 1 ö c k e n, die durch P fe i 1 e
miteinander verbunden sind. Die Pfeile geben die R ich tun g an, in der das Programm durch-
laufen wird. Ein re c h t eck i ger Bio c k enthält eine oder mehrere Rechenoperationen
(bei einem groben überblick kann es sich auch um ganze Programmteile handeln). Ein solcher
Block hat einen Eingang und einen Ausgang. Ein rau t e n f ö r m i ger Bio c k gibt eine
Programmverzweigung an. Er hat einen Eingang und zwei oder mehrere Ausgänge. Daneben gibt
es weitere Arten von Blöcken zur Darstellung von Ein- und Ausgaben usw. Wenn sich
Programmzweige vereinigen, so werden Pfeile zusammengeführt.
Die Bilder 3.1 bis 3.4 zeigen Beispiele mit kleinen Ausschnitten aus Programmablaufplänen.
Die verwendeten großen Buchstaben stehen anstelle von Variablen, Ergebnissen oder Programm-
anweisungen (Rechenoperationen, Umspeichern von Daten u.a.). Das Symbol := ist als
" tri t t ans tell e von" zu lesen. Man spricht auch von einer Wer tz u w eis u n g .
Bei der Programmierung tritt häufig die Bildung von Pro g r a m m s chi e i f e n auf. Dies
ist immer dann der Fall, wenn ein bestimmter Teil der Rechnung wiederholt durchlaufen
wird, d. h. wenn nach Ausführung einiger Rechenschritte ein R ü c k s p run g zum Beginn
dieses Programmteiles erfolgt. Innerhalb einer Programmschleife muß eine Entscheidung
3.1. Vorbereitende Aufgaben zur Erstellung eines Programms 33

erfolgen, wann ein Rücksprung durchgeftihrt und wann die Programmschleife verlassen werden
soll (s. Bild 3.4).
Man unterscheidet i t e rat i v e und s u k z e s s i v e Pro g r a m m s c h lei fe n. Erstere
treten hauptsächlich bei Iterationsverfahren auf. Die Schleife wird dabei in Abhängigkeit der

3.1
Es wird eine E n t s c h eid u n g
A getroffen. Wird diese bejaht, 3.2
folgt die Anweisung B; andernfalls Ähnlich wie in Bild 3.1
die Anweisung C. Beide Pro- wird eine Entscheidung
grammzweige werden anschlie- A getroffen, jedoch ent-
ßend vor der Anweisung D zusam- fällt ggfs. die Anwei-
mengeführt. sung C.

jeweils erzielten Rechenergebnisse verlassen. Bei den s u k z e s s i v e n Programmschleifen 1 )


steht die Anzahl der Schleifendurchläufe von vornherein fest. Innerhalb der Schleife wird eine
Variable ( I n d e x) zum Zäh 1 end erD u r c h 1 ä u fe benutzt. Die Anwendung solcher

3.4
Hier liegt eine sog. Pro g r a m m s chi e i fe
vor. Wird die Abfrage A bejaht, folgt die An-
weisung B und anschließend ein R ü c k -
s pr u n g zur Abfrage A. Selbstverständlich
muß durch die Anweisung B die Voraus-
setzung zur Abfrage A verändert werden, da-
mit die Schleife einmal durch Sprung zur An-
weisung C verlassen werden kann.

3.3 Von zwei gespeicherten Größen X und Y soll die größere an die Stelle von
Z treten. Dazu wird die Differenz X- Y gebildet und entschieden, ob diese
größer als Null ist. Im Grenzfall X = Y tritt Y ebenfalls an die Stelle von Z.

Schleifen erfolgt z. B. bei der Berechnung eines Polynoms beliebiger Ordnung n, der Berechnung
einer Summe von n Zahlen usw.
Der Sinn der Verwendung von Programmschleifen liegt nicht nur darin, die Anzahl der Befehle
eines Programms zu verringern. Vielmehr ist es auf diese Weise möglich, die Programme
wesentlich flexibler zu gestalten. Da die Anzahl der Schleifendurchläufe von den Eingangs-
werten abhängen kann, lassen sich so z. B. Programme zur Berechnung von Polynomen
beliebiger Ordnung oder zur Lösung von linearen Gleichungssystemen mit beliebig vielen
Unbekannten aufstellen.
Als Bei s pie 1 eines Programms mit einer i t e rat i v e n S c h lei f e sei das N e w -
ton s c hel t e rat ion sv e r fa h ren zur Berechnung der Quadratwurzel x einer Zahl y

1) Auch induktive Schleife genannt.


34 3.1. Vorbereitende Aufgaben zur Erstellung eines Programms

betrachtet (s. Bild 3.5)


x=yY
Sind Radikand y und Ausgangswert Xo der Iteration größer als Null, so konvergiert das
Verfahren gegen die gesuchte Wurzel x. Der verbesserte Wert x k + 1 errechnet sich aus dem
vorhergehenden x k nach der Formel
x~ +y
x =--
k +1 2xk

Ist ferner ~ > y, so ist die Folge der xk monoton abnehmend. Kein xk kann dabei theoretisch
kleiner als die Wurzel werden. Als Ausgangswert wird zweckmäßig
l+y
Xo =-->+yY (3.1)
2

gewählt. Die Iteration wird beendet, wenn x~ - y ~ O. Das Gleichheitszeichen kann nur gelten,
wenn die Wurzel eine rationale Zahl ist. Das Kleinerzeichen ist theoretisch ausgeschlossen, da
die Folge der Näherungswerte x k monoton abnimmt. Infolge der unvermeidlichen Rundungs-
und Abbrechfehler einer Rechenanlage kann dieser Fall jedoch eintreten. Die Grenze der
Rechengenauigkeit ist dann erreicht, und ein Weiterrechnen wäre sinnlos.
Hier hat man ein einfaches und sicheres Kriterium zur Beendigung einer Iteration. Leider liegen
die Dinge i. a. nicht immer so günstig. Im Programmablaufplan (Bild 3.5) treten die Bezeich-
nungen x o ' xk und xk + 1 nicht auf, da der neue Wert immer wieder an die Stelle des alten
tritt. Für alle x wird daher nur eine Speicherzelle benötigt.
Vor Beginn einer jeden Programmschleife ist eine Vorbereitung erforderlich, die den Anfangs-
zustand herstellt. Im vorliegenden Fall wird der Anfangswert von x nach GI. (3.1) ermittelt.
Die Berechnung einer Summe S von n Summanden ~ führt auf ein einfaches Beispiel einer
s u k z e s si v e n Sc h lei fe (s. Bild 3.6)
n
S= l: ~
i= 1

Zur Vorbereitung werden die Summe S und der Index i gleich Null gesetzt. Die Schleife
beginnt mit einer Abfrage und wird verlassen, wenn n - i = 0 ist. Der Fall n = 0 ist somit
zugelassen und erbringt das richtige Ergebnis S = O.
Die eigentliche Rechnung in der Schleife besteht in einer Erhöhung des Index i und in der
Addition des jeweiligen Summanden ~ zur Summe S. Wem dieser Programmablauf Schwierig-

3.5 Programmschleife zur 3.6 Sukzessive Programm-


Berechnung einer Qua- schleife zur Berechnung
dratwurzel nach dem einer Summe von n
Verfahren von Newton Zahlen
3.1. Vorbereitende Aufgaben zur Erstellung eines Programms 35

keiten bereitet, sollte sich an einem konkreten Zahlenbeispiel die Entstehung der Summe
durch die Additionen bei den einzelnen Schleifendurchläufen klarmachen.
Es ist zu beachten, daß bei jedem Schleifendurchlauf nicht nur der Index i sondern auch die
S p e ich e rad res s e der S u m man den ~ geändert werden muß. Bei Verwendung
von problemorientierten Programmsprachen übernimmt freilich der Kompilierer die Aufstellung
der zum A d res sen r e c h n e n erforderlichen Befehle.
Vereinbarungen über die Ein - und Aus gab e von Da t e n sind ebenfalls zu den
vorbereitenden Aufgaben zur Erstellung eines Programms zu zählen. Die Nützlichkeit eines
Programmablaufplanes zur übersichtlichen Darstellung des Programms kann auch von einem
Anfänger leicht eingesehen werden. Die überlegungen über eine möglichst zweckmäßige Ein-
und Ausgabe der Daten beginnen meistens erst nach einigen (eventuell auch schlechten)
Erfahrungen im Gebrauch von Rechenprogrammen und in der Auswertung ihrer Ergebnisse.
Es kann daher hier nur auf wenige Fragenkomplexe in groben Zügen hingewiesen werden.
Zunächst sollte es selbstverständlich sein, daß aus den Ausgabedaten der Sinn der Rechen-
ergebnisse ersichtlich ist. Das bedeutet, daß durch eine überschrift oder sonstigen Text das
benutzte Programm derart gekennzeichnet wird, daß sich die zugehörige Pro g r am m-
be s c h r e i b u n g in der Bibliothek fmden läßt.
Alle Eingangsdaten müssen zusammen mit den Rechenergebnissen ausgedruckt werden. Dies
geschieht einerseits zur K 0 n t roll e der Ein g a n g s d a t e n und andererseits zur
U n t e r s c h eid u n g ver s chi e den e r R e c h e n bei s pie I e. Nicht umsonst
spricht man manchmal von "Z a h I e n fr i e d h ö fe n "! Darunter versteht man dicke
Stapel von Rechenergebnissen, deren Herkunft bezüglich des Rechenprogramms oder der
Eingangsdaten ungeklärt ist.
Der Ausdruck der Ergebnisse muß nicht nur dem Programmierer sondern allen S ach -
b e a r bei t ern die s e r Erg e b n iss e verständlich sein. Dazu gehören Klartext
und Bezeichnungen, deren Bedeutungen in der zugehörigen Programmbeschreibung erläutert
werden.
Das Schriftbild muß den Möglichkeiten der verwendeten Aus gab e ger ä t e (Zeilen-
drucker, Schreibmaschine o. a.) angepaßt werden. Die Anzahl der Sc h r e i b s tell e n j e
Z eil e ist dabei recht unterschiedlich. Damit z. B. die Spaltenüberschriften einer Tabelle
auch über den Zahlen der zugeordneten Spalte stehen, muß man die Schreibstellen (ein-
schließlich Leerstellen, Vorzeichen, Dezimalpunkten usw.) genau auszählen. Hierzu gibt es
Formulare der Herstellerfirmen von Zeilendruckern. Mit kariertem Papier geht es freilich auch.
Bei der Eingabe von Daten durch Lochkarten oder andere Datenträger muß man sich ebenfalls
Gedanken über eine zweckmäßige Anordnung, die erforderliche Stellenzahl u. a. machen.
Besonders wichtig ist die Frage, welche Daten als V a r i abi e in ein Programm einzugeben
sind. Einerseits möchte man ein Programm möglichst flexibel, andererseits aber auch möglichst
einfach in der Handhabung machen. Die erste Forderung bedeutet möglichst vi eie
V a r i abi e als Eingangsdaten und wen i g K 0 n s t a n t e n innerhalb des Programms;
die zweite Forderung bedingt das Gegenteil. Hier gilt es entweder eine befriedigende
Z w i s c h e n lös u n g zu finden oder aber die Eingabe so flexibel zu gestalten, daß wahl-
weise ver s chi e den e Art e n von Ein gab e n möglich sind.
36 3.2. Programmierungsarten und -hilfen

3.2. Programmierungsarten und -hilfen

3.2.1. Internprograrnrne
3.2.1.1. Maschinensprachen. Internprogramme sind in der "Maschinensprache", die von der
speziellen Konstruktion des Rechners her bedingt ist, erstellte Programme. Jeder Rechner kann
i. a. vermöge eines (häufig festverdrahteten) Einleseprogramms Befehle in seiner M ase hin e n-
s p r ach e, die man kurz M ase hin e n b e feh I e oder M ase hin e n w 0 r t e nennt,
über die (maschinelle oder manuelle) Eingabe in das Speicherwerk einlesen. Das gespeicherte
Programm der Maschinenbefehle wird in der Arbeitsphase vom Leitwerk Befehl für Befehl, wo-
für eigens ein Befehlszähler (BFZ) tätig ist, dem Rechenwerk zur Ausfuhrung der Operationen
zugeführt. Man spricht dann von speichergesteuerten Maschinen. Zusammengefaßt: Maschinen-
programme können vom Rechner unmittelbar verarbeitet werden, im Gegensatz von Pro-
grammen, die in einer "maschinenorientierten" Sprache (Assemblierersprache) oder in einer
"problemorientierten" Sprache (z. B. FORTRAN, ALGOL, PL/I) geschrieben sind, denn diese
müssen zuvor durch spezielle Obersetzungsprogramme in die Form von rechnerbezogenen
Maschinenprogrammen gebracht werden. Es ist daher für den Programmierer einer größeren
Rechenanlage von Vorteil, Maschinenprogramme zwecks Auffmden und direkter Verbesserung
von Programmfehlern lesen zu können. Kleinrechner können häufig nur in ihrer Maschinen-
sprache programmiert werden.
Das Programm in Maschinensprache besteht aus einer Folge von Maschinenbefehlen bzw.
Maschinenworten. Prinzipiell besteht ein Maschinenbefehl mindestens aus dem 0 per a t ion s-
te i I (OP bzw. OTT) und dem A d res sen t eil (ADT). Kurz geschrieben: I OP I ADT I
Der OP gibt an, was getan werden soll. Der ADT gibt an, mit w eie h e n 0 per a n den
dieser Befehl durchgeführt werden soll. Der ADT enthält vorwiegend die Adressen von
Operanden oder Befehlen. Bei einer arithmetischen Rechenoperation werden z w e i Operanden
miteinander verknüpft und liefern ein Ergebnis. Bei Ein a d r e ß m ase hin e n wird der
eine Operand im Adreßteil adressiert, der andere Operand und das Ergebnis stehen in einem
ausgezeichneten Wort (Register, Akkumulator (AKR)). Bei Z w e i a d r e ß m ase hin e n
wird auch der zweite Operand adressiert und das Ergebnis kommt entweder in eines der
beiden adressierten Worte oder in ein besonders Ergebniswort. Bei Zweiadreßmaschinen ist
die Anzahl der Befehle eines Programms i. allg. kleiner als bei Einadreßmaschinen. Dies macht
sich besonders bei kaufmännischen (organisatorischen) Problemen bemerkbar, bei denen oft
nur jeweils eine arithmetische Operation bei vielen Daten durchgeführt wird. Bei technisch-
mathematischen Problemen dagegen folgen häufig mehrere arithmetische Operationen hinter-
einander. Zweiadreßmaschinen bieten dann weniger Vorteile. Einadreßbefehle sind kürzer und
benötigen daher weniger Speicherplatz. Beim Programmieren und Lochen ist die Kürze der
Befehle ebenfalls von Vorteil, da die wiederholte Angabe einer zweiten Adresse unnötige
Arbeit verursacht und wegen der notwendigen Schreib- und Locharbeit auch eine zusätzliche
Fehlerquelle darstellt.
Um die Vorteile beider Befehlsarten zu vereinigen, ist bei einigen Maschinentypen zwar ein
zweiter, aber wesentlich kürzerer Adreßteil vorhanden. Dadurch können einige wenige aus-
gezeichnete Worte oder Register angesprochen werden, ohne daß die zweite Adresse unnötig
lang wird; z. B.:
Sie m e n s s y s t e m 300, zwei Akkumulatoren durch ein bit adressierbar.
Nix d 0 r f s y s t e m 820, 16 Vorzugsspeicher, durch vier bit adressierbar.
3.2.1. Internprogramme 37

Neben einem OP und einem oder zwei ADT kann ein Befehl weitere Bestandteile enthalten.
lnsbesonders verwendet man häufig einen I n d e x t eil, durch den man Befehle "indizieren"
kann; diese In d i z i e run g ermöglicht ein vereinfachtes Adressenrechnen (s. Abschn.
3.2.1.3).
ADD 7 als Beispiel für einen Ein a d r e ß b e feh 11 OP 1 ADT I hat die Wirkung:
Addition der in Speicherzelle 7 stehenden Zahl zum Inhalt des Akkumulators (AKR) und
Speichern der Summe im AKR. Für den OP ADD wird ein numerischer Code auf der im
Rechnersystem verwendeten Zahlenbasis festgelegt.
ADD 7; 12 als Beispiel für einen Z w e i a d res sen b ef eh 1 1 OP 1 ADTl I ADT21
hat die Wirkung: Addition des Zahlenwertes in Speicherzelle 7 zum Zahlenwert in Speicher-
zelle 12 und anschließendes Speichern der Summe in Speicherzelle 12.
Die Programmierung in einer Maschinensprache soll nun anhand eines Kleinrechners
(Nixdorf 820/20) verdeutlicht werden. Ein Maschinenbefehl des Nixdorfrechners wird durch
ein 18-bit Wort dargestellt, das sich aus dem OP, dem ADT und dem Indexteil AD j zusammen-
setzt. Aufgrund der Konstruktionseigenschaften des Rechners und der dadurch bedingten
sedezimalen Codierung wird der ADT in drei Teiladressen AD1 (Adreßteillinks), AD m (Adreß-
teil mitte) und ADr (Adreßteil rechts) zerlegt:

bit-NT. 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
OP AD j ADT

a b i AD1 AD m ADr
Werte-
bereich 0-3 0-15 0;1 0-7 0-15 0-15

AD mr (Adreßteil mitte-rechts) ist z. B. eine sedezimale Kombination von AD m und ADr . Der
OP durchläuft im Sedezimalsystem den Zahlenbereich von 0.00 bis 3.15, also 4· 16 = 64
mögliche Grundbefehle. In Tafel 3.7 ist ein Ausschnitt aus der Befehlsliste des Rechners
zusammengestellt. Daten (Zahlenwerte) werden als 14-stellige Dezimalzahlen mit (wählbarem)
Festkomma in einem vom Programmspeicher getrennten Datenspeicher gespeichert.

Beispiele zur Befehlsstruktur


OP ADT
Additionsbefehl: a b i AD1 AD m AD r

0 04 o 01 05 07

Er k 1 ä run g : Der OP 0.04 weist laut Befehlsliste auf einen Additionsbefehl hin, bei dem
AD lm die sedezimale Nummer der Datenspeicherzelle (kurz: Speicher AD1m ) ist, die vor der
Rechenoperation den ersten Summanden enthält und nach der Operation die Summe auf-
nimmt; ADr gibt die Nummer des Datenspeichers an, der sowohl vor als auch nach der Opera-
tion den zweiten Summanden speichert. ADr ist zudem die Nummer einer der 16 Vor zug s-
s p e ich er, unter denen diejenigen mit den Nummern 3 bis 15 i. allg. frei verfügbar sind.
Bei allen arithmetischen Befehlen muß immer ein Vorzugsspeicher verwendet werden.

Wir k u n g des Befehls: Es wird der Inhalt des Datenspeichers mit der Nummer AD lm = 1.05 16
= 21 10 zum Inhalt des Datenspeichers mit der Nummer ADr = 7 addiert und die Summe im
Speicher AD lm = 21 gespeichert.
38 3.2. Programmierungsarten und -hilfen

Tafel 3.7 Ausschnitt aus der Befehlsliste des Kleinrechners Nix d 0 r f 820/20

OP Symbol Funktion Merker


O. I NOP AD1mr '* 0 Leerbefehl
O. I ACC (E) -+ Reg. AD lm (ADr NachkommastelIen)
O. 2 MVIol (Reg. ADr ) -+ Reg. AD lm
"
O. 3 MV (Reg. AD1m ) -+ Reg. ADr
0.4 ADH (Reg. AD1m ) + (Reg. ADr ) -+ Reg. ADlm MC
O. 5 AD (Reg. ADr ) + (Reg. AD1m ) -+ Reg. ADr MC
0.6 SBH (Reg. AD1m ) - (Reg. ADr ) -+ Reg. AD lm MC
O. 7 SB (Reg. AD r ) - (Reg. AD1m ) -+ Reg. ADr MC
O. 8 MLH (Reg. AD1m ) x (Reg. ADr ) -+ Reg. AD1m , C MC
O. 9 ML (Reg. ADr ) x (Reg. AD1m ) -+ Reg. ADr , C MC
0.10 DVH (Reg. AD1m ) : (Reg. ADr ) -+ Reg. AD1m , C MC
0.11 DV (Reg. AD r ) : (Reg. AD1m ) -+ Reg. ADr , C MC
0.12 CPH Vergleich (Reg. AD1m ) mit (Reg. ADr ) ML MU
0.13 CP Vergleich (Reg. ADr ) mit (Reg. AD1m ) ML MU
0.14 CPZ Vergleich (Reg. AD1m ) mit Null (ADr = 0) ML MU
O. 15 CLR ADr = 0 Löschen (Reg. AD1m )
SGNIN ADr '* 0 Vorzeichenwechsel (Reg. AD 1m )

1.0 BR Sprung nach AD 1mr


I. I BRI Sprung wenn M I= I nach AD1mr
1.2 BR2 Sprung wenn M2 = I nach AD1mr
1.3 BR3 Sprung wenn M3 = I nach AD1mr
1.4 BR4 Sprung wenn M4 = I nach AD1mr
1.5 BR5 Sprung wenn M5 = I nach AD1mr
1.6 BRL Sprung wenn ML = I nach AD1mr
1.7 BRU Sprung wenn MU = I nach AD1mr
1.8 BRC Sprung wenn MC = I nach AD1mr
1.9 BXG Sprung wenn (I) > 1023 nach AD1mr
I. 10 BXU Sprung wenn (I) '* 0 nach AD 1mr

1.11 BRS Unterprogrammsprung nach AD1mr


I. 12 BRR Rücksprung nach Rückkehradresse + AD1mr
3.2.1. Internprogramme 39

Kurzschreibweise : (21) + (7) -+ 21 1)


Tritt auf Stelle 14 des Datenspeichers AD lm ein Oberlauf ein, so wird automatisch der
Me r k e r 2) Me gesetzt.

Sprungbefehl : ADT
05 11 15

E r k I ä run g: Sprung (branch) zur Maschinenwortadresse AD1mr = 5.11.15 16 ,


Wir ku n g: Es wird ein Sprung zur Befehlsspeicherzelle Nr. 5.11.15 16 = 1471 10 ausgeführt
und mit der Durchführung des dort gespeicherten Befehls im Programm fortgefahren.

Adresse OP ADT
Zählbefehl: sedezimal a b i AD1 AD m ADr
5 ll 15 2 04 o 05 03 09

Er k I ä run g: Zählen im Speicher AD lm = 5.03 16 = 83 10 in Stelle ADr . Bedeutung: Es


wird im Speicher 83 in Stelle 9 die Zahl 1 addiert.

Wir k u n g: Speicher 83
14-stellig

oben vor und darunter nach der Operation.


3.2.1.2. Programmbeispiel zur Einflihrung. Berechnung des ar i t h met i sc h e n Mit tel s
von N positiven oder negativen Zahlen X;. Die Aufgabe wird in Tafel 3.8 in Form eines
maschinensprachenbezogenen Programmablaufplanes mit Befehlserklärungen und der maschinen·
gerechten Codierung gelöst.
3.2.1.3. Prograrnmbeispiel mit indizierten Befehlen. Der Begriff des in d i z i e r t e n
B e feh I s wird an folgendem Beispiel erklärt:

OP AD j ADT
I 00 I 02 09 11

Der Inhalt des Indexregisters sei (I) = 104 10 =0.06.08 16 , Wirkung des
B e feh I s: Ist der Indexteil AD j = 1, so wird zunächst in einern Hilfsspeicher der Inhalt des
Indexregisters zu der aus dem Adreßteil AD 1mr gebildeten Sedezimalzahl addiert:

AD1mr = 2.09.11
+ (I) = 0.06.08
modifizierter Adreßteil AD1mr = 3.00.03

1) Inhalte von Datenspeichern werden mit ( ) bezeichnet.


2) Dieser Rechner besitzt acht I-bit Speicher, die Me r k er heißen und die die Werte I und 0
annehmen können, je nachdem ob sie "gesetzt" oder "nicht gesetzt" sind. Der Merker Nr. 8
heißt der Überlaufmerker Me.
40 3.2. Programmierungsarten und -hilfen

Tafel 3.8 Programm zur Berechnung des Mittelwertes


Programmablauf codiertes Programm
Adresse OP AD;
sedezimal a b
0 10 00 2 14 0 4 00 01
0 10 2 12 2 2 1)

Manuelle 0 10 2 0 10 8
Eingabe der
x; ~ 0 0 10 3 2 12 2 7
über die
0 10 4 0 10 10
Tastatur
0 10 5 2 12 5 2 10
0 10 6 5 0 11
0 10 7 0 0 10
0 10 8 0 0 3 7
0 10 9 0 0 10 12

0 10 10 0 0 3 7

0 10 11 0 15 0 3

0 10 12 3 3 7 0 15

0 10 13 2 4 0 5 8

0 10 14 0 4 0 6 3
0 10 15 8 0 11 11

0 11 0 0 0 10 0
0 11 0 10 0 6 5
0 11 2 0 3 0 6 3
0 11 3 2 14 4 0 2
0 11 4 3 3 7 0 15

0 11 5 2 13 0 8

0 11 6 2 15 2 14

0 11 7 2 15 2 2 8

0 11 8 0 15 0 6 0

0 11 9 0 15 0 5 0

0 11 10 0 0 10 0

0 11 11 2 13 0 8
0 11 12 3 0 0 11 14

0 11 13 0 0 11 8
0 11 14

1) Nullen werden im Indexteil und in den Sedezimalpositionen bis auf ein e beim
Maschinenausdruck unterdrückt.
3.2.1. Internprogramme 41

Programmablaufplan Erklärung und Wirkung der Befehle

,-
Sprung- Befehl,
marke symbolisch
BEGIN LNF I-mal Zeilenschaltung der Schreibmaschine.
Setze den Merker I, falls die Taste EI der Eingabetastatur
SMI RRAR gedrückt wird.
Sprung (branch) zur Marke MA (= Maschinenwortadresse 0 10 OO),
BRI MA falls der Merker 1 gesetzt ist.
SMI RMIN Setze den Merker I, falls die Taste EI gedrückt wird.
Warte-

1
schleife BRI MB Sprung zur Marke MB, falls der Merker 1 gesetzt ist.

SM5 RITS Setze den Merker 5, falls die Taste ~ gedrück t wird.

BR 5 MM Sprung zur Marke MM, faUs der Merker 5 gesetzt ist.

BR EIN Sprung zur Marke EIN.

MA (E) -+ 3/1 Transportiere den Inhalt des mit der Eingabetastatur


verbundenen Speichers E nach Speicher 3 mit 7 Stellen
BR MDD nach dem Dezimalkomma.

MB (E) -+ 3/1 s. vorletzter Befehl.

SIGNIN (3) Ändere das Vorzeichen der in Speicher 3 stehenden Zahl.

MDD EDSN Pos 15 Drucke den Inhalt des Speichers 3 mit Vorzeichen auf Komma-
position 15.
CNT 5, St. 8 Addiere in Speicher 5 auf SteUe 8 die Zahl 1.

(3) + (6)-+ 6 Addiere zum Inhalt des Speichers 3 den Inhalt des Speichers 6
und speichere die Summe in 6.
BRC UEB Sprung zur Marke UEB, falls der Merker MC beim vorgehenden
Befehl gesetzt wurde.
BR BEGIN Rücksprung zur Marke BEGIN.

MM (6): (5)-+6 Dividiere den Inhalt des Speichers 6 durch den Inhalt des
Speichers 5 und speichere das Ergebnis in Speicher 6.
(6) -+ 3 Transportiere den Inhalt des Speichers 6 nach Speicher 3.

LNF 2 2-mal Zeilenschaltung.

EDSN Pos 15 Drucke den Inhalt von Speicher 3 auf Kommaposition 15.

TAB 24 Tabulation der Schreibmaschine auf Position 24.

ALC.TW,M Drucke den Buchstaben M.

ALC, TW,W Drucke den Buchstaben W.

LOE CLR 6 Lösche den Inhalt von Speicher 6.

CLR 5 Lösche den Inhalt von Speicher 5.

BR BEGIN Rücksprung zur Marke BEGIN.

UEB TAB 24 Tabulation der Schreibmaschine auf Position 24.


Drucke den ab Marke TEXT (Adr. 0.11.14} gespeicherten Text:
TI TEXT ,UEBERLAUF' und kehre danach zur Ausflihrung des nächsten
Befehles zurück.
BR LOE
TEXT ~EBERLAUFJ Von hier an wird der Text: ,UEBERLAUF' im Sedezimal-Code
gespeichert.
42 3.2. Programmierungsarten und -hilfen

Tafel3.9 Ziffernsortierprogramm

Programm im Maschinencode Symbolisches Programm


Adresse OP AD j ADT Symb. Adr. Befehlswort Kommentar
o 5 0 2 14 0 4 0 I LNF I
o 5 I 2 13 0 I 14 TAB 30
o 5 2 3 0 2 0 0 TT UEBERS UEBERSCHRIFT
o 5 3 2 14 4 0 I EINGAB LNF I
o 5 4 2 12 0 2 I WTRRAR

0 5 5 3 6 0 8 I ED I RED
0 5 6 0 I 0 3 0 ACC 3.
0 5 7 3 2 0 2 12 ED 44
0 5 8 2 13 0 3 2 TAB 50
0 5 9 0 15 0 5 6 VGLR.EG. CLR
0 5 10 0 15 0 6 0 ZYKLUS CLR ZAEHLR.
0 5 11 2 4 0 6 I CNT ZAEHLR. STELLEN ZEIGER + I
0 5 12 2 6 I 6 I XR2 ZAEHLR.I

0 5 13 2 10 7 15 I CX XI 2048-15
0 5 14 I 10 0 6 3 BXUVERGL

0 5 15 2 4 0 5 I CNT VGLREG.I
0 6 0 2 6 0 5 1 XRI 1 VGLREG.
0 6 I I 10 0 5 10 BXU ZYKLUS
0 6 2 I 0 0 5 3 BR EINGAB ENDE
0 6 3 2 6 1 6 I VERGL XR2 1 ZAEHLR.

0 6 4 2 6 0 3 0 XI XRI 3.

0 6 5 0 15 0 4 0 CLR EINGZR.
0 6 6 2 5 0 4 I DCI EINGZR. I
0 6 7 0 13 0 5 4 EINGZR CP VGLREG.

0 6 8 I 7 0 6 10 BRU/+ 2
0 6 9 2 15 2 0 0 XI ALC, TW ZIFFER DRUCKEN
0 6 10 I 0 0 5 I1 BR ZYKLUS + I
* 2 ..
2 0 0 ... Codierung UEBERS *ZIFFERN/YMIN/& UEBERSCHRIFT
der Überschrift SOR TIERUNG/YCOL/ /YEND*
*VGLREG 5 DEFINITION DER
*EINGZR 4 SYMBOLISCHEN
*ZAEHLR 6 SPEICHER
** PROGRAMMENDE

Sodann wird der Befehl mit dem m 0 d i f i z i e r t e n A d r eßt eil AD1mr und unver-
ändertem OP ausgeführt:

OP AD j ADT
1 00 0 3 00 03

Wir k u n g: Sprung zur Befehlsadresse 3.00.03.


3.2.1. Internprogramme 43

Erklärung und Wirkung der Befehle

I-mal Zeilenschaltung der Schreibmaschine.


Tabulation der Schreibmaschine auf Position 30.
Drucke die Überschrift, die ab der symbolischen Adresse UEBERS gespeichert ist.
I-mal Zeilenschaltung.
Warte, bis die Taste B gedrückt wird und fahre im Programm fort. Während des Wartens wird die zu
sortierende Zahl über die Tastatur eingegeben.
Druckvorbefehl: In roter Farbe drucken, mindestens eine Stelle vor dem Dezimalkomma ausdrucken.
Inhalt des Eingabespeichers E nach Speicher 3 transportieren.
Drucke den Inhalt des Speichers 3 gemäß vorstehendem Druckvorbefehl auf Position 44.
Tabulation auf Position 50.
Lösche den Inhalt des Speichers VGLREG.
Lösche den Inhalt des Speichers ZAEHLR.
Addiere im Speicher ZAEHLR auf Stelle I die Zahl 1. Kurz: Stellenzeiger um I erhöhen.
Transportiere die aus den Ziffern von Stelle I und 2 des Speichers ZAEHLR gebildete Dezimalzahl
in das Indexregister.
Addiere die Zahl 2048 - 15 = 2033 zum momentanen Inhalt des Indexregisters.
Sprung zur Adresse VERGL, falls der Inhalt des Indexregisters ungleich Null ist, sonst fahre mit dem
nächsten Befehl fort.
Addiere im Speicher VGLREG auf Stelle I die Zahl I (Zählen!).
Transportiere die auf Stelle I des Speichers VGLREG stehende Zahl (Ziffer) in das Indexregister.
Sprung zur Adresse ZYKLUS, falls der Inhalt des Indexregisters ungleich Null ist.
Rücksprung zur Adresse EINGAB; Ende der Sortieraufgabe.
Transportiere die aus den Ziffern von Stelle I und 2 des Speichers ZAEHLR gebildete Zahl in das
Indexregister.
Transportiere die Zahl (Ziffer) von der Stelle des Speichers 3, die durch den momentanen Inhalt des
Indexregisters angegeben wird, in das Indexregister.
Lösche den Speicher EINGZR.
Transportiere den Inhalt des Indexregisters auf Stelle I des Speichers EINGZR.
Vergleiche den Inhalt des Speichers EINGZR mit dem Inhalt des Speichers VGLREG und setze bei
ungleichheit den Merker MU.
Sprung, wenn der Merker MV gesetzt ist, um 2 Befehle weiter, sonst fahre im Programm fort.
Drucke das Zeichen (Ziffer), das durch den Inhalt des Indexregisters dargestellt wird.
Sprung zu der um I erhöhten Adresse ZYKLUS.
Ordne dem folgenden Text: ,ZIFFERNSORTlERUNG' die Maschinenanfangsadresse 2.00.00 zu.

Für die Speicher 4, 5 und 6 sind die nebenstehenden symbolischen Namen vereinbart.

Im Beispiel des Z i f f ern s 0 r t i e r pro g r a m m s (Tafel 3.9) ist neben dem codierten
auch noch das entsprechende symbolische Programm (Assembliererprogramm) mit aufgeführt,
das in Abschn. 3.2.2 besprochen wird. Die Speicherbelegung erklärt Tafel 3.10. Das Programm
wird für den Vergleich der 10 Ziffern 0 bis 9 mit den 14 Ziffern der gegebenen Dezimalzahl
genau 10-mal ab Adresse ZYKLUS + 1 durchlaufen. Diese Durchläufe werden mit I bis X
bezeichnet. Im Durchlauf I werden z. B. alle 14 Ziffern der gegebenen Zahl mit der Ziffer 0,
im Durchlauf X mit der Ziffer 9 verglichen. Bei jedem dieser Durchläufe I bis X wird die
Programmschleife ZYKLUS, die von den Befehlen mit den Adressen 0.05.10 bis 0.06.01
44 3.2. Programmierungsarten und -hilfen

Tafel 3.10 Speicherbelegung des Ziffernsortierprogramms

Speicherbelegung während des gesamten Programmablaufes:

Stellennummer
Speicher 3 eingegebene Zahl

Schleife: ZYKLUS Schleife: VERGL

Speicher Speicher Speicher


VG LR EG Indexregister ZAEHLR Indexregister EINGZR
3 2 St. 2. Zust. 1. Zust. 4 3 2 1St. 1. Zust. 2. Zust. 3 2 St.
o 0 I +- 2034 +- 0001 +- o 0 1 ~ 0001 -+ 0003 o 3
o 1 11 2035 0002 -+-~O~2::,j 2 0002 0009 o 9
o 2 III 2036 0003 o 3 3 0003 0001 o
3 IV o 4 4 0005
4 V 055 0000
5 VI o 6 6 0004
6 VII 077 0000
7 o 8 8 0000 o
8 o 9 9 0000 o
9 X o 10 0004 4
2044 0011 11 2
2045 0012 2 12 8
2046 0013 3 13 1
2047 0014 4 14 0014 3
0000 0015
t t
Gesamtdurchläufe I bis X Einzeldurchläufe I bis 14

Testprotokoll gebildet wird, genau 14-mal durchlaufen, um


jede der 14 Ziffern der im Speicher 3
ZIFFERNSORTIERUNG: gespeicherten Zahl mit der jeweiligen im
12345678912345 11223344556789 Speicher VGLREG {hier Speicher 5) ge-
9090909090909 00000009999999 speicherten Ziffer zu vergleichen und im
121231231231 00111112222333 Gleichheitsfalle auszudrucken. Während des
999999 00000000999999 15. Einzeldurchlaufes der Schleife ZYKLUS
99999991111111 11111119999999 wird der Inhalt des Indexregisters gleich Null
gesetzt, da der Inhalt des Indexregisters bei
Eingabe des Zahlenwertes 2048 gleich Null gesetzt wird.
Der Durchlauf I wird nun ausftihrlich erklärt. Das Programm beginnt mit (VGLREG) = (5) = O.
Aus dem Speicher ZAEH LR = Speicher 6 wird die Zahl 1 in das Indexregister (s. Tafel 3.10
nach links) gebracht; sodann wird die Zahl 2033 zum Indexregisterinhalt addiert, also
2033 + 1 = 2034. Da (1)"4= 0 ist, kann der bedingte Sprungbefehl BXU VERGL in die Schleife
VERG L ausgeführt werden. Beim Durchlauf dieser Schleife wird zunächst wieder aus dem
3.2.2. Assembliererprogramme 4S

Speicher ZAEH LR die Zahl 1 in das Indexregister (s. Tafel 3.10, nach rechts), soda~n aus dem
Speicher 3 von der Stelle, die der Indexregisterinhalt gerade angibt, hier also von der Stelle 1
des Speichers 3, die dort stehende Ziffer zunächst in das Indexregister.dtlflll in den Speicher
EINGZR = Speicher 4 gebracht. Der eigentliche Vergleich erfolgt dann zwischen den Inhalten
der Speicher EINGZR und VGLREG. Bei Ungleichheit wird sofort, bei Gleichheit erst nach
Ausdruck der Ziffer durch Rücksprung in die Schleife ZYKLUS + 1 effektiv der Vergleich der
2. Ziffer der in Speicher 3 stehenden Zahl mit der Ziffer 0 durchgeführt. Die Programmdurch-
läufe II bis X kann der Leser anhand von Tafel 3.10 zur übung selbst verfolgen.

3.2.2. Assembliererprogramme

Pro b lern e bei I n t ern c 0 d e - Pro g r a m m i e run g. Das Programmieren im


internen Code der Maschine, das im vorigen Abschnitt erläutert wurde, ist mühsam und un-
befriedigend, das Programm selbst ist sehr schwer lesbar. Mehrere Gründe sind hierfür verant-
wortlich:
1. Der numerische Befehlscode ist schlecht merkbar.
2. Die Speicherplätze flir die anfallenden Daten werden nur durch ihre Speichernummern aus-
gewiesen. Es obliegt dem Programmierer, anhand eines sorgfältig geführten Speicherplanes
Irrtümer zu vermeiden. Ein fremdes Programm kann ohne Kenntnis seines Speicherplanes
kaum verstanden werden.
3. Die Adressen für die Befehls- und Datenspeicher müssen i. allg. bei der Programmierung fest-
gelegt werden. Eine Programm verschiebung, die z. B. beim Beseitigen eines Programmierfehlers
erforderlich werden kann, ist nur durch eine Umprogrammierung möglich.
4. Ein Programmsystem, das von mehreren Programmierern segmentweise aufgestellt wird, muß
über einen Gesamtspeicherplan koordiniert werden. Schon die Aufteilung des Befehlsspeichers
bereitet ohne Kenntnis der endgültigen Segmentlängen Schwierigkeiten.
S. Bei Dualrechnern sind nicht nur die Befehlsangaben, sondern auch die im Programm auf-
tretenden dezimalen Konstanten in Dual-, Oktal- oder Sedezimalform zu nennen.
Pro g r a m m i e ren i m Ass e m b I i e r e r c 0 d e. Die Idee liegt nahe, Befehle und
Adressen in symbolischer Form zu schreiben. Das daraus entstehende Programm ist freilich
für den Rechner zunächst nicht verständlich. Es muß vor seiner ersten Verwendung in den
Interncode der Maschine übersetzt werden. Sofern für den Rechner ein entsprechendes über-
setzungsprogramm im Interncode existiert, kann dies maschinell geschehen. Jede Computer-
Herstellerfirma liefert zusammen mit dem Rechner diesen "Assemblierer", so daß nur noch
im symbolischen Code programmiert zu werden braucht.
In diesem Assemblierercode werden die erwähnten Schwierigkeiten wie folgt beseitigt:
M n e m 0 t e c h n i s c her B e feh I s c 0 d e. Zur Kennzeichnung der Befehle verwendet
man sinnfällige Abkürzungen, etwa ADD für einen Additionsbefehl und SPR oder B für einen
Sprungbefehl. Diese symbolischen Codes werden in einer Befehlsliste zusammengestellt, die
vom Rechnertyp abhängig ist.
S y m bol i s c h e A d res sen. Die Kennzeichnung von Speicherplätzen erfolgt symbo-
lisch durch frei wählbare Namen. Der Programmierer kann sich leicht merkbare Bezeichnungen
ausdenken, vielleicht EINS für einen Platz, an dem eine Eins gespeichert wird, BET A fur den
Speicher einer Rechengröße ß oder KDNAME fur den Bereich, der den Kundennamen auf-
nehmen soll.
46 3.2. Programmierungsarten und -hilfen

Tafel 3.11 enthält einen Ausschnitt aus einem IBM 360-Assembliererprogramm mit symbo-
lischen Befehlscodes und symbolischen Adressen. Den einzelnen Befehlen können Kommen-
tare angehängt werden.

Tafel 3.11 IBM 360 - Programmausschnitt


Berechnung von A = (8 * 8 - C)/D in kurzer Gleitpunktform

Befehl Kommentar

FORMEL LE 0,8 Kurze GP-Zahl (B) nach GP-Reg. GRO -vorn-


ME 0,8 Kurze GP-Multiplikation (GRO) '" (B) nach GRO
SE 0, C Kurze GP-Subtraktion (GRO) - (C) nach GRO
DE 0, D Kurze GP-Division (GRO)/(D) nach GRO
STE O,A Speicherung (GRO) vorn in A, A + I, A + 2, A + 3

Das Ziffernsortierprogramm, das in Abschnitt 3.2.1.3 besprochen worden ist, fmdet man in
Tafel 3.9 sowohl im Interneode als auch im Assemblierercode und mit Befehlserklärungen.
Freie Verschiebbarkeit des übersetzten Programms. Der
Assemblierer übersetzt das Quellprogramm so, daß die Festlegung des Programmanfangs
erst bei der Verwendung des übersetzten Interncode-Programms erfolgen muß. Dadurch
ist eine freie Verschiebbarkeit des Programms gesichert.
Lok ale und g lob ale A d res sie run g. Im Assemblierercode besteht die
Möglichkeit, die symbolischen Adressen entweder lokal oder global zu erklären. Lokale
Namen sind nur innerhalb des Programmabschnittes defmiert, in dem sie übersetzt werden.
Beim Binden getrennt übersetzter Programmabschnitte zu einem Gesamtprogramm können
in den einzelnen Abschnitten durchaus übereinstimmende lokale Namen vorkommen.
Manche.Assemblierer bieten außerdem die Möglichkeit, einen solchen Abschnitt in mehrere
Sätze zu unterteilen. Dann besteht der vollständige lokale Name aus dem Satznamen und
der symbolischen Adresse. Nur innerhalb des eigenen Satzes braucht der Satzname nicht
genannt zu werden. Schon in den einzelnen Sätzen können demnach übereinstimmende
symbolische Adressen für unterschiedliche Speicherplätze verwendet werden.
Wenn man sich in verschiedenen Abschnitten auf denselben Speicherplatz beziehen will, so
bedient man sich zu seiner Bezeichnung eines globalen Namens. Er wird in dem Abschnitt,
der seine Defmition enthält, als intern global erklärt, während er in den Abschnitten, die
auf ihn Bezug nehmen, als extern global deklariert wird.
In dem GE 600-Unterprogramm in Tafel 3.12 werden ALOG 10 und ALOG definiert
und durch die SYMDEF-Anweisung als intern global ausgewiesen. Ein Anwenderprogramm
hierzu würde ALOG 10 und ALOG als extern globale Namen fUhren, die hier dem Unter-
programmaufruf dienen. Der Name .FXEM. hingegen ist hier extern global und wird durch
den Makrobefehl CALL .FXEM. (EALN1) automatisch als solcher ausgewiesen.
Ass e m b I i e re r - Ver ein bar u n gen. In jeder Assemblierersprache besteht die
Möglichkeit, neben den Befehlen, die das eigentliche Programm bilden, auch Vereinbarungen
an den Assemblierer zu geben. Diese Vereinbarungen werden schon während der übersetzung
befolgt, so daß im übersetzten Interncode-Programm anstelle der Vereinbarungen deren
Ergebnisse erscheinen, im Gegensatz zu den anderen Befehlen, die sich dort, wenn auch
verschlüsselt, wiederfinden. Sie werden erst beim Ablauf des übersetzten Programms aus-
gefiihrt.
3.2.2. Assembliererprogramme 47

Tafel 3.12 GE 600-Unterprogramm zur Berechnung von In (x) als ALOG (X) und 19 (x)
als ALOG 10 (X)
Bei Aufruf steht Aufrufadresse + I in Indexregister XI, Adresse von X in
Aufrufadresse + 3

Befehl Kommentar
SYMDEF ALOG10, ALOG ALOG 10 und ALOG sind intern global
LOGS SAVE Makro-Instruktion zur Speicherung von X I rur
späteres RETURN-Makro
FLD 2,1 * Gleitpunktoperation «2 + (XI))) in das
8 + 72-bit-Registerpaar E/AQ
FNO Gleitpunktnormalisierung in EAQ
TZE ERRl Sprung nach ERRI, falls (AQ) = 0, also Gleit-
punktmantisse Null
TMI ERR2 Sprung nach ERR2, falls (AQ) negativ
BEGIN FCMP = 1.0, DU (EAQ) Vergleich mit Direktoperand 1.0
TZE UNITY Sprung nach UNITY, falls (EAQ) = 1.0
STE I (E) in Adreßteii von I speichern
LDE 0, DU Register E mit Direktoperand 0 laden
DFAD SRHLF Doppellängen-Gleitpunktaddition
(EAQ) + (SRHLF, SRHLF + I) nach EAQ
DFST Z DL-GP-Speicherung (EAQ) nach Z, Z + I
DFSB SRTWO DL-GP-Subtraktion
(EAQ) - (SRTWO, SRTWO + I) nach EAQ
DFDV Z DL-GP-Division (EAQ)/(Z, Z + I) nach EAQ
DFST Z DL-GP-Speicherung (EAQ) nach Z, Z + I
DFMP Z DL-GP-Mult. (EAQ) * (Z, Z + I) nach EAQ
DFSB C DL-GP-Subtr. (EAQ) - (C, C + I) nach EAQ
DFDI B DL-GP-Divinv. (B, B + I)/(EAQ) nach EAQ
DFAD A DL-GP-Addition (EAQ) + (A, A + I) nach EAQ
DFMP Z DL-GP-Mult. (EAQ) * (Z, Z + I) nach EAQ
DFST Z DL-GP-Speicherung (EAQ) nach Z, Z + I
LDA *-*, DU Register A mit Direktoperand laden
LDQ O,DU Register Q mit Direktoperand 0 laden
LDE = 7B25, DU Register E mit Direktoperand 7 laden; 2-Exp. von
X als GP-Zahl in EAQ
FSB = O. 5, DU GP-Subtraktion (EAQ) - 0.5 nach EAQ
DFAD Z DL-GP-Add. (EAQ) + (Z, Z + I) nach Z, Z + I
INDIC DFMP * DL-GP-Mult. (EAQ) * Basisfaktor in EAQ
RETURN LOGS Makro-Instruktion Rücksprung zu der durch
SA VE in LOGS gespeicherten Adr.
ERRl CALL .FXEM.(EALN1) Makro-Instruktion Aufruf des UP mit dem
extern-globalen Namen .FXEM.
Argument in EALN I
UNITY FLD = O. 0, DU GP-Op. Direktoperand O. 0 nach EAQ
RETURN LOGS Makro-Instruktion UP-Rücksprung
ERR2 CALL FXEM.(EALN2) Makro-UP-Aufruf .FXEM. extern-global
Argument in EALN2
48 3.2. Programmierungsarten und -hilfen

FNEG GP-Negation - (EAQ) nach EAQ


TRA BEGIN Sprung nach BEGIN
ALOG10 ESTC2 INOIC Befehl erhält eine gerade Speicheradr.
Adr. ALOG 10 + 2 nach INDIC
TRA LOGS Sprung nach LOGS
OEC .30102999600 Doppellängen-Gleitpunkt-Konstante
ALOG ESTC2 INOIC Befehl erhält eine gerade Speicheradr.
Adr. ALOG + 2 nach INDIC
TRA LOGS Sprung nach LOGS
OEC 6.93147180560-1 Doppellängen-Gleitpunkt-Konstante
EALNl OEC 9 Ganzzahlige Konstante
EALN2 OEC 10 Ganzzahlige Konstante
A OEC .1292007098701 DL-GP-Konstante
B OEC - .2639857703101 DL-GP-Konstante
C OEC .1656762630101 DL-GP-Konstante
SRHLF OEC .70710678118700 DL-GP-Konstante
SRTWO OEC .14142135623701 DL-GP-Konstante
Z BSS 2 Reservierung von 2 Wörtern, erstes hat die
symbolische Adresse Z
ENO Ende des Assemblier-Quellprogramms

Das in Tafel 3.13 abgebildete Siemens 300-Programm enthält einige Vereinbarung$typen.


PN und PE signalisieren den Anfang bzw. das Ende des zu übersetzenden Quellprogramms. Die
PN-Vereinbarung enthält außerdem den Programmnamen PSEU. - Die Vereinbarung
5Z ZUFALL eröffnet einen neuen Satz mit dem Namen ZUFALL. - Eine Eins auf dem
Speicherplatz OZl bereitzustellen verlangt die OZ-Vereinbarung
OZl OZ 1.

Manche Assemblierersprachen bieten die Möglichkeit, Konstanten direkt in den Adreßteiien


der Befehle zu nennen. Man sieht das z. B. in dem GE 600-Programm in Tafel 3.12 beim
Befehl FSB = O. 5, DU.
W e i t erg ehe n deS p r ach eie m e n t e i m Ass e m b I i e r e r c 0 d e. Die abge-
bildeten Programme veranschaulichen die Verschiedenheit der Assemblierersprachen. Es gibt
keine gemeinsame Assemblierersprache, weil der Interncode nicht einheitlich ist. Die Auf-
stellung eines Assembliererprogramms setzt daher die Kenntnis der Assemblierersprache des-
jenigen Rechnertyps voraus, fiir den das Programm geschrieben werden soll. Man inforrniert
sich am besten anband der von den Herstellerfirmen herausgegebenen, häufig recht umfang-
reichen Assemblierer-Beschreibungen.
Es kann nicht die Aufgabe dieses Buches sein, hinreichende Kenntnisse der einzelnen
Assemblierersprachen zu vermitteln, sondern nur, die allgemein gültigen Grundgedanken auf-
zuzeigen, um das spätere Studium einer speziellen Assemblierersprache zu erleichtern. Die in
den Tafeln gedruckten Programme dienen zur lliustration und sind deswegen sehr ausführlich
kommentiert worden.
Die meisten Assemblierersprachen bieten noch weitere Möglichkeiten, um das Programmieren
zu erleichtern:
Mak r 0 - B e feh I e. Im allgemeinen gilt die Regel, daß ein Befehl im Assemblierercode
3.2.2. Assembliererprogramme 49

Tafe13.13 SIEMENS 300-Programm

Befehl Kommentar

PN PSEU Berechnung einer vorgebbaren Anzahl von ganzen


SZ ZUFALL Zufallszahlen gemäß der Formel
XNEU = XALT * (2 ** 7 + I) + I (mod. 2 ** 23)
ZAHLEN UNT DRUCKEN UP-Sprung zum Drucken des ab ANFTEXT
NOP ANFTEXT gespeicherten Textes
LlESKART MA LKEI = KARTE, KARTE + 3
Makro-Aufruf Lochkarte lesen und Spalten I bis
16 abspeichern nach KARTE bis KARTE + 3
MA EXWA = LlESKART
Makro-Aufruf Warten, bis Kartenlesen fertig
TEP KARTE (KARTE) in den linken Akkumulator
TEP' KARTE +1 (KARTE + l) in den rechten Akkumulator
UNT DEZ7DUAL. CONVERT
UP-Aufruf Umwandlung der in LA, RA stehenden
alphanumerischen Zahl in eine Dualzahl (LA)
SPR FEHLER UP-Fehlerausgang. Sprung nach FEHLER
SAM FEHLER UP-Normalausgang. Sprung, falls (LA) negativ
TAS KARTE (LA) nach KARTE. - Vorherige Zufallszahl -
TEP KARTE +2 (KARTE + 2) nach LA
TEP' KARTE +3 (KARTE + 3) nach RA
UNT DEZ7DUAL. CONVERT
UP-Aufruf (LA, RA) wandeln in Dualzahl (LA)
SPR FEHLER UP-Fehlerausgang. Sprung nach FEHLER
SAM FEHLER UP-Normalausgang. Sprung, falls (LA) negativ
ERZEUGEN TAS KARTE +1 (LA) nach KARTE + l. - Anzahl Zufallszahlen -
SGN ENDE Sprung nach ENDE, falls (LA) Null
TEP' KARTE (KARTE) nach RA
VLL' 7 (RA) um 7 BinärsteIlen nach links schieben
UND' MASKE (RA) vorderste BinärsteIle löschen
ADD' KARTE (RA) + (KARTE) nach RA
UND' MASKE (RA) vorderste BinärsteIle löschen
ADD' DZl (RA) + (DZ l) nach RA
UND' MASKE (RA) vorderste BinärsteIle löschen
TAS' KARTE (RA) nach KARTE
UNT (8) Aufruf des im Organisationsprogramms enthal-
tenen UP. (RA) dual nach LA, RA alphanumerisch
TAS ZAHLTl (LA) nach ZAHLT!
TAS' ZAHLT2 (RA) nach ZAHLT2
UNT DRUCKEN UP-Sprung zum Drucken des ab ZAHLAUS
NOP ZAHLAUS gespeicherten Textes
TEP KARTE +1 (KARTE + l) nach LA
SUB DZl (LA) - (DZ I) nach LA
50 3.2. Programmierungsarten und -hilfen

SPR ERZEUGEN Sprung nach ERZEUGEN


FEHLER UNT DRUCKEN UP-Sprung zum Drucken des ab FEHLTEXT
NOP FEHLTEXT gespeicherten Textes
ENDE UNT DRUCKEN UP-Sprung zum Drucken des ab ENDETEXT
NOP ENDETEXT gespeicherten Textes
MA ENDE Makro-Aufruf Beendigung des Programms
DRUCKEN NOP 0 UP-Eingang. Hier erfolgt durch UNT DRUCKEN
die Speicherung der Rückkehradresse
TEP (DRUCKEN) «DRUCKEN» nach LA
TAS DRUCK +3 (LA) nach DRUCK + 3, d. h. an geeignete Stelle
des aus 5 Befehlen bestehenden MA BSAU
DRUCK MA BSAU = 0, * Makro-Aufruf Drucken auf Blattschreiber 0;
Festsetzung des Druckbereichanfangs durch den
vorhergehenden Befehl
MA EXWA= DRUCK
Makro-Aufruf Warten, bis Ausdrucken beendet
SPR (DRUCKEN) UP-Rücksprung zu der Adresse in DRUCKEN
ANFTEXT AN '(47,31) ZUFALLSZAHLEN-GENERATOR (47,31,63)'
KARTE HZ Reservierung von
AP KARTE +4 4 Wörtern
MASKE BM 011111111111111111111111
Angabe eines Binärmusters
DZl DZ 1 Konstan tendefinition
ZAHLAUS AN '(47,31,42,42)'
ZAHLT1 HZ Reservierung von
ZAHLT2 HZ 2 Wörtern
AN '(63)'
FEHLTEXT AN '(47,31) EINGABEFEHLER. NEU STARTEN (63)'
ENDETEXT AN '(47,31) ENDE PSEU (47,31,63)'
SZ DEZ7DUAL Satzname
CONVERT HZ Wort mit der Adresse DEZ7DUAL. CONVERT
AP CONVERT Beim Assemblieren: Adreßpegel auf CONVERT
MC Beim Assemblieren ein im Maschinencode vor-
handenes Programm lesen, ab hier speichern
PE Ende des zu assemblierenden Quellprogramms

einem Befehl im Interncode entspricht. Eine Ausnahme bilden die Makrobefehle, bei deren
übersetzung sich jeweils eine bestimmte Interncode-Befehlsfolge ergibt.
Der Siemens 4004-Makrobefehl in Tafel 3.14 bewirkt, daß der nächste Satz der Datei
EINBAND geholt wird.
A d r e ß r e c h nun g, I n d i z i e run g, Sub s t i tut ion. Als Adreßteil eines
Befehls kann man eine weitgehend beliebige Verknüpfung symbolischer oder absoluter
Adressen verwenden. So bedeutet in Tafel 3.13 der Befehl TEP KARTE + 2, daß der Inhalt
der Speicherzelle, deren Adresse sich aus der KARTE-Adresse durch Erhöhung um 2 ergibt,
in den (linken) Akkumulator zu bringen ist.
3.2.2. Assembliererprogramme 51

Tafe13.14 SIEMENS 4004 - Programm ausschnitt mit Makro-Aufruf

Befehl Kommentar

GET EINBAND Makro-Aufruf:


Nächsten Satz von Datei EINBAND holen.
Daraus generiert der Assemblierer:
CNOP 0,4 NOP bis Beginn des nächsten Wortes
LM 14, 1, * +8 Mehrere Register laden:
(* + 8), also Rückkehradresse, nach RI4
(* + 9), also EI A-OP-Basisadr., nach R I 5
(* + 10), also Null, nach RO
(* + 11), also Dateiadr. EINBAND, nach R 1
B 72 (15) Sprung nach 72 + (R I 5), also GET-Ausführ.
DC AL4 (* + 16) Adreßkonstante * + 16 (Rückkehradresse)
DC AL4 (lFCP) Adreßkonstante IFCP (EI A-OP-Basisadr.)
DC AL4 (0000) Adreßkonstante 0
DC AL4 (EINBAND) Adreßkonstante EINBAND (Dateiadresse)

Eine besondere Rolle spielt die S t ern a d res se. Sie bezeichnet stets die Adresse des
Befehls, in der dieser Stern vorkommt. Im Befehl LM 14, 1, * + 8 des Programmausschnittes
in Tafel 3.14 bedeutet * + 8 die Adresse der (8 Bytes hinter diesem Befehl durch die Anweisung
DC AL4 (* + 16) gespeicherten) Adreßkonstante * + 16. Diese wiederum ist die Adresse des
ersten Befehls hinter dem Makroaufruf, da jede der vier AL4-Konstanten vier Bytes belegt.
Adressen, die zum Zeitpunkt der Programmierung noch nicht festliegen, können demnach erst
während der Programmausftihrung berechnet werden. Dies geschieht durch Adreßindizierung
oder durch Adreßsubstitution, gegebenenfalls auch durch Kombinationen beider Methoden.
Bei einem in d i z i er t e n Be feh I wird während der Befehlsausftihrung im Befehlsregister
zum Adreßteil der Inhalt des angegebenen Indexregisters addiert und dieses Ergebnis als
effektive Adresse verwendet. Der indizierte Befehl XI ALC TW aus Tafel 3.9 gestattet dadurch
das Drucken variabler Ziffern.
Bei einer Sub s t i tut ion findet während der Befehlsausfiihrung im Befehlsregister eben-
falls erst eine Feststellung der effektiven Adresse statt: Anstelle des Befehlsadreßteils wird
der Adreßteil des im Befehl genannten Speicherplatzes verwendet. Der Befehl SPR (DRUCKEN)
in Tafel 3.13 bedeutet demnach einen Sprung zu der im Speicherwort DRUCKEN genannten
Adresse, hier also den Rücksprung aus dem Unterprogramm in das aufrufende Programm.
Der Befehl FLD 2,1 * in Tafel 3.12 verwendet eine Kombination beider Methoden. Hier wird
eine Gleitpunktzahl geladen, deren Adresse in demjenigen Befehlswort gespeichert ist, dessen
Adresse sich ergibt, indem man zu 2 den Inhalt des Indexregisters Xl addiert. Der Stern
bedeutet hierbei Substitution.
Beispiele für Assembliererprogramme
SIE M E N S 300. Tafel 3.13 enthält ein in der Assemblierersprache PROSA geschriebenes
Programm zur Berechnung ganzer Pseudozufallszahlen. Die vom Benutzer gewünschte Anzahl
solcher Zahlen ist in den Spalten 9 bis 16, eine beliebige Vorgabezahl in den Spalten 1 bis 8
einer vom Programm zu lesenden Lochkarte anzugeben. Die berechneten Zufallszahlen
werden auf dem Blattschreiber ausgedruckt.
52 3.2. Programmierungsarten und -hilfen

Das Programm verwendet ein schon im Interncode vorliegendes Unterprogramm DEZ7DUAL,


das bei der übersetzung durch die Anweisung MC eingefligt wird.
Während der übersetzung stellt der Assemblierer ein Adreßbuch (Tafel 3.15) auf, in dem jede
symbolische Adresse und deren Position relativ zum Programmanfang (relative Adresse)
verzeichnet ist.

Tafe13.15 SIEMENS 300 - Adreßbuch Erst beim Einlesen des übersetzten Interncode-
Programms werden die relativen Adressen
ZUFALL
durch absolute Adressen ersetzt, indem zu den
ZAHLEN R o relativen Adressen die Programm-Anfangs-
LlESKART R 2 adresse addiert wird.
ERZEUGEN R 21
FEHLER R 39 Andere Rechnersysteme arbeiten in ähnlicher
ENDE R 41 Weise. Statt der Anfangsadresse verwenden z. B.
DRUCKEN R 45
IBM 360 und SIEMENS 4004 die Inhalte ge-
DRUCK R 48
ANFTEXT R 57 63 wisser Basisregister. Die endgültige Adreßbe-
KARTE R 64 rechnung erfolgt erst bei der Befehlsausflihrung.
MASKE R 68 Das Indizieren mit Basisregistern ermöglicht es,
DZ1 R 69 die Adreßteile der Befehle kurz zu halten,
ZAHLAUS R 70 ohne die effektive Adreßlänge dadurch zu be-
ZAHLTI R 71
ZAHLT2 R 72 schränken.
FEHLTEXT R 74
ENDETEXT R 82
:~ GE 600. Tafel 3.12 zeigt ein im GE 600-
Assemblierercode geschriebenes Unterpro-
DEZ7DUAL gramm zur wahlweisen Berechnung von 19 x
oder In x. Der Aufruf des Unterprogramms er-
CONVERT R 86 folgt durch CALL ALOG10 (X) bzw. CALL
ALOG (X). Das Unterprogramm wird über die
Befehle mit den globalen Adressen ALOG 10 bzw. ALOG betreten. Der mit den Namen LOGS
versehene Makrobefehl SA VE sorgt für die Speicherung der Rücksprungadresse in das aufrufende
Programm.

3.2.3. Programmiersprachen und Kompilierer. Programmiersprachen dienen dem Schreiben von


Programmen. Sie sind entweder m a s chi n e n 0 r i e n t i e r t wie die Assemblierersprachen
oder pro b lern 0 r i e n t i er t. In beiden Fällen bestehen die Programme aus Verein-
barungen und Anweisungen. Sie werden nach festgelegten Regeln aufgebaut. Die Anweisungen
sind Arbeitsvorschriften. Sie können ein Befehl sein oder aus mehreren Anweisungen und/oder
Befehlen bestehen. Auch ein Programm ist eine Anweisung, nämlich die Vorschrift, nach der
ein Ablauf geschehen soll. Vereinbarungen haben definitorischen Charakter und geben im
einfachsten Fall Erläuterungen und Festlegungen zu Teilen der Arbeitsvorschriften.
Ist die Sprache maschinenorientiert, so haben die Anweisungen die gleiche oder eine ähnliche
Struktur wie die Befehle der Anlage, auf der das Programm ablaufen soll. Es ist dann ein
übersetzer (Assemblierer) nötig, der die Anweisungen der Sprache in Befehle der Maschine
übersetzt. Bei den problemorientierten Sprachen gibt man diese Beziehung auf die Struktur
einer speziellen Anlage möglichst weitgehend auf. Man orientierte sich zunächst einerseits an
den Problemen, die beim technisch-wissenschaftlichen Rechnen auftraten (FORTRAN,
ALGOL), andererseits an denen, die im Bereich der kaufmännischen Datenverarbeitung zu
lösen waren (COBOL). PL/I umfaßt beide Bereiche.
3.2.3. Programmiersprachen und Kompilierer 53

Nach und nach ging man mehr auf eine Orientierung an speziellen Aufgaben ein. Es entstanden
mehrere Sprachen; die die Beschreibung von Analogrechenschaltungen ermöglichten (wie
MIDAS oder DSL/90) sowie Sprachen für digitale Simulationsaufgaben (SIMSCRIPT).
Besondere Bedeutung gewannen die Sprachen, die der Formulierung von Aufgaben der
numerischen Steuerung von Werkzeugmaschinen dienen (wie EXAPT I-m). Die problem-
orientierten Sprachen benötigen wie die maschinenorientierten einen übersetzer. Dieser
übersetzer ist ein Programm, das die ohne Bezug auf eine spezielle Maschine geschriebenen
Programme in eine entsprechende Befehlsfolge einer Maschine überträgt. Einen solchen
übersetzer nennt man Kompilierer. Er nimmt dem Programmierer einen Teil der Programmier-
arbeit ab, vor allem die Codierung arithrnetischer Ausdrücke und den Aufbau von Schleifen
sowie die Ein- und Ausgabe-Arbeit. Die übersetzten Programme sind aber im allgemeinen
länger (sowohl hinsichtlich des belegten Speicherplatzes als hinsichtlich der Laufzeit).

Auf gab e n ein e s Kom p i I i e r e r s. Ein Kompilierer hat im wesentlichen vier


Aufgaben zu erflillen:
1. Die übertragung des zu übersetzenden Programms in eine maschineninteme Darstellung in
einer Vorphase. Sie dient nicht nur der Umcodierung, sondern zugleich der Komprimierung
des Programms. Dabei werden z. B. alle nicht wesentlichen Leerstellen sowie alle Kommentare
(Texte, die der Erklärung des Programms dienen) fortgelassen. Die verwendeten Namen
werden in verkürzter Form gespeichert und in einer Liste zusammengefaßt.
2. Die Prüfung des Programms auf syntaktische Korrektheit und Umwandlung der klammer-
verwendenden Schreibweise in eine klammerfreie in der 1. Phase. Unter Syntax versteht man
dabei die Gesamtheit der Regeln der Sprache, mit denen korrekte Anweisungen aufgebaut
werden können. Diese Syntax kann mehr oder weniger komplizierte Anweisungen zulassen.
So kann ein ALGOL-Programm i. allg. eine komplexere Struktur haben als ein FORTRAN-
Programm.
3. Die Erzeugung eines geeigneten (eventuell optimierten) Programms im Maschinencode in
einer 2. Phase. In dieser werden die geprüften Anweisungen der problemorientierten Sprache
(die Ursprungsanweisungen) in Befehle der Anlage (in Zielanweisungen) übertragen, und zwar
so, daß die gestellte Aufgabe gelöst wird und das Maschinenprogramm auf der Anlage laufen
kann.
4. Die Bereitstellung eines Programmiersystems, das das übersetzte Programm steuert (running
system). In der Sprache ALGOL ist nämlich eine während des Laufs wechselnde Speicher-
verteilung (eine pulsierende Speicherverteilung) möglich. Das erfordert eine entsprechende
Organisation.

T e c h n i k des übe r set zen s. Die übersetzung der Anweisungen in der 1. Phase
kann nach zwei grundsätzlich verschiedenen Methoden geschehen:
1. Die syntax-orientierten Methoden benutzen die in der Syntax zusammengefaßten Regeln
zur Erkennung des Aufbaus einer Anweisung oder Anweisungsgruppe. Dabei werden
bestimmten syntaktischen Elementen Anweisungen der Maschinensprache zugeordnet. Der
Vorteil dieser Methoden liegt darin, daß die syntaktischen Regeln, mit denen der Kompilierer
arbeitet, geändert werden können, so daß man über.setzer für Gruppen von Sprachen
konstruieren kann. Einen weiteren Vorteil bietet die leichte Erkennbarkeit syntaktischer
Fehler. Allerdings ist diese Allgemeinheit des übersetzungsvorganges bei den übersetzern
meistens nicht erforderlich.
54 3.2. Programmierungsarten und -hilfen

2. Die direkten Verfahren verarbeiten die Anweisungen von links nach rechts und benutzen
das Keil e run g s p r i n z i p. Dieses bewirkt eine geeignete Umordnung der Anweisung
derart, daß die umgeordnete Folge in der 2. Phase direkt in eine Folge von Maschinenbefehlen
umgesetzt werden kann. Dabei ist vor allem notwendig, Klammern in arithmetischen Aus-
drücken zu beseitigen und die Reihenfolge der auszuführenden Operationen festzulegen. Diese
Methode hat von der übersetzung arithmetischer Ausdrücke ihren Ausgang genommen. Sie
läßt sich aber auch anwenden, um die Struktur vollständiger Programme in eine flir die
Erzeugung von Maschinencode geeignete Form zu übertragen, wenn nur alle Operationszeichen,
also auch die nichtarithmetischen, in der Rangfolge festgelegt werden.
Es gibt übersetzer, die mit der 1. Phase abschließen und die Erzeugung des Maschinencodes
überspringen. Die nur umgeordneten Anweisungen werden dann durch Unterprogramme
in terpretierend ausgeführt.
Das bei diesen Methoden benutzte Kellerungsprinzip wurde von Bau e rund Sam eis 0 n
eingeführt und ist bei vielen übersetzern verwendet worden. Es läßt sich am einfachsten an
der übersetzung arithmetischer Ausdrücke veranschaulichen.
Die U m 0 r d nun gar i t h met i s c her Aus d r ü c k e. Die Umordnung der
Anweisungen nach dem Kellerungsprinzip entspricht einer Transformation in die sog.
pol ni sc h e F 0 r m. Der Ausdruck "polnische Form" geht zurück auf die "polnische
Schule" in der mathematischen Logik, besonders auf Lu k a sie w i c z (1878-1956). Dieser
benutzte eine klammerfreie Schreibweise (1930). In der Logik hat sie sich nicht durchgesetzt.
Sie ist aber flir die übersetzungstechnik von großer Bedeutung. Man unterscheidet bei der
polnischen Schreibweise zwischen der pr a e fix - und pos t fix - Form. Die arithmeti-
schen Ausdrücke
a + b· c und (a+b)·c
lauten in der "praefJx"-Form:
+ a· bc und . + abc
in der "postfix"-Form:
abc· + und ab +c·
Die Operationszeichen werden also nicht zwischen die Operanden geschrieben, auf die sie
sich beziehen, sondern entweder vor oder hinter die Operanden. Das Operationszeichen
bezieht sich also auf die beiden nachfolgenden oder die beiden vorangehenden Operanden
und ist eine Aufforderung, die entsprechende Operation auszuführen. Lukasiewicz hatte die
praefJx-Form gewählt, flir die übersetzung aber ist die postft.x-Form die geeignete.
Ist ein arithmetischer Ausdruck in der postfix-Form gegeben, so läßt sich daraus gut der
entsprechende Maschinencode erzeugen. Man sucht nach den Operationszeichen und wendet
sie auf die beiden vorhergehenden Operanden oder Ergebnisse vorhergehender Operationen
an. Bei den Beispielen würden die folgenden Schritte ausgeführt, wobei d ein Hilfsspeicher sei:
d = b· c d=a+b
d=a+d d= d· c
Bei der übertragung in die polnische Form werden die arithmetischen Ausdrücke von links
nach rechts sequentiell verarbeitet. Die Operanden werden dabei in der Reihenfolge ihres
Einlaufens gespeichert. Die Operationszeichen (+, -, ., /) werden in einem sog. Keller abgesetzt,
in dem jeweils nur das zuletzt hineingebrachte Zeichen greifbar ist (fJrst-in-Iast-out-Prinzip). Der
3.2.4. Betriebssysteme SS

nächste Operator wird dann mit dem obersten des Kellers verglichen. Hat der einlaufende
niedrigeren oder gleichen Rang wie der im obersten Keller befindliche, so wird dieser aus dem
Keller in die umgeordnete Folge eingefügt. Diese Vergleich wird dann mit dem nächsten
Element des Kellers fortgesetzt. Ist der Rang des einlaufenden Operators dagegen höher, so
wird er als oberstes Zeichen in den Keller gebracht.
Für die arithmetischen Operationen gilt die Rangordnung (Hierarchie), die in Tafel 3.16
wiedergegeben ist. Die übersetzung des einfachen arithmetischen Ausdrucks zeigt die Tafel 3.17.
Es ist unter dem zu lesenden Zeichen des Ausdrucks jeweils der Inhalt des Kellers wiedergegeben.
Dazwischen steht die umgeordnete Folge als Ausgabe bei der Bearbeitung. Sie ist die gesuchte
polnische Form. Diese übersetzungstechnik schließt Fehlerkontrollen ein. Ungültige Zeichen
müssen beim Lesen erkannt werden. Fehlende Operationszeichen (das Multiplikationszeichen
muß gesetzt werden) sowie fehlende öffnende oder schließende Klammern werden festgestellt.
In der 2. Phase werden von dieser polnischen Form ausgehend die Maschinenbefehle erzeugt.
Dabei werden - anders als in der 1. Phase - die Operanden gekellert.

Tafel 3.16 Rangordnung der Operatoren und Zeichen

1. ( Klammer auf höchster Rang


2. t Potenzieren
3. und / Multiplikation
und Division
4. +und- Addition und
Subtraktion
5. ) und; Klammer zu niedrigster Rang
und Schlußzeichen

( hat als gelesenes Zeichen die höchste Priorität gegenüber den


Elementen im Keller. Ist sie dagegen selbst im Keller, so hat sie
den niedersten Rang.

Tafel 3.17 Beispiel für die Übersetzung arithmetischer Ausdrücke (a + b ). (c + d);

Zu lesende Zeichen: a + b c + d

Umgeordnete Folge: a b + c d +

Keller: ( + + + ( + + +
( (

Im Keller auftretende Klammernpaare werden dort gelöscht und nicht mit in die
umgeordnete Folge übernommen.

Wird bei der sequentiellen Verarbeitung von links nach rechts ein Operationszeichen gefunden,
so wird mit den zugehörigen obersten Operanden im Keller der entsprechende Maschinen·
befehl erzeugt.

3.2.4. Betriebssysteme. Das Betriebssystem einer Datenverarbeitungsanlage ist ein Programm,


genauer ein System von Programmen, die die Aufgabe haben, die Abwicklung der Benutzer-
programme auf der Maschine zu überwachen und zu steuern zu dem Zweck, sie zu vereinfachen
56 3.2. Programmierungsarten und -hilfen

und zu beschleunigen. Dieses System steht dem Benutzer der Anlage zur Verfügung. Nötig ist
es besonders dann, wenn vom Rechner mehrere Aufgaben in Angriff genommen werden sollen.
Nur so ist eine günstige Ausnutzung des Zentralspeichers und der peripheren Elemente zu
erreichen. Aber auch, wenn nur jeweils eine Aufgabe abgewickelt wird, und zwar vollständig
abgewickelt wird, ehe die nächste begonnen wird, ist der Einsatz eines Betriebssystems zu
empfehlen. Es stellt z. B. einen übersetzer bereit, fUhrt die übersetzung aus, listet das Pro-
gramm auf und startet den Rechenlauf, falls der Benutzer es wünscht. Operationen, die sonst
durch manuelle Eingriffe eingeleitet werden müßten, werden vom System begonnen. Man
spricht bei einer solchen Arbeitsweise des Betriebssystems vom S t a p e 1 b e tri e b (batch
processing).
Größere Anlagen erlauben einen Parallelbetrieb, bei dem mehrere Funktionseinheiten an Teil-
aufgaben derselben Aufgabe arbeiten. Weiterhin können im Simultanbetrieb mehrere Aufgaben
in Angriff genommen werden. All das muß organisiert werden. Der Rechner muß, falls er zur
Steuerung von Prozessen eingesetzt wird, den Vorrang bestimmter Programme berücksichtigen
können. Dazu müssen gegebenenfalls laufende Arbeiten unterbrochen werden, um angefallene
Daten abzurufen und zu verarbeiten. Je mehr Aufgaben das Betriebssystem übernimmt, desto
größer wird der Aufwand an Verwaltungsarbeit. Beträchtlich wird dieser Aufwand, wenn die
Anlage im M u 1 t i pie x b e tri e b arbeitet. Hierunter versteht man die Arbeitsweise, bei
der eine Funktionseinheit mehrere Aufgaben, abwechselnd in Zeiteinheiten verzahnt, abwickelt.
Handelt es sich dabei um einen Multiplexbetrieb der Zentraleinheiten, so spricht man vom
Me h r pro g r am m be tri e b (multiprogramming mode). Schließlich kann die Teilnahme
mehrerer Benutzer über Datenstationen an einer Anlage organisiert werden. Bei diesen T e i I-
ne h m e r r e c h e n s y s te m e n (time sharing) arbeiten die Benutzer gleichzeitig an der
Anlage, ohne daß sie etwas von der Verzahnung und kurzen zeitlichen Unterbrechung merken.
Je umfangreicher die Anforderungen sind, die an das Betriebssystem gestellt werden, desto
größer ist im allgemeinen die Anzahl der im Betriebssystem zusammenwirkenden Programme.
Der Umfang kann aber den speziellen Anlagenausstattungen und Einsatzgebieten baukasten-
mäßig angepaßt sein.
Ein Betriebssystem besteht i. allg. aus Steuer- und Arbeitsprogrammen.
1. S t e u e r pro g r a m m e. Sie dienen dem Zweck, die Abfolge der Bearbeitungen fest-
zulegen. Man unterscheidet drei Teile.
Der sog. s u per v iso r überwacht die Bearbeitung aller Aufgaben, die gestellt sind, und
steuert die Abwicklung. Man spricht dabei von einem task management. Zu den Aufgaben des
supervisors gehören z. B. das Starten und Abschließen von Ein- und Ausgabeoperationen und
die Steuerung parallelen Ablaufs.
Der sog. sc h e d u I e r hingegen regelt den übergang von einer Aufgabe zur anderen (von
einem job zum anderen). Er ist im allgemeinen nur zwischen den jobs im Zentralspeicher. Man
spricht hier von einem job management.
Bei Datenfernübertragung kommt noch ein besonderes Ein - und Aus gab e - K 0 n -
t roll s y s t e m hinzu, das die übernahme oder Abgabe von Daten steuert. Ein gesondertes
Programm übernimmt dann das data management.
2. A r bei t s pro g r am m e. Dies sind all die Programme, die dem Benutzer als Hilfs-
programme zur Verfügung stehen. Zu ihnen rechnen die übersetzer.
Sie werden z. B. beim Assemblieren erforderlich. Weiter stehen (nach Anlage verschieden)
übersetzer flir die problemorientierten Sprachen wie FORTRAN und ALGOL sowie COBOL,
RPG und PL/I zur Verfügung. Für die Zusammenfassung mehrerer übersetzter Programme
steht ein spezielles Bindeprogramm bereit.
3.2.4. Betriebssysteme 57

Sehr wichtig sind bei einer Anlage, besonders dann, wenn sie fiir kaufmännische Zwecke
eingesetzt wird und große periphere Speicher besitzt, die Sortier- und Mischprogramme
(SORT/MERGE). Sie erleichtern das Auffinden, Sortieren und Mischen. Manche Betriebs-
systeme übernehmen den Aufbau einer Bibliothek von Unterprogrammen. Darin sind
zunächst gewisse Standardunterprogramme enthalten und werden dem Benutzer zur
Verfligung gestellt. Besondere Bibliothekfiihrungsprogramme ermöglichen aber auch das
Einfligen der vom Benutzer geschriebenen Unterprogramme. Diese stehen dann wie die
Standardunterprogramme allgemein zur Verfügung. Schließlich enthält das Betriebssystem
noch gewisse Dienstprogramme (utilities), wie sie z. B. für das übertragen von Daten
erforderlich sind. Sie wickeln z. B. das übertragen von Lochkarten auf Magnetbänder, von
einem Magnetband auf ein anderes ab.
Große Bedeutung haben für den Benutzer auch die Testhilfen. Sie erlauben es z. B. an Hand
eines Protokolls den Gang einer Rechnung schrittweise zu verfolgen (tracing) oder sich durch
Zwischenergebnisse über den Ablauf zu informieren. Es besteht auch die Möglichkeit, daß
über ein externes Gerät (z. B. über einen Schnelldrucker) zum Abschluß eines jobs ein Speicher-
abdruck (memory dump) geliefert wird, sobald das Programm abgebrochen wurde.
Die Protokollierung des Ablaufs auf einer Datenverarbeitungsanlage ist eine weitere Aufgabe
des Betriebssystems. Sie geschieht meistens auf einer Bedienungsschreibmaschine, über die
der Operator als Bediener der Maschinen auch Anweisungen an das System eingeben kann. Mit
der Protokollierung ist in vielen Fällen auch die Abrechnung der Kosten der einzelnen jobs
verbunden.
Das Betriebssystem ist nach Anlagenausstattung verschieden auf die Speicher verteilt. Im
Zentralspeicher ist jeweils nur der Teil, der ständig bereitstehen muß. Der belegte Bereich des
Speichers ist dann meistens vor überschreiben geschützt, er kann nur gelesen werden. Man
nennt diesen Teil den residenten Teil. Auf peripheren Speichern stehen die Programme abruf-
bereit, die nur bei Verwendung in den Zentralspeicher gebracht werden, wie die übersetzer,
Dienstprogramme und Unterprogramme. Dieser periphere Speicher kann z. B. ein Magnet-
band oder ein Plattenspeicher sein. Das Betriebssystem bildet als Teil der software zusammen
mit der hardware eine betriebsfähige DVA.
4. Problemorientierte Sprachen

4.1. Einführung in FORTRAN

Sehr früh schon gewann man die Erkenntnis, daß fUr einen breiten Einsatz der Computer
Programmhilfen geschaffen werden müßten, die eine rasche, übersichtliche und möglichst wenig
fehleranfällige Programmgestaltung sowie eine problemlose übernahme des Programms auf
einen anderen Rechnertyp gestatten. Man entwickelte anlagenunabhängige, problemorientierte
Programmiersprachen.
Für technische und wissenschaftliche Berechnungen wurde 1954 erstmals FORTRAN
(Formula Translation) vorgeschlagen und sehr bald mit großem Erfolg eingesetzt. FORTRAN
ist seither ständig erweitert und dem jeweils neuesten Stand der Computertechnik angepaßt
worden. Zur Zeit sind drei Sprachebenen von ISO genormt worden: FORTRAN, INTER·
MEDIA TE FORTRAN und BASIC FORTRAN, letztere eine Untermenge des FORTRAN flir
kleinere Anlagen. In der Praxis ist FORTRAN IV heute am meisten verbreitet. Hier handelt es
sich um eine häufig über FORTRAN hinausgehende, vom Rechnerhersteller erweiterte Sprach·
version. Es empfiehlt sich daher, vor Beginn der Programmierung den zur VerfUgung stehenden
Sprachumfang im FORTRAN·Handbuch des jeweiligen Rechners nachzulesen. Oftmals existie·
ren mehrere, vom Ausbau des Rechners abhängige Sprachversionen.
Der Anwender formuliert die Lösung seines Problems in Form eines Q u e 11 e n pro g r a m m s ,
das vor dem Ablauf zunächst durch ein übersetzungsprogramm ( Kom p i 1 i e r er) in die
Maschinensprache übertragen werden muß. Das resultierende 0 b j e k t pro g r a m m steht
dann flir beliebig häufige Anwendungen zur Verfligung. Meistens flihren erst wiederholte über·
setzungsversuche zum Ziele, da der Anwender sein Quellenprogramm nur selten auf Anhieb
fehlerfrei schreibt. Der Kompilierer hilft dem Programmierer bei der Suche nach formalen
Fehlern durch entsprechende Mitteilungen während der übersetzung. Logische Fehler heraus·
zufinden bleibt dem Programmierer überlassen; hierzu wird man mit dem übersetzten Pro·
gramm eine wohldurchdachte Reihe von Testläufen durchführen.
Bei s pie 1. Tafel 4.1 enthält ein in der Programmiersprache FORTRAN geschriebenes
Programm zur Berechnung einer Tilgungstabelle, aus der sich die Restschuld am Ende eines
jeden Jahres bei Vorgabe des Zinsfußes und der Annuität entnehmen läßt. - Das Beispiel
zeigt den Aufbau eines FORTRAN.Programms aus einzelnen (numerierbaren) An w e i-
s u n gen, die jeweils in einer neuen Zeile beginnen, sich aber über mehrere Zeilen
erstrecken können. Man verwendet flir das Quellenprogramm zweckmäßig FORTRAN·
Programmierformulare, um die übertragung auf Lochkarten bzw. Lochstreifen zu erleichtern.
Die Formulare sind der Lochkarteneinteilung entsprechend in 80 Spalten unterteilt. Die
ersten funf Spalten sind hierbei flir eine etwaige Anweisungsnumerierung reserviert, die
sechste Spalte dient der Fortsetzungsmarkierung, falls in dieser Zeile eine schon angefangene
Anweisung weiterläuft. Die eigentliche Anweisung steht in den Spalten 7 bis 72. Die Spalten
73 bis 80 bleiben bei der Übersetzung unbeachtet und sollten vom Programmierer zur
Programm· und Zeilenkennzeichnung verwendet werden. Eine Ausnahme bilden die
4.1. Einführung in FORTRAN 59

Kom m e n t a r z eil e n, die in der ersten Spalte C enthalten, sonst aber beliebigen
Text haben dürfen; sie werden beim Übersetzen ignoriert.
Auf bau ein e s F 0 R T R A N - Pro g r a m m s. Jedes Quellenprogramm besteht aus
einer Folge von S tat e m e n t s, d. h. Anweisungen oder Vereinbarungen. Man unterscheidet
(in Klammern die Nummern entsprechender Statements in Tafel 4.1)
Ergibtanweisungen ( 9)
Steueranweisungen ( 5)
Ein-/ Ausgabeanweisungen (10)
Spezifikationsvereinbarungen ( 8)
Unterprogrammvereinbarungen
Zur Darstellung der Statements bedient man sich des auf S. 139 erläuterten 48-Zeichen-Satzes.
Aufbau und Wirkungsweise der einzelnen Statementtypen werden in dieser FORTRAN-Ein-
ftihrung beschrieben.

Tafel 4.1 Tilgungstabelle

C TILGUNGSTABELLE
KANALE = 10
KANALA = 7
READ (KANALE, 1) SCHULD, RATE, ZINS
FORMAT (2F6.0, F5.2)
WRITE (KANALA, 2) SCHULD, RATE, ZINS
2 FORMAT (lH1, 15X, 15HTILGUNGSTABELLE/
1 F8.0, 16H- DM SCHULDSUMME, F9.0,
2 14H- DM ANNUITAET/12X, 8HZINSFUSS,
3 F7.2, 8H PROZENT/)
IF (SCHULD) 3,3,5
3 WRITE (KANALA, 4)
4 FORMAT (14H EINGABEFEHLER)
STOP
5 IF (ZINS) 3,6,6
6 IF (RATE -SCHULD * ZINS/1QO.) 3,3,7
7 WRITE (KANALA, 8)
8 FORMAT (32H AM ENDE DES JAHRES VERBLEIBENDE,
15H SCHULD (IN DM)/)
Q = 1. + ZINS/1QO.
JAHR = 1
9 SCHULD = SCHULD * Q - RATE
IF (SCHULD) 12, 12, 10
10 WRITE (KANALA, 11) JAHR, SCHULD
11 FORMAT (115, F20.2)
JAHR = JAHR + 1
GOTO 9
12 RATE = RATE + SCHULD
SCHULD = O.
WRITE (KANALA, 11) JAHR, SCHULD
WRITE (KANALA, 13) RATE
13 FORMAT (25HO DIE ANNUITAET IM LETZTEN,
9H JAHR IST, F10.2, 3H DM)
STOP
END
60 4.1. Einführung in FORTRAN

Eingabe:

u3 2000uu5 400uu4.5

Ausgabe:

TILGUNGSTABELLE
32000.- DM SCHULDSUMME 5400.- DM ANNUITAET
ZINSFUSS 4.50 PROZENT

AM ENDE DES JAHRES VERBLEIBENDE SCHULD (IN DM)

1 28039.99
2 23901.78
3 19577.35
4 15058.33
5 10335.95
6 5401.07
7 244.11
8 0.00

DIE ANNUITAET IM LETZTEN JAHR IST 255.10 DM

4.1.1. Konstanten. Variablen. Die in den Anweisungen angesprochenen Daten lassen sich ihrem
Typ nach unterscheiden; sie sind entweder ar i t h met i s c h, wenn sie einen Zahlenwert
repräsentieren, log i s c h, wenn sie nur die Zustände "wahr" oder "falsch" annehmen können,
oder alp h a n urne r i s c h, wenn sie Text darstellen. Bei den arithmetischen Daten unter-
scheidet man ga n z z a h li g e (INTEGER-) Festpunktgrößen, re e ll e (REAL-) Größen, die
in Gleitpunktform gespeichert werden, und kom pIe x e (COMPLEX-) Größen, deren Real-
und Imaginärteil aus Gleitpunktzahlen bestehen.
Hinsichtlich ihrer Verwendung lassen sich die Daten in K 0 n s t a n t e n und Va r i abI e n
einteilen. Konstanten sind Daten, deren Wert zum Zeitpunkt der Programmierung bekannt ist,
und die diesen Wert während des Prograrnmablaufs niemals ändern. Konstanten werden im
Programm durch ihren Wert repräsentiert. - Alle anderen Daten sind Variablen.
Konstanten
G a n z z a h I i g e a r i t h met i s c h e K 0 n s t a n t e n sind als Dezimalzahl ohne Dezimal-
punkt zu schreiben. Bei positiven Konstanten kann das Vorzeichen entfallen. Die maximale
Größe einer ganzzahligen Konstanten ist maschinenabhängig.
R e e ll e a r i t h met i s c h e K 0 n s t a n t e n besitzen stets einen Dezimalpunkt. Der Zahl
darf ein Exponententeil nachgestellt sein, der mit dem Buchstaben E beginnt und einen ganz-
zahligen Exponenten enthält. In einem solchen Falle wird die vorangestellte Dezimalzahl mit der
als Exponent genannten Zehnerpotenz multipliziert. Beispiele für reelle Konstanten sind

-999.99
0.0
84.
7.316E + 2 (= 731.6)
-2.53E -3 (= - 0.00253)
6.5E2 (= 650.)
4.1.1. Konstanten. Variablen 61

Unzulässig sind hingegen:


o
3,471.1
l.E
6,3E -4

Im BASIC FORTRAN gibt es daneben nur noch die alphanumerischen Konstanten. Im vollen
FORTRAN besteht die Möglichkeit, reelle Daten auch mit erhöhter Genauigkeit (DOUBLE
PRECISION) zu speichern und zu verarbeiten. Reelle Konstanten werden dann als doppelt
genau angesehen, wenn die Zahl eine gewisse, maschinenabhängige Mindestgröße an geltenden
Ziffern oder einen Exponententeil hat, der mit D anstelle von E beginnt.
Beispiele doppelt genauer Konstanten:
3.1415926535898
0.00
- 2718.280 - 3

Eine kom pie x e K 0 n s t a n t e besteht aus einem eingeklammerten Paar reeller Konstan-
ten (entweder beide oder keine doppelt genau), die durch ein Komma getrennt werden.
Beispiele sind
(3.14, 4.379)
(7.3160 - 1,0.100)
Die beiden log i s c h e n K 0 n s ta n t e n schreibt man
.TRUE .
.FALSE.

Alp h a n urne r i s c h e K 0 n s t a n t e n (Hollerith-Konstanten) können alle Zeichen des


48-Zeichen-Satzes enthalten. Ihrer Definition muß man folglich eine Längenangabe entnehmen
können. Je nach verwendetem Kompilierer wird entweder der Konstante diese Längenangabe
und der Buchstabe H vorangesetzt, z. B.
14HGOETHE'SuFAUST

oder die Konstante wird durch Apostrophs eingeschlossen. Hierbei werden Apostrophs inner-
halb der Konstante durch Doppelapostrophs repräsentiert
'GOETHE"SuFAUST'.

Alphanumerische Konstanten werden sehr häufig in FORMAT-Vereinbarungen verwendet.


Wo man sie sonst noch benutzen darf, ist dem Handbuch der aktuellen Rechenanlage zu
entnehmen.
Va r i abi e werden, wie es in Formeln allgemein üblich ist, durch ihren Namen repräsentiert.
Ein Variablenname besteht aus 1 bis 6 alphabetischen oder numerischen Zeichen; an erster
Stelle muß ein alphabetisches Zeichen stehen. Gültige Namen sind z. B.
K
X
NUMMER
02YOX2
62 4.1. Einführung in FORTRAN

Dagegen sind unzulässig


3M
Y (XI
ZAEHLER
Z3.14
Den Variablentyp bestimmt man durch eine Typ e n ver ein bar u n g :
INTEGER NUMMER, ZEHLER (NUMMER und ZEHLER ganzzahlig)
REAL X, KAPPA, NUE (X, KAPPA, NUE reell)
DOUBLE PRECISION A (A doppelt genau)
COMPLEX STROM, Z (STROM, Z komplex)
LOGICAL MERKER, INDIC (MERKER, INDIC logisch).
Manche Kompilierer gestatten zusätzlich eine Festsetzung des gewünschten Speicherplatz-
umfangs. Arithmetische Variablen einfacher Genauigkeit brauchen nicht explizit vereinbart zu
werden. Hier tritt dann eine Standard-Vereinbarung in Kraft, die der Variablen, wenn ihr
Name mit I, J, K, L, Moder N beginnt, den Typ INTEGER zuweist, sonst den Typ REAL.
Viele FORTRAN-Benutzer machen von dieser Möglichkeit Gebrauch und ersparen sich damit
häufig jegliche Typenvereinbarung.
B e r e ich e. Bei vielen Anwendungen ist es unzweckmäßig, vielleicht sogar unmöglich, jeder
Variablen einen Namen zu geben, etwa im Programm zur Sortierung einer reellen Zahlenfolge
(Tafel 4.2). Hier müßten 2000 Namen vergeben werden; aber selbst wenn man sich dazu ent-
schließen würde, ergäbe sich ein unbeschreiblich langes, geistloses Programm. Hier faßt man die
Zahlen besser zu einem Zahlenbereich zusammen mit einem gemeinsamen Bereichsnamen. Die
individuellen Zahlen werden durch einen Zählindex gekennzeichnet, der eingeklammert
hinter dem Namen steht: X(11, X(21, X(31, X(4I, ... , X(20001 für Xl' X2 , X 3 , X4 , ..• ,
X 2000 •
Indizes sind grundsätzlich ganzzahlig und weder Null noch negativ. Bei dem Aufruf eines
Bereichelementes kann die Indexgröße durch einen arithmetischen Ausdruck sehr beschränkter
Gestalt festgelegt werden. Zur Speicherung der KoeffIZientenmatrix
aIJ a l2
a21 a22
verwendet man zweckmäßig einen mit zwei Indizes versehenen zweidimensionalen Bereich
A(1,11, A(1,21
A(2,1 I, A(2,21
FORTRAN gestattet die Verwendung ein-, zwei- und dreidimensionaler Bereiche. Jedem
Bereichselement wird, genau wie jeder Variablen, vom Kompilierer ein genügend großer
Speicherplatz zugewiesen. Hierzu ist es erforderlich, daß der Programmierer in einer DIMEN-
SION-Vereinbarung die Größe der einzelnen Bereiche festlegt.
DOUBLE PRECISION A
LOGICAL GITTER
DIMENSION X(2000I, A(2,21, GITTER(3,2,21
vereinbart einen reellen Bereich X mit 2000 Elementen, einen doppelt genauen Bereich A mit
2' 2 = 4 Elementen und einen logischen Bereich GITTER mit 3·2' 2 = 12 Elementen. Der
Kompilierer speichert die Elemente eines Bereichs in aufeinanderfolgenden Speicherzellen
dergestalt, daß ein Index umso mehr variiert, je weiter links er steht, im obigen Beispiel also
4.1.2. Ausdrücke 63

X(ll, X(21, X(3I, ... , X(20001


A(l,ll, A(2,ll, A(l,21, A(2,21
GITTER(l,l,ll, GITTER(2,l,ll. GITTER(3,l,ll,
GITTER(l,2,ll, GITTER(2,2,ll, GITTER(3,2,ll.
GITTER(l,l,2I, GITTER(2,l,2I, GITTER(3,l,2I,
GITTER(l,2,2I, GITTER(2,2,2I, GITTER(3,2,21.
Bei der Anwendung von Bereichsoperationen muß man diese Reihenfolge beachten.

4.1.2. Ausdrücke. Arithmetische und logische Konstanten und Variablen können mit Hilfe
typenmäßig passender Operatoren verknüpft werden. Dadurch entstehen arithmetische bzw.
logische Ausdrücke, in denen die Ausführungsreihenfolge durch geeignete Klammerung beliebig
beeinflußt werden kann.
A r i t h met i s c h e Aus d r ü c k e bestehen entweder nur aus einem arithmetischen
Operanden oder aus der Verknüpfung arithmetischer Operanden mittels arithmetischer Opera-
toren. Man schreibt
+ für Addition
für Subtraktion
* für Multiplikation
für Division
** für Potenzierung
Hierbei gilt auch der Aufruf einer arithmetischen Funktion, z. B. SIN(XI zur Berechnung des
Sinuswertes zum Winkel X, als arithmetischer Operand. Beispiele für arithmetische Ausdrücke
sind
B ** 2 - 4. * A * C
R * SIN «X + Y)/2.)
3.14
AlB * C
Der Aufbau und die Verarbeitung arithmetischer Ausdrücke unterliegt gewissen Regeln:
a) Zwei Operatoren dürfen niemals direkt aufeinander folgen, sondern müssen dann durch eine
Klammer getrennt werden:
A ** - B ist unzulässig und durch A ** (- B) zu ersetzen.
b) Zu jeder öffnenden Klammer muß es eine schließende geben.
c) Das Resultat ist vom Typ komplex bzw. doppelt genau bzw. reell, wenn mindestens ein
Operand komplex bzw. doppelt genau bzw. reell ist. Nur wenn alle Operanden vom Typ
ganzzahlig sind, ist das Resultat ganzzahlig. Die Division M/N liefert daher diejenige ganze
Zahl, deren Betrag gleich dem ganzzahligen Bestandteil des Absolutwertes von M/N ist.
(- 8)/3 ergibt z. B. - 2.
d) Die Operatoren sind in drei Rangstufen eingeteilt:
Oberstufe: Potenzierung
Mittelstufe: Multiplikation und Division
Unterstufe: Addition und Subtraktion
Die dadurch gegebene Reihenfolge kann durch Klammersetzen nach Wunsch geändert werden.
A + B * C bedeutet A + (B * C). Im anderen Fall hat man (A + B) * C zu
schreiben.
e) Folgen mehrere Potenzierungen aufeinander. wird von rechts nach links gerechnet.
A ** B ** ( ist in FORTRAN IV stalth'lt't 'Hlli hedeutet A ** IB ** e'-
64 4.1. Einführung in FORTRAN

Innerhalb der anderen beiden Rangstufen erfolgt die Bearbeitung von linKs nach rechts.
AlB * C bedeutet (AlB) * C. Bewegt man sich im Bereich sehr großer Zahlen, ist es auch
wichtig zu wissen, daß L + M - N wie (L + M) - N berechnet wird.
Durch geeignete Klammern erzwingt man jede andere Reihenfolge.
f) Wenn der Exponent einer Potenzierung vom Typ ganzzahlig ist, erfolgt die Berechnung der
Potenz durch wiederholte Multiplikation. In allen anderen Fällen geschieht die Berechnung über
die Exponential- und die Logarithmusfunktion.

A ** (N + K - 1) bedeutet A * A * A * ... * A (mit N + K -IOperanden).


A ** B wird berechnet wie EXP (B * ALOG (A» bzw. (bei doppelt genauem
A) wie EXP (B * DLOG (A».
Folglich führt eine komplexe, eine negative und eine Basis mit dem Wert Null nur dann nicht zu
einem Abbruch des Programmlaufes, wenn der Exponent von ganzzahligem Typ ist. Potenzie-
rungen mit komplexen Exponenten sind nicht statthaft. Im Programmbeispiel "Tilgungstabelle"
(Tafel 4.1) findet man arithmetische Ausdrücke z. B. in der mit der Nummer 6 markierten
IF-Anweisung als deren Klammerinhalt und im Statement 9 auf der rechten Seite der Ergibt-
anweisung.
Log i sc h e Aus d r ü c k e können im BASIC FORTRAN nicht gebildet werden; hierzu
braucht man den Sprachumfang des vollen FORTRAN. Das Ergebnis eines solchen Ausdrucks
ist stets .TRUE. oder .FALSE.
Je nach Typ der Operanden verwendet man in einem logischen Ausdruck Vergleichsoperatoren
oder logische Operatoren.
Ver g lei c h so per a tor e n verknüpfen zwei arithmetische Größen (die aber nicht vom
Typ COMPLEX sein dürfen) zu einem logischen Wert:
.LT. kleiner als
.LE. kleiner oder gleich
.EQ. gleich
.NE. nicht gleich
.GE. größer als oder gleich
.GT. größer als
3.14.LE. - 0.3 liefert den Wert .FALSE., da 3.14 weder kleiner noch gleich - 0.3 ist. Der
Ausdruck A.NE.B ist .TRUE., falls A und B arithmetisch verschiedene Werte repräsentieren.
Log i s ehe 0 per a tor e n bedingen als Operanden logische Größen, die allerdings ihrer-
seits Ergebnisse von Vergleichsoperationen sein können. Es gibt drei Operatoren:
.NOT. Negation
.AND. Konjunktion
.OR. Disjunktion
.NOT. verlangt nur einen (logischen) Operanden, der diesem Operator folgen muß. Nur wenn
der zweite Operator .NOT. ist, dürfen zwei logische Operatoren direkt aufeinander folgen.
Indem man arithmetische und logische Ausdrücke geeignet kombiniert, lassen sich beliebige
B e d in gun gen bilden. Die allgemeine quadratische Gleichung ax 2 + bx + c = 0 mit
nicht-komplexen Koeffizienten a, b, c besitzt genau dann nicht-komplexe Lösungen, wenn
(bei entsprechender Variablenbezeichnung) der logische Ausdruck
A .NE. O.. AND .. NOT. B * B - 4. * A * C .LT. O.
.OR. A .EQ. o.. AND. B .NE. o.
.OR. A .EQ. o.. AND. B .EQ. o.. AND. C .EQ. o.
4.1.4. Steueranweisungen 65

den Wert .TRUE. hat. In diesem Ausdruck brauchen keine Klammern gesetzt zu werden, da
folgende Ra n g f 0 I g e fü r 0 per a tor e n festgelegt ist:
Höchste Rangstufe: **
2. Stufe: *,/
3. Stufe: +,-
4. Stufe: .LT., .LE., .EQ., .NE., .GE., .GT.
5. Stufe: .NOT.
6. Stufe: .AND.
7. Stufe: .OR.

4.1.3. Ergibtanweisungen. Das Ergebnis eines arithmetischen bzw. logischen Ausdrucks läßt sich
durch eine Ergibtanweisung ab speichern. Der Speicherplatz wird dabei in Form eines Variablen-
namens oder eines Bereichelementes gekennzeichnet; sein bisheriger Wert wird durch den Wert
des Ausdrucks ersetzt
variable = ausdruck
Das Gleichheitszeichen ist nicht im üblichen mathematischen Sinne zu verstehen, sondern hat die
Bedeutung eines Ergibtzeichen.
Arithmetische Ausdrücke können nur arithmetischen, logische Ausdrücke nur logischen
Zielgrößen zugewiesen werden. Arithmetische Ergibtanweisungen können (außer bei kom-
plexen Größen) mit einer Typumwandlung verbunden sein, wenn die Zielgröße von anderem
Typ als der Wert des Ausdrucks ist. Bei der Zuweisung eines reellen Ausdrucks an eine
INTEGER-Größe findet keine Aufrundung statt.
N = 3.9
bewirkt, daß der INTEGER-Variablen der Wert 3 zugewiesen wird. Andere Beispiele
gültiger Ergibtanweisungen sind, wenn A, B, C(5), Q, ZINS reell, 0 und E komplex, I und K
ganzzahlig und L logisch vereinbart sind,
Q = 1. + ZINS/lOO.
= 1+1
K =A+ I (mit Umwandlung REAL in INTEGER)
C(5) = K - 1/2 * 2 (mit Umwandlung INTEGER in REAL)
D D * E - 6.28
L = A .GT. B

4.1.4. Steueranweisungen. Der Ablauf eines Programms erfolgt im Prinzip in der Reihenfolge
der Anweisungen. Die Praxis zeigt, daß es wünschenswert ist, diesen Grundsatz durchbrechen
zu können, wenn nämlich gewisse Programmstücke wiederholt durchlaufen werden müssen.
Bei der Berechnung der Tilgungstabelle (Tafel 4.1) muß am Ende eines jeden Jahres die ver-
bleibende Schuld ermittelt werden. Dies geschieht dadurch, daß jedesmal zu der entsprechen-
den Anweisung zurückgesprungen wird durch die u n b e d i n g t e S p run g a n w eis u n g
GO Ta 9, die auf das Statement Nr. 9 zurücksetzt. Allgemein hat die unbedingte Sprung-
anweisung die Form
GOTO n,
wobei n für die Nummer einer (ausführbaren) Anweisung steht. Die be re c h n e t e
Sprunganweisung
GO TO (nI' n 2 , ••• ,n rn ), i
66 4.1. Einführung in FORTRAN

bewirkt einen Sprung zur Anweisung ni' wenn die durch i gekennzeichnete nichtindizierte
ganzzahlige Variable den zwischen I und m liegenden Wert j hat. Liegt der Wert von i außer-
halb 1 bis m, erfolgt kein Sprung, so daß dann die auf diese Sprunganweisung folgende
Anweisung ausgeführt wird.
GO TO (217,218,217,217,218,301), K
veraniaßt die Programmfortsetzung bei der Anweisung NI. 217, falls K einen der Werte 1,3
oder 4 hat, bei 218, falls K gleich 2 oder 5 ist, bei 301, falls K gleich 6 ist.

Die g e set z t e S p run g a n w eis u n g


GO TO k, (ni' n 2 ,· .. , n rn )
setzt voraus, daß die nichtindizierte ganzzahlige Variable k zuvor durch eine spezielle
ASSIGN-Anweisung auf eine der Anweisungsnummern n 1 , n 2 , ... , n rn gesetzt worden ist.
ASSIGN 218 TO K
GO TO K, (217,218,217,217,218,301)
veranlaßt die Fortsetzung des Programmablaufs bei der Anweisung NI. 218.
Von erheblich größerer Wichtigkeit als die zuletzt genannten beiden Sprunganweisungen sind
die b e d i n g t e n S p run g a n w eis u n gen, die bedingungsabhängig eine Programm-
verzweigung bewirken.

Die arithmetische IF-Anweisung


IF (a) n 1 ' n 2 , n 3
setzt fest, daß je nach Wert des durch a angedeuteten arithmetischen Ausdrucks das Programm
fortzusetzen ist bei
n l , falls a< 0
n 2 , falls a = 0
n 3 , falls a> 0
gilt. Auch wenn der arithmetische Ausdruck z. B. niemals positive Werte annehmen kann,
müssen alle drei Anweisungsnummern genannt werden.
IF (RATE - SCHULD * ZINS/100.) 3,3,7
verlangt die Fortsetzung bei der Anweisung NI. 3, falls die Rate kleiner oder gleich dem Zins-
betrag ist, sonst bei Nr. 7.
Wenn man nicht im BASIC FORTRAN arbeitet, hätte man dafür auch die log i s ehe
IF-Anweisung
IF (b) s
verwenden können. b steht für einen logischen Ausdruck, s stellt eine einzelne Anweisung dar,
die aber nicht erneut eine IF-Anweisung sein darf. - Falls der logische Ausdruck b den Wert
.TRUE. hat, wird die Anweisung s eingeschoben, sonst nicht.
IF (RATE .LE. SCHULD * ZINS/100.) GO TO 3
ist gleichbedeutend mit der obigen arithmetischen IF-Anweisung, sofern die Nachfolge-
anweisung die Nummer 7 trägt.
Zu den Steueranweisungen zählt die wichtige und vielgebrauchte S chi e i fe n a n w eis u n g ,
die in einer der beiden Formen
00 ni = n l , n2
00 ni=n l ,n 2 ,n 3
auftritt. Hierbei steht n für die Nummer einer nachfolgenden (austührbaren) Anweisung.
4.1.4. Steueranweisungen 67

i bezeichnet eine nichtindizierte ganzzahlige Variable (Laufvariable); ß 1 , n 2 , n3 müssen ent-


weder positive ganzzahlige Konstanten oder nichtindizierte ganzzahlige Variable mit positivem
Wert sein. Die DO·Anweisung
00 6 K = 1, N
setzt fest, daß die nachfolgenden Anweisungen bis einschließlich derjenigen mit der Nummer 6
zunächst mit K = 1, dann mit K = 2, USW., schließlich mit K = N auszuführen sind. Die all-
gemeinere DO-Anweisung
00 6 K = 1, N, 2
unterscheidet sich darin, daß K nur die Werte 1,3,5, ... durchläuft, solange dabei N nicht
überschritten wird. n 3 gibt also die Schrittweite an, die bei der ersten Form auf 1 festgesetzt
ist, n l und n2 bilden die Laufgrenzen. Sobald die Laufvariable i sämtliche so erlaubten Werte
durchlaufen hat, wird das Programm bei der hinter dem Statement Nr. n stehenden Anweisung
fortgesetzt. Im Programmausschnitt

SUMME =0.
OSUMME = O.
00 10 K = 25, 100,2
SUMME = SUMME + K
10 OSUMME = OSUMME + K * K
BRUCH = SUMME/OSUMME
wird das Verhältnis der Summe aller ungeraden Zahlen zwischen 25 und 99 zur Summe ihrer
Quadrate berechnet. Eine DO·Schleife darf nur über die DO-Anweisung, nicht aber durch
einen Einsprung betreten werden, da sonst keine ordnungsgemäße Initialisierung der Lauf-
variablen gegeben ist. Innerhalb der DO-Schleife dürfen die Laufvariable i, deren Grenzen n l
und n 2 und die Schrittwerte n 3 zwar verwendet, aber nicht verändert werden. Nach normalem
Verlassen der DO-Schleife, d. h. nachdem die Laufvariable alle zugelassenen Werte durchlaufen
hat, enthält die Laufvariable keinen festgesetzten Wert mehr. Bei vorzeitigem Verlassen der
DO-Schleife infolge einer Steueranweisung besitzt die Laufvariable jedoch ihren aktuellen
Wert.
Die Anweisung mit der Nummer n am Ende der DO-Schleife darf keine Vereinbarung und
auch keine GO TO-, arithmetische IF-, DO-, STOP-, PAUSE- oder RETURN-Anweisung sein,
da sonst die Schleifensteuerung der DO-Anweisung gestört würde. Aus diesem Grunde darf
die Schleife auch nicht durch eine logische IF-Anweisung beendet werden, deren .TRUE.-
Ausgang eine dieser Anweisungen ist. Es kann aber vorkommen, daß eine Steueranweisung
innerhalb der DO-Schleife einen Sprung an das Schleifenende veranIaßt. Dann muß hier eine
CONTINUE-Anweisung stehen, die als Sammelpunkt für solche Sprünge dient, sonst aber
nichts veranlaßt. Im Programmausschnitt
00 10 K = 1,50
IF (NR-NUMMER(K)) 10,20, 10
10CONTINUE
wird die Tabelle NUMMER nach der Zahl NR abgesucht. Die Anweisung 20 liegt außerhalb
dieser Schleife.
Pro g r a m m - Bei s pie I. Tafel 4.2 enthält ein Programm zur Sortierung einer Folge
von maximal 2000 reellen Zahlen. Auf einer Vorlaufkarte ist in den ersten fünf Spalten die
effektive Anzahl (auf Wunsch mit Pluszeichen) anzugeben. Die folgenden Eingabekarten
enthalten je funf Zahlen der Folge in je 16 Spalten; die letzte Lochkarte ist unter Umständen
68 4.1. Einführung in FORTRAN

nur teilweise gefüllt. Nach Beendigung der Sortierung wird die geordnete Folge über Schnell-
drucker ausgegeben.

Tafel 4.2 Sortierung einer reellen Zahlenfolge

C SORTIERUNG EINER REELLEN ZAHLENFOLGE (MAXIMAL 2000 ZAHLEN)


C ERSTE KARTE SP.1-5 ANZAHL ZAHLEN. UEBRIGE KARTEN JE 5 ZAHLEN
DIMENSION ZAHL (2000)
KANALE = 10
C EINGABEKANAL FUER LOCHKARTEN
KANALA= 7
C AUSGABEKANAL FUER SCHNELLDRUCKER
READ (KANALE, 1) MENGE
FORMAT (15)
WRITE (KANALA, 2) MENGE
2 FORMAT (lHl, 16, 7H ZAHLEN)
IF ((MENGE - 2) * (2000 - MENGE)) 3, 4, 4
3 WRITE (KANALA, 31)
31 FORMAT (lH +, 15X, 13HEINGABEFEHLER)
STOP
4 READ (KANALE, 5) (ZAHL (M). M = 1, MENGE)
5 FORMAT (5Fll.3)
N = MENGE-l
DO 6 K = 1, N
KPLUSl = K + 1
DO 6 L = KPLUS1, MENGE
IF (ZAHL (K) - ZAHL (L)) 6,6,7
7 A= ZAHL (K)
ZAHL (K) = ZAHL (L)
ZAHL (L) = A
6 CONTINUE
WRITE (KANALA, 8) (ZAHL (M), M = 1, MENGE)
8 FORMAT (lHO, 2X, 27HLlSTE DER SORTIERTEN ZAHLEN/
1 lHO, 56 (/4E17.6)/(lHl, 60 (/4E17.6)))
STOP
END

Eingabe:

19
1641 22.3674E-I -0.3156 -41 -9.91
6.8 22E-I 4356-03 1.1+4 1.2+4
-43+21 12.-54 -3-3 8169
+12+81 1234567890 6.3 14.7

Ausgabe:

19 ZAHLEN
LISTE DER SORTIERTEN ZAHLEN

- 0.430000E + 020 - 0.990999E + 001 - 0.410000E + 001 - 0.315600E + 000


- 0.300000E - 005 O.OOOOOOE + 000 0.119999E - 052 0.223674E - 008
0.220000E - 002 0.435599E - 002 0.164099E + 001 0.630000E + 001
0.680000E + 001 0.147000E + 002 0.810690E + 002 0.110000E + 005
O. 123456E + 007 0.120000E + 041 O. 119999E + 080
4.1.5. Anweisungen für die Eingabe und Ausgabe 69

Das Programm enthält zwei geschachtelte DO-Schleifen, die beide mit der Anweisung 6
enden. - Man kann beliebig tief schachteln; einzige Bedingung ist, daß jede DO-Schleife
mindestens so weit reicht wie jede ihrer inneren Schleifen. Insbesondere, wenn die Lauf-
grenzen Variable sind, kann es vorkommen, daß die obere Grenze n 2 kleiner als die untere
Grenze n 1 ist. Je nach Art des Kompilierers wird dann die DO-Schleife einmal, nämlich
mit n 1 , durchlaufen, oder sie wird übersprungen. Es empfiehlt sich daher, eine solche
Situation zu vermeiden.
In die Gruppe der Steueranweisungen gehören ferner die Anweisungen zur zeitweisen
Unterbrechung und zur Beendigung des Programms.
Die PAUSE- A n w eis u n g
PAUSE
oder PAUSE n,
wobei n eine maximal flinfstellige vorzeichenlose ganze Zahl darstellt, veranlaßt das Pro-
gramm anzuhalten. Dem Bediener wird davon Kenntnis gegeben, bei Verwendung der
zweiten Art dieses Statements wird ihm auch die Zahl n mitgeteilt. Der Operator kann
manuell eine Fortsetzung des Programms bei dem aufPAUSE folgenden Statement
veranlassen. PAUSE ist demnach zeitaufwendig und sollte nur dann verwendet werden,
wenn zum weiteren Programmablauf eine Bedienungsmaßnahme, z. B. der Wechsel von
Magnetbändern, erforderlich ist.
Die STOP- A n w eis u n g
STOP
oder STOP n
beendet den Programmablauf. Falls die zweite Form gewählt wird, erfolgt eine Eintragung
der Zahl n in das Computer-Protokoll. Nur wenn als letztes eine STOP-Anweisung zu
befolgen ist, wird der Ablauf des FORTRAN-Programms ordnungsgemäß beendet. Die
STOP-Anweisung, die zur Objektzeit ausgeführt wird, darf nicht mit der END- Ver ein -
bar u n g verwechselt werden. Diese dient dazu, bei der Übersetzung dem Kompilierer
das physische Ende eines FORTRAN-Quellenprogramms anzuzeigen.
Die Steueranweisungen CALL und RETURN treten im Zusammenhang mit Unterpro-
grammen auf. Sie werden deswegen auch erst dort (Abschn. 4.1.6) erläutert.

4.1.5. Anweisungen für die Eingabe und Ausgabe. Bei fast allen Problemen sind die Daten,
mit denen später einmal gerechnet werden soll, nicht von vornherein bekannt, so daß sie
erst im Moment der ProgrammausfUhrung vom Rechner empfangen werden können. Aber
auch wenn man alle Daten kennt, sollte man, um flexibel zu bleiben, sie nicht als Konstanten
im Programm speichern. Außerdem benötigt das Programm immer nur die Daten für einen
einzigen Programmablauf; man würde Platz vergeuden, wenn man die Daten für alle Durch-
läufe speichern ließe. - Für das Lesen der Daten verwendet man die Ein gab e -
anweisung.
Die am Ende einer Berechnung gewonnenen Resultate müssen dem Menschen vom Computer
übergeben werden; dies geschieht durch eine Aus gab e an w eis u n g .
Eingabe: READ (kanalangabe, formatnummer) datenliste
Ausgabe: WRITE (kanalangabe, formatnummer) datenliste
Die Anweisungen enthalten drei Angaben:
I. Kanalnummer des externen Mediums (woher/wohin)
70 4.1. Einführung in FORTRAN

2. Nummer der FORMAT-Anweisung, in der die Form der externen Daten anzugeben ist (wie)
3. Liste der zu übertragenden Daten (wer)
Die häufig recht umfangreichen Angaben über die äußere Form der Daten sind bewußt von
diesen Anweisungen getrennt worden und bilden eine eigene FORMAT- A n w eis u n g, die
man flir verschiedene Ein-jAusgabeanweisungen zugleich verwenden kann. Die Ein-jAusgabe-
geräte werden durch ihre Kanalnummer spezifiert. Diese Nummern sind nicht generell fest-
gelegt; man muß sie im FORTRAN-Handbuch der verwendeten Anlage nachschlagen.
Im ersten Programm-Beispiel (Tafel 4.1) hat die Lochkarteneingabe die Kanalnummer 10.
Diese Nummer wird hier zu Beginn des Programms nach KANALE gebracht, um beim über-
gang zu einem anderen Rechner nur diese Ergibtanweisung ändern zu müssen.

Die Anweisung
READ (KANALE, 1) SCHULD, RATE, ZINS
besagt, daß drei REAL-Zahlen von Lochkarten gelesen und unter den Bezeichnungen
SCHULD, RATE und ZINS gespeichert werden sollen. Die Anweisung mit der Nummer 1
ist eine FORMAT-Anweisung und gibt darüber Auskunft, in welcher Form die drei
Zahlen auf der Lochkarte zu fmden sind.
Ganz entsprechend veranlaßt
WRITE (KANALA, 2) SCHULD, RATE, ZINS
die Ausgabe der in SCHULD, RATE und ZINS gespeicherten Daten auf dem Gerät, dessen
Kanalnummer in KANALA gespeichert ist und bei der verwendeten Anlage den Schnell-
drucker kennzeichnet. Man hätte auch
WRITE (7,2) SCHULD, RATE, ZINS
schreiben können.

Die Da t e n I ist e besteht aus einer Aufzählung der Variablen, die zu übertragen sind. Die
einzelnen Variablenangaben werden durch Kommas getrennt. - Dem zweiten Programm-
Beispiel (Tafel 4.2) mit
4 READ (KANALE, 5) (ZAHL(M), M = 1, MENGE)
entnimmt man, daß dun;h eine einzige Variablenangabe sogleich beliebig viele Elemente eines
Bereiches, hier ZAHL(I), ZAHL(2), ... ,ZAHL(MENGE) übertragen werden können. M erftillt
hierbei die Aufgabe eines Laufindex. Jede derartige DO-gesteuerte Angabe ist zu klammern.
Solche Angaben können geschachtelt werden, so daß z. B. bei Verwendung zweier eindimen-
sionaler Bereiche X(4) und Y(4) und eines zweidimensionalen Bereiches A(3, 2) durch die
Anweisung
WRITE (KANALA, 15) ((A (I, J), J = 1,2), X(I), Y(I), I = 1,3,2)
die Ausgabe von
A (I, 1), A (I, 2), X (1), Y (1), A (3, 1), A (3,2), X (3), Y (3) veranlaßt wird.
Die Variablenangabe kann auch aus einem Bereichsnamen allein bestehen. Dann erfolgt eine
übertragung des genannten Bereiches in der Reihenfolge der Speicherung.
WRITE (KAUS, 81) A, (X(I), I = 1,2), Y
bewirkt z. B. die Ausgabe von
A (1,1), A (2,1), A (3,1), A (1,2), A (2, 2), A (3,2), X (1), X (2), Y (1), Y (2), Y (3), Y (4).
Insbesondere bei Ausgabeanweisungen fehlt häufig die Datenliste; hier fmdet dann keine über-
tragung von Variablenwerten statt. Durch
4.1.5. Anweisungen für die Eingabe und Ausgabe 71

WRITE (KANALA, 4)
4 FORMAT (14HuEINGABEFEHLER)
wird der Text EINGABEFEHLER gedruckt.
Die in den Ein-/Ausgabeanweisungen durch ihre Nummer vertretene FORMAT- A n w eis u n g
enthält im wesentlichen Angaben über die Form der Daten auf dem externen Medium. In
diesem Sinne handelt es sich bei ihr auch um eine Vereinbarung und nicht um eine ausflihrbare
Anweisung.

10 WRITE (KANALA, 11) JAHR, SCHULD


11 FORMAT (15, F20. 2)

weist dem Variablenwert von JAHR die FORMAT-Angabe 15, demjenigen von SCHULD die
Angabe F20. 2 zu und bewirkt, daß flir die Ausgabe der INTEGER-Zahl JAHR 5 DruckstelIen,
flir die Ausgabe der REAL-Zahl SCHULD 20 DruckstelIen verwendet werden, von denen die
beiden letzten zwei NachkommastelIen enthalten und die drittletzte den Dezimalpunkt auf-
nimmt.
Den Elementen der Datenliste sind durch die FORMAT-Anweisung entsprechende Format-
angaben zugeordnet. Diese beginnen stets mit einem der Buchstaben I (flir INTEGER-
Elemente), E, F, G (flir REAL-Elemente), D (flir DOUBLE PRECISION-Elemente), L (flir
LOGICAL-Elemente) oder A (flir Elemente mit alphanumerischem Text). Daneben gibt es
Formatangaben, die nicht auf ein Element der Datenliste Bezug nehmen, z. B.
15HTILGUNGSTABELLE
Die einzelnen Angaben in der FORMAT-Anweisung werden durch Kommas oder Schrägstriche
getrennt. Der Schrägstrich bewirkt zusätzlich, daß der in Arbeit befindliche Satz des externen
Mediums beendet und ein neuer zur Verarbeitung herangezogen wird. Unter einem Satz
versteht man je nach dem Medium z. B. eine Lochkarte, eine Druckzeile, eine Lochstreifen-
zeile.
Die Bedeutung der Formatangaben hängt davon ab, ob sie Eingabe- oder Ausgabe-Anweisungen
zugeordnet werden; ihre Erläuterung ist entsprechend unterteilt. Hierbei stehen wund d
anstelle vorzeichenloser positiv-ganzer Zahlen, d kann auch Null sein.
F 0 r m a t a n gab e n für Aus gab e a n w eis u n gen. Iw verwendet man zur Auf-
bereitung einer INTEGER-Größe. Das Ausgabefeld umfaßt w Stellen, in das die Zahl rechts-
bündig mit Nullenunterdrückung gesetzt wird. Bei zu geringer Feldweite werden die vorderen
Stellen abgeschnitten.
Beispiele interner und externer ZahlendarsteIlungen bei Verwendung von 13 sind
intern extern
-12 -12
+9 9
-381 381
67431 431
Fw.d gehört stets zu einer REAL-Größe. Das Ausgabefeld umfaßt w Stellen, in das die Zahl
rechtsbündig mit Dezimalpunkt und d NachkommastelIen gesetzt wird. Hinter dem Dezimal-
punkt findet keine Nullenunterdrückung statt. Bei zu geringer Feldweite werden flihrende
Stellen abgeschnitten.
Beispiele flir F5. 2 sind
72 4.1. Einführung in FORTRAN

intern extern
3.146 3.14
12.1 12.10
-4.31 -4.31
-41.3 41.30
1581.03 81.03
Ew.d empfiehlt sich für REAL-Größen, bei denen mit größeren Schwankungen zu rechnen
ist, denn die Zahl erscheint in normalisierter Gleitpunktform. Das Ausgabefeld umfaßt w
Stellen, in das die Zahl rechtsbündig mit d-stelJiger Mantissenlänge und zwei- oder dreistelligem
Exponententeil (zur Basis 10) gesetzt wird. Der Mantissenteil beginnt mit Vorzeichen, Null,
Dezimalpunkt, der Exponententeil mit E und/oder Exponentenvorzeichen. Daraus ergeben sich
zwirigend die Forderungen
w ~ d + 7 bei zweistelliger Exponentendarstellung mit E bzw. dreistelJiger ohne E,
w ~ d + 8 bei dreistelliger Exponentendarstellung mit E.
Die durch Ew.d gewählte Darstellungsform ist zwar schwerer lesbar als die zu Fw.d gehörige,
bietet aber die Gewähr, daß keine führenden Stellen abgeschnitten werden.
Beispiele für Eil. 3 (bei dreistelligem Exponent mit E) sind
intern extern
238.9 0.238E + 003
-0.02 - 0.200E - 001
0.0004 0.400E -003
Für den Real- und Imaginärteil einer COMPLEX-Größe wird je eine Formatangabe vom Typ E
oder F benötigt.
Gw.d kann in BASIC FORTRAN nicht benutzt werden. Bei dieser "generalisierten" Aus-
gabe einer REAL-Größe entscheidet deren Betrag, ob im F- oder E-Format übertragen wird.
Solange die erste signifikante Ziffer der Zahl zwischen der d-ten Stelle vor dem Dezimalpunkt
und der 1. Stelle hinter dem Dezimalpunkt liegt, erfolgt die Ausgabe im F-Format mit der
Feldlänge w - 4 und so vielen NachkommastelIen, daß insgesamt d geltende Ziffern über-
tragen werden; hinter die Zahl werden 4 Leerzeichen gesetzt. - Falls die Ausgabegröße nicht
in diesem Bereich liegt, wird im Format Ew.d ausgegeben. Beispiele für GlO.3:
intern extern
8124.5 0.812E + 04
- 812.45 -812.
- 81.245 -81. 2
8.1245 8. 12
0.81245 0.812
0.081245 0.812E - 01
Dw.d ist die Formatangabe für DOUBLE PRECISION-Größen. Die externe Form gleicht
derjenigen von Ew.d, wenn man davon absieht, daß der Exponententeil hierbei auf vielen
Anlagen mit D anstelle von E eingeleitet wird.
Lw dient als Formatangabe einer LOGICAL-Größe. Das Ausgabefeld besteht aus w - 1
Leerzeichen und T für .TRUE.- bzw. F für .FALSE.-Werte.
Aw verwendet man zur Ausgabe von alphanumerischem Text, dessen Speicherplatz in der
Datenliste durch eine Variablenbezeichnung angegeben wird. Hierbei ist zu beachten, daß die
unter einem Variablennamen maximal speicherbare Zeichenanzahl g anlagenabhängig ist.
4.1.5. Anweisungen für die Eingabe und Ausgabe 73

Falls dann w ~ g gilt, werden die ersten w Zeichen in das Ausgabefeld gebracht; bei w > g
besteht das Feld aus w - g Leerzeichen und dahinter den g Zeichen des Speicherplatzes.

Beispiel: Für g = 8 mit


VORNAM: HEINZuuu
NAME: FINKuuuu
liefert die Anweisung
WRITE (KANALA, 14) VORNAM, NAME
14 FORMAT (Al, Ag)
das Ausgabefeld
HuFINKuuuu
wH nimmt keinen Bezug auf die Datenliste der zugehörigen WRITE-Anweisung, sondern
veranlaßt die übergabe der w Zeichen, die in der FORMAT-Anweisung dem H unmittelbar
folgen, an das Ausgabefeld:
WRITE (KANALA, 3)
3 FORMAT (14HGOETHE'SuFAUST)
erzeugt das Ausgabefeld GOETHE'SuFAUST.
Auf vielen Anlagen verwendet man, um das lästige Zeichenzählen durch den Programmierer zu
vermeiden, statt wHtext die Angabe des Textes in Apostrophs. Im Text selbst vorkommende
Apostrophs müssen hierbei durch Doppelapostrophs angegeben werden.
WRITE (KANALA, 3)
3 FORMAT ('GOETHE"SuFAUST')
führt dann auch zum Ausgabefeld GOETHE'SuFAUST.
wX liefert ein aus w Leerzeichen bestehendes Ausgabefeld, ohne daß auf die Datenliste
Bezug genommen wird.

Das WRITEjFORMAT-Anweisungspaar übergibt dem externen Medium die so entstandenen


und aneinandergereihten Ausgabefelder, wobei die im FORMAT-Statement deklarierte
Satzeinteilung vorgenommen wird. Ein Satz wird beendet, sobald als Trennzeichen der
Schrägstrich erscheint, das Ende der FORMAT-Anweisung erreicht wird, oder in der FORMAT-
Anweisung eine Formatangabe erreicht wird, der kein Element der Datenliste mehr zugeordnet
werden kann. Im Gegensatz zur Ausgabe über eine Schreibmaschine, bei der am Satzende
Wagenrücklauf und Zeilen transport selbständig veraniaßt wird, erfolgt die Zeilen- und Seiten-
steuerung beim Schnelldrucker stets zu Beginn des Satzes. Dazu wird das erste Zeichen des
ersten Ausgabefeldes eines Schnelldruckersatzes vom Text abgetrennt und zur Drucksteuerung
verwendet. Folgende Steuerzeichen sind festgelegt:
Leerzeichen übergang an den Anfang der nächsten Zeile
o übergang an den Anfang der übernächsten Zeile
+ Rückkehr an den Anfang der momentanen Zeile
I übergang an den Anfang der ersten Zeile der nächsten Seite
Auf einer Anlage, deren Schnelldruckerkanalnummer 7 ist, bewirkt die Anweisungsfolge
WRITE(7,20)
20uFORMAT( 16H lJEDEMuREDLICHEN/l H+,17X,
lu7HBEMUEHN/20HuSEluBEHARRLICHKEITu,
2u8HVER LI EHN/l HO,17X,6HGOETH E)
74 4.1. Einführung in FORTRAN

folgenden Ausdruck am Anfang einer neuen Seite:


JEDEMuREDLICHENuBEMUEHN
SEIuBEHARRLICHKEITuVERLIEHN

GOETHE
Anstelle eines einzigen Trennzeichen-Schrägstriches kann man beliebig viele Schrägstriche
hintereinander schreiben. Zwischen je zwei aufeinanderfolgenden Schrägstrichen entsteht
ein leerer Satz, der wie ein Satz aus einem Leerzeichen behandelt wird. Auf diese Weise kann
man beim Drucken das Vorsetzen um eine beliebige Anzahl von Zeilen veranlassen.
F 0 r m a t a n gab e n für Ein gab e an w eis u n gen. Iw ist die Formatangabe für
eine INTEGER-Größe. Die nächsten w Zeichen des Eingabesatzes enthalten die Zahl, die
unter dem zugehörigen Namen aus der Datenliste gespeichert wird. Leerzeichen werden wie
Nullen behandelt.
Wenn LKE die Kanalnummer der Lochkarteneingabe enthält und auf der nächsten Lochkarte
u--4uluu2345
gelocht ist, wird durch
READ(LKE,100)K,L
100uFORMAT(17,12)
der Wert - 40100 nach Kund 23 nach L gebracht.
Fw.d, Ew.d, GW.d sind für Eingabeanweisungen funktionsmäßig identische Format-
angaben. Das externe Feld umfaßt w Stellen und enthält eine Zahl, die der zugehörigen REAL-
Größe aus der Datenliste zugeordnet wird. Leerzeichen im externen Feld werden wie Nullen
behandelt.
Das externe Feld besteht aus dem Mantissenteil und gegebenenfalls dem Exponententeil. Der
Mantissenteil kann mit einem Vorzeichen eingeleitet werden und besteht weiter aus einer
Reihe von Ziffern, in denen ein Dezimalpunkt enthalten sein kann. Falls das Feld auch einen
Exponententeil besitzt, muß er eine der folgenden Formen aufweisen:
a) Vorzeichenbehaftete ganze Zahl
b) E, gefolgt von einer ganzen (evtl. vorzeichenbehafteten) Zahl
c) D, gefolgt von einer ganzen (evtl. vorzeichenbehafteten) Zahl
Hinsichtlich des Wertes sind E und D von gleicher Bedeutung.
Falls der Mantissenteil keinen Dezimalpunkt enthält, gelten die hinteren d Stellen dieses
Teiles als hinter dem Dezimalpunkt befindlich; im anderen Falle ist d bedeutungslos.
Beispiel
Eingabesatz 47 I 3.E2uuuuuuuuu341034+ 1
Anweisung READ(LKE,12)A,B,C
12uFORMAT(F8.2,Ell.1,F5.0)
nachher in A: 4,713' 1023
B: 34,1
C: 340
Die Eingabedaten für das Sortierprograrnm (Tafel 4.2) zeigen die Vielfalt der Eingabeformen.
Dw.d dient als Formatangabe, wenn der Feldinhalt unter einer DOUBLE PRECISION-
Größe zu speichern ist, im übrigen gelten dieselben Regeln wie bei den Formatangaben E, F, G.
Lw wird als Formatangabe einer LOGICAL-Größe verwendet. Das w-stellige externe Feld
4.1.5. Anweisungen für die Eingabe und Ausgabe 75

kann mit einer Leerzeichenfolge beginnen, danach hat T (für .TRUE.) oder F (für .FALSE.)
zu folgen. Der Rest des Feldes ist bedeutungslos.
Aw gibt an, daß das w-stellige externe Feld alphanumerischen Text enthält, von dem
maximal g Zeichen der nächsten Variablen aus der Datenliste zugewiesen werden. Die Anzahl
g der unter einem Variablennamen speicherbaren Zeichen ist anlagenabhängig. Wenn nun
w ~ g gilt, werden die w Zeichen des externen Feldes linksbündig gespeichert, dahinter g-w
Leerzeichen. Im Falle w > g werden w-g Zeichen des externen Feldes übergangen und die
restlichen g Zeichen gespeichert.

Beispiel mit g = 8:
Eingabesatz A 12,34.5+6*7BCDEuuuuu
Anweisung READ(LKE,9)R,S,T
9uFO RMAT (A 1,A8,A 12)
nachher in R: Auuuuuuu
S: 12,34.5+
T: CDEuuuuu
wH veranlaßt, daß die nächsten w Zeichen des Eingabesatzes in der FORMAT-Anweisung
selbst direkt hinter H gespeichert werden. Auf die Datenliste wird hierbei kein Bezug
genommen.

Beispiel:
Eingabesatz u11.05.74
Anweisung READ(KANALE,IO)
I OuFORMA T(9H...JBELIEBIG)
danach lautet die FORMAT-Anweisung
10 FORMAT(9Hul1.05.74)
Anstelle von wH verwenden viele Anlagen den in Apostrophs gesetzten Text. Dann wird im
Beispiel aus
lOuFORMAT(, uBELIEBIG')
die Format-Anweisung
I OuFORMAT('u I 1.05.74').
wX schreibt man, wenn die nächsten w Stellen des externen Satzes überlesen werden sollen.
Die Satzsteuerung erfolgt bei der Eingabe genauso wie bei der Ausgabe.

Wechselspiel zwischen Ein-/Ausgabeanweisung und zuge-


0"'1" d n e t e r F 0 R M A T - A n w eis u n g. Jedem Element der Datenliste einer E/A-
Anweisung muß eine passende Formatangabe zugeordnet werden können. Hieraus darf man
jedoch nicht schließen, daß eine Formatanweisung genau so viele an die Datenliste gebundene
Formatangaben enthalten muß wie die Datenliste lang ist. Die Anzahl der Formatangaben
kann sowohl kleiner als auch größer sein. Wenn z. B. vier REAL-Größen hintereinander im
externen Satz mit der Formatangabe F8.3 erscheinen, kann man statt F8.3, F8.3, F8.3, F8.3
bequemer 4F8.3 schreiben. Anstelle von F6.1, 15, F6.1, 15 deklariert man 2(F6.1 ,15). Durch
Verwendung entsprechender in Klammern gesetzter Wie der hol u n g s g r u p p e n
läßt sich
FORMAT(L4,II,L4,II,A3,F5.0,Ll,F5.0,Ll,F5.0,Ll,L4,Il,L4,11,A3,F5.0,Ll,F5.0,LI,F5.0,Ll)
76 4.1. Einführung in FORTRAN

ersetzen durch
FORMAT(2(2(L4,ll),A3,3(F5.0,Ll»).
Eine weitere Schachtelung ist nicht zulässig, da außer der Klammerstufe 0 (vorgeschriebene
Klammerung hinter FORMAT) nur die Klammerstufen I und 2 erlaubt sind. Jeder Wieder-
holungsgruppe kann dabei ein Wiederholungsfaktor vorangestellt sein; wenn er fehlt, wird
er als 1 angenommen.
Im Wechselspiel zwischen E/A-Anweisung und zugeordneter FORMAT-Anweisung beginnt
stets die FORMAT-Anweisung. Sie arbeitet so lange, bis eine Formatangabe erreicht wird, die
an die Datenliste geknüpft ist. Sollte die Datenliste erschöpft sein, beendet FORMAT sowohl
den laufenden Satz als auch den Ein-/Ausgabevorgang. Wenn die Datenliste noch nicht ab-
gearbeitet ist und das an der Reihe befindliche Element vom entsprechenden Typ ist, erfolgt
die übertragung im gewünschten Sinne. Danach arbeitet FORMAT so lange alleine weiter, bis
entweder das Ende der gesamten FORMAT-Anweisung erreicht ist oder wiederum Bezug auf
die Datenliste genommen wird. Im letzteren Falle wird mit der Untersuchung der noch
verbliebenen Datenliste in der eben geschilderten Weise fortgefahren.
Wenn das Ende der FORMAT-Anweisung erreicht ist, wird der gegenwärtige externe Satz
beendet und danach die Datenliste geprüft, ob sie vollständig verarbeitet ist. Sollte das der Fall
sein, wird der Ein-/Ausgabevorgang beendet.
Stehen jedoch noch unverarbeitete Elemente in der Datenliste, wird die FORMAT-Verarbeitung
wiederaufgenommen, und zwar
am Anfang der FORMAT-Anweisung, falls sie keine Wiederholungsgruppe besitzt,
am Anfang der am weitesten rechts stehenden Wiederholungsgruppe 1. Stufe, falls Wider-
holungsgruppen auftreten.
Im Zahlensortierungsprograrnm (Tafel 4.2) heißt es (KANALA bezeichnet die Schnell-
drucker-Kanalnummer):
WRITE(KANALA,2)MENGE
2 FORMAT(1H1,16,7HuZAHLEN)

WRITE(KANALA,8)(ZAHL(M),M=1,MENGE)
8 FORMAT(1HO,2X,27HLlSTEuDERuSORTIERTENuZAHLEN/
1HO,56(/4E17.6)/(1 H1 ,60(/4E 17.6)))

Angenommen, es seien MENGE = 502 Zahlen zu drucken. FORMAT-Anweisung 2 steuert


an den Anfang einer neuen Seite, druckt wegen der Formatangabe 16 die Zahl aus, die unter
dem ersten in der Datenliste aufgeführten Namen enthalten ist, und schreibt uZAHLEN
dahinter. Das Ende der FORMAT-Anweisung ist erreicht, so daß die Druckzeile beendet wird,
und da keine weiteren Elemente mehr in der Datenliste stehen, geht es bei der nächsten hinter
WRITE stehenden ausführbaren Anweisung (in Tafel 4.2 eine IF-Anweisung) weiter. Wenn
dann die zweite WRITE-Anweisung erreicht wird, steuert die FORMAT-Anweisung 8 die
Ausgabe. Das erste Zeichen des neuen Satzes ist 0, woraufhin um zwei Zeilen weitergeschaltet
und am Zeilenanfang begonnen wird. Es werden zwei Leerzeichen und der Text LISTEuDERu
SORTIERTENuZAHLEN gedruckt, danach wird erneut um zwei Zeilen weitergeschaltet. Die
Wiederholungsgruppe 56(/4EI7.6) wird wie /4EI7.6/4EI7.6/4E17.6 ... (56 mal)/4E17.6
verarbeitet. Die gegenwärtige Zeile wird daher beendet und (da ein durch E17.6 beschriebenes
Feld bei dreistellig gedruckten Exponenten stets mit drei Leerzeichen beginnt) auf den Anfang
der nächsten Zeile gesetzt. Dort werden die ersten vier Elemente des Bereiches ZAHL gedruckt,
4.1.5. Anweisungen für die Eingabe und Ausgabe 77

in der nächsten Zeile die nächsten vier, usw., bis 56 derartige Zeilen ausgegeben worden sind.
Die letzte Zeile wird beendet und nun am Anfang einer neuen Seite begonnen, da der nächste
Satz das Steuerzeichen 1 besitzt. Das weitere Ausdrucken geschieht jedoch erst in der zweiten
Zeile, da der erste Satz sogleich hinter dem Steuerzeichen durch / beendet wird. Nunmehr
werden 60 Zeilen lang je vier Elemente des Zahlenbereiches gedruckt, so daß bei Erreichen
des Endes der FORMAT-Anweisung von den 502 Zahlen bereits 464 ausgedruckt sind.
Das Ende der FORMAT-Anweisung ist zwar erreicht, nicht aber das Ende der Datenliste.
Folglich beginnt die FORMAT-Anweisung am Anfang der am weitesten rechts stehenden
Wiederholungsgruppe 1. Stufe
(1 H l,60(/4E 17.6))
so daß eine neue Druckseite angefangen wird. Nachdem 9 weitere Zeilen mit je 4 Zahlen des
Bereichs gedruckt sind, fmdet die FORMAT-Anweisung für 4E17.6 nur noch zwei Elemente
der Datenliste vor. Die Formatangabe E 17.6 wird zweimal verwendet, dann beendet FORMAT
die laufende Zeile, da die Datenliste erschöpft ist, und schließt den Druckvorgang ab.
F 0 r m a tf r eie Ein - / Aus gab e a n w eis u n gen. In den bisher besprochenen
Fällen stimmen die externe und die interne Darstellungsform der Daten nicht überein. Die
FORMAT-Anweisung steuert die notwendige Umwandlung von der einen in die andere Form.
Wenn Daten jedoch nur zeitweise in einen Hilfsspeicher (z. B. Magnetplatte oder Magnetband)
gebracht werden müssen, um den Hauptspeicher zu entlasten, ist es nicht nötig, die Daten zuvor
aufzubereiten, so daß die Datenumwandlung beim Rücktransport gleichfalls entfallt. Für der-
artige übertragungen benutzt man die f 0 r m a t fr eie n Ein - / Aus gab e an w e i -
sungen
READ(kanalangabe) datenliste
WRITE(kanalangabe) datenliste
Die Datenmenge, die durch eine WRITE-Anweisung übertragen wird, bildet hierbei einen Satz.
Durch jede formatfreie READ-Anweisung wird ein ganzer Satz gelesen, auch wenn ihre Daten-
liste nicht alle Daten des Satzes nennt. Fehlt daher bei der formatfreien READ-Anweisung die
Datenliste völlig, so wird damit einfach ein Satz überschlagen.
Erg ä n zen d e A n w eis u n gen für die Ein - und Aus gab e. Bei beiden
Arten der READ- und WRITE-Statements werden die einzelnen Sätze nacheinander über-
tragen, die Dateien werden also sequentiell verarbeitet. Einige externe Medien, z. B.
Magnetband- und Magnetplattengeräte, bieten dabei die Möglichkeit, Dateien auch ruck-
wärts zu lesen, also auf Sätze zurückzugreifen, die schon verarbeitet sind.

REWIND k a n a I a n gab e bewirkt, daß auf den Anfang der Datei positioniert wird.
BACKSPACE k a n a I a n gab e setzt auf den Anfang des vorangegangenen Satzes zurück.
Wenn vorher schon der Dateianfang positioniert war, bleibt diese Anweisung wirkungslos.
END FILE k a n al a n gab e veranlaßt die Markierung des Dateiendes.
Bei sequentieller Verarbeitung erhält man nur dadurch Zugriff zum gewünschten Satz, daß man
alle Sätze, die zwischen ihm und dem momentan zur Verarbeitung anstehenden Satz liegen,
Schritt fiir Schritt durchgeht. Wenn sich die Datei auf einem Speicher mit Direktzugriff, z. B.
einem Magnetplattenspeicher, befmdet, ist dieser Weg unnötig zeitaufwendig. FORTRAN
bietet Möglichkeiten für die dir e k t e Ver a r bei tun g von Dateien. Man informiert
sich darüber im einzelnen im FORTRAN-Handbuch der benutzten Anlage. Jede Datei, fiir die
man einen direkten Zugriff zu den einzelnen Sätzen wünscht, muß in einer DEFINE FILE-
78 4.1. Einführung in FORTRAN

Anweisung eigens vereinbart werden, in der Angaben über die Dateinumerierung, die maximale
Satzanzahl, die maximale Satzlänge, die Formatierung der Sätze und die Satznummerkenn-
zeichnung zu machen sind. Die betreffenden READ/WRITE-Anweisungen enthalten neben den
üblichen Spezifikationen zusätzlich die gewünschte Satznummer. Man kann die Zugriffszeiten
zusätzlich reduzieren, indem man rechtzeitig vor READ/WRITE eine entsprechende FIND-
Anweisung gibt.

4.1.6. Prozeduren und Unterprogramme. Bei der Analyse eines Problems stellt man häufig
fest, daß an verschiedenen Stellen Berechnungen nach übereinstimmender Vorschrift auszu-
führen sind. Es wäre unrationell, die entsprechenden Programmteile, die sich meistens nur in
der Bezeichnung der darin vorkommenden Größen unterscheiden, einzeln zu erstellen.
Vielfach gibt es auch Programmabschnitte, die man wörtlich aus anderen Programmen über-
nehmen könnte. In solchen und ähnlichen Fällen programmiert man die entsprechenden
Teile in Form von Pro z e dur e n .
FORTRAN bietet verschiedene Prozedurarten: Die wichtigsten Funktionen sind im übersetzer
schon enthalten und brauchen nur noch aufgerufen zu werden (e i n g e bau t e Fun k -
ti 0 n e n). Eigene Funktionen kann man entweder als F 0 r m e I fu n k t ion e n oder
als FUNCTION-Unterprogramme erstellen. Prozeduren, die nicht den Charakter von Funktionen
mit einem einzigen Ergebnis haben, lassen sich schließlich in Form von SUBROUTINE-
U n t e r pro g r a m m e n formulieren.
U n t e r pro g r a m m e werden grundsätzlich als selbständige Einheiten getrennt vom An-
wenderprogramm (Hauptprogramm) übersetzt - entweder auch zu verschiedenen Zeiten, so
daß die übersetzten Programme zum Zeitpunkt der Programmausführung vom Binder-
programm im Betriebssystem der Anlage zu einem ablauffähigen Gesamtprogramm zusammen-
gesetzt werden müssen, oder in einem gemeinsamen übersetzungsvorgang mit anschließendem
automatischen Binden.
Bei getrennt übersetzten Programmen kann es niemals durch eine unbeabsichtigte überein-
stimmung der Bezeichnung von Variablen zu Kollisionen kommen, da nach der übersetzung
alle Namen durch die Speicheradressen der Variablen ersetzt sind.
Fun k t ion sau fr u fe sind in arithmetischen bzw. logischen Ausdrücken erlaubt. Sie
werden wie Variablenbezeichnungen behandelt und bestehen aus dem Funktionsnamen und
der in Klammern stehenden Liste der aktuellen Parameter, die wiederum Ausdrücke, gelegent-
lich auch Funktionsnamen, sein können. Die einzelnen aktuellen Parameter werden durch
Kommas getrennt; sie müssen in Typ und Anzahl zur Funktion "passen". Innerhalb eines
Ausdrucks hat die Funktionsberechnung natürlich sogar Vorrang vor der Potenzierung.
SUBROUTINE- Auf ruf e erfolgen in eigenen CALL-Anweisungen mit Angabe des
gewünschten SUBROUTINE-Namens und (bei Bedarf) einer geklammerten Liste der aktuellen
Parameter.
Ein g e bau t e Fun k t ion e n. Die Menge der eingebauten Funktionen hängt vom
Umfang des übersetzers ab. Man tut gut daran, den Katalog der verfügbaren Funktionen im
FORTRAN-Handbuch der verwendeten Anlage zu studieren. Mindestens die in Tafel 4.3
genannten Funktionen stehen zur Verfügung.
F 0 r m elf unk t ion e n. Wenn ein Programm an mehreren Stellen die Berechnung einer
nicht eingebauten Funktion verlangt, kann der Programmierer diese Funktion selbst defInieren.
Besteht die Funktionsberechnung nur aus einem einzigen Ausdruck, so bietet sich die Er-
4.1.6. Prozeduren und Unterprogramme 79

klärung als Fonnelfunktion an. Dies geschieht in einer an den Programmanfang gestellten
Ergibtanweisung, deren linke Seite aus dem Funktionsnamen und der geklammerten Liste der
Argumente, deren rechte Seite aus dem Ausdruck zur Funktionsberechnung besteht. Die
Tafel4.3 Eingebaute Funktionen in BASIC FORTRAN

Definition Anzahl der Funktions- Argument- Typ des Funk-


(a = Argument) Argumente name typ tionswertes

ea EXP REAL REAL


In a ALOG REAL REAL
sin a SIN REAL REAL
cos a COS REAL REAL
arctan a ATAN REAL REAL
tanh a TANH REAL REAL
Va SQRT REAL REAL
1 al ABS REAL REAL
1al lABS INTEGER INTEGER
Typumwandlung FLOAT INTEGER REAL
Typumwandlung
ohne Rundung I IFIX FLOAT INTEGER
1 all· Vorzeichen (a 2 ) 2 SIGN FLOAT FLOAT 1 )
1all· Vorzeichen (a 2 ) 2 ISIGN INTEGER INTEGER 1)

verwendeten Argumentnamen sind hierin als Attrappen anzusehen, die nur dazu dienen, Typ,
Anzahl und Reihenfolge späterer echter Argumente zu kennzeichnen. In der Defmition einer
Fonnelfunktion können alle eingebauten Funktionen, die externen Funktionen und solche
Fonnelfunktionen, die davor schon definiert worden sind, aufgerufen werden. Formelfunk-
tionen gelten nur in dem Programm als bekannt, das auch ihre Definition enthält.
Pro g r a m m - Bei s pie I. Tafel 4.4 enthält ein Programm in BASIC-FORTRAN zur
Berechnung einer Sternersatzschaltung zu einer Dreieckschaltung. Um die dabei auftretenden
Multiplikationen und Divisionen komplexer Zahlen übersichtlich zu gestalten, wird eine Um-
rechnung der komplexen Zahlen aus der Nebenform in ihre Hauptfonn vorgenommen
x + jy = r' ei'"
Diese Umwandlung kommt im Programm mehrfach vor, deswegen werden zu Beginn des
Programms die beiden Fonnelfunktionen BETRAG(X,Y) zur r-Berechnung und
WINKEL(X,Y) zur .p-Berechnung defmiert. Wie man sieht, gelingt letztere nur mit Mühe in
einem einzigen Ausdruck. Im Falle X = 0 erfolgen sogar Divisionen durch Null mit un-
definiertem Ergebnis, ohne allerdings Schaden anzurichten, da anschließend mit Null
multipliziert wird mit dem Resultat Null: Der Ausdruck l./X * X liefert das Resultat Eins,
wenn X*"O gilt, und Null, falls X = 0 ist. Hier wird der Umstand ausgenutzt, daß in
FORTRAN Zahlenüberläufe und Divisionen durch Null nicht automatisch zu Programm-
unterbrechungen fuhren. Mit Hilfe der häufig eingebauten Unterprogramme OVERFL bzw.
DVCHK kann man sich jedoch anzeigen lassen, ob überlauf oder Division durch Null
eingetreten ist.

FUNCTION- U n t e r pro g r am m e. Bei Fonnelfunktionen kann es von Nachteil sein, daß


sie über ihr eigenes Programm hinaus nur dadurch bekanntgemacht werden können, daß man

1) Nur definiert für a 2 *" O.


80 4.1. Einführung in FORTRAN

Tafel 4.4 Dreieck-Stern-Umwandlung

C DREIECK·STERN-UMWANDLUNG
DIMENSION ZND (2,3). ZHS (2, 3), ZNS (2,3)
BETRAG (X, Y) = SoRT (X * X + Y * Y)
WINKEL (X, Y) = (ATAN (Y/X) + (1. -SIGN (1., X)) * 1.570796)/X * X
+ (1. -1./X * X) * SIGN (1.57096, Y)
KANALE = 10
KANALA= 7
READ (KANALE, 1) ZND
FORMAT (2F20.6)
R = BETRAG (ZND (1, 1) + ZND (1,2) + ZND (1,3), ZND (2, 1) + ZND (2,2)
+ ZND (2,3))
IF (R) 2, 2, 4
2 WRITE (KANALA, 3) ZND
3 FORMAT (3 (2E20.6/), 27HOSTERNUMWANDLUNG UNMOEGLlCH)
STOP
4 W = WINKEL (ZND (1, 1) + ZND (1, 2) + ZND (1,3), ZND (2, 1) + ZND (2,2)
+ ZND (2,3))
DO 5 1=1,3
11=1+1-1/3*3
12=1+2-(1+1)/3*3
ZHS (1, I) = BETRAG (ZND (1, 11). ZND (2, 11)) * BETRAG (ZND (1,12),
ZND (2, 12))/R
ZHS (2, I) = WINKEL (ZND (1, 11), ZND (2,11)) + WINKEL (ZND (1,12),
ZND (2, 12))-W
ZNS (1, I) = ZHS (1, I) * COS (ZHS (2, 1))
5 ZNS (2, I) = ZHS (1, I) * SIN (ZHS (2, I))
WRITE (KANALA, 6) ZND, ZNS
6 FORMAT (36H1VORGEGEBENE WIDERSTAENDE IM DREIECK//
1 3 (E 15.6, 4H + J *, E 15.6, 4H OHM/), 25HOGEGENUEBERLIEGENDE WIDER
2 7HSTAENDE,
3 9H IM STERN//3 (E15.6, 4H + J *, E15.6, 4H OHM/))
STOP
END

Eingabe:

-1.769
5·1
1.
2.
0.942
-0.909

Ausgabe:

VORGEGEBENE WIDERSTAENDE IM DREIECK

0.500000E + 001 + J * -D.176900E + 001 OHM


0.100000E + 001 + J * 0.942000E + 001 OHM
0.200000E + 001 + J * -D.909000E + 001 OHM

GEGENUEBERLIEGENDE WIDERSTAENDE IM STERN

0.315720E + 001 + J * 0.190386E + 000 OHM


0.121121E + 001 + J * -0.747542E + 000 OHM
0.719638E + 000 + J * 0.523786E + 000 OHM
4.1.6. Prozeduren und Unterprogramme 81

Tafel 4.5 Biegelinie eines Trägers mit Streckenlast

C BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS


C MIT STRECKEN LAST
DIMENSION CO (5), C1 (5), C2 (5), C3 (5)
CO(1)=1.
CO (2) =-2.
CO (3) =o.
CO (4) = 1.
CO (5) = O.
C1 (1)=4.
C1 (2) = -6.
C1 (3) = O.
C1 (4) = 1.
C2 (1) = 12.
C2 (2) = - 12.
C2 (3) = O.
C3 (1) = 24.
C3 (2) =-12.
KANALE = 10
KANALA = 7
READ (KANALE, 1) 00, E, AI, AL, A, B, H
FORMAT (7F10.0)
WRITE (KANALA, 2) 00, AI, E, AL, A, B, H
2 FORMAT (51H1BIEGELINIE EINES BEIDSEITIG AUFGELAGERTl:N TRAEGERS,
1 17H MIT STRECKENLASTI!4H 00=, F6.2, 6H KP/CM, 7X, 2HI=, FB.1,
2 6H CM ** 4,5X, 2HE=, E13.5, 9H KP/CM ** 2/3H L=, F7.1, 3H CM, 7X, 2HA=,F7.1,
3 3H CM, 6X, 2HB=, F7.1, 3H CM, 6X, 2HH=, F7.1, 3H CM//)
IF (00) 3,3,5
3 WRITE (KANALA, 4)
4 FORMAT (14H EINGABEFEHLER)
STOP
5 IF (E) 3, 3, 6
6 IF(AI)3,3,7
7 I F (AL) 3, 3, B
B IF ((A - B) * H) 9,3,3
9 WIRTE (KANALA, 10)
10 FOR MAT (4X, 4HX/CM, 7X, 4HY /CM, 12X, 2HY', 11 X, 6HY' , * CM, BX,
1 10HY'" * CM * * 2/)
FAKTOR = 00 * AL * * 4/(24. * E * AI)
Z= AlAL
12 X = Z * AL
Y = FAKTOR * HORNER (4, CO, Z)
YS = FAKTOR * HORNER (3, C1, Z)/AL
YSS = FAKTOR * HORNER (2, C2, Z)/AL * * 2
YSSS = FAKTOR * HORNER (1, C3, Z)/AL * * 3
PX = X + 0.05
WRITE (KANALA, 11) PX, Y, YS, YSS, YSSS
11 FORMAT (1X, F7.1,4E15.6)
Z= Z + H/AL
IF (Z-B/AL) 12,12,13
13 STOP
END

C HORNER-SCHEMA
FUNCTION HORN ER (N, PKOEFF, ARG)
82 4.1. Einführung in FORTRAN

DIMENSION PKOEFF (5)


M=N+1
HORNER = O.
001 1= 1, M
HORNER = HORNER * ARG + PKOEFF (I)
RETURN
END

Eingabe:

uuuuuuuuu2uuuuuul.E5uuuuuu1940uuuuuuu600uuuuuuuuuOuuuuuuu600uuuuuuuulO

Ausgabe:
BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS MIT STRECKEN LAST

00 = 2.00 KP/CM 1= 1940.0 CM * * 4 E = 0.10000E + 006 KP/CM * * 2


L = 600.0 CM A= O.OCM B=600.0CM H= 10.0CM

X/CM Y/CM Y' Y' , * CM Y' , , * CM * * 2

0.0 O.OOOOOOE + 000 0.927835E - 001 O.OOOOOOE + 000 - 0.309278E - 005


10.0 0.927324E + 000 0.926306E -001 -0.304123E -004 -0.298969E -005
20.0 0.185161 E + 001 0.921787E - 001 - 0.597938E - 004 - 0.288659E - 005
30.0 0.276993E + 001 0.914381E -001 -0.881443E -004 -0.278350E -005
40.0 0.367945E + 001 0.904192E -001 -0.115463E -003 -0.268041E -005
50.0 0.457742E + 001 0.891323E -001 -0.141752E -003 -0.257732E -005
60.0 0.546123E + 001 0.875876E -001 -0.167010E -003 -0.247422E -005
70.0 0.632835E + 001 0.857955E -001 -0.191237E -003 -0.237113E -005
80.0 0.717635E + 001 0.837663E -001 -0.214433E -003 -0.226804E -005
90.0 0.800292E + 001 0.815103E -001 -0.236598E -003 -0.216494E -005
100.0 0.880583E + 001 0.790378E -001 -0.257732E -003 -0.206185E -005
110.0 0.958299E + 001 0.763591E -001 -0.277835E -003 -0.195876E -005
120.0 0.103323E + 002 0.734845E -001 -0.296907E -003 -0.185567E -005
130.0 0.110520E+002 0.704244E -001 -0.314948E -003 -0.175257E -005
140.0 0.117402E+002 0.671890E -001 -0.331958E -003 -0.164948E -005
150.0 0.123952E + 002 0.637886E - 001 - 0.347938E - 003 - 0.154639E - 005
160.0 0.130155E + 002 0.602337E -001 -0.362886E -003 -0.144330E -005
170.0 0.135994E + 002 0.565343E - 001 - 0.376804E - 003 - 0.134020E - 005
180.0 0.141457E + 002 0.527010E - 001 - 0.389690E - 003 - 0.123711 E - 005
190.0 0.146530E + 002 0.487440E -001 -0.401546E -003 -0.113402E -005
200.0 0.151202E + 002 0.446735E -001 -0.412371E -003 -0.103092E -005
210.0 0.155462E + 002 0.405000E -001 -0.422165E -003 -0.927836E -006
220.0 0.159299E + 002 0.362337E - 001 - 0.430927E - 003 - 0.824744E - 006
230.0 0.162706E + 002 0.318849E -001 -0.438659E -003 -0.721651E -006
240.0 0.165674E + 002 0.274639E - 001 - 0.445360E - 003 - 0.618558E - 006
250.0 0.168196E + 002 0.229811E-00l -0.451030E-003 -0.515465E-006
260.0 0.170268E + 002 0.184468E -001 -0.455670E -003 -0.412373E -006
270.0 0.171884E + 002 0.138712E -001 -0.459278E -003 -0.309280E -006
280.0 0.173041E + 002 0.926466E -002 -0.461855E -003 -0.206187E -006
290.0 0.173737E+002 0.463753E -002 -0.463402E -003 -0.103095E -006
300.0 0.173969E + 002 0.884852E -007 -0.463917E -003 -0.245792E -011
310.0 0.173737E + 002 -0.463738E -002 -0.463402E -003 0.103090E -006
320.0 0.173041E + 002 -0.926454E -002 -0.461856E -003 0.206182E -006
330.0 0.171884E +002 - 0.138710E -001 - 0.459278E -003 0.309275E -006
340.0 0.170268E + 002 -0.184466E -001 -0.455670E -003 0.412368E -006
350.0 0.168197E + 002 -0.229810E -001 -0.451031E -003 0.515460E -006
4.1.6. Prozeduren und Unterprogramme 83

360.0 0.165674E + 002 -0.274638E -001 -0.445361E -003 0.618553E -006


370.0 0.162706E +002 -0.318848E -001 -0.438660E -003 0.721646E -006
380.0 0.159299E + 002 - 0.362336E - 001 -0.430928E -003 0.824738E - 006
390.0 0.155462E + 002 -0.404999E -001 -0.422165E -003 0.927831E -006
400.0 0.151202E + 002 - 0.446734E - 001 -0.412371E -003 0.103092E -005
410.0 0.146531E +002 - 0.487439E - 001 -0.401546E -003 0.113401E -005
420.0 0.141457E + 002 -0.527009E -001 -0.389691E -003 0.123710E -005
430.0 0.135995E +002 -0.565343E -001 -0.376804E -003 0.134020E - 005
440.0 0.130155E + 002 -0.602336E -001 -0.362887E -003 0.144329E -005
450.0 0.123953E + 002 -0.637886E -001 -0.347938E -003 0.154638E -005
460.0 0.117402E + 002 -0.671889E -001 -0.331959E -003 0.164948E - 005
470.0 0.110520E + 002 -0.704243E -001 -0.314949E -003 0.175257E -005
480.0 0.103323E + 002 -0.734845E -001 -0.296908E -003 0.185566E -005
490.0 0.958301 E + 001 -0.763590E -001 -0.277836E -003 0.195875E -005
500.0 0.880586E + 001 -0.790377E -001 -0.257733E -003 0.206185E -005
510.0 0.800295E + 001 -0.815103E -001 -0.236598E -003 0.216494E -005
520.0 0.717638E + 001 - 0.837663E - 001 -0.214434E -003 0.226803E - 005
530.0 0.632838E + 001 -0.857955E -001 -0.191238E -003 0.237112E - 005
540.0 0.546126E + 001 -0.875876E -001 -0.167011E -003 0.247422E - 005
550.0 0.457745E + 001 -0.891323E -001 -0.141753E -003 0.257731E -005
560.0 0.367948E + 001 -0.904192E -001 -0.115465E -003 0.268040E - 005
570.0 0.276997E + 001 -0.914381E -001 - 0.881457E -004 0.278349E -005
580.0 0.185165E + 001 -0.921787E -001 - 0.597954E - 004 0.288659E -005
590.0 0.927365E + 000 -0.926306E -001 -0.304139E -004 0.298968E -005
600.0 0.398183E -004 -0.927836E -001 -0.176970E -008 0.309277E - 005

sie erneut definiert. Wenn die Erklärung statt dessen in einem eigenen, unabhängig übersetzten
Unterprogramm erfolgt, besteht die Möglichkeit, daß spätere Anwender lediglich das Objekt-
programm ihrem eigenen anfligen. Definition und Verwendung eines FUNCTION-Unter-
programms zeigt das Pro g r a m m - Bei s pie I in Tafel 4.5. Bei der Berechnung der
Biegelinie eines beidseitig aufgelagerten Trägers mit Streckenlast müssen verschiedentlich
Funktionswerte ganzer rationaler Funktionen berechnet werden l ). Ein solches Problem taucht
mit Sicherheit auch in vielen anderen Zusammenhängen auf; daher ist es günstig, die Berechnung
(hier das Horner-Schema) in ein FUNCTION-Unterprogramm zu verlagern.
Die Polynomkoefflzienten denkt man sich hierbei zweckmäßig als Elemente eines ein-
dimensionalen Bereichs gespeichert, dessen Name samt dem Polynomgrad und dem Funktions-
argument zu übergeben sind. Im konkreten Fall wird man den Koefflzientenbereich allerdings
nicht so eng dimensionieren; wenn die volle FORTRAN-Sprache zur Verfügung steht, sollte
man den Bereich im FUNCTION-Unterprogramm sogar "angepaßt", d. h. mit variabler
Dimensionsangabe, definieren. Als erstes Funktionsargument wählt man dann den um Eins
erhöhten Polynomgrad
FUNCTION HORNER (M,PKOEFF,ARG)
DIMENSION PKOEFF(M)
HORNER = O.
001 l=l,M
HORNER=HORNER*ARG+PKOEFF(I)
RETURN
END
Der Typ des Funktionswertes richtet sich nach dem Funktionsnamen, kann aber auch explizit

1) s. Abschn. 4.2.11.3.
84 4.1. Einführung in FORTRAN

im FUNCTION-Statement vereinbart werden, z. B.


INTEGER FUNCTION ANZAHL(parameterliste)
oder REAL FUNCTION KAPPA(parameterliste)
oder LOGICAL FUNCTION MERKER(parameterliste)
oder DOUBLE PRECISION FUNCTION DETERM(parameterliste)
oder COMPLEX FUNCTION LOG(parameterliste)
Jede Parameterliste muß mindestens einen Parameter enthalten. Als formale Parameter im
Unterprogramm können nichtindizierte Variablen, Bereiche und Namen anderer Unter-
programme verwendet werden. Die beim Aufruf im Anwenderprogramm zu nennenden
aktuellen Parameter müssen zu den entsprechenden formalen passen; sie können in Form von
Ausdrücken, aber auch als Bereichs- bzw. Unterprogrammnamen auftreten. Die Zuweisung
des Funktionswertes erfolgt im Unterprogramm durch Ergibtanweisungen an den Funktions-
namen ohne Parameterliste. RETURN veranlaßt den Rücksprung in das aufrufende Programm.
Ein Unterprogramm kann mehrere RETURN-Anweisungen enthalten, aber nur ein END-
Statement zur Kennzeichnung des physischen Endes des Unterprogramms.
Tafel 4.6 zeigt ein Programm zur Berechnung des Strahlungsflusses cI> aus dem Sichtloch eines
Hochofens gemäß
~2 c2 • h
cI> = 1T • A· f dA
~l AS '[exp(c'h/k'T'A)-l]

(Lichtgeschwindigkeit c, Plancksches Wirkungsquantum h, Boltzmann-Konstante k, absolute


Temperatur T, Wellenlängenbereich Al ~ A;; A2 , Strahlfläche A)
Die Einteilung der Datenkarten und die Einheitenwahl der Eingabegrößen entnimmt man
Tafel 4.7. Das Druckbild für die Schnelldruckerausgabe (Tafel 4.8) gibt einen Eindruck von
der Ausgabeform. Die Eingabegrößen werden darin in unveränderten Einheiten, der errechnete
Strahlungsfluß in W protokolliert. Das Integral wird mit der Simpson-Regel, also durch
Unterteilung des Integrationsintervalls in eine wählbare Anzahl von Teilintervallen und inter-
vallweises Ersetzen der Kurve durch Parabelbögen, näherungsweise berechnet.
Die Simpson-Regel ist als FUNCTION-Unterprogramm SIMPS geschrieben und steht damit
auch flir andere Integrationsaufgaben zur Verfügung. Das Programm muß bei seinem Aufruf
mit der Interval1zahl, der unteren und oberen Integrationsgrenze und dem Namen der zu
integrierenden Funktion versorgt werden. Die Berechnung des Integranden erfolgt im
FUNCTION-Unterprogramm FUNKT, dessen Parameterliste wegen des Aufrufes in SIMPS
nur aus dem Funktionsargument bestehen kann. Das Hauptprogramm ist so allgemein wie
möglich geschrieben worden und kann flir ganz andere Integrationsaufgaben ebenfalls
verwendet werden, indem man nur das Programm FUNKT auswechselt. Daher ist der Text
der Seitenüberschrift auch nicht festgelegt, sondern wird der ersten Datenkarte entnommen.
Der Name FUNKT erscheint nur im SIMPS-Aufrufund bedarf daher einer besonderen
EXTERNAL-Vereinbarung, da der Kompilierer beim übersetzen des Hauptprogramms sonst
FUNKT flir den Namen einer REAL-Variablen halten müßte, und das Unterprogramm
FUNKT beim Binden der einzelnen Programme zum ablauffähigen Anwenderprogramm
folglich gar nicht hinzugezogen würde.
Eine gewisse Schwierigkeit bereiten die funktionsspezifischen Parameter T und A, die vom
Unterprogramm FUNKT gelesen werden müssen, da das allgemein angelegte Hauptprogramm
weder Anzahl noch Art der Parameter kennt. Es kann allenfalls die Existenz neuer Parameter-
werte durch eine "Schalterstellung" weitermelden. FUNKT hat die Pflicht, diesen Schalter
4.1.6. Prozeduren und Unterprogramme 85

Tafel4.6 Strahlungsfluß aus dem Sichtloch eines Hochofens

C SIMPSON·INTEGRATION EINER BELIEBIGEN FUNKTION


C 1. LOCHKARTE SP. 1-S0 UEBERSCHRIFT
C 2. LOCHKARTE SP. 1 =1= FUNKTIONSPARAMETER LESEN
C =0= DIE BISHERIGEN PARAMETER VERWENDEN
C =9= ENDE DER BERECHNUNG
C SP.2-6 ANZAHL DER TEILINTERVALLE
C SP. 7-21 UNTERE INTEGRATIONSGRENZE
C SP. 22-36 OBERE INTEGRATIONSGRENZE
C WEITERE KARTEN NUR, FALLS SP. 1=1, DANN LIEST DAS
C FUNKTIONSUNTERPROGRAMM DIE FUNKTIONSPARAMETER
COMMON KA, KANALE, KANALA, LINIE
EXTERNAL FUNKT
DIMENSION TEXT (10)
KANALE = 10
KANALA = 7
READ(KANALA,l)TEXT
1 FORMAT (10AS)
11 WRITE (KANALA, 2) TEXT
2 FORMAT (lH1, 10AS///)
LINIE = 0
10 READ (KANALE,3) KA,N,XA,XB
3 FORMAT (11,15, 2F15.0)
IF (KA - 2) 4, 5, 5
5 STOP
4 IF(N)6,6,7
6 WRITE (KANALA, S)
S FORMAT (14H EINGABEFEHLER)
STOP
7 XINTEG = SIMPS (N, XA, XB, FUNKT)
WRITE (KANALA, 9) N, XA, XB, XINTEG
9 FORMAT (15H SCHRITTANZAHL=, 15/15H UNTERE GRENZE=, E14.6,
16H OBERE GRENZE=, E14.6/15H INTEGRALWERT=, E14.G///)
LINIE = LINIE + 6
IF (LINIE-GO) 10,11,11
END

C UNTERPROGRAMM SIMPSON·INTEGRATION EINER BELIEBIGEN FUNKTION


FUNCTlON SIMPS (N, A, B, F)
H = (B - A)/(2. * N)
SIMPS= o.
K=2*N-1
DO 1 1= 1, K, 2
X=A+I*H
SIMPS = SIMPS +F (X - H) + 4. * F (X) + F (X + H)
SIMPS = SIMPS * H/3.
RETURN
END

C SPEKTRALER STRAHLUNGSFLUSS EINES SCHWARZEN KOERPERS


C ALS FUNKTION DER WELLENLAENGE
FUNCTlON FUNKT (LAMBDA)
REAL LAMBDA
COMMON MERKER, KANALE, KANALA, L
IF (MERKER) 1.2.1
86 4.1. Einführung in FORTRAN

1 READ(KANALE,3)T,A
3 FORMAT (2F15.0)
WRITE (KANALA, 4) T, A
4 FORMAT (15H TEMPERATUR=, E14.6, 16H STRAHLFLAECHE=, E14.6/)
L=L+2
MERKER = 0
2 FUNKT = 3.141593 * A * 2.997925E8 * * 2 * 6.6256E - 34/(LAMBDA * * 5*
(EXP (2.997925E8 * 6.6256E - 34/(1.380535E - 23 * T * LAMBDA)) - 1.))
RETURN
END

Eingabe:

STRAHLUNGSFLUSS AUS DEM SICHTLOCH EINES HOCHOFENS

11 11 0.863E-61
20001
2.015E-61
0.0011

~I
0.863E- 6 1 2.015E-6 1
20
10 0.863E-6 2.015E-6
51 0.863E-6 2.015E-6

I
25001 0.0011
0.863E- 6 1 2.015E-6 1
gl 10
10 0.800E-6 2.500E-6
9

Ausgabe:

STRAHLUNGSFLUSS AUS DEM SICHTLOCH EINES HOCHOFENS

TEMPERATUR = 0.200000E + 004 STRAHLFLAECHE = 0.100000E - 002


SCHRITTANZAHL = 1
UNTERE GRENZE = 0.862999E - 006 OBERE GRENZE = 0.201499E - 005
INTEGRALWERT = 0.207385E + 003

SCHRITTANZAHL = 10
UNTERE GRENZE = 0.862999E - 006 OBERE GRENZE = 0.201499E - 005
INTEGRALWERT = 0.206437E + 003

SCHRITTANZAHL = 20
UNTERE GRENZE = 0.862999E - 006 OBERE GRENZE = 0.201499E - 005
INTEGRALWERT = 0.206436E + 003

TEMPERATUR = 0.250000E + 004 STRAHLFLAECHE = 0.100000E - 002


SCHRITTANZAHL = 5
UNTERE GRENZE = 0.862999E - 006 OBERE GRENZE = 0.201499E - 005
INTEGRALWERT = 0.603826E + 003

SCHRITT ANZAHL = 10
UNTERE GRENZE = 0.862999E - 006 OBERE GRENZE = 0.201499E - 005
INTEGRALWERT = 0.603822E + 003

SCHRITT ANZAHL = 10
UNTERE GRENZE = 0.799999E - 006 OBERE GRENZE = 0.249999E - 005
INTEGRALWERT = 0.765491E + 003
4.1.6. Prozeduren und Unterprogramme 87

Tafel 4.7 Karteneinteilung

SEITENÜBERSCHRIFT
(SP. 1-80)

z~f!l~
..,>l:N
t<l..,"">
~ Ö~ ~ UNTERE INTEGRA TIONSGRENZE OBERE INTEGRATIONSGRENZE
t"' ~ ,!., c (~ in m) (~ in m)
t"',Zt<l
t<l ~"

TEMPERATUR SICHTLOCHGRÖSSE
(inK) (in m')

- e)tll >
z,,-z
..,>l:N
!:l..,;b
<ö~ ~ UNTERE INTEGRATIONSGRENZE OBERE INTEGRATIONSGRENZE
~ ~ ,!., C (~ in m) (~ in m)
t"' zt<l
t<l ~"
o

ENDEKARTE

nach Lesen der Daten sofort zurückzustellen, da erst nach einer Reihe von FUNKT-Aufrufen,
nämlich nach Beendigung von SIMPS, im Hauptprogramm fortgefahren wird.
Diese geheime Verständigung der Programme untereinander wird durch Speicherung der
betreffenden Daten im C 0 M MON - B e r e ich möglich. Hierunter versteht man einen
Daten-Speicherteil, dessen Lage allen Programmen grundsätzlich bekannt ist. Den in der
COMMON-Vereinbarung eines Programms aufgeflihrten Variablen werden in dieser Reihen-
folge Speicherplätze im COMMON-Bereich zugewiesen.
88 4.1. Einführung in FORTRAN

~ So bedeutet
-~
GO 0\ 0\ 0\
0\ 0\ 0\
COMMON KA, KANALE, KANALA, LINIE
0
'"
-;;;-
0\
+
0\
+
0\
+
V> -;; die Zuweisung der COMMON-Speicherplätze
- ~ ~ ~

-'"
.!!.
0\
0\
0\
0\
0\
0\
mit den Nummern I bis 4 an die Variablen KA,
KANALE, KANALA, LINIE des Hauptpro-
..::. 0\
0\
0\
0\
0\
gramms. - Wenn nun in FUNKT
0 0\
eil 0\ 0\ 0\
~
GO Z 0\ 0\ 0\ COMMON MERKER, KANALE, KANALA, L
t:"
-'" ~

~ 0 0 0
vereinbart wird, beziehen sich die Namen
-;;;- 0 I I I
0
oo:t -;; :I:: 11 11 11
MERKER, KANALE, KANALA, L hier eben-
-;; u ~ ~ ~ falls auf diese COMMON-Speicherplätze NI. I
'";;" 0 N
-::;-
:I:: N bis 4. Wird daher im Hauptprogramm, um das
:I:: u Z Z
'0 ~ ~ ~
Vorliegen neuer Parameterwerte zu kennzeich-
-0( J:.:: J:.:: nen, unter KA der Wert I gespeichert, so hat in
J!.
GO
eil
~ ...;! e;! e;! FUNKT die Variable MERKER ebenfalls den
t:" Z ~
Wert 1. Daraufhin liest und druckt FUNKT bei
7 ..... ...;! ~ ~
0 -;;;- ~ :I:: J:.:: J:.:: seinem ersten Aufruf die neuen Parameterwerte
M -;; -0( ~ ~ und stellt MERKER auf Null, so daß diese An-
-;;;- :I:: J:.:: ~ ~ weisungen bei den folgenden Aufrufen über-
N u E-< 0 0
-::;- gangen werden. Erst die nächste Datenkarte
0 eil
kann KA und damit MERKER verändern.
'0 ...;!

'"
-;;;
E-<
::t:: 0\ 0\0\ 0\0\ Man kann die Parameterliste eines Unterpro-
t:" U 0\ 0\0\ 0\0\ gramms häufig sehr verkürzen, indem Anwen-
7 .....
-;;;-
0\ 0\0\ 0\ 0\ der- und Unterprogramm verabreden, die mei-
0
- eil
+ ++ ++ sten aktuellen Parameter auf bestimmten Plät-
'" ...!. ~ ~~ ~~
~ ::s 0\ 0\0\ 0\0\
zen des COMMON-Bereiches zu übergeben.
N
-::;-
~ 0\ 0\0\ 0\0\ Wenn das ablauffähige Programm dabei eine
-0
Q 0\
0\
0\0\
0\0\
0\0\
0\0\
größere Anzahl solcher Unterprogramme ent-
hält, kann die COMMON-Liste ziemlich lang
-'"
..!..
eil
;:J
0\
0\
0\ 0\ 0\
10\0\
0\0\0\
I 0\0\
und unübersichtlich sein, unverständlich ins-
r- -0( I I besondere in den Unterprogrammen, da die
-7'" 0 100
COMMON-Liste stets von Anfang bis zu den
-
1 00
eil I I I I I I I
0
-;; im jeweiligen Programm verwendeten Variablen
-'" eil
;:J
11
J:.::
11
"';!~E-<
11 11 11 11 11
...;!~E-<
zu schreiben ist. Die volle FORTRAN-Sprache
N ...;! ;:J :I::NJ:.:: vereinfacht das Verfahren durch Aufteilung
-::;- :I::NJ:.::
-0
~
eil
E-<
-0(
-O(Z~
N~~
-O(Z~
N~~
des COMMON-Bereiches in einen namenlosen
und eine beliebige Anzahl zu benennender
-'"
GO
e;!
Z
J:.::
~
ZJ:.::...;!
-o(e;!-o(
ZJ:.::...;!
-o(e;!-o( COMMON-B I ö c k e. In der COMMON-An-
t:"
-~ ;:J
...;!
~
::s
E-< J:.:: E-< ~ weisung werden dann nur die gerade benutzten
E-<~e;! E-<~e;! Blöcke aufgezählt. Sie beginnt mit den Größen
0
'" :I:: ~ ..... J:.::~ ..... J:.::~
im namenlosen Block, daran schließen sich die
~ -0( E-< J:.::~E-< ~~E-<
Blocklisten an, die jedesmal von dem in Schräg-
'"
I-;;-
~ :I::E-<Z :I::E-<Z

r:- E-<
eil
uZ .....
eIl;:J
UZ .....
eIl;:J
striche gesetzten Blocknamen eingeleitet
werden.
4.1.6. Prozeduren und Unterprogramme 89

COMMON R,S/Ul/C,D,E/B/AIWXIW,X,Y,Z im Hauptprogramm


COMMON /U1IT,XT,YT im ersten Unterprogramm
COMMON IWX/p,a im zweiten Unterprogramm
COMMON Al,A2.1B/A3 im dritten Unterprogramm
SUBROUTINE- U n t e r pro g r am m e. FUNCTION-Unterprogramme werden in
arithmetischen bzw. logischen Ausdrücken aufgerufen. Bei der Berechnung des Ausdrucks tritt
an die Stelle des Funktionsaufrufes der ermittelte Funktionswert.
Ein Unterprogramm, das aus den kartesischen Koordinaten eines Punktes die Polarkoordinaten
berechnet, kann nicht als ein FUNCTION-Unterprogramm formuliert werden, da zwei
Resultate zu übergeben sind. Wenn nicht genau ein Resultat anflillt, muß man die Prozedur
als SUBROUTINE-Unterprogramm formulieren.

Tafel4.9 Lineare Regression

C MITTELWERTE, REGRESSIONSGERADE,
C BESTIMMTHEITSMASS B, KORRELATIONSKOEFFIZIENT R
DIMENSION X (5001, Y (5001
KANALE = 10
KANALA= 7
READ (KANALE, 11 N, (X (11, Y (I), I = 1, NI
FORMAT (l3/(4E13.0))
WRITE (KANALA, 21 (X (lI, Y (lI, I = 1, NI
2 FORMAT ((lHl, 15X, lHX, 22X, 1HY/50 (/2E23.6))1
CALLSTREUM(N,X,Y,XM,YM,SXYI
CALL STREUM (N, X, X, XM, Z, SXXI
A= SXY/SXX
YO= YM-A * XM
CALL STREUM (N, Y, Y, YM, Z, SYYI
B = A * A * SXX/SYY
R = SIGN (SaRT (BI, AI
WRITE (KANALA, 31 XM, YM, A, YO, B, R
3 FORMAT (lHO, 7H XM =, E 16.6, 7H YM =, E 16.6/1 HO,
1 4X, 5HY = (,E14.6, 9HI * X + (.E14.6, lH)/lHO,
2 4X, 3HB = ,E16.6, 4X, 3HR =, E16.61
STOP
END

C MITTELWERT UND STREUUNG


SUBROUTINE STREUM (K, A, B, AM, BM, CI
DIMENSION A (5001, B (5001
AM=O.
BM=O.
C=O.
001 1= 1, K
AM = AM + A (11
BM= BM + B (11
C=C+A(I)*B(l1
AM = AM/K
BM = BM/K
C = C/K - AM * BM
RETURN
END
90 4.1. Einführung in FORTRAN

Eingabe:
14
4 2 7 4
17 50 14 36
12 20 11 28
20 48 15 54
17 40 13 34
15 26 19 68
10 26 18 56

Ausgabe:
X Y
0.4oo000E + 001 0.200000E + 001
0.7oo000E + 001 0.400000E + 001
0.170000E + 002 0.500oo0E + 002
0.140000E + 002 0.360000E + 002
0.120000E + 002 0.200000E + 002
0.110000E + 002 0.280000E + 002
0.2oo000E + 002 0.48oo00E + 002
0.150000E + 002 0.54oo00E + 002
0.170000E + 002 0.400000E + 002
0.130000E + 002 0.340000E + 002
0.1500~OE + 002 0.26oo00E + 002
0.190000E + 002 0.680000E + 002
0.100000E + 002 0.260000E + 002
o. 180000E + 002 0.560000E + 002

XM= 0.137142E+002 YM = 0.351428E + 002


Y= (0.375676E + 001) * X + (-0. 163784E + 002)
B= 0.808537E + 000 R = 0.899186E + 000

Jedes SUBROUTINE-Unterprogramm beginnt mit der Anweisung


SUBROUTINE name(parameterliste)
oder SUBROUTINE name
Der Aufruf eines solchen Unterprogramms im Anwenderprogramm erfolgt durch eine
gesonderte CALL-Anweisung
CALL name(aktueUe parameterliste)
bzw. CALL name.
Das Programm in Tafel 4.9 dient der statistischen Auswertung einer Folge von maximal 500
Meßwertpaaren (x, y). Es berechnet den x- und den y-Mittelwert, ermittelt eine mögliche
lineare Abhängigkeit zwischen den x- und den y-Werten und prüft, wie weit diese Regressions-
gerade gesichert ist. Die Berechnung der Mittelwerte und Streuungen erfolgt in dem SUB-
ROUTINE-Unterprogramm STREUM. Die Definition SUBROUTINE STREUM(K,A,B,AM,
BM,C) schreibt vor, daß beim Aufruf die Meßwertanzahl sowie der Name des ersten und der
des zweiten Bereiches, in denen die Meßwertpaare gespeichert sind, zu nennen sind. Daraus
berechnet STREUM
K K K
~ A (I) ~ B (I)
C= ~ (A_
(I)_ AM)
- _ * (B (I) - BM)
_ _ _ _ __
AM= !.:I=~l~_ BM= !.:I=~l~_
~I=~l~

K K K
4.1.6. Prozeduren und Unterprogramme 91

Wie beim FUNCTION-Unterprogramm gilt ein Aufruf als beendet, sobald eine RETURN-
Anweisung erreicht wird. Die END-Anweisung zeigt dem Kompilierer das physische Ende des
Unterprogramms an.
Die Parameterübergabe beim Aufruf eines Unterprogramms geschieht grundsätzlich entweder
"dem Werte nach" oder "dem Namen nach".
Bei der Übergabe eines Parameters dem Werte nach liefert das aufrufende Programm den
Wert des aktuellen Parameters an den Formalparameter des Unterprogramms, so daß die
Berechnung im Unterprogramm wirklich mit dem Formalparameter erfolgen kann. Wenn dabei
eine Wertzuweisung an den Formalparameter vorkommt, wird der Wert des Formalparameters
erst bei Erreichen der RETURN-Anweisung an den aktuellen Parameter übertragen.
Die Parameterübergabe dem Namen nach kann man sich so vorstellen, daß beim Aufruf überall
im Unterprogramm der Name des formalen Parameters durch den Namen des aktuellen
Parameters ersetzt wird. Bereichsnamen und Unterprogrammnamen können nur dem Namen
nach übertragen werden.
Die Übertragungsart wird schon bei der Übersetzung des Unterprogramms festgelegt. Daher
können andere reine Eingangsparameter, deren Formalparameter im Unterprogramm also
keine Wertzuweisung erfahren, nur dem Wert nach übergeben werden, da die zugehörigen
aktuellen Parameter durch beliebige Ausdrücke repräsentiert sein können.
Ausgangsparameter sowie Durchgangsparameter bestehen beim Aufruf nur aus einem
Variablennamen, einer Bereichselementbezeichnung, einem Bereichsnamen oder einem
Unterprogrammnamen. Deren Handhabung ist vom Kompilierer abhängig; einige übertragen
grundsätzlich dem Namen nach, andere so weit wie möglich dem Werte nach, so daß eine
besondere Kennzeichnung der Formalparameter (Einschließen in Schrägstriche) erforderlich
ist, wenn eine Übertragung dem Namen nach ausdrücklich verlangt wird.
Beim Unterprogramm STREUM ist es wichtig zu wissen, welche Übertragungsart gewählt
wird. Der Aufruf
CALL STREUM(N,X,X,XM,XM,SXX)
liefert bei Namensaufruf ein falsches Resultat XM und daher auch einen falschen Wert für
SXX, denn hierbei wird gerechnet
XM=O.
SXX=O.
001 l=l,N
XM=XM+X(I)
XM=XM+X(I)
SXX=SXX+X(I) * X(I)
XM=XM/N
XM=XM/N
SXX=SXX/N-XM * XM
so daß am Ende XM um den Faktor 2/N verfälscht ist. Bei Wertaufrufwerden XM und SXX
richtig berechnet:
K=N
AM=O.
BM=O.
c=o.
001 l=l,K
92 4.1. Einführung in FORTRAN

AM=AM+X(I)
BM=BM+X(I)
C=C+X(I) * X(I)
AM=AM/K
BM=BM/K
C=C/K-AM * BM
XM=AM
XM=BM
SXX=C
Wenn ein Unterprogramm aufgerufen wird, beginnt die Ausführung grundsätzlich mit der
ersten Anweisung, die keine Vereinbarung mehr darstellt. Soll anderswo angefangen werden,
muß man im Unterprogramm diesen (zusätzlichen) Eingang durch eine ENTRY- Ver ein -
bar u n g kennzeichnen, die wie ein FUNCTION- oder SUBROUTINE-Statement aufgebaut
ist, also neben dem flir diesen Eingang zuständigen Unterprogrammnamen eine passende
Parameterliste aufweist.
ENTRY-Eingänge führen bei FUNCTION-Unterprogrammen zu FUNCTION-Defmitionen,
bei SUBROUTINE-Unterprogrammen zu SUBROUTINE-Definitionen.

4.1.7. Weitere FORTRAN-Statements. Im Zusammenhang mit der Vereinbarung von


Variablen und Bereichen sind folgende Anweisungen bisher nicht erwähnt worden:
EQUlVALENCE ordnet innerhalb eines Programms unterschiedlich benannten Größen
denselben Speicherplatz zu. Man kann damit Platz sparen, ohne auf sinnvolle Bezeichnungen
verzichten zu müssen.
EQUIVALENCE (A,G,XI, (C,U(211

bewirkt, daß A, G, X drei verschiedene Bezeichnungen eines Speicherplatzes sind, und daß C
den Speicherplatz von U (2) anspricht. Wenn Bereichselemente mit EQUNALENCE auf
COMMON-Plätze gesetzt werden, ist darauf zu achten, daß durch die konsekutive Speicherung
des Bereiches keine Erweiterung des COMMON-Bereiches rückwärts über den Anfang hinaus
erzwungen werden soll.
Set zen von An fa ng sw e r t e n .. Im BASIC FORTRAN lassen sich Variable nur
durch entsprechende Ergibtanweisungen initialisieren. Wenn die volle Sprache zur Verfiigung
steht, kann man Variablen, Bereichselementen und Bereichen durch die DATA- A n w eis u n g
Anfangswerte zuordnen.

DIMENSION A(3,4)
DATA PI, U, V/3.14159~,-3.7,5.9E-6/,A/12*1.0/

legt fest, daß PI, U, V die Anfangswerte 3.141593 bzw. - 3.7 bzw. 5.9E - 6 erhalten und
setzt alle Elemente von A auf 1.0.
Manche Kompilierer gestatten die Festlegung von Anfangswerten direkt in expliziten Typ-
vereinbarungen.
Größen, die im unbenannten COMMON-Block stehen, können mit DATA jedoch nicht
initialisiert werden, solche in benannten COMMON-Blöcken nur in einem gesonderten
BLOCKDATA- S p e z i f i kat ion s u n t e r pro g r a m m, das lediglich der Initialisierung
dient und daher auch keine ausfUhrbaren Anweisungen enthalten darf.
4.1.8. Abschließendes Programm-Beispiel 93

BLOCK DATA
DIMENSION X(3)
COMMON IU1/A.B.C/E/X
DATA A/-6.5/.X/O.0.2* 10.01
END
regelt die Zuweisung von Anfangswerten in den COMMON-Bläcken U1 und E. Wenn auch nur
eine Größe in einem Block initialisiert werden soll, müssen in der COMMON-Vereinbarung des
BLOCKDATA·Unterprogramms natürlich trotzdem alle Größen dieses Blocks genannt werden.

4.1.8. Abschließendes Programm-Beispiel. Tafel 4.10 enthält ein Programm zur Berechnung der
Steighöhe einer Raumsonde. Wenn man mit R den Radius des betrachteten Himmelkörpers,
mit g seine Schwerebeschleunigung, mit v die Geschwindigkeit der Sonde zum Zeitpunkt t und
mit h die dann erreichte Höhe über der Oberfläche bezeichnet, gilt

dt (h+Ri
dv g·R 2
(4.1)
dh v· (h+Ri
dv g ·R2

mit den Anfangsbedingungen, daß zum Zeitpunkt t = 0 die Höhe 110 und die Geschwindigkeit
vo erreicht sind. Das vorliegende Programm weist hierbei Geschwindigkeiten, die über der
Fluchtgeschwindigkeit liegen, zurück.
Die Größen t und h lassen sich in Abhängigkeit von v exakt berechnen. Das Programm verwen-
det dennoch zur Integration des Systems von Differentialgleichungen die Met h 0 d e
von Run g e - K u t t a . G ill . Mit den Umbenennungen
v~x t~Y2 h~Y3

und der Festsetzung Yl = x lautet das Differentialgleichungssystem

Yl' = 1
Y2'=f(Yl'Y2'Y3) (4.2)
Y3' = g(Yl'Y2'Y3)

mit den Anfangsbedingungen


Yl (Xo)=Xo; Y2 (Xo)=Y20; Y3 (Xo)=Y30
Die numerische Lösung des Systems erfolgt intervallweise, wobei (für i = 1,2,3) die Werte
Yj (x + iU) und die Hilfsgrößen % (x + iU) am Ende des Intervalls aus Yj (x) und qj (x) am
Anfang des Intervalls in vier Schritten ermittelt werden.
Man setzt Yj (x) ~ Yj und qj (x) ~ qi' wobei qi (Xo) = 0 gilt.
1. Schritt:

a= 1/2; b = 2; c= 1/2
94 4.1. Einführung in FORTRAN

Yi +LU'[a'(~-b'qj)] ~Yj

qj +3'[a'(~-b'qj)]-c'~~qj

2. Schritt: Wiederholung des 1. Schrittes mit den neuen Werten Yi und qj' aber mit

a=l-ji; b=l; C=I-ji

3. Schritt: Wiederholung des 1. Schrittes mit den neuen Werten Yj und qj' aber mit

a=I+A; b=l; C=I+ji

4. Schritt: Wiederholung des 1. Schrittes mit den neuen Werten Yj und qj' aber mit

a = it6; b = 2; c = 1/2
Danach setzt man Yj ~ Yj (x + LU) und qj ~ qj (x + LU).
Das Geschwindigkeitsintervall zwischen der Anfangsgeschwindigkeit Vo und der End-
geschwindigkeit v = 0 wird daher in so viele Teile zerlegt, wie es der Anwender wünscht,
im Beispiel sind es 100, und nur am Ende einer vorgebbaren Anzahl solcher Intervalle
(hier flint) werden die Werte von v, t, h gedruckt.
Die Berechnung von t und h am Ende jedes der vorgegebenen Geschwindigkeits-Teilintervalle
wird im SUBROUTINE-Unterprogramm RUKUGI vorgenommen. RUKUGI wiederum
verwendet das SUBROUTINE-Unterprogramm GILL, in dem die vier Schritte des Runge-
Kutta-Gill-Verfahrens flir ein Rechenintervall ausgefiihrt werden.
RUKUGI versucht zunächst, mit einem einzigen Rechenintervall pro Geschwindigkeits-
Teilintervall auszukommen, nimmt aber zur Kontrolle auch eine Berechnung mit zwei halben
Intervallen vor. Sofern die dabei auftretenden relativen Abweichungen unter der vom Haupt-
programm vorgegebenen Größe 5 . 10- 6 liegen, gibt RUKUGI an das Hauptprogramm zurück.
Dort werden die erhaltenen Werte t und h als Anfangswerte flir die Berechnung des nächsten
Teilintervalls verwendet.
Falls aber eine zu große Abweichung aufgetreten war, wird die Größe des Rechenintervalls
so lange halbiert, bis die Werte hinreichend genau sind. Nach Möglichkeit wird hierbei nur
ein Stück des genannten Teilintervalls so kleinabständig berechnet, denn sobald die Ab-
weichungen zu gering werden, erfolgt wiederum eine Verdoppelung der Schrittweite. Die vom
Anwender festgelegte Mindestschrittzahl wird jedoch niemals unterschritten. - Die "effektive
Maximalschrittzahl" ist dann das Verhältnis des gesamten y-Intervalls zur kleinsten jemals
verwendeten Schrittweite.
Die Werte der Funktionen

v· (h+ Ri
G = - _:""---:-'-
g'R2

werden in zwei FUNCTION-Unterprogrammen berechnet. Das Gesamtprogramm ist baustein-


artig zusammengesetzt, so daß man zur Lösung eines ganz anderen Systems von Differential-
gleichungen nur das Hauptprogramm und die beiden FUNCTION-Unterprogramme auszu-
wechseln braucht.
4.1.8. Abschließendes Programm-Beispiel 95

Tafel 4.10 Flugbahn einer Raumsonde

C NUMERISCHE BERECHNUNG DER FLUGBAHN EINER RAUMSONDE


C MIT DEM RUNGE-KUTTA·GILL-VERFAHREN
COMMON R, A, a, MAXFAK, FAKTOR
INTEGER FAKTOR
DIMENSION ANFVTH (3), a (3)
a (1) =0.
a (2)=0.
a (3)=0.
MAXFAK= 1
FAKTOR = 1
KANALE = 10
KANALA= 7
READ (KANALE, 1) G, R, ANFVTH (3), ANFVTH (1), ISZ, IDSZ
FORMAT (4E15.0, 215)
A=G*R*R
ANFVTH (2) = O.
IF (G) S, S, 2
2 IF(R)S,S,3
3 IF(ANFVTH(1))S,S,4
4 IF (ANFVTH (3)) S, 5, 5
5 IF (2. * A - ANFVTH (1) * * 2 * (ANFVTH (3) + R)) S, S, 6
6 IF (IDSZ) S, S, 7
7 IF (lDSZ - ISZ) 10, 10, S
S WRITE (KANALA, 9) G, R, ANFVTH (3), ANFVTH (1), ISZ, IDSZ
9 FORMAT (lHO, 4E15.0, 215, 2X, 13HEINGABEFEHLER)
STOP
10 IR = R/l000.
WRITE (KANALA, 11) IR,G
11 FORMAT (32H1RAUMSONDENFLUG IN REINEM VAKUUM///
1 22H HIMMELSKOERPER-RADIUS, IS, 3H KM/!
2 33H SCHWEREBESCHLEUNIGUNG AUF DESSEN/12H OBERFLAECHE, FS.3,
3 13H METER/SEK * * 2///33H GESCHW. FLUGDAUER FLUGHOEHE/
4 32H (M/S) (SEK) (METER)/)
IR = ANFVTH (1)
WRITE (KANALA, 12) IR, ANFVTH (2), ANFVTH (3)
12 FORMAT (lH, 16, 2E13.4)
DELTA=-ANFVTH (l)/ISZ
DO 15 K = 1, ISZ
DELTAV= DELTA
CALL RUKUGI (ANFVTH, DELTAV, 5.E -6)
IF (K - K/IDSZ * IDSZ) 13,14,13
13 IF (K - ISZ) 15,14,15
14 IR = ANFVTH (1)
WRITE (KANALA, 12) IR, ANFVTH (2), ANFVTH (3)
15 CONTINUE
IR = MAXFAK * ISZ
WRITE (KANALA, 16) IR
16 FORMAT (29H1EFFEKTIVE MAXIMALSCHRITTZAHL, IS/1Hl)
STOP
END

C FUNKTIONSGENERATOR F
FUNCTION F (V)
DIMENSION V (3)
96 4.1. Einführung in FORTRAN

COMMON R,A
F = - (V (3) + R) * * 2/A
RETURN
END

C FUNKTIONSGENERATOR G
FUNCTION G(V)
DIMENSION V (3)
COMMON R,A
G = - V (1) * (V (3) + R) * * 2/A
RETURN
END

C RUNGE-KUTTA-GILL-VERFAHREN
SUBROUTINE RUKUGI (V, DV1, RELGEN)
COMMON R, A, 0, MAXFAK, FAKTOR
INTEGER FAKTOR, ZAHLER
DIMENSION V (3), VANF (3), VDOPP (3), OANF (3), ODOPP (3),0 (3)
ZAHLER = FAKTOR
DVl = DV1/FAKTOR
100 00 1 1= 1,3
VANF (I) = V (I)
OANF (I) = 0 (I)
MERKER = 0
10 0021 = 1,3
V (I) = VANF (I)
0(1) = OANF (I)
VDOPP (I) = VANF (I)
2 ODOPP (I) = OANF (I)
CALL GILL (VDOPP, ODOPP, DV1)
CALL GILL (V, 0, DV1/2)
CALL GILL (V, 0, DV1/2)
Zl = ABS ((V (2) - VDOPP (2))!Y (2))
Z2 = ABS ((V (3) - VDOPP (3))/V (3))
IF (Zl - Z2) 3, 3, 4
3 DELTA= Z2/15.
GOT05
4 DELTA=Zl/15.
5 IF (DELTA - 10. * RELGEN) 7,6,6
6 MERKER = 1
DVl = DV1/2.
FAKTOR = 2 * FAKTOR
IF (FAKTOR - MAXFAK) 61,61,60
60 MAXFAK = FAKTOR
61 ZAHLER = 2 * ZAHLER
GO TO 10
7 IF (DELTA - 0.15 * RELGEN) 8, 8, 9
8 IF (MERKER) 9, 80, 9
81 DVl = 2. * DVl
80 IF (ZAHLER - ZAHLER/2 * 2) 9, 81, 9
FAKTOR = FAKTOR/2
ZAHLER = ZAHLER/2
GOTO 10
900901=1,3
90 V (I) = V (I) + (V (I) - VDOPP (1))/15.
ZAHLER = ZAHLER - 1
4.1.8. Abschließendes Programm-Beispiel 97

IF (ZAHLER) 100,91,100
91 RETURN
END

C RUNGE-KUTTA-GILL·SCHRITT
SUBROUTINE GILL (V, a, H)
a
DIMENSION V (3), (3), AK (3), A (4), B (4), C (4)
AK (1) = 1.
A (1) = 0.5
A (2) = 0.2928932
A (3) = 1.707107
=
A (4) 0.1666667
B (1) = 2.
B (2) = 1.
B (3) = 1.
B (4)= 2.
C (1) = 0.5
C (2) = 0.2928932
C (3) = 1.707107
C (4) = 0.5
D01J=l,4
AK (2) = F (V)
AK (3)=G (V)
0011 = 1,3
V (I) = V (I) + H * (A (J) * (AK (I) - B (J) * a (I)))
a (I) = a (I) + 3. * (A (J) * (AK (I) - B (J) * a (I))) - C (J) * AK (I)
RETURN
END

Eingabe:
uuuuuuuuuuu9.8Iuuuuuuuuu6.37E6uuuuuuuuu200000uuuuuuuuuuu2000uulOOuuuu5

Ausgabe:
RAUMSONDEN FLUG IN REINEM VAKUUM

HIMMELSKOERPER·RADIUS 6370 KM

SCHWEREBESCHLEUNIGUNG AUF DESSEN


OBERFLAECHE 9.809 METER/SEK * * 2

GESCHW. FLUGDAUER FLUGHOEHE


(M/S) (SEK) (METER)
2000 O.OOOOE + 000 0.2oo0E + 006
1900 0.1087E + 002 0.2212E + 006
1800 0.2182E + 002 0.2414E + 006
1700 0.3284E + 002 0.2607E + 006
1600 0.4391 E + 002 0.2790E + 006
1500 0.5505E + 002 0.2962E + 006
1400 0.6624E + 002 0.3124E + 006
1300 0.7748E + 002 0.3276E + 006
1200 0.8877E + 002 0.3417E + 006
1100 0.1001 E + 003 0.3548E + 006
1000 0.1115E + 003 0.3667E + 006
98 4.2. Einführung in ALGOL

900 0.1229E + 003 0.3776E + 006


800 0.1343E + 003 0.3873E + 006
700 O. 1458E + 003 0.3959E + 006
600 0.1573E + 003 0.4034E + 006
500 0.1689E + 003 0.4098E + 006
400 0.1804E + 003 0.4150E + 006
300 0.1920E + 003 0.4190E + 006
200 0.2036E + 003 0.4219E + 006
100 0.2152E + 003 0.4236E + 006
o 0.2268E + 003 0.4242E + 006
EFFEKTIVE MAXIMALSCHRITTZAHL 100

4.2. Einführung in ALGOL

Die Programmiersprache ALGOL ist im Jahre 1957 in Amerika und Europa geplant und 1958
in einem ersten Bericht festgelegt. Notwendig gewordene Änderungen wurden in der end-
gültigen Fassung von 1960 vorgenommen. Es ist deshalb üblich, von ALGOL 60 zu sprechen.
Die Ein- und Ausgabe in dieser Sprache wurde erst 1964 berücksichtigt. Gleichzeitig war es
nötig, den vollen Sprachenumfang einzuschränken, da von verschiedenen Herstellern
Beschneidungen vorgenommen worden waren. Mit dieser Teilmenge - Subset genannt - wird
heute meistens gearbeitet. Sie wird auch hier zugrunde gelegt. Die Ein- und Ausgabe wird
nach den Vorschriften von 1964 eingeführt. Die Beispiele sind auf der Anlage Siemens 303
getestet. Sie besitzt einen Kompilierer für ALGOL-Subset.
Gegenüber FORTRAN (nach dem Stand von 1960) hat ALGOL als Vorzüge:
1. ALGOL ist als Sprache streng grammatisch festgelegt. Damit wurde eine wissenschaftliche
Behandlung von Programmiersprachen und übersetzungsvorgängen möglich.
2. ALGOL ist zur Wiedergabe von Rechenverfahren flexibler und bietet wesentlich mehr
Sprachelernente. Die Veröffentlichung und Sammlung von Algorithmen, die in ALGOL
geschrieben sind, war ein Ziel.
Nachteile erkennt man gleichfalls im Vergleich mit FORTRAN:
1. Es fehlte die Ein- und Ausgabe zunächst ganz, dann wurde sie nur ungenügend berücksich-
tigt. Das hat das praktische Arbeiten mit ALGOL gewiß erschwert.
2. Der Sprachumfang war zu groß, so daß sich eine Vielzahl eingeschränkter Sprachen heraus-
bildete, ehe eine Teilmenge (Sub set) festgelegt wurde.
ALGOL ist - wie es der Name sagt: algorithrnic language - eine Sprache, die es erlaubt, auf
einfache und elegante Weise Rechenverfahren (Algorithmen) so festzulegen, daß der Ablauf
daraus erkannt und von einem Kompilierer in ein Maschinenprogramm übersetzt werden
kann. Diese sprachliche Wiedergabe von Rechenverfahren ist von den technischen Gegeben-
heiten weitgehend unabhängig, während die Ein- und Ausgabe sich ständig der Entwicklung
anpassen muß. Der leitende Gesichtspunkt dieser knappen Einführung in ALGOL soll daher
sein: Welche Möglichkeiten bietet ALGOL zur Beschreibung von Rechenverfahren
(Algorithmen)?

4.2.1. Elemente der Sprache. Das Alphabet der Sprache ALGOL enthält zunächst die Buch-
staben A, B, C, ... Z, die zehn Ziffern 0, 1,2, ... 9, sowie einige Sonderzeichen, die fiir die
4.2.2. Arithmetische Ausdrücke und Anweisungen 99

Beschreibung von Algorithmen nötig sind. Mit Hilfe der Buchstaben und Ziffern kann man
nach den Regeln der ALGOL-Grammatik Namen (identifier) bilden, die u. a. zur Bezeichnung
von Variablen dienen können. Ein solcher Name muß immer mit einem Buchstaben beginnen,
dem eine beliebige Folge von Buchstaben und Ziffern angehängt werden kann. Dabei sind
allerdings nur die ersten sechs von unterscheidender Bedeutung, d. h. zwei beliebig lange
Namen, die in den ersten sechs Symbolen übereinstimmen, werden als gleich betrachtet, z. B.
XSTRICH und XSTRICHSTRICH.
Als Veränderliche können drei verschiedene Typen eingeführt werden.
1. 'REAL' werden die Veränderlichen vereinbart, deren Werte sich in Gleitpunktform dar-
stellen lassen,
2. 'INTEGER' - Veränderliche haben als Werte ganze Zahlen, und
3. 'BOOLEAN' sind die Variablen, die logische Werte haben, d. h. "wahr" oder "falsch".
All e Veränderlichen müssen - anders als in FORTRAN - hinsichtlich ihres Typs durch eine
Vereinbarung festgelegt werden. Das geschieht durch Zusammenstellung in einer Liste, in der
die Namen der Veränderlichen gleichen Typs durch Kommata getrennt aufgeführt werden.
Die Typenkennzeichnung ('REAL', 'INTEGER' oder 'BOOLEAN') geht voran, die einzelnen
Listen werden durch ";" getrennt. Wird z. B. in einem Programm vereinbart:
'REAL' X,Y,Z,XSTR,U,V;
'INTEGER' N,I,P,S;
'BOOLEAN' A1,A2,O; ...
so werden in diesem Programm nur die aufgeführten Variablennamen verwendet, und es
sind X, Y, Z, XSTR, U, V vom Typ 'REAL', N, I, P, S vom Typ 'INTEGER' und Al, A2, Q
vom Typ 'BOOLEAN'. Es gehört zu jedem ALGOL-Programm ein solcher Vereinbarungsteil,
sofern in einem Programm Namen für Veränderliche benutzt werden.
Den verschiedenen Typen von Variablen entsprechend gibt es verschiedene Typen von
Konstanten. Es sind dies:
1. Vorzeichenlose Zahlen in Gleitpunktdarstellung alOb, wobei a die Mantisse, b den
Exponenten kennzeichnet und 10' die sogenannte "Basiszehn" als ein Zeichen gilt und auf
Eingabegeräten als erlaubtes Zeichen zugelassen sein sollte. Erlaubt sind folgende Formen
von Gleitpunktzahlen: a, lOb, alOb, wobei a eine ganze Zahl, ein Dezimalbruch oder eine
ganze Zahl und Dezimalbruch sein kann. Dagegen muß b immer eine ganze Zahl sein.
Tafel 4.11 gibt eine Zusammenstellung von Beispielen. Ein Dezimalbruch wird immer mit
H." geschrieben.

Unter der ALGOL-Schreibweise steht jeweils die arithmetische Form


2. Vorzeichenlose ganze Zahlen werden immer ohne Dezimalpunkt geschrieben.
3. Die logischen Konstanten sind die beiden Wahrheitswerte wahr ('TRUE') und falsch
('FALSE').

4.2.2. Arithmetische Ausdrucke und Anweisungen. Zur Bildung arithmetischer Ausdrücke


bedarf es weiterer sprachlicher Elemente. Es sind dies die folgenden über Konstante und
Variable hinaus:
1. Operationszeichen: + für Addition, - für Subtraktion (oder beide als Vorzeichen),
x für Multiplikation, / für Division und 'POWER' zur Bildung von Potenzen.
2. Klammem dienen dazu, die Reihenfolge der auszurührenden Operationen zu beeinflussen.
3. Sog. Standardfunktionen. Sie sind in Tafel 4.12 zusammengestellt.
100 4.2. Einführung in ALGOL

Tafel 4.11 Zahldarstellungen in der Form a 10 b

a lob a lO b

1. a ganze Zahl 3 10- 5 3 10 7


b ganze Zahl 3 10- 5 3.107
27031 10 7 27031 10 - I
27031 107 2703, I
-87 10 21 - 87 10 3
-87 10- 21 -87000
2. a Dezimalbruch .173 .173 10 2
0,173 17,3
.015 .015 10 I
0,015 0,15
.00731 .00731 10 - I
0,00731 0,000731
3. a ganze Zahl und 21.0753 21.0753 10 4
Dezimalbruch 21,0753 210753
5.07 5.05 10 - 2
5,Q7 0,0507

Tafel 4.12 Standardfunktionen

ALGOL-Form Bedeutung
ABS(A) lAI
ARGTAN(A) Hauptwert von arctan A
SIN(A) sin A, A in Bogenmaß
COS(A) cos A, A in Bogenmaß
LN(A) In A, für A ~ 0 nicht definiert
EXP(A) eA
SQRT(A) .,fÄ für A < 0 nicht definiert
+lfürA>O
SIGN(A) sgnA= { OfürA=O
-lfürA<O
ENTlER(A) größte ganze Zahl ~ A

Dabei ist zu beachten, daß als Argument jeweils ein arithmetischer Ausdruck auftreten kann.
Die Argumente stehen in runden Klammem. Die Namen der Funktionen sind ohne explizite
Vereinbarung gültig. Das sind die Elemente, mit denen arithmetische Ausdrücke gebildet
werden können. Grundlage für die Bildung arithmetischer Ausdrücke sind also: Zahlef\,
Variable und Standardfunktionen. Sie können durch Operationszeichen und Klammem
zusamrnengefiigt werden, und zwar nach Regeln, die der Bildung arithmetischer Ausdrücke
in der Mathematik in vielem gleich sind. Zu beachten ist - als wichtigster Unterschied -,
daß das x-Zeichen immer gesetzt werden muß. Es ist als z. B.
a (b + c) in ALGOL zu schreiben als A x (B + Cl.
4.2.2. Arithmetische Ausdrücke und Anweisungen 101

Ferner ist zu beachten, daß die Argumente der Standardfunktionen in Klammern erscheinen:
sin wt wird in ALGOL durch SIN (OMEGA x T) wiedergegeben.

Vereinbart man die Namen der Standardfunktionen als Namen von Veränderlichen, so muß
man beachten, daß dann die entsprechenden Funktionen nicht mehr angesprochen werden

Tafel 4.13 Beispiele arithmetischer Ausdrücke

arithmetischer Ausdruck ALGOL-Schreibweise


1. Veränderliche vorn Typ 'REAL'
(a + b )(a-b) (A + S) x (A - S)
a
0,5· (xn +-) 0.5 x (XN + A/XN)
Xn
1.0/(2.0 x PI x OMEGA)
27TW

FRY/FRX

SORT (FRX x FRX + FRY x FRY)


e- 6t sin (wt + IP) EXP (- DELTA x T) x SIN (OMEGA x T + PHI)
a
A/(-2.0)
-2
a
A/(S/C) oder A x CIS
b/c

~+v'Y 1.01Y + SORT (V)


Y
I
In--===- LN (1.0/S0RT (1.0 + Z x Z))
~
2. Veränderliche vorn Typ 'INTEGER'
n (n - 1)
Nx(N-1)/2
2
2k - 1 2 'POWER' K-1
2k - 1 2 'POWER' (K - 1)
Rest d. Division u/2 U-U/Lx L

3. N vorn Typ 'INTEGER'


A vorn Typ 'REAL'
A 'POWER' (N x N -1)
A 'POWER' S 'POWER' N

A 'POWER' S 'POWER' N)
102 4.2. Einführung in ALGOL

können. Wurde z. B. vereinbart 'REAL' SIN; so könnte man die Veränderliche mit dem
Namen SIN verwenden, nicht aber die Standardfunktion SIN flir sin x.
Arithmetische Ausdrücke werden von links nach rechts verarbeitet, sofern gleicher Rang bei
den Operatoren vorliegt. Der Rang ist dabei in folgender Weise festgelegt. Den höchsten
Rang haben die Standardfunktionen. In
A + B x SIN (X)
wird zuerst SIN (X) gebildet. Im Rang folgen 'POWER' x und / und zuletzt + und - nach der
Regel "Punktrechnung geht vor Strichrechnung". Im Ausdruck
A + B x SIN (X) 'POWER'2
wird zuerst SIN (X) gebildet, mit 2 potenziert, mit B multipliziert und dann zu A addiert.
Beispiele sind in Tafel 4.13 zusammengestellt.
Ergebnis der durch arithmetische Ausdrücke festgelegten Rechenoperationen ist jeweils ein
Zahlenwert. Dieser kann einer Variablen zugewiesen werden. Diese Variable muß auf der
linken Seite des Zuweisungszeichens := erscheinen, während auf der rechten Seite der Aus-
druck stehen muß. Das ganze nennt man eine Zuweisungsanweisung (assignment statement).
Beispiele dafür sind
A:= 5.0 + X;
R := A x SIN (OMEGA x T + PHI);
Diese Zuweisung kann an mehrere Variable erfolgen. Man spricht dann von Mehrfach-
zuweisungen, z. B.
A := A1 := B := 5.0 + COS (X);

Hier wird der Wert der rechten Seite A, A 1 und B zugewiesen.

4.2.3. Einfache Ein- und Ausgabeoperationen. Einer Variablen kann nicht nur durch eine
Zuweisungsanweisung ein Wert zugewiesen werden, sondern auch durch eine Eingabe-
operation über ein Externgerät. Das geschieht durch Aufruf eines Unterprogramms mit dem
Namen INREAL. In Klammern dahinter stehen zwei Angaben: die Kanalnummer des Ein-
gabegerätes und der Variablenname einer als 'REAL' vereinbarten Größe. Die Kanalnummer
sei z. B. (Siemens 303) 9 flir Lochstreifeneingabe, 10 fiir Lochkarteneingabe, so wird durch
den Aufruf:
INREAL (10,X)

der Variablen X über Lochkarteneingabe ein Wert zugewiesen. Dabei ist vorausgesetzt, daß
der Wert auf dem Eingabemedium (Lochkarte, Lochstreifen) bereitgestellt ist.
Die zuzuweisenden Daten werden in der ALGOL-Form nach Tafel 4.11 auf Lochkarten oder
auf Lochstreifen abgelocht. Dabei sind Vorzeichen (+ oder -) erlaubt. Enthielte also die
Lochkarte die Zahl 5.07 10 - 2, so würde mit obiger Anweisung X der Wert 0,0507 zugewiesen.
Die Eingabeanweisung entspricht dann einer Zuweisung X := 5.07 10 - 2.
Für die Zuweisung ganzer Zahlen über Eingabe ist das entsprechende Unterprogramm
ININTEGER nicht unter den Standard prozeduren fiir Ein- und Ausgabe, muß also jeweils
hinzugefiigt werden. Eine ganze Zahl kann aber auch über eine REAL-Variable zugewiesen
werden. Nehmen wir an, es seien vereinbart:
'REAL' B;
'INTEGER' I;
4.2.4. Programmaufbau 103

so kann man die auf dem Datenstreifen oder auf Lochkarten stehende ganze Zahl zunächst
Bzuweisen
INREAL (lO,B);
Die nachfolgende Zuweisung
1:= B;
bewirkt eine Umwandlung der Gleitpunktzahl, die B zugewiesen wurde, in eine ganze Zahl.
Allgemein gilt, daß der Wert des rechts vom Zuweisungszeichen stehenden Ausdrucks in eine
Konstante des Typs verwandelt wird, den die links stehende Variable hat, bevor er dieser
Variablen zugewiesen wird.
Die Ausgabe einer 'REAL' vereinbarten Größe geschieht ebenfalls durch den Aufruf eines
Unterprogramms, nämlich des Unterprogramms OUTREAL. In der Klammer folgt hier
zunächst die Kanalnummer, darauf ein arithmetischer Ausdruck, der als REAL-Konstante
berechnet wird. Mit der Ausgabeanweisung
OUTREAL (O,X);
würde z. B. der Wert von X über Blattschreiber (Kanalnummer 0 bei Siemens 303) ausgedruckt.
Es wäre aber auch möglich, durch
OUTREAL (O,A x SIN (OMEGA x T + PHI));
zunächst a· sin (wt + <p) zu berechnen und sodann auszugeben. Es ist bei Ein- und Ausgabe
zu beachten, daß das Format der Daten nicht festgelegt werden muß. Bei der Eingabe kann
die Zahl in ALGOL-Schreibweise z. B. irgendwo auf der Lochkarte stehen, von der nächsten
durch Leerstelle (blank) oder Komma getrennt. Bei der Ausgabe wird eine Standardform fest-
gelegt. Bei der SIEMENS-Anlage 303 werden die REAL-Größen in der Form
- 9.999999 10 - 999uu
ausgegeben. Das Zeichen u bedeutet Leerstelle (blank), eine 9 steht hier an den Stellen, wo
Ziffern ausgegeben werden. Das Vorzeichen + wird unterdrückt. So könnten z. B. ausgegeben
werden
- 3.715925 10 -003, d. h. - 3,715925.10- 3
4.219683 10 002, d. h. 4,219683.10 2

4.2.4. Programmautbau. Mit den bisher betrachteten Sprachelementen kann man einfache
Programme schreiben. Ein Programm besteht immer aus Anweisungen und den dazu nötigen
Vereinbarungen. Die einzelnen Anweisungen und Vereinbarungen werden durch; getrennt
und alle zusammen durch 'BEGIN' und 'END' als eine Einheit, als ein Block, gekennzeichnet.
Es müssen dabei alle Vereinbarungen in einem solchen Block vor den Anweisungen stehen.
Zwischen den einzelnen Vereinbarungen und Anweisungen können beliebig viele Leerstellen
eingefügt werden, sie selbst können beliebig lang sein. Die Berechnung z. B. von
z = a . sin (wt + <p) könnte mit folgendem Programm geschehen:
'BEGIN'
INREAL (10,A); INREAL (lO,OMEGA);
INREAL (lO,T); INREAL (lO,PHI);
Z := A x SIN (OMEGA x T + PHI);
OUTREAL (O,Z)
'END'
Die Werte von a, w, t, <p werden über Lochkarten den Variablen zugewiesen, sodann wird der
arithmetische Ausdruck a sin (wt + <p) berechnet und sein Wert z zugewiesen. Dieser Wert
104 4.2. Einführung in ALGOL

wird dann über Blattschreiber ausgegeben.


Um die Lesbarkeit eines Programms zu erhöhen, können zwischen Anweisungen und zwischen
Vereinbarungen Kommentare eingestreut werden. Sie sind ohne Einfluß auf übersetzung,
Rechenlauf und Ausgabe, sie erscheinen nur im Abdruck des Programms. Sie müssen mit
'COMMENT' beginnen. Es könnte z. B. das obige Programm beginnen:
'BEGIN'
'COMMENT' PROGRAMM ZUR BERECHNUNG VON
=
Z A x SIN (OMEGA x T + PHI);
'REAL' A,OMEGA,T,PHI,Z;

An den Begrenzer 'END' kann der Kommentar direkt angeschlossen


werden. z. B. könnte das Programm durch

'END' ENDE DES PROGRAMMS;


beendet werden. Vor 'END' braucht kein Semikolon zu stehen.

4.2.5. Logische Ausdrücke und Vergleiche. Den als 'BOOLEAN' charakterisierten Variablen
können nur Werte zugewiesen werden, die den Konstanten 'TRUE' oder 'FALSE' gleich sind.
Diese Werte können sich aus logischen Ausdrücken oder Vergleichen ergeben. Dazu müssen
eingeführt werden
1. die Vergleichsoperatoren, die Werte arithmetischer Ausdrücke vergleichen,
2. logische Operationszeichen, die die Verknüpfung logischer Konstanten möglich machen.
Diese Zeichen sind in Tafel 4.14 zusammengestellt.

Tafe14.14 Vergleichsoperatoren und logische Verknüpfungszeichen

I. Vergleichsoperatoren
Zeichen dargestellt durch:
'EOUAL'
'NOTEOUAL'
'LESS'
'NOTLESS'
'GREATER'
'NOTGREATER'

2. Logische Verknüpfungen
Zeichen dargestellt durch:
-, 'NOT'
fI 'AND'
V 'OR'
:> 'IMPL'
'EOUIV'

Der Vergleich zweier arithmetischer Ausdrücke ergibt entweder "walu" oder "falsch". Der
Vergleichsausdruck
A + B x SIN (OMEGA x T) 'GREATER' U x COS (V);
ist wahr, wenn a + b . sin wt > u . cos v und
4.2.6. Vereinbarung und Verwendung von Feldern 105

falsch, wenn a + b . sin wt ~ u . cos v ist.


Ist z. B. K als logische Variable 'BOOLEAN' K; vereinbart, so kann ihr der Wert des obigen
Ausdrucks zugewiesen werden
K := A + B x SIN (OMEGA x T) 'GREATER' U x COS (V);

Die logischen Verknüpfungen haben dabei einen gerin- Tafel 4.15 Rangliste der Operatoren
geren Rang als die Vergleichsoperatoren und die arith-
metischen Verknüpfungen. Eine vollständige Rangliste Anordnung nach abnehmenden
gibt Tafel 4.15. Rang:
Die logischen Verknüpfungen haben die nach den Wahr- Standardfunktionen
heitstabellen der Booleschen Algebra defmierten Wahr- 'POWER'
heitswerte. Mit ihrer Hilfe können x und/
+und-
1. Logische Veränderliche kombiniert werden, z. B.
'EOUAL' 'NOTEOUAL'
Z := A 'ANO' B 'ANO' C 'LESS', 'NOTLESS'"
falls die Veränderlichen Z, A, B, C, als 'BOOLEAN' 'GREATER', 'NOTGREATER'
vereinbart sind 'NOT'
'ANO'
2. Vergleiche logisch gekoppelt werden, z. B. 'OR'
A + B 'GREATER' C 'ANO' U 'LESS' V 'IMPL'
'OR' X 'EOUAL' Y 'EOUIV'

In diesem Ausdruck wird zuerst A + B berechnet, sodann werden die Vergleiche

a+b>c
u<v
x=y

ausgeführt, sie ergeben drei logische Werte. Sie seien Zl, Z2, Z3. Dann bleibt zu bilden

Zlfl Z2 v Z3'

Der Verknüpfung fI hat den Vorrang vor v, so daß zunächst Zl fI Z2 herausgenommen und
dann das Ergebnis mit Z3 durch v verknüpft wird.

4.2.6. Vereinbarung und Verwendung von Feldern. Bei vielen Rechenverfahren treten nicht
nur Variable, sondern auch indizierte Variable auf. Das ist z. B. in der Vektor-, Matrizen-
und Tensorrechnung der Fall. Komponenten eines Vektors sind a l , a2 ••• ~; Matrizen-
elemente werden mit all' a 12 , ... bezeichnet. Es ergibt sich daher die Notwendigkeit, diese
Indizierung in die Programmiersprache aufzunehmen.
In arithmetischen Ausdrücken können die indizierten Größen durch Verwendung eckiger
Klammern angesprochen werden. Je nach Vereinbarung stehen in diesem Klammernpaar ein,
zwei oder drei ganzzahlige Konstante oder Variable oder arithmetische Ausdrücke. Ist mehr
als ein Index vereinbart, so werden sie durch Kommata getrennt. Es bedeuten z. B.

A [1] a1
A [I] ~
PHI [I,J] <{!i,j
ALPHA [2 x N + l,KAPPA + I,L + M] Q2n + 1, K + i, Q + m
B[-l,O] b_ 1,o
106 4.2. Einführung in ALGOL

Die Verwendung dieser indizierten Größen setzt allerdings eine entsprechende Vereinbarung
voraus. So wie die Elemente einer Matrix Elemente einer Gesamtheit, nämlich der Matrix, so
sind die indizierten Größen Elemente eines Feldes. Der Name muß daher als Name eines Feldes
(array) vereinbart werden. Diese drei Dinge werden in der Feldvereinbarung festgelegt.
1. Daß es sich um ein Feld handelt, wird durch den Begrenzer 'ARRAY' gesagt.
2. Die Indexgrenzen werden flir jeden Index in der Form "untere Grenze: obere Grenze"
festgelegt, mehrere solcher Festlegungen (fiir mehrere Indizes) durch Kommata getrennt.
3. Die Angabe des Typs der Elemente wird dadurch vorgenommen, daß 'REAL', 'INTEGER'
oder 'BOOLEAN' vor 'ARRAY' geschrieben wird. Die Angabe 'REAL' kann entfallen,
'ARRAY' ist also gleichbedeutend mit 'REAL' 'ARRAY'. So bedeutet die Vereinbarung
'ARRAY' D [0:5]
die Festlegung eines Feldes D mit den Elementen: 110, dl , d2 , d3 , d4 , ds ' von denen jedes eine
REAL-Veränderliche darstellt. Wird
'BOOLEAN' 'ARRAY' ALPHA [-3:0,1:3]
vereinbart, so sind die Elemente des Feldes
Q-3,1 Q-3,2 Q-3,3
Q-2,1 Q-2,2 Q-2,3
Q-I,l Q-I,2 Q-I,3
QO,I OCo,2 QO,3

als 'BOOLEAN' vereinbarte Veränderliche anzusprechen.


Indizierte Veränderliche, als Elemente eines Feldes, dürfen auf der linken Seite einer Zu-
weisungsanweisung stehen. In dem letzten Beispiel wäre also eine Zuweisung der Form
ALPHA [- 1,2] := A + B x C 'LESS' C 'AND' X 'EQUAL' Y
möglich.
In einer Feldvereinbarung kann statt des Feldnamens eine Namensliste erscheinen, wenn sie
alle Elemente gleichen Typs und gleiche Indexgrenzen haben. So würden durch
'INTEGER' 'ARRAY' K,L,M,N [1 :5,0:2];
vier Felder mit ganzzahligen Elementen festgelegt, deren Indizes jeweils die Bereiche 1 bis 5
und 0 bis 2 durchlaufen können. Zu beachten ist, daß ein als Feld vereinbarter Name nicht
auch als der Name einer einfachen Veränderlichen erklärt werden darf.
Die Angaben flir "untere Grenze" und "obere Grenze" in der Feldvereinbarung dürfen
arithmetische Ausdrücke sein, insbesondere auch Variable. Das ermöglicht, wie noch zu
zeigen ist, den Feldbereich während der Rechnung veränderlich zu lassen. Hier sei angenommen,
daß den Variablen bereits Werte zugewiesen seien. Eine Feldvereinbarung fiir einen Vektor z. B.
'ARRAY'A[M+N :2XM+N];
würde ein Feld reservieren, dessen Elemente die folgenden sind:
a.n+n' a.n+n+l' a.n+n+2'··· ~m+n'
Hier erkennt man einen wichtigen Unterschied von ALGOL gegenüber FORTRAN. Letztere
Sprache erlaubt nur die untere Grenze 1 und i. a. nur eine Konstante als obere Grenze.

4.2.7. Aufbau von Schleifen. Bei Rechenverfahren ist es oft erforderlich, daß eine bestimmte
Operation oder auch mehrere Operationen wiederholt ausgefiihrt werden. Die Wieder-
holung kann einerseits solange fortgefiihrt werden, bis eine bestimmte Anzahl erreicht ist,
4.2.7. Aufbau von Schleifen 107

andererseits kann sie von Bedingungen abhängig gemacht werden. Im ersten Fall werden die
Schritte, die ausgeführt sind, gezählt, im zweiten wird die Wiederholung von logischen Werten
abhängig gemacht. Schließlich können beide Wiederholungssteuerungen kombiniert werden.
Die Folge von Anweisungen, die zyklisch durchlaufen werden kann, nennt man eine Schleife.
Um solche Schleifen und Schleifensteuerungen in ALGOL darstellen zu können, bedarf es
weiterer sprachlicher Elemente. Zunächst ist es notwendig, die Schleife zu kennzeichnen,
d. h. die Anweisungen, die mehrfach durchlaufen werden sollen (sofern es mehrere sind)
als zusammengehörig zu kennzeichnen. Das geschieht, indem man vor die erste Anweisung
'BEGIN' und hinter die letzte ein 'END' schreibt. Man nennt das Ganze eine Verbund-
anweisung (compound statement). Es ist weiter erlaubt, zwischen 'BEGIN' und 'END' vor
der ersten Anweisung neue Vereinbarungen über Variable in den Anweisungen zu treffen.
Man spricht dann von einem Block. Dabei ist zu beachten, daß diese Vereinbarungen nur
in diesem Block gelten, während des Rechenlaufs nur beim Eintritt in den Block Gültigkeit
haben und beim Verlassen wieder rückgängig gemacht werden.
Verbundanweisungen oder Blöcke können auch ohne Schleifensteuerung verwendet werden.
Sofern also eine Schleife aus mehr als einer Anweisung besteht, muß sie eine solche Verbund-
anweisung oder ein Block sein. So wäre z. B.
'BEGIN'
Sl:=Sl+X;
S2 := S2 + X
'END'

eine Verbundanweisung, dagegen


'BEGIN'
'INTEGER' K;
K:= L
Sl := Sl + X;
S2 := S2 + X
'END'

ein Block, in dem eine Veränderliche K als 'INTEGER' vereinbart ist.


Die Schleifensteuerung geschieht durch eine vor die Schleife gestellte Laufanweisung (for-
statement) der Form
'FOR' variable := ... '00'

Anstelle der Variablen kann der Name einer Variablen beliebigen Typs (ohne Index) stehen.
Die drei Punkte kennzeichnen den Ort, an dem die Steuerungsangaben eingefügt werden.
Diese Steuerung kann auf zweifache Weise geschehen. Es seien A, Al' A2 , A3 arithmetische
Ausdrücke und B ein logischer Ausdruck. Dann gibt es folgende Formen:
1. Steuerung durch arithmetische Ausdrücke in zwei verschiedenen Weisen:
a) A einfacher arithmetischer Ausdruck,
b)A I 'STEP' A2 'UNTIL' A3 ,
2. Steuerung in Abhängigkeit von einer Bedingung in der Form
A 'WHILE' B
Die verschiedenen Steuerungsformen können beliebig kombiniert werden, und zwar dadurch,
daß sie in einer Liste zusammengestellt werden.
108 4.2. Einführung in ALGOL

Die Laufanweisung
'FOR' I := 1 '5TEP' 1 'UNTlL' N '00'
würde besagen, daß die nachfolgende Schleife n-mal durchlaufen wird, wobei der Schleifen-
zähler auf I gesetzt und solange erhöht wird, bis er dem Wert von n gleich ist. Die Steuerungs-
angabe ist also
1 '5TEP' 1 'UNTI L' N
Sie wird in die Laufanweisung
'FOR' I := ... '00'
eingefügt.
Die Laufanweisung
'FOR' I := 7,8,15,19,3 '00'
enthält eine Liste einfacher arithmetischer Ausdrücke als Steuerungswerte, nämlich
7,8,15,19,3
Auf diese Größe I kann in der Schleife Bezug genommen werden. Würde man z. B. beide
Beispiele kombinieren:
'FOR' I := 7,8,15,19,3,1 '5TEP' 1 'UNTI L' N '00'
so würde I der Reihe nach folgende Werte annehmen:
7,8,15,19,3, 1,2,3,4 ... bis zum Wert von N.
Die zweite Steuerungsform könnte z. B. folgende Gestalt haben:
'FOR' X := (A + B) x 0.5 'WHILE' B - A 'GREATER' EP5
'ANO' F (X) 'NOTEQUAL' 0 '00'
Hier würde vor jedem Durchlauf der Schleife x neu gesetzt durch Berechnung von
*
(a + b) . 0,5 und zwar solange b - a > € und f (x) 0 sind.
Mit Hilfe der Schleifenbildung kann die Summierung von Größen beschrieben werden. Es
seien die beiden Summen

zu bilden (z. B. zur Berechnung von Mittelwert und Streuung). Man setzt dazu die Inhalte
zweier Speicher auf Null (S 1 und S2), und' addiert den über Extemgerät eingegebenen Wert
von XV zu dem Inhalt von SI und S2 und fUhrt diese Operation n-mal aus. Das ergibt
folgenden Prograrnmausschnitt:
51 := 52 := 0;
'FOR' K := 1 '5TEP' 1 'UNTIL' NI '00'
'BEGIN'
INREAL (9,XU)";
51 := 51 + XU;
52 := 52 + XU x XU
'END'
Die Verbundanweisung beginnt mit 'BEGIN' und endet mit 'END'. Sie wird durch die Lauf-
anweisung
'FOR' K := 1 '5TEP' 1 'UNTIL' NI '00'
gesteuert. In der Schleife wird auf K nicht Bezug genommen. Die Anweisungen werden so
oft ausgefUhrt, wie es der Wert von NI angibt.
4.2.8. Ausgabe von Zeichen 109

4.2.8. Ausgabe von Zeichen. Bei der Ausgabe von Ergebnissen wird man bestrebt sein, ein
Druckbild zu erzielen, aus dem die wesentlichen Angaben, die die Zahlenwerte ergänzen,
jederzeit wieder abgelesen werden können. Es ist vor allem notwendig, über Zahlenwerte
hinaus Texte, also Folgen von Zeichen, auszugeben. Dazu wird man eine Ausgabeprozedur
zur Verfligung stellen, die auf dem vom Kompilierer bereitgestellten Unterprogramm
OUTSYMBOL aufbaut. Es soll hier gezeigt werden, wie man dieses Unterprogramm direkt
verwenden kann.
Durch Aufruf von OUTSYMBOL kann ein Zeichen eines vorgegebenen Alphabets auf einem
anzugebenden Kanal ausgegeben werden. Diese Angaben folgen dem Namen OUTSYMBOL
in der Reihenfolge:
Kanalnummer, Alphabet, Nr. des Zeichens im Alphabet.
Die erste und dritte Angabe können durch arithmetische Ausdrücke gemacht werden. Das
Alphabet wird als eine Zeichenkette (string) eingegeben, der zwei Apostrophs vorangestellt
sind und die durch zwei Apostrophs beendet wird. Die Ausgabe mehrerer Zeichen kann durch
Laufanweisung geschehen. So würde z. B. durch
'FOR' 1 := 1,2,3,6,4,2,5,4 '00'
OUTSYMBOL (0, "DERTX ",I);
der Text DER TEXT geschrieben. Das Alphabet besteht aus 6 Zeichen, das erste ist D, das
zweite E usf. I ninunt die Werte 1, 2, 3,6, ... an, so daß zuerst das 1., dann das 2. Zeichen
ausgegeben werden. Der Text wird ausgegeben durch achtmaligen Aufruf des Unterprogramms
OUTSYMBOL.
Einfacher wird die Ausgabe, wenn man als Alphabet den auszugebenden Text selbst angibt
und die Zeichen der Reihe nach abruft. Es würde der obige Text auch durch
'FOR' 1 := 1 'STEP' 1 'UNTI L' 8 '00'
OUTSYMBOL (0, "DER TEXT", I)
ausgegeben.
Die Länge eines Strings kann durch Unterprogramm ermittelt werden. Es hat den Namen
LENGTH und verlangt als Angabe in der Klammer die Zeichenkette. Die Länge ist dann
unmittelbar in LENGTH gespeichert. Im letzten Beispiel könnte es in folgender Weise
verwendet werden:
'FOR' 1 := 1 'STEP' 1 'UNTI L' LENGTH ("DER TEXT") '00'
OUTSYMBOL (0, "DER TEXT", I)
Zum Aufbau eines Druckbildes ist weiter erforderlich, daß eventuell Leerzeilen eingefügt
werden, daß eine neue Zeile begonnen wird. Diese Steuerungen des Ausgabegerätes sind
maschinenabhängig. Bei dem Siemens-Rechner z. B. erfolgt ein Wagenrücklauf, wenn als Nr.
des Zeichens im Alphabet -3, ein Zeilenvorschub des Blattschreibers, wenn - 9 angegeben
wird. Eine Leerzeile könnte also durch - 3, - 9, - 9 erreicht werden. In dem obigen
Beispiel würde das erreicht durch:
'FOR' 1 := - 3, - 9, - 9, 1 'STEP' 1 'UNTI L' LENGTH
("DER TEXT") '00'
OUTSYMBOL (0, "DER TEXT", I)

Besser allerdings wäre folgende Form:


M := LENGTH ("DER TEXT");
'FOR' 1 := - 3, - 9, - 9, 1 'STEP' 1 'UNTI L' M '00'
OUTSYMBOL (0, "DER TEXT", I)
110 4.2. Einführung in ALGOL

In dieser Version würde die Länge des Strings nur einmal ermittelt, im vorhergehenden Bei-
spiel dagegen achtmal.

4.2.9. Programm zur Berechnung von Mittelwert und Streuung. Tafel 4.16 zeigt den Abdruck
eines vollständigen Programms zur Berechnung von Mittelwert und Streuung sowie der
Vertrauensgrenzen.
Nach dem Kommentar in Zeile 2 beginnen in Zeile 3 die Vereinbarungen der Variablennamen.
In Zeile 5 steht die erste Anweisung. Sie dient mit Zeile 6 und 7 der Ausgabe einer Überschrift.
In Zeile 8 wird n über Lochstreifen ein Wert zugewiesen (die Anzahl der einzulesenden Werte),
ebenso t 005 ' das zur Berechnung der Vertrauensgrenzen dient.

Tafe14.16

1 'BEGIN'
2 'COMMENT'BERECHNUNG V. MITTELWERT,STREUUNG U. VERTRAUENSGRENZEN;
3 'REAL'NR.T005,XO,xu,xb,so,Sl,S2,S3,S4;
4 'INTEGER'NI,K;
5 'FOR'K:=-3,-9,-9,l'STEP'l'UNTI L'56,-3,-9,-9'OO'
6 OUTSYMBOL(O,"BERECHNUNG VON MITTELWERT,STREUUNG UND
7 VERTRAUENSGRENZEN",K);
8 INREAL(9,NR); NI:=NR; INREAL(9,T005);
9 Sl :=S2:=0;
10 'FOR'K:=l'STEP'l'UNTlL'NI'OO'
11 'BEGIN'
12 INREAL(9,XU);
13 Sl :=S1+XU;
14 S2:=S2+XUxXU
15 'END';
16 XO:=Sl/NR;
17 SO:=(S2-NRxXOxXO)/(NR-1);
18 S3:=SORT(SO);
19 S4:=S3xT005/S0RT(NR);
20 XU:=XO-S4;
21 XO:=XO+S4;
'FOR'K:=-3,-9,-9,l'STEP'l'UNTI L'20'OO'
OUTSYMBOL(O,"MITTELWERT =",K);
OUTREAL(O,XO);
25 'FOR'K:=-3,-9, -9,1 'STEP'l'UNTIL'20'OO'
OUTSYMBOL(O,"STREUUNG =",K);
OUTR EAL(O,SO);
'FOR'K:=-3,-9,-9,l'STEP'l'UNTI L'20'OO'
OUTSYMBOL(O,"STANOAROABWEICHUNG =",K);
30 OUTREAL(O,S3);
'FOR'K:=-3,-9,-9,l'STEP'l'UNTI L'25'OO'
OUTSYMBOL(O,"UNTERE VERTRAUENSGRENZE =",K);
OUTREAL(O,XU);
'FOR'K :=-3,-9,-9,l'STEP'l'UNTI L'25'OO'
35 OUTSYMBOL(O,"OBERE VERTRAUENSGRENZE =",K);
OUTREAL(O,XO);
'FOR'K:=-3,-9,-9,l'STEP'l'UNTI L'19'OO'
OUTSYMBOL(O,"BERECHNUNG BEENOET;",K);
39 'END'
4.2.9. Programm zur Berechnung von Mittelwert und Streuung 111

Mit Zeile 9 beginnt das Rechenverfahren. Wie in Abschnitt 4.2.7 erläutert, werden durch
9-15 die Summen
n n
SI = I: X;
1=1
und S2 = I:
1=1
xl
berechnet. Mit diesen Werten werden dann ermittelt

in Zeile 16 der Mittelwert Xo = Sl/n


in Zeile 17 die Streuung SQ = S2 - ~
n-l

in Zeile 18 die Standardabweichung S3 = VS;


in Zeile 19-21 die Vertrauensgrenzen
S3 . toos S .t
x,.=Xo- X =11"- + 3 005
n O'V n
Sodann werden die Werte mit erläuterndem Text ausgegeben. Ergebnisse und Datenstreifen
zeigt Tafel 4.17 .

Tafel 4.17

DATENSTREIFEN:

50,1.96

44.2,48.5,47.8,54.0,49.5,47.4,45.1,48.4,47.1,54.8

46.9,52.6,43.2,48.3,47.6,48.1,44.8,51.9,49.9,42.4
43.7,51.3,48.5,46.2,46.0,46.7,51.6,45.3,53.8,55.0

48.2,42.8,47.9,45.0,47.3,44.0,44.5,4 7.1,48.8,47.8

50.6,53.1,43.8,45.8,44.1,49.1,46.9,47.5,50.0,48.3

BERECHNUNG VON MITTELWERT,STREUUNG UND VERTRAUENSGRENZEN

MITTELWERT 4.786390 10 001

STREUUNG 1.019260 10 001

STANDARDABWEICHUNG 3.192585

UNTERE VERTRAUENSGRENZE 4.697896 10 001

OBEREVERTRAUENSGRENZE 4.874883 10 001

BERECHNUNG BEENDET;
112 4.2. Einführung in ALGOL

4.2.10. Unbedingte und bedingte Anweisungen. Der normale Programmablauf geschieht so,
daß nach Ausführung einer Anweisung die nächstfolgende bearbeitet wird. Es kann aber nötig
werden, diese Abfolge zu durchbrechen, derart, daß zu einer besonders zu kennzeichnenden
Anweisung vor- oder zurückgesprungen werden soll. Es ergibt sich also die Notwendigkeit,
neue Sprachelemente dafür vorzusehen. Eine Anweisung muß gekennzeichnet werden: das
geschieht durch Vorsetzen einer Marke (label). Eine solche Marke ist ein Name, wie er in
Abschn. 4.2.1 zunächst für Variable eingeführt und verwendet wurde. Diesem Namen muß ein
Doppelpunkt folgen. Dadurch ist er als Marke ausgewiesen. Eine Anweisung kann durch eine
oder mehrere Marken herausgehoben werden. Der Anweisung
X:= Y + Z;
kann z. B. die Marke BEGINN vorangestellt werden:
BEGINN: X:= Y + Z;
Sie kann durch die zweite Marke SI gekennzeichnet werden:
BEGINN: Sl: X:= Y + Z
Die Anweisung, die bewirkt, daß die Rechnung bei einer Anweisung fortgesetzt wird, die durch
eine solche Marke herausgestellt wird, hat die Form 'GOra' Marke, also z. B.
'GOTO' BEGINN;
Nimmt man an, daß diese Anweisung irgendwo im Programm erscheint, so bewirkt sie an
dieser Stelle, daß die Rechnung mit der Anweisung X := Y + Z; fortgesetzt wird, die die Marke
BEGINN trägt. Bei den bedingten Anweisungen wird die Ausführung einer einzelnen Anweisung
oder einer Verbund anweisung von dem Wahrheitswert eines Booleschen Ausdrucks abhängig
gemacht. Sie haben die Form
'IF' B 'THEN' Sl 'ELSE' S2;
wobei B der Boolesche Ausdruck, SI und S2 einzelne Anweisungen oder Verbundanweisungen
sind. Ist 'ELSE' S2 vorhanden, so handelt es sich um die zweiseitige Form der bedingten An-
weisung. Den Ablauf zeigt Bild 4.18. Hat der logische Ausdruck den Wert "wahr", wird die
Anweisung SI ausgeführt, hat er den Wert "falsch", wird zu S2 verzweigt. Danach wird in
beiden Fällen im Programm fortgefahren. Fehlt dagegen 'ELSE' S2, so wird bei Vorliegen von
"wahr" SI ausgeführt, bei "falsch" unmittelbar mit der nächsten Anweisung fortgefahren.
Bild 4.19 zeigt diese einseitige Form. Wie ein logischer Ausdruck B gebildet sein kann, ist im
Abschnitt 4.2.5 gezeigt worden. Er kann insbesondere eine Boolesche Variable, ein Boolescher

4.18 4.19
Zweiseitige Form der beding· Einseitige Form der beding-
ten Anweisung ten Anweisung
Ausdruck aus einer Kombination von Vergleichen sein. Eine bedingte Anweisung könnte z. B.
von der Gestalt
'IF' X 'GREATER' Y 'AND' Z 'EOUAL' Y 'OR' X 'EOUAL' Y
'THEN' 'BEGIN' INREAL (9,U); X := U 'END'
'ELSE' U := Z;
4.2.11. Prozeduren 113

sein. Der Boolesche Ausdruck


x>Yl\z=yvx=,y
liefert "wahr" oder "falsch". Diese Wahrheitswerte werden in folgender Weise ermittelt.
Zunächst werden die Vergleiche durchgeführt (x > y, z = y, x = y), dann wird die Verknüpfung
der Werte von x > y und z = y durch "und" vorgenommen und schließlich wird dieser Wert
mit dem von x = y durch "oder" verknüpft. Ist der gesamte Ausdruck "wahr", so wird die
Verbundanweisung hinter 'THEN' ausgeführt, d. h. es wird U eingelesen und X zugewiesen, ist
er "falsch", so wird der Wert von Z der Variablen U zugewiesen.
Es ist durchaus möglich, daß die Verbundanweisungen SI und S2 selbst bedingte Anweisungen
enthalten, allerdings darf eine solche bei SI nur als Verbundanweisung auftreten, bei S2
hingegen direkt. Während also
'IF' U 'EOUAL' V 'THEN' 'GOTO' S3 'ELSE' 'IF' A
'LESS' Z 'THEN' X := Y 'ELSE' Z := U
möglich ist, muß in dem anderen Fall die bedingte Anweisung
in 'BEGIN' und 'END' eingeschlossen werden, kurz gesagt, es
dürfen 'THEN' und 'IF' nicht aufeinander folgen. Soll z. B.
der in Bild 4.20 dargestellte Ablaufplan in ALGOL dargestellt
werden, so kann das mit der Anweisung
'IF' A 'EOUAL' 0 'THEN' 'BEGIN' 'IF' X 'EOUAL'
o 'THEN' Y := 1 'ELSE' Y := X 'END' 'ELSE' ,....----...L.----,
Y:= X/A;

4.20 Programmablaufplan für eine bedingte Anweisung

geschehen. Auf diese Weise lassen sich auch komplizierte Abläufe durch bedingte Anweisungen
darstellen .
In diesem Zusammenhang soll daraufhingewiesen werden, daß in ALGOL auch bedingte
Zuweisungen möglich sind. Soll einer Variablen in Abhängigkeit von einem logischen Ausdruck
B entweder ein Ausdruck Al oder ein Ausdruck A2 zugewiesen werden, so hat diese Zuweisung
die Form
Variable := 'IF' B 'THEN' Al 'ELSE' A 2 ;
Auch hier kann der Boolesche Ausdruck eine logische Kombination von Vergleichen oder
Booleschen Variablen sein. Zum Beispiel würde durch die Zuweisung
A := 'IF' U + V 'GREATER' Z 'THEN' U/Z 'ELSE' V/Z;
im Falle, daß der Vergleich u + v> z "wahr" liefert, a der Wert von!!., im Falle, daß er "falsch"
ergl'bdW
t, er ert von v- zugewiesen.
. z
z
Bei der bedingten Zuweisung kann der Ausdruck A2 selbst wieder einen bedingten Ausdruck
enthalten, Al dagegen muß ein einfacher arithmetischer Ausdruck sein.

4.2.11. Prozeduren. Eine der wichtigsten sprachlichen Möglichkeiten, die ALGOL bietet, ist
das Vereinbaren von Unterprogrammen, die durch Aufruf an verschiedenen Stellen des
Programms angesprochen und verwendet werden können. Solche Prozeduren werden zum Teil
vom Kompilierer bereitgestellt, nämlich die arithmetischen Standardfunktionen und die
Prozeduren für die Ein- und Ausgabe. Darüber hinaus können Folgen von Anweisungen, die
mehrfach geschrieben werden müßten, nach bestimmten Regeln als Prozeduren vereinbart
werden.
114 4.2. Einführung in ALGOL

4.2.11.1. Eigentliche Prozeduren. Die Ausgabe von Texten ist in Abschn. 4.2.8 dargestellt
worden. Dabei wurden die Grundprogramme OUTSYMBOL und LENGTH verwendet. Es soll
nun gezeigt werden, wie mit diesen Unterprogrammen eine Prozedur flir Textausgabe aufgebaut
werden kann. Dabei sind drei Angaben wesentlich:
1. die Kanalnummer des Ausgabegerätes. Sie sei mit KNR bezeichnet.
2. der auszugebende Text als Variable TEXT,
3. die Anzahl der Zeilenvorschübe. Diese Angabe sei in ZV gespeichert,
wobei vereinbart wurde, daß, falls dieser Wert< 1 ist, weder ein Wagenrücklauf noch ein
Zeilenvorschub ausgeführt wird. In dem zu schreibenden Programm muß die Länge des Textes
ermittelt werden. Sie werde nach K gespeichert. Falls K = 0 ist, wird kein Text ausgegeben.
Den Ablaufplan flir dieses Programmstück zeigt Bild 4.21. Das zugehörige ALGOL-Programm
zeigt Tafel 4.22.

Tafe14.22

'PROCEDURE'AUSGABE(KNR,TEXT,ZV);
'VALUE'KNR,ZV;
'INTEGER'KNR,ZV;
'STRING'TEXT;
5 'BEGIN'
'INTEGER'J,K;
'IF' ZV 'LESS' 1 'THEN' 'GOTO' TE;
OUTSYMBOL(KNR,"",-3);
'FOR' J:= 1'STEP' 1 'UNTIL' ZV '00'
10 OUTSYMBOL(KNR,"",-9);
TE: K:=LENGTH(TEXT);
'IF' K 'EQUAL' 0 'THEN' 'GOTO' E;
'FOR' J:=1 'STEP' 1 'UNTIL' K '00'
OUTSYMBOL(KNR,TEXT,J);
15 E: 'END' ENDE DER PROCEDURE AUSGABE;

4.21 Programmablaufplan für die Textausgabe

Es besteht aus dem Prozedurkopf(Zeile 1-4) und dem Prozedurrumpf (Zeile 5-15). Der
Rumpf ist nach dem Ablaufplan von Bild 4.21 geschrieben.
Diese Prozedur soll fiir die Ausgabe von beliebigen Texten mit verschiedener Anzahl von
Zeilenvorschüben und fiir verschiedene Kanäle gültig sein, selbst die Namen dieser drei
Variablen sollen beliebig sein. Würden z. B. anstelle der Variablennamen
KNR, TEXT, ZV
die Namen
I, UEBER, M
beim Aufruf verwendet, so soll der in UEBER gespeicherte Text über den Kanal ausgegeben
werden, dessen Angabe in I enthalten ist. Die Anzahl der Zeilenvorschübe ist in M gespeichert.
Die Namen KNR, TEXT, ZV sollen also in der Prozedur nicht wesentlich sein. Sie kenn-
zeichnen nur die Stellen, an denen beim Aufruf die entsprechenden Variablen einzusetzen
4.2.11. Prozeduren 115

sind. Diese den Platz freihaltenden Variablennamen nennt man f 0 r mal e Par a met er.
Vereinbarungen darüber werden im Prozedurkopf vorgenommen. Der Prozedurkopf besteht
aus dem die Vereinbarung kennzeichnenden Begrenzer 'PROCEDURE', dem Namen
(AUSGABE) und der Liste der formalen Parameter, eingeschlossen in runde Klammern im
obigen Beispiel Zeile 1:
'PROCEDURE' AUSGABE (KNR,TEXT,ZV);
Weiterhin müssen die Namen in einem Speziflkationsteil vereinbart werden. So werden z. B.
KNR, ZV als 'INTEGER', TEXT als eine Zeichenkette - 'STRING' - spezifIZiert (Zeile 3
und 4).
Der Aufruf dieser Prozedur AUSGABE geschieht an allen Stellen im Programm, an denen
Text ausgegeben werden soll, durch einen Aufruf, eine sog. Prozeduranweisung, bei der zu dem
Namen des Unterprogramms in runden Klammern die Liste der Namen der Variablen hinzu-
gefligt wird, die zu verwenden sind. Im Unterschied zu den formalen Parametern der Verein-
barung heißen die wirklich zu verwendenden Variablen (oder eventuell Ausdrücke)
akt u e 11 e Par a met er. Die Prozeduranweisungen
AUSGABE (I,UEBER,M)

AUSGABE (KANAL,TEXT1,Z)
sprechen die Prozedur AUSGABE an. Wichtig ist, daß formale und aktuelle Parameter in der
Anzahl und im Typ übereinstimmen müssen.
Bei den Parametern ist zu unterscheiden, ob es sich um Werte von Variablen (oder Ausdrücken)
handelt, die flir die Rechnung in der Prozedur zur Verfligung gestellt werden, oder im Variable,
deren Werte bei der Rechnung verändert werden. Ist an den Stellen, an denen ein formaler
Parameter auftritt, nur der Wert von Interesse, den die Variable bei dem Aufruf hat, so kann
diese Variable in der Vereinbarung als 'VALUE' vereinbart werden. Das hat zur Folge, daß
an all diesen Stellen nur der Wert eingesetzt wird, nicht der Name der Variablen. In Tafel 4.22,
Zeile 2 werden KNR und ZV als 'VALUE' vereinbart, d. h. überall, wo ZV auftritt, wird der
Wert des aktuellen Parameters eingesetzt und ebenso flir KNR. Die Prozeduren flir Ein- und
Ausgabe, die bei der übersetzung bereitgestellt werden, sind solche Prozeduren, z. B. ist der
Prozedurkopfvon OUTSYMBOL in folgender Weise vereinbart zu denken:
'PROCEDURE' OUTSYMBOL (CHANNEL,STRING,SOURCE);
'VALUE' CHANNEL,SOURCE;
'STRING' STRING;
Dabei können für CHANNEL und SOURCE arithmetische Ausdrücke als aktuelle Parameter
fungieren, deren Wert bei Aufruf ermittelt wird.
Als formale Parameter können auch Feldnamen verwendet werden. Diese Namen müssen
entsprechend speziflziert werden ('REAL' 'ARRAY', 'INTEGER' 'ARRAY' oder 'BOOLEAN'
'ARRAY'), ohne daß Indexgrenzen anzugeben wären, z. B.
'INTEGER' 'ARRAY' A,B,C;
'REAL' 'ARRAY' X,Y,Z;

4.2.11.2. Funktionsprozeduren. Eine andere Art, Unterprogramme in ALGOL zu verwenden,


zeigte der Aufruf der Standardfunktionen. Sie sind im Abschnitt 4.2.2 eingeflihrt worden. Sie
werden nicht durch Prozeduranweisungen aufgerufen. Sie sind sog. Funktionsprozeduren.
Diese Form läßt sich auch bei der Vereinbarung von Prozeduren verwenden. Die Standard-
funktionen brauchen selbst nicht vereinbart zu werden. Die Funktionsprozeduren sind ein
116 4.2. Einführung in ALGOL

Sonderfall der Prozeduren, nämlich der Fall, daß im Unterprogramm genau ein Wert berechnet
und einer Variablen zugewiesen wird, und zwar wird angenommen, daß der Name dieser
Variablen gleich dem Namen der Prozedur ist. Wenn z. B. SIN (X) in einem arithmetischen
Ausdruck verwendet wird, so heißt das,
1. daß die Prozedur mit dem Namen SIN aufgerufen wird,
2. daß der Sinuswert des aktuellen Parameters X einer Variablen mit dem Namen SIN
zugeordnet wird.
Im Unterschied zu den eigentlichen Prozeduren, die durch Prozeduranweisung aufgerufen
werden, erfordert die Vereinbarung von Funktionsprozeduren, daß die Zuweisung im Pro-
gramm an mindestens einer Stelle wirklich geschieht. Die Prozedur muß also eine Zuweisung
SIN:= ...
enthalten. Die Vereinbarung des Typs der Veränderlichen geschieht durch Voransetzen des
entsprechenden Begrenzers vor 'PROCEDURE'. Ist der Name als 'REAL' vereinbart zu denken,
so muß die Prozedur mit
'REAL' 'PROCEDURE' ...
beginnen, entsprechend mit 'INTEGER' oder 'BOOLEAN', falls ein ganzzahliger oder logischer
Wert ermittelt wird.
Bei den formalen Parametern in der Prozedurvereinbarung kann erläuternder Text in
folgender Form an Stelle des trennenden Kommas eingefligt werden:
)Text: (
So wird z. B. die Vereinbarung
'REAL' 'PROCEDURE' HORNER (X,A,N)

zu
'REAL' 'PROCEDURE' HORNER (X) KOEFFIZIENTEN: (A)
GRAD DES POLYNOMS: (N);
Das gilt fiir eigentliche wie für Funktionsprozeduren. Im obigen Beispiel wird eine Verein-
barung für ein Unterprogramm zur Berechnung des Wertes eines Polynoms begonnen. Das
Polynom habe die Form

Die KoeffIzienten seien in der Folge


80, a.. a2 , ... ,lln
in einem Feld mit dem Namen A gespeichert. Der Wert von x stehe in X bereit, der Grad n sei
der Wert von N. Der Wert von y werde in HORNER gespeichert. Der Prozedurkopfhat dann
die Gestalt
'REAL' 'PROCEDURE' HORNER (X) KOEFFIZIENTEN: (A)
GRAD DES POLYNOMS: (N);
'VALUE' X,N;
'REAL' X; 'INTEGER' N; 'ARRAY' A;
Die Berechnung von y wird mit dem sog. Horner-Schema vorgenommen. Es beruht auf der
Umformung
4.2.11. Prozeduren 117

aus der man den Rechnungsablauf entnehmen kann. Zunächst wird y der Wert a.. zugewiesen,
sodann im einzelnen ausgeflihrt
y := y . x + a..-l
y:=y·x+an _ 2

y :=y' x + a 1
y:= Y' x + 110
Das Zuweisungszeichen soll ausdrücken, daß der rechts stehende Ausdruck gebildet und y
zugewiesen werden soll, allgemein
y:=a..
y := Y' x + ~ für i = n - I, n - 2, ... ,0
In dieser Form läßt sich der Algorithmus direkt übernehmen, und es ergibt sich als Prozedur-
rumpf, wenn HORNER als Name für die Veränderliche y gesetzt wird
'BEGIN'
'INTEGER' I;
HORNER := A [N];
'FOR' I := N - 1 'STEP' - 1 'UNTI L' 0 '00'
HORNER := HORNER x X + A [I]
'END' ENDE DER REAL PROCEDURE HORNER

Da zwischen 'BEGIN' und 'END' eine Vereinbarung über I auftritt, ist dieser Prozedurrumpf
ein Block und keine Verbundanweisung. Die Anwendung dieser Funktionsprozedur wird im
folgenden Beispiel gezeigt.

4.2.11.3. Programm zur Berechnung der Biegelinie eines Trägers. Für den in Bild 4.23 dar-
gestellten Belastungsfall ergibt die Integration der Biegegleichung fiir die Biegelinie

'loQ4 X X X
Y= _ ((_)4 _ 2 (_)3 + (-)) (4.3)
24EI Q Q Q

4.23 Beidseitig aufgelagerter Träger

ein Polynom 4. Grades. Dabei ist E der Elastizitätsmodul, I das Flächenträgheitsmoment,


'lo Streckenlast und QLänge des Trägers. Für den Anstieg der Biegelinie erhält man

dy qoQ3 x X
-=_(4(_)3 -6(-i + I) (4.4)
dx 24EI Q Q

ein Polynom 3. Grades.


Der Momentenverlauf ist proportional zur 2. Ableitung und wird durch ein Polynom 2. Grades,
der Querkraftverlauf durch ein Polynom 1. Grades dargestellt. Die vierte Ableitung ist konstant
118 4.2. Einführung in ALGOL

Tafel 4.24

'BEGIN' 'COMMENT' BIEGELINIE EINES AUF ZWEI STUETZEN AUFGELAGERTEN


TRAEGERS MIT GLEICHSTRECKENLAST. DER TRAEGER HABE DIE LAENGE L,
DAS FLAECHENTRAEGHEITSMOMENT I UND DEN ELASTIZITAETSMODUL E;
'REAL' 'PROCEDURE' HORNER (X)KOEFFIZIENTEN: (A)GRAD DES POLYNOMS: (N);
'VALUE' X,N; 'REAL' X; 'INTEGER' N; 'ARRAY' A;
'BEGIN' 'INTEGER' I;
HORNER :=A[N];
'FOR' I :=N-l 'STEP' -1 'UNTI L' 0 '00'
HORNER:=HORNER x X + A[I]
'END' ENDE DER REAL PROCEDURE HORNER;

'REAL' OO,L,E,I,A,B,DX,BO,B 1,B2,B3,Y,YS1,YS2,YS3,X,XB;


'INTEGER' J; 'ARRAY' AO[0:4],Al[0:3],A2[0:2],A3[0:1];

'FOR' J:= -3,-9,-9,-9,1 'STEP' 1 'UNTI L' 51 '00'


OUTSYMBOL (0, "BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS.",
J);
INREAL (9,00); INREAL (9,E); INREAL (9,1); INREAL (9,L);
'FOR' J:= -3,-9,-9,1 'STEP' 1 'UNTIL' 13 '00'
OUTSYMBOL (0, "EINGABEWERTE:",J);
'FOR' J:= -3,-9,-9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0, "OO=",J);
OUTREAL (0,00);
'FOR' J:= -3,-9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0, "E = ",J);
OUTREAL (O,E);
'FOR' J:= -3,-9,1 'STEP' 1 'UNTlL' 3 '00' OUTSYMBOL (0, "I = ",J);
OUTREAL (0,1);
'FOR' J:= -3,-9,1 'STEP' 1 'UNTI L' 3 '00' OUTSYMBOL (0, "L = ".J);
OUTREAL (O,L);
INREAL (9,A); INREAL (9,B); INREAL (9,DX);
AO[O] := AO[2] := Al [1] := A2[0] := 0.0;
A2[ 1] := -1.0; A3[0] := -0.5; Al [3] := 4.0; Al [2] := -6.0; AO[3] := -2;
A1[0] := AO[l] := AO[4] := A2[2] := A3[1] := 1.0;
B3 := 00 x L/(E x I); B2 := B3 x Lx 0.5; Bl := B2 x L/12.0; BO := Bl x L;
'FOR' J:= -3,-9,-9,1 'STEP' 1 'UNTIL' 14 '00'
OUTSYMBOL (0, "OO/(E x I) IST: ",J); OUTREAL (0,B3/L);
'FOR' J:= -3,-9,-9,1 'STEP' 1 'UNTIL' 42 '00'
OUTSYMBOL (0, " X Y UND ABLEITUNGEN",J);
'FOR' X:=A 'STEP' DX 'UNTIL' B '00'
'BEGIN'
XB:= X/L;
Y:= BO x HORNER (XB,AOA);
YSl :=Bl x HORNER (XB,Al,3);
YS2:=B2 x HORNER (XB,A2,2);
YS3:=B3 x HORNER (XB,A3,1);
'FOR' J:= -3,-9 '00' OUTSYMBOL (0, " ",J);
OUTREAL (O,X); OUTREAL (O,Y);
'FOR' J:= -3,-9 '00' OUTSYMBOL (0, " ",J);
OUTREAL (0,YS1); OUTREAL (0, YS2); OUTREAL (0, YS3);
'END' ENDE DER BERECHNUNG DER BIEGELINIE;
'FOR' J:= -3,-9,-9,-9,1 'STEP' 1 'UNTI L' 18 '00'
OUTSYMBOL (0, "ENDE DER RECHNUNG;",J)
'END' ENDE DES PROGRAMMS;
4.2.11. Prozeduren 119

Y (4) = qo (4.5)
EI
Die Funktionswerte all dieser Funktionen können mit der Funktionsprozedur HORNER
berechnet werden, und zwar soll nicht das erweiterte Horner-Schema benutzt werden, sondern
es sollen alle Funktionswerte durch Aufruf von HORNER bestimmt werden. Das voll-
ständige ALGOL-Programm ist in Tafel 4.24 dargestellt. Ergebnisse und die verwendeten
Daten zeigt Tafel 4.25.

Tafel 4.25

DATENSTREIFEN :

2.0 1940 600

BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS.

EINGABEWERTE:
ao = 2.000000
E = 1.000000'0 005
I = 1.940000 10 003
L = 6.000000'0 002

aO/(E x I) IST: 1.030927 ,0-008


X Y UND ABLEITUNGEN
0 0
9.278347'0-002 0 -3.092783, 0-006
1.000000'0 001 9.273235'0-001
9.263056, 0-002 -3.041236'0-005 -2.989690'0-006
2.000000'0 001 1.851614
9.217866'0-002 -5.979382'0-005 -2.886598'0-006
3.000000'0 001 2.769933
9.143812'0-002 -8.814433'0-005 -2.783505'0-006
4.000000'0 001 3.679448

2.900000'0 002 1.737370'0 001


4.637443'0-003 -4.634020'0-004 -1.030930'0-007
3.000000'0 002 1.739689'0 001
0 -4.639175'0-004 0
3.100000'0 002 1.737371'0 001
-4.637466'0-003 -4.634020'0-004 1.030926'0-007

5.800000'0 002 1.851612


-9.217872'0-002 -5.979397'0-005 2.886597'0-006
5.900000'0 002 9.273266'0-001
-9.263064'0-002 -3.041256'0-005 2.989690'0-006
6.000000'0 002 0
-9.278347'0-002 0 3.092783'0-006

Darin ist zunächst die Prozedur HORNER vereinbart, sodann die Veränderlichen 'INTEGER'
und 'REAL' sowie die KoeffIzienten als Felder je nach Grad des Polynoms. AO [0 : 4] ist die
Vereinbarung für die KoeffIzienten des Polynoms für die Biegelinie. Es folgt die Ausgabe der
120 4.2. Einführung in ALGOL

den Variablen <10, E, I und Qdurch Eingabe zugewiesenen Werte und die Zuweisung von
Werten zu A, B, DX, wodurch Anfangs- und Endwerte sowie Schrittweite der Rechnung
festgelegt werden. Der Zuweisung der Werte der KoeffIZienten folgen die arithmetischen
Zuweisungen, die vor der eigentlichen Rechnung ausgeführt werden können.

<1o Q qOQ2 QOQ3 QOQ4


--------
EI '2EI' 24EI' 24EI

Der Wert von ~~ wird ausgegeben. Nach dem Drucken der überschrift beginnt die Rechnung
für x von abis b in Schritten dx.
i
Für werden jeweils y und die Ableitung y', y", y'" durch Aufruf von HORNER berechnet
und ausgegeben.
4.2.11.4. Programm für das Verfahren von Runge-Kutta-Gill. Für die Lösung von Differential-
gleichungssystemen der Form

(4.6)

ist für die Verwendung von Unterprogrammen für Datenverarbeitungsanlagen das Verfahren
von Runge-Kutta durch Gill modifIZiert (s. Abschn. 4.1.8). Die Anfangsbedingungen

YiO = Yi (xo) i = 1,2, ... n (4.7)

seien vorgegeben. Dann besteht die Aufgabe, die das Verfahren lösen soll, darin, um einen
Schritt mit der Schrittweite h weiterzurechnen und die Funktionswerte an der Stelle Xo + h
zu ermitteln. Dieses Verfahren läßt sich dann mit den Werten an der Stelle Xo + h wiederholen,
wobei sich die Werte an der Stelle Xo + 2h ergeben usw. Dabei wird eine Gleichung

(4.8)

hinzugefügt, um die Sonderstellung der unabhängigen Veränderlichen x aufzuheben.


Das Verfahren ist in der Prozedur RUKUGI dargestellt. Den Ablaufplan zeigt Bild 4.26, das
Programm Tafel 4.27. Als Parameter sind in die Liste aufgenommen
1. das Feld Y mit den n + I Anfangswerten für den durchzuführenden Schritt,
2. die Schrittweite H,
3. die Felder Kund Q mit jeweils n + 1 Elementen. Kund Q enthalten Hilfsgrößen, die
~, i = 0, 1 ... n, sind zu Anfang = 0 zu setzen. Die Elemente von K werden berechnet.
4. N enthält den Wert von n,
5. YABL ist ein formaler Parameter, an dessen Stelle der Name der Prozedur stehen muß, in
der die rechten Seiten fi berechnet werden. YABL ist als 'PROCEDURE'speziflZiert. Im
Programm hat der aktuelle Parameter den gleichen Namen. YABL ist als Prozedur vereinbart.
Ändert man die rechten Seiten, d. h. will man mit dem Programm ein anderes System lösen,
so ist nur diese Prozedur YABL auszutauschen. Tafel 4.27 zeigt das Verfahren zur Lösung
des Systems
, 1 , I
Yl = - Y2=--
Y2 Yl
4.2.11. Prozeduren 121

Tafe14.27

'BEGIN'
'COMMENT' PROGRAMM ZUM LOESEN EINES DIFFERENTIALGLEICHUNGSSYSTEMS
MIT DEM VERFAHREN VON RUNGE·KUTTA·GILL;

'PROCEOURE' RUKUGI (Y,H,K,O,N,YABL);


'VALUE' H,N; 'ARRAY' Y,K,O; 'REAL' H; 'INTEGER' N; 'PROCEOURE' YABL;
'BEGIN'
'ARRAY' A,B,C(1 :4]; 'INTEGER' I,J; 'REAL' 0;
A(1] := C[l] := C[4] := 0.5;
A[2] := C[2] := 0.292893;
A[3] := C[3] := 1.707107;
A[4] := 0.1666667;
B(1] := B[4] := 2.0;
B[2] := B[3] := 1.0;
'FOR' J:=l 'STEP' 1 'UNTIL' 4 '00'
'BEGIN'
YABL (Y,K,N);
'FOR' 1:=0 'STEP' 1 'UNTIL' N '00'
'BEGIN'
0:= A[J] x (K[I] - B[J] x 0[1]);
Y[I]:= Y[I] + H x 0;
0[1]:= 0[1] + 3.0 x 0 - C[J] x K[I]
'END' I·SCHLEIFE;
'END' J·SCHLEIFE;
'END' PROCEOURE RUKUGI;
'PROCEOURE' AUSGABE (KNR,TEXT,ZV);
'VALUE' KNR,ZV;
'INTEGER' KNR,ZV;
'STRING' TEXT;
'BEGIN'
'INTEGER' J,K;
'IF' ZV 'LESS' 1 'THEN' 'GOTO' TE;
OUTSYMBOL (KNR, ' , , ',-3);
'FOR' J:=l 'STEP' 1 'UNTI L' ZV '00'
OUTSYMBOL (KNR, '" , , -9);
TE: K:=LENGTH (TEXT);
'IF' K 'EOUAL' 0 'THEN' 'GOTO' E;
'FOR' J:=l 'STEP' 1 'UNTlL' K '00'
OUTSYMBOL (KNR,TEXT,J);
E: 'END' ENDE DER PROCEOURE AUSGABE; 4.26 Programmablaufplan für das
Verfahren von Runge·Kutta·
'PROCEOURE' YABL (Y,K,N); Gill (Tafel 4.27)
'VALUE' N;
'INTEGER' N; 'ARRAY' Y,K;
'BEGIN'
K[O] := 1.0;
K[ 1] := 1.01Y[2];
K[2] := 1.0/Y[l]
'END' PROCEOURE YABL;

'REAL' H,XE,B;
'INTEGER' N,I,P,M;
INREAL (9,H); N:=H; INREAL (9,H); INREAL '(9,XE); INREAL (9,B);
P:=B;
122 4.2. Einführung in ALGOL

'BEGIN'
'ARRAY' K,Q,Y[O:N);
AUSGABE (P, "LOESUNG DES DIFFERENTIALGLEICHUNGSSYSTEMS",31;
AUSGAB E (P, ".---------------------------------------------------------------------------------------- ",1 I ;
AUSGABE (P, "MIT DEM VERFAHREN VON RUNGE-KUTTA-GILL.",21;

'FOR' I :=0 'STEP'1 'UNTI L' N '00'


Q[I) := 0.0;

'FOR' I :=0 'STEP' 1 'UNTlL' N '00'


'BEGIN'
INREAL (9,BI; Y[I) :=B
'END';
AUSGABE (P," ARGUMENT Y Q",31;
LOESEN:
AUSGABE (P, ' , , , ,21;
OUTREAL (P, Y[O)I; OUTREAL (P, Y[l)); OUTREAL (P, Q[l)l;
'IF' N 'LESS' 2 'THEN' 'GOTO' WEITER;
'FOR' 1:=2 'STEP' 1 'UNTI L' N '00'
'BEGIN'
AUSGABE (P," ",11; OUTREAL (P, Y[I));
OUTREAL (P, Q[I)I;
'END';
WEITER:
'IF' H 'GREATER' 0.0 'THEN'
'BEGIN'
'IF' Y[O) 'NOTLESS' XE 'THEN' 'GOTO' ENDE
'END'
'ELSE'
'BEGIN'
'IF' Y[O) 'NOTGREATER' XE 'THEN' 'GOTO' ENDE
'END';
RUKUGI (Y,H,K,Q,N,YABLI;
'GOTO' LOESEN;
ENDE: M:=LENGTH ("ENDE DER RECHNUNG; "I;
'FOR'I:=-3,-9,l 'STEP' 1 'UNTIL' M '00';
OUTSYMBOL (P, "ENDE DER RECHNUNG; ",lI;
'END'
'END' ENDE DES PROGRAMMS;

Die Ausgabe von Texten geschieht mit Hilfe der Ausgabeprozedur. Ergebnisse zeigt Tafel 4.28.

4.2.11.5. Raumsondenßug im Vakuum. Das Programm zur Lösung eines Differential-


gleichungssystems mit dem Verfahren von Runge-Kutta-Gillläßt sich verwenden, um das im
Abschnitt 4.1.8 dargestellte Problem des Raumsondenfluges zu lösen. Das abgeänderte
Programm ist in Tafel 4.29 wiedergegeben. Die Tafel 4.30 enthält das Ergebnis und den
Abdruck des verwendeten Datenstreifens.

4_2.12. Blockstruktur_ In dem in Tafel 4.27 dargestellten Programm sind drei Felder K, Q, Y
mit den Indexgrenzen 0 und N vereinbart. Der Wert von N wird drei Zeilen vorher über H
durch Eingabe zugewiesen
INREAL (9,HI; N := H;
4.2.12. Blockstruktur 123

Tafe14.28

DATENSTREIFEN :

2 0.1 1.5 o
o 1.0 1.0

LOESUNG DES DIFFERENTIALGLEICHUNGSSYSTEMS

MIT DEM VERFAHREN VON RUNGE-KUTTA-GILL.


ARGUMENT Y Q

0 1.000000 0
1.000000 0
1.000000 10-001 1.105170 0
9.048378 10-001 0
2.000001 10-001 1.221401 0
8.187314 10-001 0
3.000002 10-001 1.349856 0
7.408190 10-001 0
4.000002 10-001 1.491821 0
6.703209 10 -001 0
5.000002 10-001 1.648716 0
6.065317 10 -001 0
6.000001 10-001 1.822112 0
5.488127 10-001 0
7.000000 10-001 2.013744 0
4.965863 10-001 0
7.999999 10-001 2.225531 0
4.493300 10 -001 0
8.999998 10 -001 2.459591 0
4.065706 10 -001 0
9.999997 10-001 2.718268 0
3.678804 10-001 0
1.099999 3.004149 0
3.328719 10-001 0
1.199999 3.320097 0
3.011950 10 -001 0
1.299999 3.669274 0
2.725325 10 -001 0
1.399999 4.055175 0
2.465976 10-001 0
1.499999 4.481659 0
2.231308 10 -001 0
1.599999 4.952997 0
2.018971 10-001 0
ENDE DER RECHNUNG;
124 4.2. Einführung in ALGOL

Tafel 4.29

'BEGIN'
'COMMENT' PROGRAMM ZUM LOESEN EINES DIFFERENTIALGLEICHUNGSSYSTEMS
MIT DEM VERFAHREN VON RUNGE-KUTTA-GILL;

'PROCEDURE' RUKUGI (Y,H,K,O,N,YABLI;


'VALUE' H,N; 'ARRAY' Y,K,O; 'REAL' H; 'INTEGER' N; 'PROCEDURE' YABL;
'BEGIN'
'ARRAY' A,B,C(1 :4]; 'INTEGER' I,J; 'REAL' D;
A[l] := C[l] := C[4] := 0.5;
A[2] := C[2] := 0.292893;
A[3] :=C[3]:= 1.707107;
A[4] := 0.1666667;
B(1] := B[4] := 2.0;
B[2] := B[3] := 1.0;
'FOR' J:=l 'STEP' 1 'UNTIL' 4 'DO'
'BEGIN'
YABL (Y,K,NI;
'FOR'I:=O 'STEP' 1 'UNTIL' N 'DO'
'BEGIN'
D := A[J] x (K[I] - B[J] x 0[111;
Y[I] := Y[I] + H x D;
0[1] := 0[1] + 3.0 x D - C[J] x K[I]
'END' I-SCHLEIFE;
'END' J-SCHLEIFE;
'END' PROCEDURE RUKUGI;

'PROCEDURE' AUSGABE (KNR,TEXT,ZVI;


'VALUE' KNR,ZV;
'INTEGER' KNR,ZV;
'STRING' TEXT;
'BEGIN'
'INTEGER' J,K;
'IF' ZV 'LESS' 1 'THEN' 'GOTO' TE;
OUTSYMBOL (KNR, " , , ,-31;
'FOR' J:=l 'STEP' 1 'UNTlL' ZV 'DO'
OUTSYMBOL (KNR, ' " , ,-9);
TE: K:=LENGTH (TEXT);
'IF' K 'EOUAL' 0 'THEN' 'GOTO' E;
'FOR' J:=l 'STEP' 1 'UNTIL' K 'DO'
_ OUTSYMBOL (KNR,TEXT,J);
E: 'END' ENDE DER PROCEDURE AUSGABE;

'PROCEDURE' YABL (Y,K,NI;


'VALUE' N;
'INTEGER' N; 'ARRAY' Y,K;
'BEGIN'
K[O] := 1.0;
B := (Y[2] + R) x (Y[2] + R);
K(1] := - B/GR2;
K[2] := - B x Y[O]/GR2
'END' PROCEDURE YABL;

'REAL' H,R,G,GR2,B; 'ARRAY' K,O,Y[0:2];


'INTEGER' I,M,L,U,N;
4.2.12. B10ckstruktur 125

INREAL (9,G); INREAL (9,R); GR2:=G*R*R;


INREAL (9,H); L:=H; INREAL (9,H); N:=H;
0[0] := 0[1] := 0[2] := 0.0;
INREAL (9,B); Y[O]:= B;
INREAL (9,B); Y[l]:= B;
INREAL (9,B); Y[2]:= B;
'IF' G 'NOTGREATER' 0.0 'OR' B 'NOTGREATER' 0.0 'OR' Y[O] 'NOTGREATER' 0.0
'OR' Y[2] 'LESS' 0.0 'OR' 2.0 x GR2 'NOTGREATER' Y[O] x Y[O] x (Y[3] + R) 'OR'
N 'NOTGREATER' 0 'OR' L 'NOTGREATER' 0 'OR' L 'GREATER' N
'THEN'
'BEGIN'
AUSGABE (0, "FEHLERHAFTE EINGABE. ",3); 'GOTO' ENDE;
'END';
H := - Y[O]/N;

AUSGABE (0, "RAUMSONDENFLUG IN REINEM VAKUUM",3);


AUSGABE (0, "HIMMELSKOERPER-RADIUS ",2);
OUTREAL (0,R/l000.0); AUSGABE (0, "KM",O);
AUSGABE (0, "SCHWEREBESCHLEUNIGUNG AUF DESSEN OBERFLAECHE",2);
OUTREAL (O,G); AUSGABE (O,"M/S x x 2",0);
AUSGABE (O,"GESCHWINDIGKEIT FLUGDAUER FLUGHOEHE",3);
AUSGABE (0, " M / S SEK M",2);

'FOR' U:=O 'STEP' 1 'UNTIL' N 'DO'


'BEGIN'
'IF' U - U/L xL 'EOUAL' 0 'OR' U 'EOUAL' N 'THEN'
'BEGIN'
AUSGABE (0,"" ,1);
OUTREAL (O,Y[O]); OUTREAL (O,Y[l]l; OUTREAL (0,Y[2]l;
'END';
'IF' U 'NOTEOUAL' N 'THEN'
RUKUGI (Y,H,K,0,2,YABL);
'END';

ENDE: M:=LENGTH (' 'ENDE DER RECHNUNG;' 'I;


'FOR' 1:= -3, -9, -9, -9,1 'STEP' 1 'UNTlL' M 'DO'
OUTSYMBOL (0, ' 'ENDE DER RECHNUNG;' , ,I);
'END' ENDE DES PROGRAMMS;

Das ist nur möglich, weil vor der Vereinbarung der Felder ein neuer Block beginnt ('BEGIN').
Es ist nicht möglich, zu schreiben
INREAL (9,H); N := H;
'ARRAY' K, 0, Y[O : N];
und zwar deswegen nicht, weil dann N einen Wert hat, aber die Vereinbarung erst nach zwei
Anweisungen folgt. Das aber ist nicht statthaft.
Dagegen können in einem inneren Block neue Vereinbarungen getroffen werden. In Tafel 4.27
liegt folgende Struktur vor (die Prozedurvereinbarungen seien fortgelassen)
'BEGIN'
'REAL' H, XE, B;
'INTEGER' N, I, P, M;
INREAL (9,H); N := H; INREAL (9,H); INREAL (9,XE); INREAL (9,B);
P:= B;
126 4.2. Einführung in ALGOL

Tafel 4.30

RAUMSONDENFLUG IN REINEM VAKUUM

HIMMELSKOERPER-RADIUS 6.370000 10 003 KM

SCHWEREBESCHLEUNIGUNG AUF DESSEN OBERFLAECHE 9.810000 M/S**2

GESCHWINDIGKEIT FLUGDAUER FLUGHOEHE


M/S SEK M
1.999999 10 003 0 2.000000 10 005
1.899999 10 003 1.087914 10 001 2.212136 10 005
1.800000 10 003 2.182693 10 001 2.414664 10 005
1.699999 10 003 3.284035 10 001 2.607394 10 005
1.599999 10 003 4.391632 10 001 2.790144 10 005
1.500000 10 003 5.505163 10 001 2.962735 10 005
1.400000 10 003 6.624301 10 001 3.125005 10 005
1.300000 10 003 7.748709 10 001 3.276796 10 005
1.199999 10 003 8.878045 10 001 3.417959 10 005
1.099999 10 003 1.001195 10 002 3.548356 10 005
9.999998 10 002 1.115009 10 002 3.667857 10 005
9.000000 10 002 1.229208 10 002 3.776343 10 005
8.000000 10 002 1.343756 10 002 3.873705 10 005
7.000000 10 002 1.458615 10 002 3.959848 10 005
6.000000 10 002 1.573747 10 002 4.034680 10 005
4.999999 10 002 1.689115 10 002 4.098132 10 005
4.000000 10 002 1.804679 10 002 4.150134 10 005
3.000000 10 002 1.920401 10 002 4.190636 10 005
2.000000 10 002 2.036241 10 002 4.219593 10 005
1.000000 10 002 2.15216110 002 4.23698010 005
-6.230676 10 -005 2.26812010 002 4.242777 10 005

ENDE DER RECHNUNG;

Datenstreifen :

9.81 6.37 10 6
5 100
2000 0 2 10 5

'BEGIN'
'ARRAY' K, 0, Y[O: N];

'END'
'END' ENDE DES PROGRAMMS
Die Felder K, Q, Y können nur in dem inneren Block, nicht in dem äußeren angesprochen
werden. Man spricht von lok ale n Namen (lokal in Bezug auf den inneren Block). Die
Variablen H, XE, B, N, usw., die im äußeren Block vereinbart sind, können auch im inneren
Block benutzt werden. Es handelt sich dann um sog. gl 0 bai e Größen.
Man beachte, daß der Speicherplatz fUr K, Q und Y nicht schon bei der übersetzung des
4.2.13. Verteiler 127

Programms bereitgestellt werden kann. Erst beim Rechenlauf wird der Wert von N zugewiesen,
erst dann kann also der Speicherplatz reserviert werden, und zwar genau dann, wenn die
Steuerung in den Block hineinfUhrt. Nach Verlassen des Blockes wird der Speicherplatz
wieder freigegeben. Es bedarf also während des Rechenlaufs einer ständigen überwachung
der Speicherverteilung.
Es ist auch möglich, eine Veränderliche in einem inneren Block neu zu vereinbaren. Enthält
ein Programm z. B. zwei innere Blöcke, so kann ein Variablennamen in diesem neu vereinbart
werden, z. B.
'BEGIN'
S1 : X:= Y
'BEGIN'
'REAL' S1
'BEGIN'
'PROCEDURE' S1 ...

'END'

'END';
'GOTa' S1
'END'
Hier wird die Vereinbarung über SI (Marke) im äußeren Block beim Eintritt in den ersten
inneren Block aufgehoben und SI als 'REAL' vereinbart. Auch diese Vereinbarung wird beim
übergang in den zweiten inneren Block außer Kraft gesetzt. Hier wird SI als 'PROCEDURE'
festgelegt. Nach Verlassen der inneren Blöcke und RückfUhrung in den äußeren ist SI wieder
als Marke vereinbart und kann deshalb z. B. in einer unbedingten Anweisung erscheinen.

4.2.13. Verteiler. Eine weitere sprachliche Möglichkeit bietet sich in ALGOL durch die
Vereinbarung sog. Verteiler 'SWITCH'. Sie sind zu denken als Zusammenfassung mehrerer
Marken, die in einem Programm erscheinen. Es werde z. B. vereinbart
'SWITCH' ALPHA := S1, S2, AL, EXIT, L;
mit den Marken
S1, S2, AL, EXIT, L;
die irgendwo im Programm erscheinen und bestimmte Stellen kennzeichnen. Der Verteiler hat
den Namen ALPHA. Dann gibt ein Index hinter ALPHA an, um welche Marke es sich handelt.
Es ist also ALPHA [1] gleich S1, ALPHA [2] gleich S2, ALPHA [3] gleich AL usf.
Wird z. B. ALPHA [4] in einer unbedingten Anweisung verwendet
'GOTa' ALPHA [4];
so würde das Programm mit der Anweisung fortgeführt, die die Marke EXIT hat. Die bedingte
Anweisung
'IF' A 'EQUAL' 0 'THEN' 'GOTa' ALPHA [1]
'ELSE' 'IF' A 'LESS' 0 'THEN' 'GOTa' ALPHA [3]
'ELSE' 'GOTa' ALPHA [2]
würde bewirken, daß falls a = 0 wahr ist, das Programm zur Anweisung mit der Marke SI
*"
verzweigt. Falls a 0 wird im Fall, daß a< 0, zu der mit der Marke AL, falls a > 0 zu der mit
der Marke S2 verzweigt.
128 4.2. Einführung in ALGOL

4.2.14. Ein Programm für die Berechnung statischer Größen. Es sei ein ebenes Kräftesystem in
der Ebene gegeben, und zwar durch die Komponenten der Kräfte in x- und y-Richtung
F xj und F yj und die Angriffspunkte der Kräfte Xj und Yj' i = 1,2, ... n. Zu ermitteln seien:
1. die resultierende Kraft FR.

2. der Winkel «J, den die Wirkungslinie der Resultierenden mit der x-Achse bildet
FRy
«J= { F Rx
*
arctan - - , falls F Rx 0

tr/2, falls F Rx = 0

3. das Moment im Nullpunkt

4. der Abstand der Wir-


kungslinie der Resul-
tierenden vom Nullpunkt

= -F ' falls FR * 0
Mo
h
R

5. die Gleichung der Wir-


kungslinie der Resul-
tierenden:
y=ax+b
F Ry
a=--
FRx

falls F Rx *0

4.31
Programmablaufplan ftir die
Berechnung statischer Größen
4.2.14. Ein Programm für die Berechnung statischer Größen 129

Tafe14.32

'BEGIN' 'COMMENT' BERECHNUNG DER RESULTIERENDEN KRAFT FR BELIEBIGER


KRAEFTE IN DER EBENE, FERNER BERECHNUNG DES DREH·
MOMENTES UM DEN PUNKT P;
'REAL' FXI, FYI, XI, YI, M01, M02, FRX, FRY, PHI, FR, MO, XS, YS, XP, YP,
MP, H, A, B;
'INTEGER' N, M, I, J;
'FOR' I := -3, -9, -9, -9,1 'STEP' 1 'UNTI L' 34 '00'
OUTSYMBOL (0, "BERECHNUNG VON FRX, FRY, M01, M02:", 1);
INREAL (9,XI); N := XI;
FRX := FRY := M01 := M02 := 0; 'FOR' I := 1 'STEP' 1 'UNTIL' N '00'
'BEGIN'
INREAL (9,FXI); INREAL (9,FYI); INREAL (9,XI); INREAL (9, YI);
FRX := FRX + FXI; FRY := FRY + FYI;
M01 := M01 + FYI x XI; M02 := M02 + FXI x YI;
'END';

°
FR := SQRT (FRX x FRX + FRY x FRY);
'IF' FRX 'EQUAL' 'THEN' 'BEGIN' PHI := 90; 'GOTO' ZM1; 'END';
PHI := ARCTAN (FRY/FRX); PHI := PHI x 57.2958;
ZM 1: 'FOR' I := -3, -9, -9, 1 'STEP' 1 'UNTI L' 16 '00'
OUTSYMBOL (0, "KRAEFTEREDUKTION", I);
'FOR' 1:= -3, -9,1 'STEP' 1 'UNTIL' 60, -3, -9 '00'
OUTSYMBOL (0," FRX FRY FR
PHI" ,I);
OUTREAL (0, FRX); 'FOR' I := 1 'STEP' 1 'UNTIL' 3 '00'
OUTSYMBOL (0, " ",I); OUTREAL (0, FRY); 'FOR' I := 1 'STEP' 1
'UNTIL' 3 '00' OUTSYMBOL (0," ",I); OUTREAL (0, FR);
OUTREAL (0, PHI);
°
MO := M01 - M02; 'IF' FR 'EQUAL' 'THEN' 'GOTO' ZM2;
H := MO/FR;
'FOR' I := -3, -9, -9, -9,1 'STEP' 1 'UNTlL' 42 '00'
OUTSYMBOL (0,' 'ABSTAND H VON FR VOM KOORDINATENNULLPUNKT
" ,I);

ZM2:
OUTREAL (0, H);
°
'IF' FRX 'EQUAL' 'THEN' 'GOTO' ZM3;
A := FRY/FRX; B := - MO/FRX; YS := M02/FRX;
'FOR' I := -3, -9, -9, 1 'STEP' 1 'UNTI L' 32 '00'
OUTSYMBOL (0,' 'WIRKUNGSLINIE DER RESULTIERENDEN" , I);
'FOR' I := -3, -9, 1 'STEP' 1 'UNTI L' 3 '00'
OUTSYMBOL (0, "A= ", I); OUTREAL (0, A);
'FOR' 1:= 1 'STEP' 1 'UNTlL' 6 '00'
OUTSYMBOL (0, " B=", I); OUTREAL (0, B);
'FOR' 1:= -3, -9, -9, -9,1 'STEP' 1 'UNTIL' 18 '00'
OUTSYMBOL (0,' 'KRAEFTEMITTELPUNKT" , 1);
'FOR' I := -3, -3,1 'STEP' 1 'UNTIL' 4 '00'

ZM3: °
OUTSYMBOL (0,' 'YS= " ,I); OUTREAL (0, YS);
'IF' FRY 'EQUAL' 'THEN' 'GOTO' ZM4;
XS := M01/FRY;
'FOR' I := -3, -9,1 'STEP' 1 'UNTlL' 4 '00'
OUTSYMBOL (0, "XS= " ,I); OUTREAL (0, XS);
ZM4: INREAL (9, XI); M := XI;
'FOR' I := -3, -9, -9, -9, 1 'STEP' 1 'UNTI L' 18 '00'
OUTSYMBOL (0, ' 'MOMENT IM PUNKTE P' , , I);
'FOR' J := 1 'STEP' 1 'UNTI L' M '00'
'BEGIN'
130 4.2. Einführung in ALGOL

INREAL (9,XP); INREAL (9, YP);


MP := MO + YP x FRX - XP x FRY;
'FOR' I := -3, -9,1 'STEP' 1 'UNTIL' 4 '00'
OUTSYMBOL (0,' 'XP=" ,I); OUTREAL (0, XP);
'FOR' I := 1 'STEP' 1 'UNTI L' 7 '00'
OUTSYMBOL (0, " YP=", I); OUTREAL (0, YP);
'FOR' I := 1 'STEP' 1 'UNTI L' 7 '00'
OUTSYMBOL (0," MP=", 1); OUTREAL (0, MP);
'END';
'FOR' I := -3, -9, -9, -9,1 'STEP' 1 'UNTIL' 11 '00' OUTSYMBOL
(0, ' 'MOMENT MO= ", 1);
OUTREAL (0, MO); 'FOR' 1:= -3, -9, -9, -9,1 'STEP' 1 'UNTIL' 17 '00'
OUTSYMBOL (0,' 'RECHNUNG BEENOET;" , I);
'END'

Tafel 4.33

BERECHNUNG VON FRX, FRY, MOl, M02:

KRAEFTEREOUKTION
FRX FRY FR PHI
2.694450 5.328420 5.970939 6.317541 10 001

ABSTAND H VON FR VOM KOORDINATENNULLPUNKT 5.457847

WIRKUNGSLINIE DER RESULTIERENDEN


A = 1.977554 B = - 1.209466'0 001

KRAEFTEMITTELPUNKT
YS = - 1.146881'0 001
XS = 3.164764 10 -001

MOMENT IM PUNKTE P
XP = - 1.000000 YP = 1.000000 MP = 4.061132 10 001
XP = 5.000001 YP = 1.000000 MP = 8.640809
XP = 3.000000 YP = - 1.000000 MP = 1.390876 10 001

MOMENT MO = 3.258846'0 001

RECHNUNG BEENOET;

BERECHNUNG VON FRX, FRY, MOl, M02:

KRAEFTEREOUKTION
FRX FRY FR PHI
o 4.999999 10 002 5.000001 10 002 9.000000'0 001

ABSTAND H VON FR VOM KOORDINATENNULLPUNKT 3.503999


XS = 3.504000

MOMENT IM PUNKTE P
XP = 2.500000 YP = 0 MP = 5.020000'0 002
4.2.14. Ein Programm für die Berechnung statischer Größen 131

MOMENT MO = 1.752000'0 003

RECHNUNG BEENDET;

BERECHNUNG VON FRX, FRY, M01, M02:

KRAEFTEREDUKTION
FRX FRY FR PHI
o 0 o 9.000000 10 001

MOMENT IM PUNKTE P
XP = 2.500000 YP = 0 MP = - 3.000000 10 002
XP = 7.500001 YP = 0 MP = - 3.000000'0 002

MOMENT MO = - 3.000000 10 002

RECHNUNG BEENDET;

BERECHNUNG VON FRX, FRY, M01, M02:

KRAEFTEREDUKTION
FRX FRY FR PHI
4.999999'0 002 0 5.000001'0 002 o
ABSTAND H VON FR VOM KOORDINATENNULLPUNKT - 3.504000

WIRKUNGSLINIE DER RESULTIERENDEN


A= 0 B = 3.504000
KRAEFTEMITTELPUNKT
YS = 3.504000

MOMENT IM PUNKTE P
XP = 0 YP = 2.500000 MP = - 5.020000 10 002

MOMENT MO = - 1.752000'0 003

RECHNUNG BEENDET;

BERECHNUNG VON FRX, FRY, M01, M02:

KRAEFTEREDUKTION
FRX FRY FR PHI
o 0 o 9.000000 10 001

MOMENT IM PUNKTE P
XP = 1.700000 YP = 0 MP= 0

MOMENT MO= 0

RECHNUNG BEENDET;
132 Einführung in ALGOL

Tafel 4.34

DATENSTREIFEN:

5, 2.82842, 2.82842, -4, -4,


2.59808, -1.5, 0, -4,
0, 5, 3, 0,
- 1.73205, -1, 2, 3,
-1, 0, 0, 4,

3, -1, 1,
5, 1,
3, -1;

2 0.0 208.0 0.0 0.0


0.0 292.0 6.0 0.0
2.5 0.0;
2 30.0 30.0 0.0 0.0
-30.0 -30.0 10.0 0.0
2 2.5 0.0
7.5 0.0;
2 208.0 0.0 0.0 0.0
292.0 0.0 0.0 6.0
0.0 2.5;

4 50.0 0.0 1.7 0.0


-70.0 0.0 0.8 0.0
-30.0 0.0 1.1 0.0
50.0 0.0 0.0 0.0
1.7 0.0;

6. der Kräftemittelpunkt:

MOl M02
~=-, falls FRy-:l=O Y=- falls F Rx -:1=0
F Ry S F '
RX

7. das Moment in m Punkten Pi mit den Koordinaten ~ und Yi

Mo = Mo + Yi . F RX - ~ . F Ry

Den Programmablaufplan zeigt Bild 4.31. Das ALGOL-Programm ist in Tafel 4.32 wieder-
gegeben. Tafel 4.33 gibt die Ergebnisse fiir den in Tafel 4.34 wiedergegebenen Datenstreifen
wieder. Die Kräftesysteme sind in Bild 4.35 dargestellt.

4.2.15. Berechnung der Biegelinie eines elastisch gebetteten Trägers. Die Biegelinie des in
Bild 4.36 dargestellten elastisch gebetteten Trägers erfiillt die Differentialgleichung
4.2.15. Berechnung der Biegelinie eines elastisch gebetteten Trägers 133

d4 y K qo
d.x4 + EI Y = EI
Die Randbegingungen lauten, falls aus Symmetriegriinden nur die rechte Seite betrachtet
wird
dy
-
d.xI x=O-
-0

F
2EI

Diese Differentialgleichung hat die Lösung


5 F
4
F5
tt 3
F4x


·~·s
2 ~ F~

l1:>" F3

0
-4 -3 -2 -7 234
fxinkp-- x incm __

zj
-7
xincm~ Fxinkp - - 4.36 Elastisch gebetteter
-2 Träger

0y -3 -30
c)
-4
0K
-5
a) -6
600 6 (>--::----O~
Fz
5005 5005

4004 4004

tt 3003 tt 3003
~f32002 ~~ 200 2
~.~ F, .~.s:

700 7 LC ,., 700 7

O~~--L--L~--~~---
o --'-3
o6--.:..J,---I0-
700 200 300 400 500 600 2
7 2 3 4 5 6 700 200 300
b) f."inkp-- d) f."inkp-
xincm-- xincm--

F2 F* r,
-2 -1 0 0 1 2 3 4
-30 -20 -70 70 20 30 40 50 60 70
F.rinkp- 4.35
e) xincm-- Behandelte Kräftesysteme
134 Einführung in ALGOL

y = qo + ~ (s . cosh h . cos h - t . sinh h . sin h)


K 2Kr
F
+ -(cosh h· sin h - sinh h· cos h)
2K
mit
s = cosh2 },.Q + cos2 },.Q
t = sinh2 },.Q + sin2 },.Q
r = cosh },.Q • sinh },.Q + cos },.Q • sin },.Q },.=t! 4EIK
Tafel 4.37 gibt das ALGOL-Programm wieder, Tafel 4.38 die mit ihm errechneten Ergebnisse
für zwei verschiedene Fälle.

Tafel 4.37

'BEGIN' 'COMMENT' BIEGELINIE EINES ELASTISCH GEBETTETEN TRAEGERS.


DER TRAEGER RUHE AUF INSGESAMT 2N GLEICHEN FEDERN IN GLEICHEN
(KLEINEN) ABSTAENDEN. ER WIRD ALS ELASTISCH GEBETTET BETRACHTET
(K = N x C/L). DIE BELASTUNG BESTEHE AUS EINER GLEICHSTRECKENL.AST 0
UND EINER IN DER MITTE DES TRAEGERS ANGREIFENDEN KRAFT F. DIE
LAENGE DES TRAEGERS SEI 2L. E x I UND 0 SEIEN KONSTANT. DER
URSPRUNG DES KOORDINATENSYSTEMS (X = 0) WIRD IN DIE MITTE DES
TRAEGERS GELEGT, DIE DURCHBIEGUNG (Y) NACH UNTEN POSITIV
GERECHNET;
'REAL' 'PROCEDURE' SINH (X);
'VALUE' X; 'REAL' X;
'BEGIN' 'REAL' Z;
Z := EXP (X);
SINH := 0.5 x (Z - 1.0/Z)
'END' REAL PROCEDURE SINH;
'REAL' 'PROCEDURE' COSH (X);
'VALUE' X; 'REAL' X;
'BEGIN' 'REAL' Z;
Z := EXP (X);
COSH := 0.5 x (Z + 1.0/Z)
'END' REAL PROCEDURE COSH;
'REAL' F, K, E, I, L, 00, A, B, DX, LAMBDA, AO, Al, A2, A3, A4, A5, A6, AN, AZ1, AZ2,
Y,X,YS1,YS2,YS3, YS4,Bl,B2,B3,B4,Cl,C2,Dl,D2,D3,D4;
'INTEGER' J;

'FOR' J := -3, -9, -9, -9,1 'STEP' 1 'UNTlL' 47 '00'


OUTSYMBOL (0,' 'BIEGELINIE EINES ELASTISCH GEBETTETEN TRAEGERS.", J);
INREAL (9,00); INREAL (9, F); INREAL (9, K); INREAL (9, E); INREAL (9, I);
INREAL (9, L);
'FOR' J:= -3, -9, -9,1 'STEP' 1 'UNTIL' 13 '00'
OUTSYMBOL (0,' 'EINGABEWERTE: " ,J);
'FOR' J := -3, -9, -9, 1 'STEP' 1 'UNTIL' 4 '00' OUTSYMBOL (0, "00= ", J);
OUTREAL (0,00);
'FOR' J := -3, -9,1 'STEP' 1 'UNTlL' 3 '00' OUTSYMBOL (0,' 'F= ", J);
OUTREAL (0, F);
'FOR' J := -3, -9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0,' 'K= ", J);
OUTREAL (0, K);
4.2.15. Berechnung der Biegelinie eines elastisch gebetteten Trägers 135

'FOR' J := -3, -9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0,' 'E= ", J);
OUTREAL (0, E);
'FOR' J := -3, -9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0, "1= ", J);
OUTREAL (0, I);
'FOR' J := -3, -9,1 'STEP' 1 'UNTIL' 3 '00' OUTSYMBOL (0,' 'L= ", J);
OUTREAL (0, L);

INREAL (9, A); INREAL (9, B); INREAL (9, DX);


LAMBDA := (K/(4.0 x E x I)) 'POWER' 0.25;
AO := LAMBDA x L; A 1 := QO/K; A2 := 0.5 x F x LAMBDA/K;
A3 := COSH (AO); A4 := SINH (AO); A5 := SIN (AO); A6 := COS (AO);
AN := A3 x A4 + A6 x A5;
AZ1 := A3 x A3 + A6 x A6; AZ2 := A4 x A4 + A5 x A5;
B1 := A2 x LAMBDA/AN; C1 := AZ1 - AZ2; 01 := AZ1/AN;
B2 := 2.0 x A2 x LAMBDA x LAMBDA; C2 := AZ1 + AZ2; 02:= AZ2/AN;
B3 := B2 x LAMBDA; 03 := - C1/AN;
B4 := 2.0 x B3 x LAMBDA; 04 := C2/AN;
'FOR' J := -3, -9,1 'STEP' 1 'UNTIL' 42 '00'
OUTSYMBOL (0, ' ' X Y UND ABLEITUNGEN' , , J);

'FOR' X := A 'STEP' DX 'UNTI L' B '00'


'BEGIN'
AO := LAMBDA x X;
A3 := COSH (AO); A4 := SINH (AO); A5 := SIN (AO); A6 := COS (AO);
Y := A 1 + A2/AN x (AZ1 x A3 x A6 - AZ2 x A4 x A5) + A2 x (A3 x A5
-A4xA6);
YS1 := B1 x (C1 x A4 x A6 - C2 x A3 x A5 + 2.0 x AN x A4 x A5);
YS2 := B2 x (- 02 x A3 x A6 - 01 x A4 x A5+ A4 x A6 + A3 x A5);
YS3 := B3 x (03 x A3 x A5 - 04 x A4 x A6 + 2.0 x A3 x A6);
YS4 := B4 x (- 01 x A3 x A6 + 02 x A4 x A5 + A4 x A6 - A3 x A5);
'FOR' J := -3, -9 '00' OUTSYMBOL (0, " ", J);
OUTREAL (0, X); OUTREAL (0, V); OUTREAL (0, YS1); OUTREAL (0, YS2);
'FOR' J:= -'-3, -9 '00' OUTSYMBOL (0, " , , ,J);
OUTREAL (0, YS3); OUTREAL (0, YS4);
'END' ENDE DER BERECHNUNG DER BIEGELINIE;

'FOR' J := -3, -9, -9, -9,1 'STEP' 1 'UNTIL' 18 '00'


OUTSYMBOL (0,' 'ENDE DER RECHNUNG;" ,J);

'END' ENDE DES PROGRAMMS;

Im Programm sind zunächst zwei Funktionsprozeduren für die Berechnung von sinh (x) und
cosh (x) vereinbart nach ihrer Definition
I I
sinh(x)=-(ex-e- x) und cosh(x)=-(ex+e- X )
2 2
Die durch Eingabe der Größen qo' F, K, E und I zugewiesenen Werte werden mit Text aus-
geschrieben. Die Rechnung wird von a beginnend bis b in Schritten ~ durchgeführt. Vorher
jedoch werden alle Werte von Ausdrücken berechnet, die nicht von x abhängen, z. B.

A=V 4EIK
136 4.2. Einführung in ALGOL

Tafel 4.38

DATENSTREIFEN :
15 1500 200 1830 100
o 100 10;

BIEGELINIE EINES ELASTISCH GEBETTETEN TRAEGERS.

EINGABEWERTE:

00 = 1.500000'0 001
F 1.500000'0 003
K 2.000000'0 002
E 2.100000'0 006
I 1.829999'0 003
L 1.000000'0 002
X V UND ABLEITUNGEN
o 1.209406'0-001 0 -8.789376'0-006
1.951608'0-007 -2.390887'0-009
1.000000'0 001 1.205327'0-001 -7.853391'0-005 -ß.957131,o-o06
1.713240'0-007 -2.369658'0-009
2.000000'0 001 1.194271'0-001 -1.399320'0-004 -5.361552'0-006
1.478886'0-007 -2.312119'0-009
3.000000'0 001 1.177834'0-001 -1.865352'0-004 -3.996945'0-006
1.251749'0-007 -2.226575'0 -009
4.000000'0 001 1.157381'0-001 -2.206129'0-004 -2.854828'0-006
1.034266'0-007 -2.120134'0-009
5.000001'0 001 1.134056'0-001 -2.443382'0-004 -1.924595'0-006
8.282203'0-008 -1.998744'0-009
6.000001'0 001 1.108790'0-001 -2.597707'0-004 -1.194152'0-006
6.348532'0-008 -1.867250'0-009
7.000000'0 001 1.082314'0-001 -2.688432'0-004 -ß.503875,o-o07
4.549776'0-008 -1.729460'0-009
8.000000'0 001 1.055173'0-001 -2.733551'0-004 -2.795389'0-007
2.890756'0-008 -1.588213'0-009
9.000000'0 001 1.027739'0-001 -2.749636'0-004 -ß.749833,0-008
1.373855'0-008 -1.445440'0-009
1.000000'0 002 1.000227'0-001 -2.751867'0-004 2.178348'0-012
2.326498 10-014 -1.302254'0-009

ENDE DER RECHNUNG;

DATENSTREIFEN :
15 1000 200 1830 100
o 100 10

BIEGELINIE EINES ELASTISCH GEBETTETEN TRAEGERS.

EINGABEWERTE:

00 = 1.500000'0 001
F 9.999998'0 002
K 2.000000'0 002
E 2.100000'0 006
I 1.829999'0 003
L 1.000000'0 002
4.2.15. Berechnung der Biegelinie eines elastisch gebetteten Trägers 137

X Y UND ABLEITUNGEN
0 1.056271 10 -001 0 -5.859584 10 -006
1.301071 10 -007 -1.593925 10 -009
1.000000 10 001 1.053551 10 -001 -5.235594 10 -005 -4.638087 10 -006
1.142160 10-007 -1.579772 10 -009
2.000000 10 001 1.04618010 -001 -9.328804 10 -005 -3.574368 10-006
9.859242 10 -008 -1.541412 10 -009
3.000000 10 001 1.035222 10 -001 -1.243568 10-004 -2.664631 10 -006
8.344999 10 -008 -1.484383 10 -009
4.000000 10 001 1.021587 10-001 -1.470753 10-004 -1.903218 10-006
6.895110 10-008 -1.413423 10-009
5.000001 10 001 1.006037 10-001 -1.628921 10-004 -1.283063 10-006
5.521470 10-008 -1.332496 10-009
6.000001 10 001 9.891935 10 -002 -1.731804 10 -004 -7.961014 10 -007
4.232355 10 -008 -1.244833 10 -009
7.000000 10 001 9.715428 10 -002 -1.792289 10 -004 -4.335916 10 -007
3.033185 10 -008 -1.152973 10 -009
8.000000 10 001 9.534491 10 -002 -1.822367 10 -004 -1.863592 10-007
1.92717010 -008 -1.058809 10 -009
9.000000 10 001 9.351599 10-002 -1.833091 10 -004 -4.499888 10-008
9.159036 10-009 -9.636268 10-010
1.000000 10 002 9.168180 10-002 -1.834578 10 -0041 1.452232 10-012
1.550999 10-014 -8.681699 10-010

ENDE DER RECHNUNG;

Außer y werden dann die erste bis vierte Ableitung in einer Schleife berechnet, deren
Steuerungsanweisung
'FOR' X := A 'STEP' OX 'UNTIL' B '00'
lautet. Die Ableitungen sind mit YS1, YS2, YS3 und YS4 bezeichnet.

4.3. Einführung in PL/I

PLII (Programming Language One) ist eine in den Jahren 1963 bis 1966 von IBM gemeinsam
mit den Benutzerorganisationen GUIDE und SHARE geschaffene universelle Programmier·
sprache, die sich flir die Behandlung technischer Probleme ebenso eignet wie flir kaufmännische
Aufgaben. PLII besitzt wesentliche Elemente der klassischen problemorientierten Sprachen
ALGOL, COBOL und FORTRAN, bietet jedoch darüber hinaus eine reiche Fülle in der Praxis
entwickelter Möglichkeiten. An den Lernenden werden daher entsprechend höhere Anfor-
derungen gestellt. Dieser Abschnitt enthält eine Einführung in die Sprache und soll zum
Studium der ausflihrlichen Lehr- und Handbücher anregen. Eine erhebliche Anzahl von Sprach-
elementen kann daher nur angedeutet werden oder muß hier sogar unerwähnt bleiben.
PLII ist eine weitgehend anlagenunabhängige, problemorientierte Sprache. Das vom Anwender
geschriebene Quellprogramm wird vor seiner Verwendung mittels eines PL/I-Kompilierers in
das Objektprogramm übersetzt. IBM bietet gegenwärtig zwei Kompilierer an, den OS-Kompi-
lierer flir PLII F-Stufe und den DOS-Kompilierer rur PLII D-Stufe. Letzterer ist flir Anlagen
mit recht begrenzter Kapazität bestimmt; man kann deswegen auch nur eine beträchtlich
eingeschränkte Untermenge (Subset) des PL/I-Sprachumfangs verwenden, der dem PL/I-
F-Benutzer zur Verfügung steht. Die diesem Kapitel beigefügten vollständigen Programme
138 4.3. Einführung in PL/I

verwenden nur Sprachelemente des Subsets und nur den 48-Zeichen-Satz, während sich die
allgemeinen Erläuterungen auf den vollen Sprachumfang beziehen.

Beispiel 1. Tafel 4.39 enthält ein PL/I-Programm zur Auflösung der Normalform der qua-
dratischen Gleichung

x2 + px+ q = 0

Das Quellprogramm wird zumeist auf Lochkarten in den Spalten 2 bis 72 abgelocht und in
dieser Form vom PL/I-Kompilierer gelesen. Dieser Übersetzer erzeugt ein frei verschiebliches
Objektprogramm, das auf einem Großraumspeicher zwischengespeichert und bei Bedarf auch
auf Lochkarten ausgegeben wird. Ein Ladeprogramm (Linkage Editor Programm) lädt dieses
Objektprogramm dann in den vorgesehenen Speicherbereich.

Tafel 4.39 Wurzeln der quadratischen Gleichung in Normalform

QUADGL. . PROCEDURE OPTIONS (MAIN),.


/* REELLE LOESUNGEN DER QUADRATISCHEN GLEICHUNG
X * * 2 + P * X + Q = 0 */
DECLARE (P, Q, DISKR, X1, X2) FLOAT,.
GET LIST (P, Q),.
PUT LIST (P, Q),.
DISKR = (P/2) * * 2 - Q,.
IF DISKR LT 0 THEN GO TO ENDE,.
X1 = - P/2 + SQRT (DISKR),.
X2 = - P/2 - SQRT (DISKR),.
PUT LIST (X1, X2),.
ENDE. . END QUADGL,.

Eingabe:

2 - 2.5

Ausgabe:

2.00000E + 00 - 2.50000E + 00 8.70829E - 01 - 2.87083E + 00

Z e ich e n vor rat. Zur Erstellung eines Quellprogramms bedient man sich, je nach
Maschinenausrüstung, des 60-Zeichen-Satzes oder des 48-Zeichen-Satzes.

6 0 - Z e ich e n - S atz. Der 60-Zeichen-Satz enthält


Gruppe 1: 29 alphabetische Zeichen
$, #, @, 26 Buchstaben
Gruppe 2: 10 Dezimalziffern
Gruppe 3: 21 Sonderzeichen
Leerzeichen
Gleichheitszeichen (Ergibtzeichen)
+ Pluszeichen (Additionszeichen)
4.3. Einführung in PL/I 139

Minuszeichen (Subtraktionszeichen)
• Stern (Multiplikationszeichen)
I Schrägstrich (Divisionszeichen)
( Linke Klammer
) Rechte Klammer
Komma
Punkt
Apostroph
% Prozentzeichen
Semikolon
Doppelpunkt
--, Nicht-Zeichen
& Und-Zeichen
1 Oder-Zeichen
> Größer-als-Zeichen
< Kleiner-als-Zeichen
Unterstreichungszeichen
? Fragezeichen

Zehn Sonderzeichenkombinationen haben spezielle Funktionen


•• Potenzierung
11 Verkettung
> = Größer als oder gleich
< = Kleiner als oder gleich
--, = Nicht gleich
--, > Nicht größer als
--, < Nicht kleiner als
I. Beginn eines Kommentars
./ Ende eines Kommentars
- > Zeigersymbol
4 8 - Z e ich e n - S atz. Der 48-Zeichen-Satz enthält
Gruppe 1: 27 alphabetische Zeichen
$, 26 Buchstaben
Gruppe 2: 10 Dezimalziffern
Gruppe 3: 11 Sonderzeichen
Leerzeichen = + - • / ( ) , . '
Die Zeichen # @ ? werden im 48-Zeichen-Satz nicht verwendet. Anstelle der
übrigen Sonderzeichen des 60-Zeichen-Satzes und der dort gebräuchlichen Kombinationen
schreibt man hier
/ / Prozentzeichen
Semikolon
Doppelpunkt
LT Kleiner als
GT Größer als
OR Oder
AND Und
NOT Nicht
140 4.3. Einführung in PLII

CAT Verkettung
GE Größer als oder gleich
LE Kleiner als oder gleich
NE Nicht gleich
NL Nicht kleiner als
NG Nicht größer als
PT Zeigersymbol
Die hierbei verwendeten Buchstabenkombinationen gelten bei Verwendung des 48-Zeichen-
Satzes als feste, reservierte Wörter, die für andere Zwecke nicht verwendet werden dürfen.
Alle sonstigen Schlüsselwörter, im obigen Beispiel (Tafel 4.39) PROCEDURE, OPTIONS,
MAIN, DECLARE, FLOAT, GET, PUT, LIST, IF, THEN, GO, TO und END, gelten nicht als
reservierte Wörter. Sie werden vom Kompilierer nur im entsprechenden Zusammenhang als
Schlüsselwörter erkannt und verarbeitet.
B e z e ich n er. Daten, Anweisungen, Eingangsstellen und Dateien lassen sich durch
Angabe eines Bezeichners kennzeichnen. Ein solcher Name besteht aus 1 bis 31 alpha-
numerischen Zeichen und dem Unterstreichungszeichen. Jeder Bezeichner beginnt mit einem
alphabetischen Zeichen. Dateien- und Programmbezeichner, die auch von einem Betriebs-
system verarbeitet werden, unterliegen zusätzlichen Einschränkungen.
Gültige Bezeichnungen sind z. B.
X, Zahl31416, $_BETRAG, ZWEITE_ABLEITUNG, #_@$,NMINUSl,
während folgende Namen nicht verwendet werden können:
X-ACHSE, 7BUERGEN, 3M_COMPANY, LINEARES GLEICHUNGSSYSTEM,
Z3.1416
Auf bau ein e s Pro g r a m m s. Ein PL/I-Programm besteht aus einer oder mehreren
Pro z e dur e n , jede Prozedur aus S tat e m e n t s. Ein Statement enthält Ver ein -
bar u n gen oder A n w eis u n gen, kann sich über mehrere Zeilen erstrecken und wird
durch ein Semikolon abgeschlossen. Statements können Namen erhalten, indem man Marken
voranstellt, die durch einen Doppelpunkt abgeschlossen werden. Zur Abgrenzung benachbart
stehender Sprachelemente verwendet man im Bedarfsfalle Leerzeichen. Anstelle dieser Leer-
zeichen kann beliebiger Kom m e n t a r, der durch die Zeichenpaare 1* und *1 begrenzt
wird, geschrieben werden.
In Beispiel I (Tafel 4.39) enthält die erste Zeile die Vereinbarung, daß die Prozedur QUADGL
eine Hauptprozedur ist, also nach übersetzung und Bereitstellung vom Betriebssystem
initialisiert wird. - Nun folgen zwei Kommentarzeilen, darauf folgt eine Vereinbarung, daß
die Eingabewerte P und Q, die Zwischengröße DISKR und die Ergebniswerte Xl und X2 in
der Standardgleitpunktform zu speichern sind. Anweisungen zum Lesen und Schreiben der
Eingabewerte und, falls möglich, zum Berechnen der Ergebniswerte stehen in den nächsten
sechs Zeilen. Nun folgt die END-Anweisung der Hauptprozedur, die sowohl bei der über-
setzung als auch beim Programmlauf das Ende des Programms angibt.

4.3.1. Verarbeitung arithmetischer Daten. PL/I unterscheidet Programmsteuerdaten und


Problemdaten. Statementmarken gehören in die erste, arithmetische Daten und Kettendaten
in die zweite Kategorie. Die Charakteristiken der Daten können in DECLARE-Verein-
barungen durch A t tri b u t e festgelegt werden.
4.3.1. Verarbeitung arithmetischer Daten 141

A t tri b u t e a r i t h met i s c her D a t e n. Die Attribute einer arithmetischen Kon-


stanten leiten sich aus ihrer Gestalt her. Arithmetischen Variablen müssen jedoch die Attribute
S kai i e run g, B a s i s, M 0 du sund Gen au i g k e i t zugeordnet werden. Die
S kai i e rUn g ist entweder FlXED fl.ir Festpunkt- oder FLOAT fl.ir Gleitpunktgrößen. Das
B a s i s - Attribut DECIMAL sorgt fl.ir dezimale, BINARY für duale Speicherung. Das
M 0 d u s - Attribut REAL bezieht sich auf reelle Zahlen, COMPLEX bewirkt die Speicherung
als Zahlenpaar mit Real- und Imaginärteil. Das Gen a u i g k e i t s - Attribut (p, q) legt
die Anzahl p der zu speichernden Ziffern fest, wobei das Komma bei Festpunktgrößen
hinter der letzten Ziffer, bei Gleitpunktgrößen vor der ersten Ziffer zu denken ist. Bei Fest-
punktgrößen wird durch den Skalenfaktor q eine andere Kommastellung erreicht: Die ganze
Zahl ist mit Basis- q multipliziert zu denken. Das Genauigkeitsattribut bezieht sich auf die
gewählte Basis, sorgt bei GET LIST fl.ir stellengerechte Eingabe und steuert das Format bei
Ausgabe durch PUT LIST. Es muß in der DECLARE-Vereinbarung einem der anderen
Attribute unmittelbar folgen. Tafel 4.40 zeigt arithmetische Konstanten und die ihnen
automatisch zugewiesenen Attribute. Dabei bedeutet das nachgesetzte B, daß es sich um
eine Dualzahl handelt; E leitet die Exponentenangabe bei Gleitpunktzahlen ein.

Tafel4.40 Attribute arithmetischer Größen

Konstante Attribute

72.398 FIXED DECIMAL REAL (5,3)


984 FIXED DECIMAL REAL (3)
0.00243 FIXED DECIMAL REAL (3, 5)
876000 FIXED DECIMAL REAL (3, - 3)
1101011.01101B FIXED BINARY REAL (12,5)
1000100B FIXED BINARY REAL (5, - 2)
0.000000001B FIXED BINARY REAL (1,9)
234.5E + 7 FLOAT DECIMAL REAL (4)
236E - 2 FLOAT DECIMAL REAL (3)
0.001101 E5B FLOAT BINARY REAL (4)

S t an dar d a t tri b u t e. Falls nicht alle Attribute einer arithmetischen Variablen


explizit vereinbart werden, benutzt der Kompilierer vorgeschriebene Standardattribute
entsprechend folgenden Regeln:
1. Der Bezeichner erscheint in keiner DECLARE-Vereinbarung
a) Der Name beginnt mit I, J, K, L, Moder N
Standardattribute: FlXED BINARY REAL (15, 0)
b) Der Name beginnt nicht mit I, J, K, L, Moder N
Standardattribute: FLOAT DECIMAL REAL (6)
2. Der Bezeichner erscheint in einer DECLARE-Vereinbarung, jedoch
a) ohne Skalierungsattribut.
Standard attribut : FLOA T
b) ohne Basisattribut. Standardattribut: DECIMAL
c) ohne Modusattribut. Standardattribut: REAL
d) ohne Genauigkeitsattribut. Die verwendete Genauigkeit ergibt sich aus folgender Auf-
stellung:
142 4.3. Einführung in PLI I

Attribute Standard-
Genauigkeit

FIXED DECIMAL (5)


FIXED BINARY (15)
FLOAT DECIMAL (6)
FLOAT BINARY (21)

I n t ern e Dar s tell u n g. Die interne Darstellung arithmetischer Größen ist system-
abhängig und kann von der durch die Attribute festgelegten Form abweichen, wobei jedoch
stets die vorgeschriebene Genauigkeit gewährleistet sein muß.
Bei IBM ist die Zahlenspeicherung wie folgt festgelegt: Dezimale Festpunktzahlen werden in
gepackter Form, d. h. mit zwei DezimaIziffem je Byte und dem Vorzeichen in den hintersten
vier Bits, gespeichert. Duale Festpunktzahlen werden grundsätzlich als 32-bit-Zahlen verar-
beitet. Gleitpunktzahlen erscheinen intern stets als echte Sedezimalbrüche mit einem zwischen
- 64 und + 63 liegenden SedezimaIexponenten im ersten Byte. Die Mantisse ist je nach
geforderter Genauigkeit drei oder sieben Bytes lang.
A r i t h met i s c h e Aus d r ü c k e. Arithmetische Größen werden in arithmetischen
Ausdrücken berechnet. Solche Ausdrücke bestehen aus Operanden, Operatoren und Klam-
mem, im einfachsten Falle nur aus einem Operanden. Die arithmetischen Operatoren unter-
liegen zur Feststellung der Rangordnung der Einteilung
+ Vorzeichen
Vorzeichen } höchste Stufe
** Potenzierung
* Multiplikation }
mittlere Stufe
Division
+ Addition
} niedrigste Stufe.
Subtraktion
Bei Ausführung mehrerer Operationen hat die höhere Stufe stets Vorrang. Innerhalb der
höchsten Stufe erfolgt die Verarbeitung von rechts nach links, innerhalb jeder anderen Stufe
von links nach rechts. Durch geeignetes Setzen von Klammem kann man die Vorrangigkeit
im gewünschten Sinne beeinflussen.
A+ B*C bedeutet A+(B*C)
AlB * C bedeutet (AlB) * C
A**B*C bedeutet (A * * B) * C
A**B**C bedeutet A**(B**C)
-A **B bedeutet -(A * * B)
Die Aus f ü h run g s art der Pot e n z i e run g hängt von der Basis und vom
Exponenten ab:
Basis = 0 und Exponent ~ 0: Berechnung wird abgebrochen
Basis = 0 und Exponent> 0: Wert 0
Basis,* 0 und Exponent = 0: Wert I
Basis,* 0 und Exponent FlXED mit Skalenfaktor q ~ 0: Berechnung durch fortgesetzte
Multiplikation
4.3.2. Programmsteuerungsanweisungen 143

Basis =1= 0 und Exponent =1= 0 und nicht FlXED mit Skalenfaktor q ~ 0: Berechnung über die
Exponential- und Logarithmusfunktion, falls Basis> 0, Berechnung wird
abgebrochen, falls Basis< O.
Verknüpfung arithmetischer Größen mit unterschiedlichen
A t tri b u t e n. Arithmetische Größen, die durch Addition, Subtraktion, Multiplikation
oder Division zu verknüpfen sind, werden zuvor intern so umgewandelt, daß sie überein-
stimmende Attribute haben. Hierbei sind die Attribute FLOAT, BINARY und COMPLEX
maßgebend. Bei unterschiedlicher Genauigkeit wird die höhere gewählt.
Ausflihrliche Umwandlungstabellen findet man in den PL/I-Handbüchern. Man spart Speicher-
platz und Rechenzeit, wenn man die Verarbeitung gemischter Ausdrücke vermeidet.
Erg i b t a n w eis u n g. Die Anweisung
A= B + C;
ordnet der Variablen A den Wert zu, der sich durch Addition der unter Bund C stehenden
Werte ergibt. Allgemein lautet die Gestalt der Ergibtanweisung
variablenbezeichnung = ausdruck;
oder auch
marke: variablenbezeichnung = ausdruck;
wobei die entsprechenden Elemente der Sprache durch kleingeschriebene Wörter angedeutet
sind. Die Ergibtanweisung
ZAEHLUNG: N = N + 1;
hat den Namen ZAEHLUNG und dient der Erhöhung der Variablen N um 1. Eine Wert-
zuweisung fiir A und B zugleich leistet die Ergibtanweisung
A,B=C;
Es wäre verkehrt, daflir A = B = C; zu schreiben, da hierin das zweite Gleichheitszeichen als
logischer Operator aufgefaßt wird, so daß A den Wert 1 oder 0 erhält, je nachdem B gleich C
ist oder nicht. Falls die Zielvariable einer Ergibtanweisung andere Attribute besitzt als die
errechnete Größe des Ausdrucks, erfolgt bei der Wertzuweisung auch die Umwandlung.

4.3.2. Programmsteuerungsanweisungen. Durch Steuerungsanweisungen kann der lineare


Ablauf eines Programms gestoppt und woanders fortgesetzt werden.
GO TO - A n w eis u n g. Die Anweisung
GO Ta marke;
bewirkt die Fortsetzung des Programms bei dem hinter GO TO genannten Statement.
IF-Anweisungen
Beispie12. Tafel 4.41 enthält ein Programm zur Berechnung des Mittelwertes und der
Streuung einer Folge ganzzahliger dreistelliger Meßwerte. Die Folge gilt als beendet, sobald
die Zah1999 gelesen wird. Eine entsprechende Programmsteuerung erfolgt in der IF-Anwei-
sung. Falls zuvor gar keine Meßwerte zu verarbeiten waren, erfolgt eine Fehlermeldung und
die Programmbeendigung durch die RETURN-Anweisung.
Ein sei t i g e IF - A n w eis u n g. Die Anweisung
IF bedingung THEN anweisung;
bewirkt, falls die Bedingung erflillt ist, den Einschub der hinter THEN angegebenen einen
Anweisung (Bild 4.42). Die Anweisung
144 4.3. Einführung in PL/I

Tafel4.41 Mittelwert und Streuung von Meßdaten

STREU .. PROCEDURE OPTIONS (MAIN),.


/* MITTELWERT UND STREUUNG EINER MESSWERTFOLGE */
DECLARE (ZAEHLER FIXED (5), SUMME FIXED (7), QUADRAT FIXED (10))
INITIAL (0), X FIXED (3), (MITTELWERT, STREUUNG) FLOAT (4),.
SCHLEIFE .. GET LIST (X),.
IF X = 999 THEN GO TO RECHNUNG,.
PUT LIST (X),.
ZAEHLER = ZAEHLER + 1,.
SUMME = SUMME + X,.
QUADRAT = QUADRAT + X * X,.
IF ZAEHLER LE 9999 THEN GO TO SCHLEIFE,.
FEHLER. . PUT LIST ('FALSCHE EINGABE'),. RETURN,.
RECHNUNG .. IF ZAEHLER = 0 THEN GO TO FEHLER,.
MITTELWERT = SUMME/ZAEHLER,.
STREUUNG = QUADRAT/ZAEHLER - MITTELWERT * * 2,.
PUT LIST (MITTELWERT, STREUUNG),.
END STREU,.

Eingabe:

667 -155 -934 131 963 -363 755 128 707 144 825
255 167 -171 416 -156 -110
725 - 728 804 999

Ausgabe:

667 -155 -934 131 963


-363 755 128 707 144
825 255 167 -171 416
-156 -110 725 -728 804
2.035E + 02 2.705E + 05

IF A<OTHEN A=-A;
kann man verwenden, um die in A gespeicherte Zahl durch ihren Betrag zu ersetzen.
Z w eis e i ti g e IF - A n we i s u n g. Falls bei der Anweisung
IF bedingung THEN anweisung 1;
ELSE anweisung2;
die darin genannte Bedingung erflillt, ist, wird die hinter THEN genannte Anweisung aus-
geführt, die hinter ELSE stehende übergangen; falls die Bedingung nicht erfiillt ist, wird da-
gegen die erste Anweisung übergangen und die zweite ausgefiihrt (Bild 4.43). Die erwähnte
Anweisung A = B = C;läßt sich ersetzen durch

4.42 Einseitige IF-Anweisung 4.43 Zweiseitige IF-Anweisung


4.3.2. Programmsteuerungsanweisungen 145

IFB=CTHENA=l;
ELSE A= 0;
Man beachte, daß die eingeschobene Anweisung ein GO TO-Statement sein kann, so daß der
effektive Ablauf dadurch geändert wird.
S c h ach tel u n gen von IF - A n we i s u n gen. Sowohl die THEN- als auch die
ELSE-Klausel kann wiederum eine IF-Anweisung enthalten. Die wechselseitige Verwendung
ein- und zweiseitiger IF-Anweisungen erfordert besondere Sorgfalt. Im Programmausschnitt
IF ABS (XNEU - XALT) >= EPSILON * ABS (XNEU)
THEN IF ITERATIONSZAEHLER < 20THEN GO TO NEUE_ITERATION;
ELSE GO TO GENAUIGKEIT_ERREICHT;
ABBRUCH: PUT LIST ('KEINE KONVERGENZ');
soll über die Fortsetzung eines Iterationsverfahrens entschieden werden. Falls die vor-
geschriebene relative Genauigkeit erreicht ist, soll das Verfahren erfolgreich beendet werden
(Statement GENAUIGKEIT_ERREICHT). Falls sie nicht erreicht ist, soll ein neuer
Iterationsschritt (Statement NEUE_ITERATION) folgen, solange noch nicht 20 solcher
Schritte durchlaufen worden sind. Sonst soll das Verfahren abgebrochen werden

4.44 Falsche Schachtelung von IF-Anweisungen

(Statement ABBRUCH). Obwohl die ELSE-Klausel genau unter der zugehörigen THEN-
Klausel steht, läuft das Programm falsch ab (Bild 4.44). Dieser ungewollte Programmablauf
entsteht dadurch, daß eine ELSE-Klausel stets der nächstgelegenen, bisher ELSE-freien
IF-Anweisung zugeordnet wird. Im obigen Beispiel vermeidet man diese ungewollte Zuord-
nung durch Einfügung der ELSE-Klausel mit einer leeren Anweisung.
IF ABS (XNEU - XAL Tl> = EPSI LON * ABS (XNEU)
THEN IF ITERATIONSZAEHLER < 20THEN
GO TO NEUE_ITERATION;
ELSE;
ELSE GO TO GENAUIGKEIT_ERREICH1;
ABBRUCH: PUT LIST ('KEINE KONVERGENZ');

OO-Gruppe
Beispiel 3. Tafel 4.45 enthält ein Programm zur Auflösung der allgemeinen quadratischen
Gleichung ax2 + bx + c = 0 mit reellen KoeffIZienten a, b, c. Die im Falle a #= 0 vorhandenen
beiden reellen oder komplexen Lösungen werden, zerlegt in Real- und Imaginärteil, als Zahlen-
paare gedruckt. Dabei bedeutet die in der PUT LIST-Anweisung vermerkte Option SKIP,
daß mit dem Ausdrucken am Anfang einer neuen Zeile begonnen wird. In diesem Programm-
beispiel wird die Ausführung mehrerer Anweisungen innerhalb einer Klausel verlangt. Dies
erreicht man durch Verwendung einer DO - G r u p p e
146 4.3. Einführung in PL/I

Tafel 4.45 Auflösung der allgemeinen quadratischen Gleichung

AQUAGL.. PROCEDURE OPTIONS (MAIN),.


1* ALLGEMEINE QUADRATISCHE GLEICHUNG *1
DECLARE (A, B, C, D) FLOAT,.
NEUEGL. . GET LIST (A),. IF A = 999 THEN RETURN,.
GET LIST (B, Cl,. PUT SKIP (3) LIST (A, B, Cl,.
I F A = 0 THEN I F B = 0 THEN I F C = 0
THEN PUT SKIP LIST ('LOESUNG BELIEBIG'),.
ELSE PUT SKIP LIST ('KEINE LOESUNG'),.
ELSE PUT SKIP LIST (- C/B),.
ELSE DO,.
D = B * B - 4 * A * C,. X2 = - B/(A + A),.
IF D LTOTHEN DO,.
Xl = X2,.
Yl = SQRT (- D)/(A + A),. Y2 = - Yl,.
END,.
ELSE DO,.
Xl = X2 + SQRT(D)/(A + A),. Yl = 0,.
X2 = X2 + X2 - Xl,. Y2 = 0,.
END,.
PUT SKIP LIST (Xl: + J *', Yl),.
PUT SKIP LIST (X2: + J *', Y2),.
END,. GO TO NEUEGL,.
END AQUAGL,.

Eingabe:

- 0.384 0.219 - 0.775 0.5 -1.5 1.125


o 2 6, ,0,8, ,,0 999
Ausgabe:

- 3.84000E - 01 2.19000E - 01 - 7.75000E - 01


2.85156E - 01 +J * - 1.39173E + 00
2.85156E - 01 +J * 1.39173E + 00

5.00000E - 01 - 1.50000E + 00 1.12500E + 00


1.50000E + 00 +J * O.OOOOOE + 00
1.50000E + 00 +J * O.OOOOOE + 00
O.OOOOOE + 00 2.00000E + 00 6.00000E + 00
- 3.00000E + 00
O.OOOOOE + 00 O.OOOOOE + 00 8.00000E + 00
KEINE LOESUNG

O.OOOOOE + 00 O.OOOOOE + 00 O.OOOOOE + 00


LOESUNG BELIEBIG

00;
anweisungen;
END;
die alle darin enthaltenen Anweisungen formal zu einem einzigen Statement klammert.
4.3.2. Programmsteuerungsanweisungen 147

00 - A n w eis u n g. Wenn eine Reihe von Anweisungen wiederholt ausgeführt werden soll,
so verwendet man dazu zweckmäßig eine Da-Anweisung. Man unterscheidet d r e i Typ e n
der DO-Anweisung:
DO-Gruppe, bedingte Da-Anweisung, Da-Anweisung mit Laufvariablen.
00 - G r u p pe. Die DO-Gruppe beginnt mit 00; und endet mit END; und faßt die da-
zwischen stehenden Anweisungen so zusammen, daß sie wie eine Anweisung wirken. Damit
können z. B. auch in der THEN- und ELSE-Klausel Anweisungsgruppen untergebracht werden.
Die DO-Gruppe arbeitet nicht iterativ.
B e d i n g t e 00 - A n w eis u n g. Eine bedingt wiederholte Ausflihrung der in der 00-
Anweisung befmdlichen Anweisungen ermöglicht die bedingte Da-Anweisung
00 WHILE (bedingung);
anweisungen;
END;
Die Anweisungen zwischen 00 und END werden immer wieder ausgefuhrt, solange die ange-
gebene Bedingung erfüllt ist. Sobald diese nicht mehr gültig ist, wird das Programm mit der
Anweisung hinter END; fortgesetzt. Man kann diese Anweisung flir Iterationsverfahren
verwenden, z. B. flir die iterative Quadratwurzelberechnung aus a mit dem Newtonschen
Verfahren
a
x neu = (x alt + -)/2
xalt
Dies geschieht in dem Programmausschnitt
XALT = 0;
XNEU= A;
00 WHILE (ABS (XNEU - XALT) >= 0.000005 * ABS (XNEU));
XALT = XNEU;
XNEU = (XAL T + A/XAL T)/2;
END;
Die bedingte Da-Anweisung sollte man nur dann einsetzen, wenn sichergestellt ist, daß
wirklich keine Endlos-Schleife entstehen kann.
00 - A n w eis u n g mit Lau f v a r i abi e n. Dieser dritte Typ der DO-Anweisung
ist der umfassendste, schließt jedoch die beiden anderen Typen nicht ein. Unter der all-
gemein üblichen Vereinbarung, daß Elemente, die in eckigen Klammern stehen, wahlweise
auftreten können, solche in geschweiften Klammern dagegen alternativ auftreten müssen,
läßt sich dieser Typ so beschreiben:
00 variable = spezifikation1 [, spezifikation2] usw. [, spezifIkation n];
anweisungen;
END;
Hierbei bedeutet "spezifikation"
ausdruck! [{ [Ta ausdruck2] [BY ausdruck3] }] [WHILE (bedingung)]
[BY ausdruck4] [Ta ausdruckS]
Die Da-Anweisung
00 variable = ausdruck1 Ta ausdruck2 BYausdruck3 WHILE (bedingung);
anweisungen;
END;
148 4.3. Einführung in PL/I

entspricht dem in Bild 4.46 angegebenen Programmablauf.

Bei m Feh 1 e n ein z ein e r Eie m e n t e der Spezifika-


tion erfolgen Standardreaktionen:
1. TO ausdruck2 fehle, BY ausdruck3 sei vorhanden.
Die Abfragen I und 11 entfallen.
2. TO ausdruck2 sei vorhanden, BY ausdruck3 fehle.
Es wird ausdruck3 = 1 gesetzt.
3. TO ausdruck2 fehle, BY ausdruck3 fehle, WHlLE (bedingung)
sei vorhanden. Die Abfragen I und 11 und die Erhöhung V entfallen.
4. TO ausdruck2 fehle, BY ausdruck3 fehle, WHILE (bedingung)
fehle. Die Abfragen I, II und III und die Erhöhung V entfallen. Die
Anweisungsfolge IV wird nur einmal durchlaufen.
5. WHILE (bedingung) fehle.
Die Abfrage V entfällt.

4.46 DD-Anweisung mit einer Laufvariablen und einer WHILE-Klausel

Das B e t r e t e n von DO - S tat e m e n t s ist mit Ausnahme der DO-Gruppe nur


über die DO-Zeile erlaubt.
Die DO-Anweisung mit einer Laufvariablen
DO ZAHL = 4, 6, - 3 BY - 2 TO - 8, 1 BY 1 WHILE (ZAHL< 5),
13,18,20 TO 27 WHILE (ZAHL/2 > = 11),30;
PUT LIST (ZAHL);
END;
bewirkt das Ausdrucken der Zahlenfolge 4, 6, - 3, - 5, - 7, 1,2,3,4,13,18,30.
Ver s c h ach tel n von DO - A n w eis u n gen. Mehrere DO-Anweisungen können
verschachtelt werden, wie in nachstehendem Programmausschnitt zur Berechnung aller Prim-
zahlen unter 1000.
00 N = 2, 3 BY 2 Ta 1000;
00 1=3BY2WHILE (I * I<=N);
J = NIl;
IF J * 1= N THEN GO Ta END_N;
END;
PUT LIST (N);
END~: END;

DO-Schleifen dürfen sich nicht überlappen. Wenn verschachtelte DO-Schleifen an derselben


Stelle enden, genügt es, ein e Anweisung ,,END marke;" zu geben, in der die Marke der
zur äußersten Schleife gehörigen DO-Zeile genannt wird. Sämtliche davorgehörigen fehlenden
END-Anweisungen werden vom Kompilierer implizit gesetzt.
Beispiel 4. Tafel 4.47 enthält ein Programm zur Berechnung eines Schubkurbelgetriebes. Aus
den Schubstangenlängen rund Qund der Umdrehungszahl n der Kurbel werden (mit A = r/Q)
4.3.2. Programmsteuerungsanweisungen 149

Tafel4.47 Bewegungsablauf beim Schubkurbelgetriebe

KURBEL. . PROCEDURE OPTIONS (MAIN) •.


1* BERECHNUNG EINES SCHUBKURBELGETRIEBES *1
DECLARE R FIXED (4. 1). L FIXED (5. 1). N FIXED (5. 1).
PHIGRAD FIXED (5.2). (PHI. LAMBDA. OMEGA. C. S. V. A) FLOAT.
PR PICTURE ·····9.V9·. (PL. PN) PICTURE ······9.V9·.
(J. ANZAHL) FIXED (6) •.
GET LIST (R. L. N. ANZAHL) •.
PR = R•. PL = L •. PN = N •.
PUT LIST ('SCHUBKURBELGETRIEBE') •. PUT SKIP (2) •.
PUT LIST ('R =' CAT PR CAT' CM·.·L =' CAT PL CAT' CM·.
'N = • CAT PN CAT • IMIN') •. PUT SKIP (3) •.
IF R LE OOR L LE 2 * R OR N LE 0 OR ANZAHL LE 0
THEN 00 •. PUT LIST (·EINGABEFEHLER·) •. RETURN •. END •.
LAMBDA = R/L •. OMEGA = N * 0.10471976 •.
PUT LIST (' PHI (GR)': S (CM) .: V (CM/S) .: A (CM/S * * 2)') •.
PUT SKIP•.
00 J = 0 TO ANZAHL •.
PHI = 6.28319 * J/ANZAHL •. PHIGRAD = 360 * J/ANZAHL •.
C = SORT (1 - LAMBDA * * 2 * SIN (PHI) * * 2) •.
S = R * (1 + (1 - CI/LAMBDA - COS (PHI)) •.
V = OMEGA * R * SIN (PHI) * (1 + LAMBDA * COS (PHII/C) •.
A = OMEGA * * 2 * R * (COS (PHI) + LAMBDA * (((LAMBDA * SIN (PHI))
* * 2-2) * SIN (PHI) * * 2+ 11/C * * 3) •.
PUT SKIP LIST (PHIGRAD. S. v. AI..
END •.
END KURBEL •.

Eingabe:

50375 100 9

Ausgabe:

SCHUBKURBELGETRIEBE
R = 50.0 CM L = 375.0 CM N = 100.0/MIN

PHI (GR) S(CM) V (CM/S) A (CM/S * * 2)


0.00 O.OOOOOE + 00 O.OOOooE + 00 6.21419E + 03
40.00 1.30776E + 01 3.71066E + 02 4.33091 E + 03
80.00 4.45645E + 01 5.27687E + 02 2.59527E + 02
120.00 7.75084E + 01 4.23016E + 02 - 3.10707E + 03
160.00 9.73747E + 01 1.56620E + 02 - 4.59046E + 03
200.00 9.73747E + 01 -1.56621E + 02 - 4.59046E + 03
240.00 7.75083E + 01 -4.23017E + 02 - 3.10706E + 03
280.00 4.45643E + 01 - 5.27687E + 02 2.59548E + 02
320.00 1.30774E + 01 - 3.71064E + 02 4.33093E + 03
360.00 O.OOOooE + 00 2.65035E - 03 6.21419E + 03

Weg s, Geschwindigkeit v und Beschleunigung a des Kolbens berechnet (Bild 4.48)


1
s = r· [1 + -. (1 - yl- A2sin2IP)- cos 11']
A
150 4.3. Einführung in PLII

4.48 Schubkurbelgetriebe

Die Rechnung beginnt stets mit <P = O. Die Anzahl der weiteren Winkel bis einschließlich
3600 liest das Programm aus der Datenkarte, auf der demnach enthalten sein müssen: r/cm,
Q/cm, n . min, Anzahl der gewünschten Winkel. Eine Erklärung der Ein- und Ausgabe-
anweisungen findet man im Abschnitt 4.3.4.
Die Variablen PR, PL, PN werden durch das Attribut PICTURE als numerische Zeichenketten
vereinbart, weil im PL/I-Subset gewöhnliche arithmetische Daten nicht gekettet werden
können.
ON - B e d i n gun g. Beim Programmlauf kann, z. B. infolge extremer Eingabedaten oder
eines logischen Fehlers im Quellprogramm, eine Situation eintreten, die als ungewöhnlich
angesehen werden muß, etwa indem arithmetisch Oberlauf entstanden oder durch Null zu
dividieren war. Vielleicht sollte das Programm auch Daten einlesen, obwohl schon sämtliche
Daten verarbeitet worden waren. Diese und eine Anzahl weiterer Situationen werden vom
Rechner dauernd überprüft, sofern die entsprechenden Bedingungen handlungsfähig gemacht
worden waren. Dazu werden am Anfang eines Programms automatisch die wichtigsten Be-
dingungen aktiviert, etwa die OVERFLOW-Bedingung zur Erkennung von Gleitpunkt-Ober-
lauf, die ZERODIVIDE-Bedingung fiir Divisionen durch Null oder die ENDFlLE-Bedingung,
die darüber wacht, ob noch geniigend Eingabedaten vorhanden sind. Tritt eine ungewöhnliche
Situation im Sinne einer solchen Bedingung ein, so veranlaßt diese die entsprechende
Bedingungsmaßnahme. Wenn nichts anderes festgelegt ist, tritt die Standardmaßnahme in
Kraft, die meistens darin besteht, einen Fehlertext zu schreiben und das Programm zu beenden.
Der Programmierer kann eine davon abweichende Maßnahme in einer entsprechenden ON-
Anweisung
SYSTEM
ON bedingungsname { };
ON-einheit
anordnen. ON-Einheit ist dabei eine einzelne Anweisung (außer IF, DO oder ON) oder ein
BEGIN-Block, d. h. ein Block von Anweisungen, der mit BEGIN; anfängt und mit END;
endet. SYSTEM bedeutet, daß die Standardmaßnahme ergriffen werden soll. Die ON-An-
weisung steht meistens am Anfang des Programms und kommt nur zum Zuge, wenn die
Bedingung aktiv ist und eine entsprechende Situation eingetreten ist.
ON OVERFLOW GO TO UEBERLAUF _MELDUNG;
bewirkt, falls während der weiteren Rechnung Gleitpunkt-Oberlauf eintritt, von dort einen
Sprung zur Anweisung mit der Marke UEBERLAUF _MELDUNG.
ON ZERODIVIDE K = K + 1;
veranlaßt in dem Moment, da eine Division durch Null eintritt, den Zählvorgang. Danach
läuft das Programm hinter der Division weiter.
ON FIXEDOVERFLOW;
hat zur Folge, daß fiir den Fall eines Festpunktüberlaufs (Ergebnis größer als im Rechner
4.3.3. Verarbeitung von Kettendaten 151

speicherbar) die Leeranweisung ausgeftihrt wird, bevor das Programm weitergeht. Das bedeutet
aber, daß ein derartiger Überlauf ignoriert 'wird.
Man kann Bedingungen für einzelne Anweisungen oder Anweisungsblöcke aktivieren bzw.
aussetzen, indem man B e d i n gun g s prä fix e setzt.
So bedeutet etwa
(SIZE, NOFIXEDOVERFLOW): A = B + C;
daß während der Ausftihrung dieser Anweisung die Bedingung FIXEDOVERFLOW ausge-
schaltet wird, daflir aber die Bedingung SIZE, die normalerweise inaktiv ist, aktiviert werden
soll. SIZE registriert alle Fälle, in denen bei der Zuweisung einer Variablen links signifikante
Ziffern verlorengehen. Wenn im obigen Beispiel nicht die SIZE-Standardmaßnahme verwendet
werden soll, schreibt man z. B.
(SIZE, NOFIXEDOVERFLOW): BEGIN;
ON SIZE GO TO ZAH L_ZU_G ROSS;
A = B + C;
END;

4.3.3. Verarbeitung von Kettendaten


K e t t end a t e n. Eine Folge von Zeichen, die logisch als ein Datenelement anzusehen sind,
nennt man eine Z e ich e n k e t t e , eine entsprechende Folge von Binärziffern heißt eine
Bit k e t te . Derartige Ketten treten explizit besonders bei der Textverarbeitung und bei
Verknüpfungen logischer Art auf. Implizit werden in jedem Programm bei der Ein- und Ausgabe
und bei der Auswertung von Bedingungen derartige Ketten aufgebaut. Eine Zeichenkette kann
jedes der zugelassenen Zeichen enthalten. Jedes Zeichen wird bei IBM im EBCDI-Code in
einem Byte gespeichert. Bei Bitketten werden jeweils 8 Bits in einem Byte linksbÜfldig mit
Nullenflillung im letzten Byte gespeichert. Bei IBM/360 können Ketten 0 bis 32767 Elemente
enthalten.
K e t t e n k 0 n s t a n t e n. Wie bei arithmetischen Größen, kann man auch bei Kettendaten
Konstanten verwenden. Um beim Lesen des Programms Verwechslungen mit arithmetischen
Konstanten auszuschließen und um die in der Konstanten vorkommenden Leerzeichen genau
abzugrenzen, muß jede Kettenkonstante in Apostrophs eingeschlossen werden. Folgt danach
der Buchstabe B, so gilt die Konstante als Bitkettenkonstante.
Zeichenkettenkonstante : 'zeichenkette '
Bitkettenkonstante : 'bitkette'B
In der angegebenen Zeichenkette können alle Zeichen des verwendeten Zeichensatzes vor-
kommen. Zur Vermeidung von Verwechslungen innerer Apostrophs mit dem schließenden
Apostroph hat man festgelegt, daß das Apostroph als Element einer Zeichenkette durch zwei
unmittelbar aufeinanderfolgende Apostrophs anzudeuten ist. Der Kompilierer erkennt daraus
das eine Apostroph. Vor das einleitende Apostroph kann man eingeklammert einen Wieder-
holungsfaktor schreiben, so daß die gespeicherte Kette aus einer entsprechenden Anzahl von
Wiederholungen der angegebenen Kette besteht. Beispiele für Zeichenkettenkonstanten sind

'DASLJISTuEINEuZEICHENKETTEuDERuLAENGEu39'
'SHAKESPEARE"SLJ""HAMLET"'"
(gespeichert wird SHAKESPEARE'SLJ"HAMLET")
(2)'MA' (gespeichert wird MAMA)
152 4.3. Einführung in PLII

'10111001' (Zeichenkette aus 8 Bytes) .


, , (Nullkette, nicht im Subset zu verwenden)
{lO)'u' (Zeichenkette aus 10 Leerzeichen)
Beispiele für Bitkettenkonstanten:
'I'B
'10 111 00 I'B (Bitkette aus 8 Bits, gespeichert in einem Byte)
(6)'1011'B (gespeichert wird 101110111011101110111011)
K e t t e n v a r i abi e n. Eine arithmetische Variable kann man entweder explizit in einer
DECLARE-Anweisung oder implizit entsprechend dem ersten Buchstaben ihres Bezeichners
vereinbaren. Kettenvariablen müssen grundsätzlich in einem DECLARE-Statement definiert
werden. Als Kettenattribut verwendet man CHARACTER für Zeichenketten und BIT für
Bitketten. Jeweils dahinter wird die Kettenlänge eingeklammert angegeben. Ein zusätzliches
Attribut VARYING zeigt an, daß die Kette während des Programmablaufs eine bis zur
angegebenen Zahl veränderliche Länge haben kann.
Bei s pie I rur die Vereinbarung von Kettenvariablen:
DECLARE Y CHARACTER (9), MERKER BIT (1) INITIAL ('O'B),
(NAME, ADRESSE) CHARACTER (30) VARYlNG,
SCHALTER BIT (15) VARYING;
Kettenvariablen werden stets in ihrer aktuellen Länge verarbeitet.
Erg i b t a n w eis u n g für K e t t e n. Ergibtanweisungen für Ketten werden links-
bündig al.lsgeführt. Wenn das Zielfeld kürzer als das Quellfeld ist, werden rechts die restlichen
Elemente des Quellfeldes abgeschnitten. Wenn das Zielfeld größer als das Quellfeld ist, wird
rechts aufgefüllt - bei Zeichenketten mit Leerzeichen, bei Bitketten mit Nullen.
Eine Ergibtanweisung, die einer Kettenvariablen einen Wert von anderem Typ zuweist,
erzwingt eine vorherige Umwandlung nach denselben Regeln, die auch rur die Konversion
bei Datenverknüpfungen gelten.
Ver k n ü p fun gen von K e t t e n. Ketten, die sich in arithmetische Größen um-
wandeln lassen, können arithmetisch verknüpft werden. Viel wichtiger sind Verknüpfungen
durch eigens rur Ketten geschaffene Operatoren
Logische Operatoren: .." &, I
Verkettung: 11
Vergleichsoperatoren: <, < =,...,<, =,...,=, >, >=,-,>
Log i s ehe 0 per a tor e n. Die logischen Operatoren -, (Negation), & (Konjunktion),
I (Disjunktion) verknüpfen letztlich Bitketten zu Bitketten bitweise gemäß folgender Ver-
knüpfungstabelle:

A B -,A -,B A&B AlB


0 0 1 1 0 0
0 1 1 0 0 1
1 0 0 1 0 1
1 1 0 0 1 1

Bei unterschiedlicher Länge der Operanden wird der kürzere rechtsseitig mit Nullen verlängert.
Bei zusammengesetzten Verknüpfungen hat die Negation Vorrang vor der Konjunktion, die
4.3.3. Verarbeitung von Kettendaten 153

Konjunktion Vorrang vor der Disjunktion. Ein Operand, der keine Bitkette ist, wird unmittelbar
vor Ausftihrung der logischen Operation intern in eine Bitkette umgewandelt. Hierbei werden
die auch sonst gültigen Regeln für die Umwandlung in eine Bitkette verwendet:
Ar i t h met i s c h e G r ö ß e --> Bit k e t t e . Die Umwandlung betrifft bei Festpunkt-
zahlen den ganzzahligen Bestandteil, bei Gleitpunktzahlen die Mantisse. Das Vorzeichen bleibt
unberücksichtigt. Unter Verwendung der Funktion CEIL, die in PL/I übrigens ebenso eingebaut
ist wie etwa ABS, SIN und SQRT, und deren Funktionswert die kleinste ganze Zahl größer
oder gleich dem Funktionsargument ist, kann man die Umrechnung so beschreiben:

Quellenattribute Bitkettenlänge

DECIMAL FIXED (p, q) CEI L (3.32' (p - q))


mit p ~ q
DECIMAL FIXED (p, q) 0
mit p < q
DECIMAL FLOAT (p) CEI L (3.32 . p)
BINARY FIXED (p, q) p-q
mit p ~ q
BINARY FIXED (p, q) 0
mit p <q
BINARY FLOAT (p) P

Beispiele:

Quellenattribute Quellengröße Bitkette

DECIMAL FIXED (2, 0) -84 1010100


DECIMAL FLOAT (3) 6.50 = 0.0110100 2 . 16 1 0110100000
BINARY FIXED (8, 6) 1.101100 01
BINARY FLOAT (8) 0.00010001' 163 00010001

Z e ich e n k e t t e --> Bit k e t t e. Nur die Zeichen 0 und 1 werden umgewandelt und
ergeben die Bits 0 und 1. Alle anderen Zeichen setzen die CONVERSION-Bedingung.
Ver k e t tun g . Durch die Verkettung 11 (im Subset durch das Schlüsselwort CAT)
werden zwei Ketten zu einer Kette gekoppelt. Wenn z. B. A die Kette 'FLUEGEL' und B die
Kette 'MUTTER' bezeichnet, ergibt A 11 B die Kette 'FLUEGELMUTTER'. Falls beide
Operanden Bitketten sind, ist auch das Ergebnis eine Bitkette. In allen anderen Fällen ist das
Resultat eine Zeichenkette, wobei Operanden, die noch keine Zeichenkette sind, intern
entsprechend umgewandelt werden. Diese Konversion in eine Zeichenkette ist in den vor-
herigen Programmbeispielen bei der Ausgabe bereits verwendet worden, da mit PUT LIST
Z e ich e n k e t t e n ausgedruckt, andere Größen demnach vorher umgewandelt werden.
Bit k e t t e --> Z e ich e n k e t t e. Die Bits 0 und 1 werden umgewandelt in die
Zeichen 0 und 1.
D E C I MAL F I X E D (p, q) mit p ~ q ~ 0 --> Z e ich e n k e t t e. Die Zahl wird
in eine Zeichenkette der Länge p + 3 umgewandelt. Führende Nullen, außer der Null am Ende
des ganzzahligen Bestandteils, werden durch Leerzeichen ersetzt. Falls die Zahl negativ ist,
154 4.3. Einführung in PL/I

wird ein Minuszeichen gleitend vor die erste Ziffer gesetzt. Im Falle q > 0 erscheint ein
Dezimalpunkt zwischen dem ganzzahligen und dem gebrochenen Bestandteil.
Beispiele:

Quellenattribu te Quellengröße Zeichenkette

DECIMAL FIXED (5) 2497 uwuu2497


DECIMAL FIXED (4,1) - 121.7 u- 121.7
DECIMAL FIXED (3, 3) - .567 -0.567

D E C I MAL F I X E D (p, q) mit P < q oder q < 0 -+ Z e ich e n k e t t e. Die


Zahl wird in eine Zeichenkette der Länge p + 3 + k umgewandelt. Hierbei bedeutet k die
Anzahl der Ziffern der Zahl I q I. Der Bedeutung von q gemäß erscheint die Zahl als p-stellige
ganze Zahl - mit Unterdrückung der führenden Nullen und zusätzlich mit gleitendem Minus-
bzw. Leerzeichen am Anfang der Zahl- mit angefügtem Skalenfaktor lO-q, der in der Form
F - q vermerkt wird.
Beispiele:
---------------------------------------------
Quellenattribute Quellengröße Zeichenkette

DECIMAL FIXED (4, 5) 0.01274 u1274F - 5


DECIMAL FIXED (3, 6) - 0.000002 ULJ- 2F - 6
DECIMAL FIXED (5,-2) 379000 LJu3790F + 2

DECIMAL FLOAT (P) -+ Zeichenkette. DieZeichenkettehatdieLänge


p + 6, denn außer den p Mantissenziffern enthält die Kette das Vorzeichen der Mantisse
(Leerzeichen bei positiven, Minuszeichen bei negativen Zahlen), den Dezimalpunkt, E zu
Beginn des Exponententeils, das Exponentenvorzeichen und zwei Exponentenstellen. Die
erste gültige Mantissenstelle wird vor den Dezimalpunkt gesetzt.
Beispiele:

Quellenattribute Quellengröße Zeichenkette

DECIMAL FLOAT (6) 0.173500' 10 12 u1,73500E + 11


DECIMAL FLOAT (5) - 0.16632' 10- 2 - 1.6632E - 03

Bin ä r e a r i t h met i s c h e G r ö ß e -+ Z e ich e n k e t t e. Intern erfolgt zunächst


eine Umwandlung in eine dezimale arithmetische Größe, die dann gemäß den eben beschrie-
benen Regeln konvertiert wird. Für die Umwandlung in die Dezimaldarstellung gelten
folgende Vorschriften:

Quellenattribute Zwischenattribute

BINARY FIXED (p, q) mit q:?, 0 DECIMAL FIXED (1 + CEIL (p/3.32), CEIL (q/3.32»
BINARY FIXED (p, q) mit q < 0 DECIMAL FIXED (1 + CEIL (p/3.32), 1 -
CEIL (ABS (q)/3.32»
BINARY FLOAT (p) DECIMAL FLOAT (CEIL (p/3.32»
4.3.3. Verarbeitung von Kettendaten 155

Beispiele:
----------------------------------------------
Quellenattribute Quellengröße

BINARY FIXED (3, 3) 0.011 2


BINARY FIXED (15) 10000000000002
BINARY FIXED (I, 8) 1.2- 8
BINARY FIXED (3, - 4) 1102 • 24
BINARY FLOAT (8) 0.00010001 . 16 3

Zwischena ttribu te Zwischengröße Zeichenkette

DECIMAL FIXED (2,1) 0.3 uuO.3


DECIMAL FIXED (6) 4096 ULlLlLlLl4096
DECIMAL FIXED (2, 3) 3· 10- 3 uu3F - 3
DECIMAL FIXED (2, - 1) 9· 10 1 uu9F + 1
DECIMAL FLOAT (3) 0.272 . 10 3 l.J2.72E + 02

Ver g lei c h s 0 per a tor e n. Die Vergleichsoperatoren


<, < =, ....,<, =, ""'=, >, > =,"'" >
verknüpfen die beiden Operanden zu einer Bitkette der Länge 1. Das Ergebnis ist '1 'B, wenn der
Vergleich wahr ist, sonst 'O'B. Abhängig von den Attributen der Operanden unterscheidet man
drei Vergleichstypen:
1. Algebraischer Vergleich
2. Zeichenkettenvergleich
3. Bitkettenvergleich.
Diese Reihenfolge entspricht der Typenpriorität. Bei jedem Vergleich wird diejenige Vergleichs-
art gewählt, die zu dem Operanden mit der höheren Priorität gehört. Der andere Operand wird
gegebenenfalls umgewandelt.

Al g e b r ais c her Ver g 1ei c h. Beide Operanden werden auf einheitliche Form
gebracht. Hierbei dominiert bei unterschiedlicher Skalierung FLOAT, bei unterschiedlicher
Basis BINARY. Bei unterschiedlicher Genauigkeit wird die höhere gewählt. Der Vergleich
erfolgt nach den arithmetischen Regeln. Beim Modus COMPLEX dürfen nur die Vergleichs-
operatoren = und -, = verwendet werden.
Beispiele:
-3>-2 ergibt 'O'B
3....,<3 ergibt TB
5=-5 ergibt 'O'B
Z e ich e n k e t t e n ver g lei c h. Die beiden Zeichenketten werden byteweise von links
nach rechts verglichen. Die kürzere der beiden Ketten wird rechts durch Leerzeichen ver-
längert gedacht. Die Wertigkeit eines Bytes ergibt sich bei IBM aus seiner Position im EBCDI-
Code.

Bit k e t t e n ver g lei c h. Die beiden Bitketten werden bitweise von links nach rechts
verglichen. Die kürzere der beiden Ketten wird rechts durch Null verlängert gedacht. Bit 1 ist
größer als Bit O.
156 4.3. Einführung in PLII

Bei s pie I : Der Ausdruck (A < = B) > (C -,= D) ergibt 'O'B. wenn A größer als B ist und
wenn A nicht größer als B und zugleich C ungleich D ist. Man erhält 'I'B. wenn A nicht größer
als Bund C gleich D ist.
R a n g f 0 I g e der 0 per a tor e n. Arithmetische und logische Operatoren kann man
beliebig gemischt in Ausdrucken verwenden. Die Abarbeitung innerhalb eines Ausdrucks
erfolgt entsprechend der R a n g f 0 I g e der 0 per a tor e n :
Höchste Stufe: Potenzierung ....... Vorzeichen +, Vorzeichen -. Negation..,
2. Stufe: Multiplikation .... Division I
3. Stufe: Addition +. Subtraktion-
4. Stufe: Verkettung 11
5. Stufe: Vergleiche <. < =.-,<. =,-,=. >. >=.-,>
6. Stufe: Konjunktion &
Niedrigste Stufe: Disjunktion I
Innerhalb der höchsten Stufe erfolgt die Verarbeitung von rechts nach links. bei allen anderen
Stufen von links nach rechts, sofern nicht durch das Einfligen von Klammern eine andere
Reihenfolge erzwungen wird.
Beispiel 1. Der Ausdruck
-A**B+C=5&0<EIF/G<H
wird ebenso verarbeitet wie
((((- (A * * B)) + C) = 5) & (0< E)) I ((F/G) < H)
Man erhält 'I'B, wenn - (A ...... B) + C gleich 5 und gleichzeitig D < E ist. oder wenn F IG
kleiner H ist.
2. Innerhalb eines Programms sei zu prüfen. ob ein Dreieck mit den Seiten A. B. C gleich-
schenklig oder rechtwinklig ist oder keines von beiden. Im ersten Fall sei das Programm bei der
Anweisung mit der Marke SPEZIAL. sonst bei NORMAL fortzusetzen. Die Prüfanweisung
lautet
IF A = B I B = C I C = AI C * C = A * A + B * B IA * A
=B*B+C*cIB*B=C*C+A*A
THEN GO TO SPEZIAL; ELSE GO TO NORMAL;
Man beachte. daß das Zeichen = je nach seiner Stellung entweder ein Zuweisungszeichen oder
ein Vergleichsoperator ist. Im anfänglich erwähnten Anweisungsbeispiel A = B = C; hat das
erste Gleichheitszeichen die Bedeutung eines Ergibtzeichens. Nach A wird das Resultat von
B = C gebracht. so daß dieses Gleichheitszeichen ein Vergleichsoperator ist. Der Größe A wird
in dieser Anweisung demnach entweder 'O'B oder 'I'B zugewiesen.

4.3.4. Reihenweise Ein- und Ausgabe. In PLII verwendet man entweder die Ein- und Ausgabe
mit s atz w eis e r oder diejenige mit r e i h e n w eis e r übertragung. Bei der s atz -
w eis e n Übe r t rag u n g besteht die Datenmenge aus einer Anzahl logischer Sätze. Jeder
Satz enthält eine oder mehrere Daten. Mit einer Anweisung wird jeweils ein Satz ohne Um-
wandlung der Daten übertragen. Satzweise übertragung ist folglich besonders fiir die Daten-
übertragung auf externe Zwischenspeicher geschaffen. ebenso fiir Aufgaben. bei denen der
überwiegende Teil der Eingabedaten unverändert auszugeben ist.
Mit der r e i h e n w eis e n Ein - und Aus gab e ist die Umwandlung der Daten von der
externen Zeichenform in die interne Darstellungsform verbunden. Die externen Daten werden
4.3.4. Reihenweise Ein- und Ausgabe 157

als eine k 0 n tin u i e r 1 ich e Z e ich e n f 0 I g e angesehen. Eine möglicherweise vor-


handene Einteilung in logische oder physische Sätze wird nur auf ausdrückliche Anforderung
hin nicht ignoriert. Wenn sich die Eingabedaten auf Lochkarten befmden, stellt das Ende einer
Karte nicht notwendig die Grenze zwischen zwei Daten dar; ausgabeseitig kann man das
Drucken eines Wertes über das Ende einer Zeile hinweg in die nächste Zeile fortsetzen. PL/I
bietet jedoch auch Möglichkeiten, diese natürlichen Grenzen beachten zu lassen. Die reihen-
weise übertragung erfolgt wertweise, so daß die Anweisungen GET und PUT eine Liste der zu
übertragenden Daten enthalten müssen. Intern wird dabei ein Zeiger mitgefUhrt, der auf das
nächste zu übertragende Zeichen weist. Die Eingabe-Anweisung hat die Form
GET [FILE (dateiname)] [COPY] [SKIP [(ausdruck)]] datenspeziftkation;
für die Ausgabe schreibt man
PAGE LINE (ausdruckl)
PUT [FILE (dateiname)] [{ SKIP [(ausdruck2)] }] [datenspeziftkation];
UNE (ausdruck)
FILE (dateiname) spezifIZiert die angesprochene Datei, die vereinbart und implizit oder
explizit eröffnet sein muß. PL/I gestattet die Verwendung einer Standard-Eingabedatei
SYSIN und einer Standard-Ausgabedatei SYSPRINT, bei denen FILE (dateiname ) nicht
geschrieben zu werden braucht. Im Regelfall erfolgt dann die Eingabe über Lochkarten, die
Ausgabe über einen Schnelldrucker. - COPYveranlaßt während der Eingabe gleichzeitig
die Ausgabe der gelesenen Daten über die Standard-Ausgabe datei. - SKIP (ausdruck) setzt
den Datei-Zeiger um so viele Sätze weiter, wie in "ausdruck" angegeben ist, bevor die
Datenübertragung beginnt. Wenn SYSIN sich auf Lochkarten bezieht, entspricht ein Satz
einer Lochkarte. Bei Ausgabe auf SYSPRINT ist ein Satz gleich einer Druckzeile. SKIP wird
wie SKIP (1) behandelt. - PAGE und LINE können nur für Druck-Dateien verwendet
werden und bewirken dann vor dem Drucken den übergang zu einer neuen Druckseite
bzw. zu der Druckzeile mit der angegebenen Zeilennummer. Wenn bei der Ausgabe keine
Datenspezifikation angegeben wird, erfolgt nur eine Satzsteuerung. - "datenspeziftkation"
enthält die Ein-IAusgabeart LIST, DATA oder EDIT und, in Klammern gesetzt, die Liste
der zu übertragenden Daten. Falls EDIT verwendet wird, folgt darauf in Klammern die
Information über die externe Form der Daten.

UST - g e s t e u e r teD a t e n übe r t rag u n g. Besonders in technischen Anwendungs-


fillen verwendet man gern die LIST -gesteuerte Datenübertragung.

Ein gab e. Beim Einlesen von Daten können die Daten auf dem externen Datenträger
weitgehend formatfrei stehen. Ein oder mehrere Leerzeichen dienen der Abgrenzung einer
Größe vor der nächsten. Man kann statt dessen auch eine Trennung durch ein Komma, das
zudem beliebig in Leerzeichen eingebettet sein darf, verwenden. Die Größen auf dem
externen Medium müssen den Regeln für die Konstanten genügen, so daß Zeichenkettenwerte
durch Apostrophs einzugrenzen sind und Bitkettenwerte außerdem noch ein nachgestelltes
B aufweisen müssen. Wenn auf dem Eingabemedium zwei Kommas hintereinander erscheinen,
bleibt die entsprechende Größe in der Datenliste ungeändert. - Die gelesenen Werte werden
den Attributen der zugehörigen Größen angeglichen und ersetzen die bisherigen Werte.

Bei sp iel : Es sei A= 03.29;B= - 281.4;C = '101101'B;D= 'ABC'


Hierbei seien die Attribute der Variablen gleich denen der genannten Konstanten.
Die Anweisung GET LIST (A, C, B, 0);
158 4.3. Einführung in PLII

bewirkt, wenn auf dem Standard-Eingabemedium steht


-34.29 'OI'B" 'UVWXY',
daß danach gilt A = - 34.29; B = - 281.4; C = '01ooo0'B;D = 'UVW'.
Aus gab e. In der Datenliste können auch Ausdrücke vorkommen. Sieht man von den etwa
spezifIZierten Satzsteuerungen ab, so erfolgt die Ausgabe der Werte wiederum reihenweise in
Form von Konstanten. Dabei werden Größen, die nicht Zeichenketten sind, intern entsprechend
den Konvertierungsregeln umgewandelt. Die Ausgabeform einer Größe wird durch deren
Attribute bestimmt. Zeichenketten werden zudem durch einschließende Apostrophs, Bitketten
durch einschließende Apostrophs und ein nachgestelltes B gekennzeichnet. Ein l.eerzeichen
trennt die externen Darstellungsformen der Daten. Bei D r u c k d a t eie n entfällt die
Apostrophierung der Z eie h e n -ketten, so daß ein übersichtliches Druckbild entsteht. Bei
Druckdateien beginnt die Ausgabe, statt mit genau einem l.eerzeichen, bei der nächsten
Tabulatorposition. IBM verwendet standardmäßig die Positionen 1,25,49,73,97,121. Bei
den Programmen auf den Tafeln 4.39, 4.41 und 4.47 sind diese Positionen durch ein Vorlauf-
programm geändert worden.
Bei s pie I: Es sei A = 0006.3, B = 082.4. Die Attribute der Variablen seien durch ihre
Werte angedeutet. Wenn der Schnelldrucker als Standard-Ausgabemedium verwendet wird,
erzeugt die Anweisung
PUT LIST ('H = u'lI AlI'uCM', B lI'uGRADuCELSIUS');
folgenden Ausdruck:
H = uuuLlu6.3uCMuuuuuuuuuuuuuu82.4uGRADuCELSIUS
DAT A - g e s t e u e r teD a te n übe r t rag u n g. Die DATA-gesteuerte Datenüber-
tragung eignet sich besonders für das Testen eines Programms. da bei dieser Art die externe
Form der Daten stets mit dem Namen der zugehörigen Variablen verbunden ist. Daraus
folgt, daß im Gegensatz zur LIST-gesteuerten Ausgabe konstante Zwischentexte, die keiner
Variablen zugeordnet sind, DATA-gesteuert nicht ausgegeben werden können. Auf dem
externen Medium muß die Größe, die DATA-gesteuert übertragen werden soll, im Format
variablenbezeichnung = konstante
erscheinen.
Ein gab e. Da extern jede Größe ihre Variablenbezeichnung bei sich führt, erübrigt sich
eine Datenliste in der Eingabeanweisung. PLII kennt dennoch beide Anweisungsformen:
GET DATA;
GET DATA (datenliste);
In beiden Fällen dürfen extern nur Bezeichnungen auftreten, die innerhalb des gerade
arbeitenden Programmblocks bekannt sind. Die zweite Form gestattet darüber hinaus nur die
Veränderung der in der liste genannten Variablen. In beiden Fällen wird die Bedingung
NAME gesetzt, wenn eine unbekannte bzw. unzulässige Variablenbezeichnung angetroffen
wird. Wenn keine ON NAME-Anweisung gegeben war, ignoriert das System das falsche
Datenfeld und setzt die weitere Bearbeitung der GET DATA-Anweisung fort. Im allgemeinen
enthält die Datenreihe mehrere Datenfelder, die durch Leerzeichen oder durch ein Komma,
das seinerseits beliebig in l.eerzeichen eingeschlossen sein darf, zu trennen sind. Es brauchen
weder alle in der Datenliste genannten Variablen in der Datenreihe aufzutreten, noch braucht
die durch die Datenliste festgelegte Reihenfolge eingehalten zu werden. Die Datemeihe für
den gegenwärtigen GET DAT A-Aufruf gilt als beendet, sobald ein Semikolon als Trennzeichen
4.3.4. Reihenweise Ein- und Ausgabe 159

auftritt. Wenn die Datenreihe überhaupt keine weiteren Elemente mehr aufweist (END OF
FILE), gilt der GET DATA-Aufruf ebenfalls als beendet.
Beispiel:
DECLARE (A, B, C) FIXED,
o FLOAT INITIAL (0),
E CHARACTER (4) INITIAL ('FREI');

GET DATA;

GET DATA (B, E);

Datenreihe:
C = I,E = 'ANNE', A= -1,B = O;E= 'BIBI';
Nach der Anweisung GET DATA;gilt
A= -1,B= O,C= I,D= O,E= 'ANNE',
Nach der Anweisung GET DATA (B, E) gilt
A = -1, B = 0, C = 1, D = 0, E = 'BIBI'.
Aus gab e. Die beiden Ausgabearten
PUTDATA;
PUT DATA (datenliste);
haben bei der Ausgabe wesentlich verschiedene Bedeutungen. Im zweiten Falle enthält die
Datenliste eine Aufzählung aller auszugebenden Variablen. Bei der Form PUT DATA; fehlt
diese Liste, darum gibt das System die Werte aller in dem gerade laufenden Prograrnmblock
bekannten Variablen, stets einschließlich der Variablenbezeichnungen, aus. Die einzelnen
Elemente der Datenreihe werden, außer bei Druckdateien, durch genau ein Leerzeichen
getrennt. Die Datenreihe wird durch ein Semikolon abgeschlossen. Bei Druckdateien beginnt
die Ausgabe jedes Elementes bei der nächsten Tabulatorposition. Die Formate der auszu-
gebenden Variablen errechnen sich aus ihren Attributen.
Bei s pie I. Unter der Annahme, daß sich die Standard-Ausgabedatei auf den Schnell-
drucker bezieht, erhält man als Ergebnis des Prograrnmausschnitts
DECLARE (A, B) DECIMAL FIXED (5,2),
C DECIMAL FLOAT (6);

A = - 3.4; B = - 471.11; C = 64.1E - 12;


PUT DATA (A, Cl;
PUT DATA (B);

den Ausdruck
A = uuu - 3.40uuuuuuuuuuuuuuC = u6.41000E -12; uuuuuuuuuB = - 471.11;
Im Gegensatz zur LIST-gesteuerten Ausgabe werden bei DATA-gesteuerter Ausgabe auch bei
den Druckdateien Zeichenketten durch Apostrophs eingeschlossen, Apostrophs innerhalb einer
Zeichenkette also durch Apostrophpaare dargestellt.
EDIT - g e s t e u e r teD a t e n übe r t rag u n g. Bei der LIST- und bei der DATA-
gesteuerten Datenübertragung wird über das Format der Eingabedaten nur vorausgesetzt, daß
160 4.3. Einführung in PL/I

sich aus jedem Wert der Datenreihe schließlich eine Konstante mit den Attributen der Ziel-
größe bilden läßt. Ein Element der Reihe gilt als beendet, wenn ein Leerzeichen oder ein
Komma auftritt. Ausgabeseitig resultiert bei diesen Arten der Datenübertragung das Format
einer zu übertragenden Größe aus ihren explizit oder implizit erklärten Attributen. Die
EOIT-gesteuerte Datenübertragung hingegen arbeitet mit eigenen, zu der Anweisung gehörigen
Formatangaben und gestattet dadurch eine erhebliche Flexibilität. In den Übertragungs-
anweisungen
GET
{ } EOIT (datenliste)u(formatliste);
PUT
gehört zu jedem Element der Datenliste ein Element der Forrnatliste mit den Angaben über
das Übertragungsformat. Eine Übertragungsanweisung enthält mindestens ein derartiges
Listenpaar. Die F 0 r m a t li s t e kann aus drei Arten von Formatelementen bestehen, den
Datenformatelementen, den Steuerformatelementen und den
R - F 0 r m a tel e me n t e n. Datenformatelemente beschreiben die Daten in der Daten-
reihe, Steuerforrnatelemente braucht man für Seiten-, Zeilen- und Abstandssteuerungen,
R-Formatelemente gestatten die Verwendung fremder Formatlisten. Bei der EOIT-gesteuerten
Übertragung bestimmt die Datenliste, welche Größen einzulesen bzw. auszugeben sind.
Datenliste und Forrnatliste werden von links nach rechts verarbeitet, wobei die Übertragung
eines Datenelementes erst beginnen kann, wenn das nächste Datenformatelement an der
Reihe ist. Davorliegende Steuerformatelemente können ohne Rückgriff auf die Datenliste
ausgeführt werden. Im folgenden Beispiel folgt aus der Datenliste, daß die drei Größen A, B,
C zu übertragen sind, von denen A und B arithmetisch sind, während C eine Zeichenkette
darstellt.
D a t e n I ist e : (A, B, C)
Formatliste: (SKIP (2), COLUMN (60), F (4, 2), X (5), F (5), A (10), COLUMN (90»
Aktionen: SKIP (2): Vorschub auf den Anfang der übernächsten Zeile;
COLUMN (60): Vorschub auf Spalte 60 dieser Zeile;
F (4, 2): Übertragung von A im Format F (4, 2);
X (5): Vorschub um fünf Spalten dieser Zeile;
F (5): Übertragung von B im Format F (5);
A (10): Übertragung von C im Format A (10).
Das Formatelement COLUMN (90) kommt nicht mehr zum Zuge, da die
Datenliste abgearbeitet ist.
Die Übertragung gilt als beendet, wenn die Datenliste abgearbeitet ist. Natürlich kann auch
einmal die Forrnatliste vor der Datenliste verbraucht sein. In diesem Falle wird die Formatliste
von neuem verwendet.
D a t e n I ist e : (A, B)
Forrnatliste: (SKIP (l), F (4, 2), COLUMN (60»
Aktionen: SKIP (1), Übertragung von A mit Format F (4,2), COLUMN (60),
SKIP (1), Übertragung von B mit Format F (4, 2).
Allgemein hat die Formatliste die Gestalt
formatelement , formatelement
( {nuforrnatelement } [{ ,nuformatelement} ... usw. ])
nu(formatliste) , nu(forrnatliste)
4.3.4. Reihenweise Ein- und Ausgabe 161

Hierbei ist nein Wiederholungsfaktor; das nachfolgende Element arbeitet, als sei es n-rnal
geschrieben worden. n kann ein in Klammern gesetzter Ausdruck oder eine vorzeichenlose
ganze Zahl sein.
Für die Da t e nl ist e gelten die gleichen Vorschriften wie bei der LIST- und der DATA-
gesteuerten übertragung: Eingabeseitigenthält sie eine Folge von Variablenbezeichnungen,
ausgabeseitig können in der Folge auch Ausdrücke auftreten. Die Datenreihe auf dem
Eingabemedium ist als eine fortlaufende Zeichenkette anzusehen, die erst durch die Daten-
formatelemente in eine Folge von Daten aufgegliedert wird. Bei der Ausgabe bildet sich am
Ende wiederum eine fortlaufende Zeichenkette, die jedoch durch Seiten- oder Zeilensteuer-
elemente unterbrochen sein kann. Die bei LIST- und DATA-gesteuerter Ausgabe verwendeten
Tabulatorpositionen des Druckers bleiben hier wirkungslos.
D a t e n f 0 r m a tel e m e n t e. Die Datenformatelemente steuern formatmäßig die
zugehörigen Daten. Es gibt vier verschiedene Arten von Datenformatelementen, nämlich zwei
Arten für arithmetische Größen und je eine Art fUr Zeichenketten und für Bitketten:
F (w [,d [,p]]) Festpunkt
E (w, d [,s)) Gleitpunkt
C (reelles Formatelement [,reelles Formatelement] )
A [(w)] Zeichenkette
B [ (w) ] Bitkette
Hierbei bestimmt
w die Anzahl der Zeichen des externen Feldes,
d die Anzahl der Ziffern hinter dem Dezimalpunkt,
p den Skalierungsfaktor,
s die Anzahl der Mantissenziffern.
Zusätzlich gibt es das P-Datenforrnat zur übertragung von numerischen Zeichenketten, die das
PICTURE-Attribut erhalten haben. Diese PICTURE-Größen werden hauptsächlich bei
kaufmännischen Problemen verwendet und deswegen in dieser Einflihrung nur einmal
(Tafel 4.4 7) benutzt.
Binäre arithmetische Größen werden dezimal übertragen und haben deswegen keine eigenen
Datenformatschlüssel.
F (w [,d [,p]] ). Das F-Forrnatelement wird fUr arithmetische Größen verwendet, die extern
in Festpunktform erscheinen. w gibt die Anzahl der Zeichen innerhalb der externen Zeichen-
kette an. Im Falle der Ein gab e kann die Größe innerhalb des w-stelligen Feldes irgendwo
als Festpunktkonstante auftreten. Vor und hinter der Zahl können Leerzeichen stehen. Enthält
das Feld nur Leerzeichen, so wird die Zahl als Null interpretiert. Wenn im externen Feld ein
Dezimalpunkt vorhanden ist, bleibt die Angabe d im Formatelement wirkungslos. Wenn extern
kein Dezimalpunkt existiert, gelten die d hinteren Ziffern des externen Feldes als Dezimal-
bruchziffern. Nicht vorhandenes d wird wie d = 0 behandelt. Das Formatelement kann
zusätzlich einen Skalierungsfaktor p aufweisen, der eine Multiplikation der externen Zahl mit
10P vor der Zuweisung an die Variable bewirkt. Im Gegensatz zu wund d kann p sowohl
positiv als auch negativ sein. - Die so erhaltene Zahl wird den Attributen der Zielvariablen
angepaßt und abgespeichert.
Bei der Aus gab e wandelt das System die interne Größe zunächst in eine Festpunktzahl
um. Falls ein Skalierungsfaktor angegeben ist, erfolgt dabei gleichzeitig eine Multiplikation mit
1()P . Die externe Zeichendarstellung dieser Zahl wird nun r e c h t s b ü n d i g in das
162 4.3. Einftihrung in PL/I

w-stellige Feld gebracht. Falls das Formatelement nur die Feldlänge w aufweist, wird nur der
ganzzahlige Bestandteil ohne Dezimalpunkt übertragen. Sonst flillen d Stellen hinter dem
Komma, davor der Dezimalpunkt, davor w - d - 1 Stellen vor dem Komma das externe
Feld. Führende Nullen werden vor dem Dezimalpunkt durch Leerzeichen ersetzt.
Wenn bei der Eingabe oder bei der Ausgabe signifIkante Ziffern oder das Vorzeichen verloren-
gehen, weil am Ziel nicht genügend Platz vorhanden ist, wird die Bedingung SIZE gesetzt, die,
wenn sie aktiviert worden ist, zur Ausgabe einer Fehlermeldung und zum Abbruch des
Programmablaufs fUhrt.
Beispiel:
DECLARE (A, B) DECIMAL FIXED (4,2),
C DECIMAL FLOAT (8);

GET EDIT (A, B, C) (F (7,3), F (41. F (12,1, - 4));


PUT EDIT (A, B, C) (F (10,3), F (9,4), F (14,2,6));

Wenn man die Datenreihe


u- 386746.23uuuuuuuu21.5
eingibt, lautet das Resultat
uuu- 38.670uuuuu6.23uuuuuuu2150.00
E (w, d [,s]). Extern in Gleitpunktform dargestellte arithmetische Größen werden über das
E-Datenformatelement gesteuert. Die externen Formen einer Gleitpunktkonstanten lassen
sich so beschreiben:
[E] {±}
Festpunktkonstante [{ } Exponent]
E [{±}]
w gibt die Länge des externen Zahlenfeldes innerhalb der Datenkette an. Im Falle der Ein-
gab e kann die Gleitpunktkonstante innerhalb des Feldes beliebig von Leerzeichen umgeben
sein. Wenn das gesamte Feld jedoch aus Leerzeichen besteht, wird die Bedingung CONVER-
SION gesetzt, so daß der Programmlauf nach Ausgabe einer Fehlermeldung abgebrochen wird.
Die Festpunktkonstante bildet die Mantisse der Gleitpunktzahl. Enthält sie einen Dezimal-
punkt", so bleibt die Angabe d im Format~lement wirkungslos, sonst werden die d hinteren
Ziffern als Ziffern hinter dem Komma angesehen. Die Angabe von s ist bei der Eingabe
bedeutungslos. Der Exponent muß eine vorzeichenlose Zahl sein. Die Gleitpunktkonstante
errechnet sich aus der Festpunktkonstanten durch Multiplikation mit der zum Exponenten-
teil gehörigen Zehnerpotenz. Fehlender Exponententeil wird zu Null angenommen. - Die so
erhaltene Gleitpunktzahl wird den Attributen der Zielvariablen angepaßt und abgespeichert.
Bei der Aus gab e hat die Gleitpunktzahl extern die Form
[-] s - d Ziffern. d Ziffern E {±} zweistelliger Exponent

Im Falle d = 0 entfällt auch der Dezimalpunkt. Insgesamt enthält die Zahl s signifIkante
Ziffern. Wenn s im Formatelement nicht angegt;ben worden ist, gilt s = d + 1. Die Gleitpunkt-
zahl wird so normalisiert, daß die vorderste Ziffer der Mantisse von Null verschieden ist.
Im Exponenten fmdet keine Nullenunterdrückung statt.
Wenn bei irgendeiner übertragung signifIkante Ziffern oder das Minuszeichen abgeschnitten
werden, setzt das System die Bedingung SIZE.
4.3.4. Reihenweise Ein- und Ausgabe 163

Beispiel:
OECLARE A OECIMAL FIXEO (10,4),
B OECIMAL FLOAT (61.
C OECIMAL FLOAT (2);

GET EOIT (A, B, C) (E (12,4), E (15, 11. E (8,3));


PUT EOIT (A, B, C) (E (12,0,2), E (16,2), E (10,3,3));
Bei Eingabe der Datenreihe
L.JU- 0.1E4uuuuuuuuuuuuu2 + 2LJuu.133E -12
erhält man als Ausgabe
uuuuu- lOE + 02utJuuuuuu2.00E + Oluu.133E - 12
C (r e e ll e s F 0 r m a tel e m e n t [, r e e ll e s F 0 r m at eie m e n t ] ). Dieses Format-
element überträgt komplexe Größen. Das erste Formatelement bezieht sich auf den Realteil, das
zweite auf den Imaginärteil. Wenn das zweite Element nicht angegeben wird, haben die beiden
Teile das gleiche Format. Extern befmden sich beide Teile hintereinander in der Datenreihe, ohne
daß dem Imaginärteil ein I angehängt wird.
A [ (w) ]. Die übertragung von Zeichenketten geschieht über den Formatschlüssel A. w gibt
die Länge der externen Zeichenkette an. Apostrophs werden wie alle anderen Zeichen behandelt.
Bei der Ein gab e ist die Angabe von w erforderlich. Die nächsten w Zeichen der externen
Datenreihe werden geholt und als Zeichenkette interpretiert. Diese Kette wird linksbündig unter
der Zielvariablen gespeichert, wobei im Falle unterschiedlicher Kettenlängen rechts Leerzeichen
angehängt bzw. Zeichen der externen Kette abgeschnitten werden. Wenn bei der Aus gab e
im Formatelement die Angabe von w fehlt, wird die aktuelle Länge der auszugebenden Kette
verwendet. Die übertragung erfolgt linksbündig, gegebenenfalls mit Abschneiden der Zeichen
oder Aufflillung mit Leerzeichen am rechten Ende.
Beispiel:
OECLARE (A, B, C) CHARACTER (10);

GET EOIT (A, B, C) (A (10), 2 A (5));


PUT EOIT (A, B, C) (A (7), A (8), A (5));
Bei Eingabe der Datenreihe
ULJuELLIPSEKREISPUNKT
erhält man als Ausgabe
LJL..JuELUKREISLJuuPUNKT
B [ (w) ]. Dieses Formatelement beschreibt die externe Darstellung von Bitketten. Jedes Bit
wird durch eines der Zeichen 0 oder I dargestellt. w gibt die Länge des externen Feldes an. Die
Kette ist weder in Apostrophs eingefaßt noch durch ein nachgestelltes B gekennzeichnet. Bei
der Eingabe kann die Bitkette irgendwo innerhalb der w Zeichen stehen. Vorangehende oder
nachgestellte Leerzeichen werden dabei ignoriert. w muß im Formatelement unbedingt
angegeben werden. Innerhalb der eigentlichen Kette dürfen nur die Zeichen 0 und I auftreten,
sonst setzt das System die Bedingung CONVERSION. - Die übertragung erfolgt linksbündig,
gegebenenfalls mit Abschneiden der Bits oder mit Nullen-Auffüllung am rechten Ende der
Bitkette.
Bei der Aus gab e kann w fehlen. Dann gilt die aktuelle Länge der zu übertragenden Bit-
164 4.3. Einführung in PLII

kette als Länge der externen Kette. Im Falle ungleicher Längen wird am rechten Ende abge-
schnitten bzw. mit Leerzeichen aufgefüllt.
Beispiel:
DECLARE (A, B, CI BIT (121;

GET EDIT (A, B, CI (B (51, B (121, B (10));


PUT EDIT (A, B, CI (B (7), B (151, B (12));
Bei Eingabe der Datenreihe
uuluuOl000l0l00llllllll00ll
erhält man als Ausgabe
l00000001000101001Iuuullllll00ll00
S t e u e r f 0 r m a tel e m e n t e. Bei der Erläuterung der Steuerformatelemente werden die
Begriffe "Zeile" und "Spalte" verwendet, da diese Formatelemente hauptsächlich für Druck-
dateien benutzt werden. Mehrere unter ihnen lassen sich jedoch auch auf Nicht-Druckdateien
anwenden; dann sind diese Begriffe durch die allgemeineren Bezeichnungen "Satz" und
"Position im Satz" zu ersetzen. Steuerfonnatelemente arbeiten ohne Bezug auf die Daten-
liste. Sie kommen aber nur dann zum Zuge, wenn die Datenliste noch nicht abgearbeitet ist.
PAGE. Seitenvorschub: Der Druckvorgang wird am Anfang der neuen Seite fortgesetzt. Das
PAGE-Formatelement darf nur bei Druckdateien verwendet werden.
UNE (n). Der Druckvorgang wird am Anfang der noten Zeile fortgesetzt. Wenn auf der
gegenwärtigen Seite diese Zeile schon durchlaufen ist oder eine ungültige Zeilennummer
angegeben wird, setzt das System die Bedingung ENDPAGE, d. h. im Regelfall erfolgt der
Übergang an den Anfang einer neuen Seite. - Das LINE-Formatelement darf nur bei Druck-
dateien verwendet werden.
SKIP (n). Es erfolgt ein Übergang an den Anfang derjenigen Zeile, die n Zeilen hinter der
gegenwärtigen Zeile liegt. Wenn n nicht angegeben ist, wird ] genommen. Nur bei Druck-
dateien darf n auch Null sein.
COLUMN (n). Es erfolgt ein Übergang in die note Spalte der gegenwärtigen Zeile bzw., wenn
diese Spalte bereits passiert war, in die note Spalte der nächsten Zeile.
X (n). Durch dieses Formatelement werden die nächsten n Zeichen der Datenreihe über-
gangen, bei Ausgabe-Anweisungen also n Leerzeichen in die Reihe eingefiigt.
Beispiel:
DECLARE (A, B, CI CHARACTER (31;
GET EDIT (A, B, CI (COLUMN (11. A (31, X (21, A (lI, SKIP, A (5));
PUT EDIT (A, B, CI (PAGE, LlNE (31, A (31, COLUMN (101, A (31, X (61, A (3));
Bei Eingabe der Datenreihe
ABCDEFGIDJKLMNOPQR (1. Satz)
STUVWXYZ (2. Satz)
erhält man als Ausgabe
ABCuuuuuuFuuuuuuuuSTU (3. Zeile einer neuen Seite)
Beispiel 5. Das Programm in Tafel 4.49 berechnet, wie häufig die einzelnen Buchstaben des
Alphabets in einem 255 Zeichen langen Text vorkommen. Der Text wird vom Standard-Eingabe-
4.3.5. Datengruppierungen 165

medium, hier von Lochkarten, EDIT-gesteuert - also ohne einschließende Apostrophs-


gelesen und ausgegeben. Das Programm verwendet die beiden eingebauten Funktionen INDEX
und SUBSTR. Die Zeichenkettenfunktion INDEX (kette 1, kette2) stellt fest, ob die zweite
Kette irgendwo vollständig in der ersten Kette vorkommt und nennt, falls das zutrifft, diejenige
Position innerhalb der ersten Kette, wo die zweite Kette erstmalig beginnt, sonst Null.
INDEX ('ABCACBCABAC', 'AC') liefert demnach den Wert 4. Aus einer Zeichenkette kann
man mit SUBSTR (kette, anfangsposition, länge) eine Teilkette zwecks eigenständiger
Bearbeitung herausgreifen. Die Teilkette wird durch ihre Anfangsposition innerhalb der Gesamt-
kette und durch ihre Länge festgelegt. SUBSTR (,ABCACBCABAC', 4,2) liefert die Kette
'AC'. - Das Programm bestimmt Buchstabe für Buchstabe zunächst innerhalb der gesamten
Zeichenkette, dann innerhalb der jeweils verbleibenden Teilkette die Position seines erst-
maligen Auftretens. Der jeweilige Buchstabe, drei trennende Punkte und die berechnete Häufig-
keit bilden die Ausgabe. Weil jede Zeile jedoch Platz flir flOf derartige Resultate bietet, erfolgt
die Ausgabe einmal mit einer Forrnatliste, die mit einem Zeilenwechsel beginnt, und viermaI
mit einer Formatliste, bei der zunächst vier trennende l..eerzeichen gedruckt werden. Hierbei
verwendet das Programm die eingebaute Funktion MOD zur Restbestimmung: MOD (L - 1, 5)
liefert den Rest bei der Division der Größe L - 1 durch 5. Unterschiedliche Formatlisten
kann man aufrufen, indem man in der entsprechenden übertragungsanweisung nicht die
Formatliste selbst, sondern ein R-Formatelement notiert. Die darin enthaltene M a r k e n -
va r i abi e MARKE weist entweder auf die FORMAT-Anweisung NEU (mit Seitensteuerung)
oder auf die FORMAT-Anweisung ALT (mit vier l..eerzeichen). Markenvariablen werden mit
dem Attribut LABEL erklärt.
R - F 0 r m a tel e me nt. Das R-Formatelement R (markenangabe) bedeutet, daß zur
Ausftihrungszeit an seine Stelle die Formatliste tritt, die in derjenigen FORMAT-Anweisung
steht, deren Marke man dem R-Formatelement entnehmen kann.

Beispiel:
DECLARE FORM LABEL;

IF ABS (A) < lE4THEN LABEL = FEST;


ELSE LABEL = Gt.EIT;
PUT EDIT (A) (R (FORM));
FEST: FORMAT (F (10,3));
GLEIT: FORMAT (E (10,3));

4.3.5. Datengruppienmgen. In allen bisher erläuterten Fällen stehen die verwendeten Daten
zumindest formal beziehungslos nebeneinander. Jede Variable stellt ein einziges Element dar
und wird als Eie m e nt- Va r i abi e bezeichnet. Viele Probleme, z. B. das Rechnen mit
Matrizen oder die Verarbeitung von Lohnlisten, erfordern die Möglichkeit einer Daten-
gruppierung. PLII bietet zwei Arten, die B e r e ich s b i I dun g und die S t r u k tu-
rierung.
B e r e ich e. Ein Bereich ist eine n-dimensionale Gruppierung von Datenelementen mit
übereinstimmenden Attributen. Die Bezeichnung der Datenelemente erfolgt durch den
Bereichsnamen und die Indizes-Angabe innerhalb des Bereichs. Man verwendet nur ganz-
zahlige Indizes. Ein n-dimensionaler Bereich hat n Indexpositionen. Bereiche müssen verein-
bart werden, wobei anstelle der Element-Variablen der Bereichsname und dahinter in
166 4.3. Einführung in PLII

Tafel4.49 Buchstabenzählung im Text

EXTEXT .. PROCEDURE OPTIONS (MAIN),.


/* BUCHSTABENHAEUFIGKEIT IM TEXT */
DECLARE ALPHABET CHARACTER (26)
INITIAL ('ABCDEFGHIJKLMNOPORSTUVWXYZ'),
TEXT CHARACTER (255), BUCHSTABE CHARACTER (1),
MARKE LABEL,
(HAEUFIGKEIT, L, K, ABSPOS) FIXED,.
GET EDIT (TEXT) (A (255)),.
PUT PAGE EDIT (SUBSTR (TEXT, 1,80)) (A),.
PUT SKIP EDIT (SUBSTR (TEXT, 81, 80)) (A),.
PUT SKIP EDIT (SUBSTR (TEXT, 161,80)) (A),.
PUT SKIP EDIT (SUBSTR (TEXT, 241,15)) (A),. PUT SKIP,.
00 L = 1 TO 26,.
BUCHSTABE = SUBSTR (ALPHABET, L, 1),.
HAEUFIGKEIT = 0,.
ABSPOS = INDEX (TEXT, BUCHSTABE),.
00 WHILE (ABSPOS NE 0),.
K=O,.
HAEUFIGKEIT = HAEUFIGKEIT + 1,.
00 ABSPOS = ABSPOS + 1 TO 255 WHILE (K = 0),.
K = INDEX (SUBSTR (TEXT, ABSPOS, 1), BUCHSTABE),.
END,. IF K = 0 THEN ABSPOS = 0,.
END,.
DRUCK.. IF MOD (L-l, 5) = 0 THEN MARKE = NEU,.
ELSE MARKE = ALT,.
PUT EDIT (BUCHSTABE CAT' ... ', HAEUFIGKEIT,' MAL')
(R (MARKE), A, F (4), A),.
NEU .. FORMAT (SKIPI..
ALT .. FORMAT (X (4)),.
END,.
END EXTEXT,.
Eingabe:

'SAGE DEUTLICHER, WIE UND WENN. DU BIST UNS NICHT IMMER KLAR.'
GUTE LEUTE, WISST IHR DENN,
OB ICH MIRS SELBER WAR.
GOETHE
Ausgabe:

'SAGE DEUTLICHER, WIE UND WENN. DU BIST UNS NICHT IMMER KLAR.'
GUTE LEUTE, WISST IHR DENN,
OB ICH MIRS SELBER WAR.
GOETHE
A ... 3 MAL B ... 3 MAL C ... 3 MAL o ... 4 MAL E ... 14 MAL
F ... 0 MAL G ... 3 MAL H ... 5 MAL I ... 9MAL J ... 0 MAL
K ... 1 MAL L ... 4 MAL M ... 3 MAL N ... 5 MAL o ... 2 MAL
P ... 0 MAL o ... OMAL R ... 7 MAL S ... 6 MAL T ... 7 MAL
U ... 6 MAL V ... OMAL W ... 4 MAL X ... OMAL Y ... OMAL
Z ... 0 MAL

Klammern und durch Kommas getrennt die Grenzen der einzelnen Dimensionen geschrieben
werden. Untere und obere Grenze werden durch einen Doppelpunkt getrennt. Enthält die
4.3.5. Datengruppierungen 167

Vereinbarung nur eine Angabe je Dimension, so wird diese als obere Grenze und 1 als
untere Grenze angenommen.
DECLARE A (- 4: - 2,5) DECIMAL FIXED (7,3);
vereinbart einen zweidimensionalen Bereich. Der erste Index kann die Werte - 4, - 3, - 2, der
zweite die Werte 1,2,3,4,5 annehmen. Der Bereich enthält demnach 15 Elemente, sämtlich
mit den Attributen DECIMAL FIXED (7, 3):
A (- 4,1), A (- 4,2), A (- 4,3), A (-4, 4), A (-4,5)
A (- 3,1), A (- 3, 2), A (- 3, 3), A (- 3, 4), A (- 3,5)
A (- 2, 1), A (- 2, 2), A (- 2, 3), A (- 2, 4), A (- 2, 5)
Wenn auf den gesamten Bereich Bezug genommen werden soll, wird nur der Bereichsname
genannt. Ein einzelnes Element des Bereichs wird durch den Bereichsnamen und die voll-
ständige Liste der zu ihm gehörenden Indexwerte aufgerufen. Diese Indexwerte können
Ausdrücke sein;die nach Abtrennung gebrochener Bestandteile gültige Indexwerte liefern.
Wenn z. B. I = 3, K = 5 und L = 8 gilt, stellt A (I - K,LIK + I) einen Aufruf des Elementes
A (- 2,4) dar.
In PLII gibt es E lern e n tau s d r ü c k e, B e r e ich sau s d r ü c k e und
S t r u k t u rau s d r ü c k e . Ein Elementausdruck liefert einen einzigen Wert, ein Bereichs-
ausdruck einen Bereich, ein Strukturausdruck eine Struktur. In einem Be r e ich s-
aus d r u c k muß mindestens ein Bereichsoperand vorkommen. Ein solcher Ausdruck wird
Element für Element ausgewertet (wobei ein Index um so häufiger variiert wird, je weiter
rechts er steht), so daß alle Bereichsoperanden eines Ausdrucks i den t i s c he G ren zen
besitzen müssen. Alle bisher für einzelne Elemente verwendeten Operatoren können in
Bereichsausdrücken verwendet werden. Die Zuordnung zu einem Zielbereich erfolgt durch
die Ergibtanweisung.
Beispiel: Mit
DECLARE (A (3,4), B (3,4)) DECIMAL FIXED,
C (3, 4) DECIMAL FLOAT,
D (3,4) BINARY FIXED;
können z. B. folgende Anweisungen gegeben werden:
D = A>B;
IF D (1,2) = D (3,4) THEN C = - A * A + B/3;
ELSE C = 2.18 * B/A - 15;
Man beachte, daß A * A eine elementweise Multiplikation bewirkt und nicht eine Matrix-
multiplikation. PL/I bietet die Möglichkeit, U n t erb e r e ich e zu spezifizieren, bei denen
nur einige Indizes variieren, während die übrigen festgelegt sind. Dies geschieht, indem man
statt der variierenden Indizes einen Stern schreibt. Die Anweisung
A (* ,J) = A (* ,J) - P * A (* ,I);
in der P eine Element-Variable sein soll, zieht von jedem Element der Spalte J das P-fache
des entsprechenden Elementes der Spalte I ab. - Ein Bereichsaufruf, der an jeder Index-
position einen Stern hat, bezieht sich auf den gesamten Bereich.
Beispiel 6. Tafel 4.50 enthält ein Programm zur Inversion einer Matrix und zur Simultan-
auflösung linearer Gleichungssysteme mit übereinstimmender KoefflZientenrnatrix. Die
Rechnung erfolgt nach dem Stiefel-Verfahren mit Bestimmung des optimalen Drehelementes.
Da es im Subset die Möglichkeit, mit Unterbereichen zu arbeiten, nicht gibt, war es erforder-
168 4.3. Einführung in PL/I

Tafe14.50 Auflösung linearer Gleichungssysteme nach Stiefel

STIFEL.. PROCEDURE OPTIONS (MAIN),.


DECLARE UEBERSCHRIFT CHARACTER (60), (A (30,30), 0) FLOAT (16),
(11 (30), JJ (30), Z (30), S (30), I, J, K, L, M, N) FIXED (2),.
GET LIST (UEBERSCHRIFT, M, N),.
PUT PAGE LIST (UEBERSCHRIFT),. PUT SKIP (2) LIST (M, N),.
IF M LE OOR N LT M OR N GT 30THEN
00,. PUT LIST ('EINGABEFEHLER'),. RETURN,. END,.
GET LIST (((A (I, J) 00 J = 1 Ta N) 00 1= 1 Ta M)),.
PUT SKIP (2) LIST ('EINGABE'),.
00 1= 1 Ta M,.
PUT SKIP EDIT ((A (I, J) 00 J = 1 Ta N)) (R (FORM)),. END,.
FORM.. FORMAT (SKIP, 5 E (14,5)),.
ON OVERFLOW GO Ta FEHLER,. ON ZERODIVIDE GO Ta FEHLER,.
PIVOT.. 00 L = 1 Ta M,.
0=-1,.
00 1= 1 Ta M,. 00 K = 1 Ta L - 1,.
IF 11 (K) = I THEN GO Ta ENDI,. END,.
00 J = 1 Ta M,. 00 K = 1 Ta L - 1,.
IF JJ (K) = J THEN GO Ta ENDJ,. END,.
IF ABS (A (I, J)) GT 0 THEN 00,. 0 = ABS (A (I, J)),.
11 (L) = I,. JJ (L) = J,. END,.
ENDJ .. END,. END!.. END,.
0= A (11 (L), JJ (L)),.
A (11 (L), JJ (L)) = 1,.
00 1= 1 Ta M,.
A (I, JJ (L)) = A (I, JJ (L))/D,. END,. /*DREHSPAL TE */
00 J = 1 Ta JJ (L) -1, JJ (L) + 1 Ta N,. /*ALLE UEBRIGEN */
D = A (11 (L). J),. A (11 (L). J) = 0,.
Da 1= 1 Ta M,. A (I, J) = A (I, J) - 0 * A (I, JJ (L)),.
END,. END,.
END PIVOT,.
00 K = 1 Ta M,. Z (JJ (K)) = 11 (K),. S (11 (K)) = JJ (K),. END,.
PUT PAGE LIST (UEBERSCHRIFT),.
PUT SKIP (2) LIST (M, N),. PUT SKIP (2) LIST (,ERGEBNIS'),.
Da I = 1 Ta M,.
PUT SKIP EDIT ((A (Z (I), S (J)) 00 J = 1 Ta M),
(A (Z (I), J) 00 J = M + 1 Ta N)) (R (FORM)),. END,.
GO Ta ENDE,.
FEHLER .. PUT PAGE LIST ('ERGEBNIS HIER NICHT BESTIMMBAR'),.
ENDE. . PUT PAGE,. END STlFEL,.

Eingabe:

'LINEARES GLEICHUNGSSYSTEM 3 * 4' 3 4


3 4 2 - I - 2 2 1 3 I -7 - 1 - 12

Ausgabe:

LINEARES GLEICHUNGSSYSTEM 3 * 4
3 4
EINGABE
3.00000E + 00 4.00000E + 00 2.00000E + 00 - 1.00000E + 00
- 2.00000E + 00 2.00000E + 00 1.00000E + 00 3.00000E + 00
1.00000E + 00 - 7.00000E + 00 - 1.00000E + 00 - 1.20000E + 01
4.3.5. Datengruppierungen 169

LINEARES GLEICHUNGSSYSTEM 3 * 4
3 4
ERGEBNIS
1.42857E - 01 - 2.85714E - 01 .OOOOOE + 00 1.00000E + 00
- 2.85714E - 02 - 1.42857E - 01 - 2.00000E - 01 - 2.00000E + 00
3.42857E - 01 7.14286E-Ol 4.00000E - 01 3.00000E + 00
Eingabe:
'LIN. GLEICHUNGSSYSTEM, VIELE LOESUNGEN' 3 4
311-21-12-313-34

Ausgabe:
LlN. GLEICHUNGSSYSTEM, VIELE LOESUNGEN
3 4
EINGABE
3.00000E + 00 1.00000E + 00 1.00000E + 00 - 2.00000E + 00
1.00000E + 00 - 1.00000E + 00 2.00000E + 00 - 3.00000E + 00
1.00000E + 00 3.00000E + 00 - 3.00000E + 00 4.00000E + 00
LlN. GLEICHUNGSSYSTEM, VIELE LOESUNGEN
3 4
ERGEBNIS
-1.35108E + 15 2.70216E + 15 1.35108E + 15 8.00000E - 01
2.25180E + 15 - 4.50360E + 15 - 2.25180E + 15 - 1.00000E + 00
1.80144E + 15 - 3.60288E + 15 -1.80144E + 15 6.00000E - 01

Eingabe:
'LIN. GLEICHUNGSSYSTEM OHNE LOESUNGEN' 4 5
1111-221-11-33202-410-20-5

Ausgabe:
LlN. GLEICHUNGSSYSTEM OHNE LOESUNGEN
4 5
EINGABE
1.00000E + 00 1.00000E + 00 1.00000E + 00 1.00000E + 00 - 2.00000E + 00
2.00000E + 00 1.00000E + 00 - 1.00000E + 00 1.00000E + 00 - 3.00000E + 00
3.00000E + 00 2.00000E + 00 .OOOOOE + 00 2.00000E + 00 - 4.00000E + 00
1.OOOOOE + 00 .OOOOOE + 00 - 2.00000E + 00 .OOOOOE + 00 - 5.00000E + 00
LlN. GLEICHUNGSSYSTEM OHNE LOESUNGEN
4 5
ERGEBNIS
.OOOOOE + 00 - 9.60768E + 15 4.80384E + 15 4.80384E + 15 1.44115E + 16
- 5.19230E + 33 1.03846E + 33 2.07692E + 33 - 3.11538E + 33 - 1.45384E + 34
.OOOOOE + 00 - 4.80384E + 15 2.40192E + 15 2.40192E + 15 7.20576E + 15
5.19230E + 33 - 1.03846E + 33 - 2.07692E + 33 3.11538E + 33 1.45384E + 34

lieh, eine entsprechende Anzahl von DO-AnweisUngen zu verwenden. Das Programm ver-
wendet die eingebaute Funktion ABS zur Berechnung des Betrages ihres Argumentes.
S t r u k t ure n. Im Gegensatz zu den Bereichen, in denen alle Elemente gleiche Attribute
170 4.3. Einführung in PL/I

besitzen und gleichberechtigt nebeneinanderstehen, stellt die Strukturierung eine Daten-


gruppierung nach hierarchischem Prinzip dar. In einer Struktur haben die Datenelemente im
allgemeinen unterschiedliche Attribute. Ihres logischen Zusammenhanges wegen werden die
Daten zu Unter- und Oberbegriffen zusammengefaßt. Ober der gesamten Struktur steht der
Struktumame, z. B. AUTO. Die Struktur AUTO besteht aus gewissen Unterstrukturen, wie
Motor, Beleuchtung, Bereifung, Innenausstattung, usw. Jede dieser Unterstrukturen besteht
möglicherweise wiederum aus Unterstrukturen, bis man schließlich zu den Einzelteilen gelangt.
Es kommt nun auf den speziellen Vorgang an, ob man die Gesamtstruktur, eine Unterstruktur
oder ein einzelnes Element anspricht. Mit Vorteil wird man den Begriff Auto verwenden,
wenn man ein Taxi ruft, statt die Gesamtheit aller Einzelteile aufzuzählen. Ist jedoch nur ein
Radventil zu erneuern, dann wird man nicht eine Erneuerung der ganzen Unterstruktur
Bereifung bestellen.
Eine Struktur muß vereinbart werden. Hierbei erhalten die einzelnen Stufen der Struktur
Nummern. Die Hauptstruktur beginnt stets mit der Nummer 1; die Nummer einer Struktur
muß stets größer sein als die Nummer jeder wer Oberstrukturen.
Die Aufgliederung einer Lohnlistenstruktur könnte (unter Vernachlässigung der Element-
attribute) so aussehen:
luLOHNLISTE,
2uPERSONALIEN,
3uNAME,
4uNACHNAME,
4uVORNAME,
3uANSCHRIFT,
4uORT,
SuPOSTLEITZAHL,
5 uNAME ,
4uSTRASSE,
SuNAME,
5 uHAUSNUMMER ,
2uPERSONALNUMMER,
2uARBEITSSTUNDEN,
3uNORMALSTUNDEN,
3uUEBERSTUNDEN,
2uSTUNDENLOHN,
3uNORMALSTUNDEN,
3uUEBERSTUNDEN;
Die Hauptstruktur LOHNLISTE besteht aus den Unterstrukturen PERSONALIEN, ARBEITS-
STUNDEN, STUNDENLOHN und aus dem Strukturelement PERSONALNUMMER. Die
Unterstruktur PERSONALIEN wiederum enthält die beiden Unterstrukturen NAME und
ANSCHRIFT. Während man bei NAME nunmehr direkt zu Strukturelementen gelangt, ist
ANSCHRIFT nochmals in zwei Unterstrukturen aufgeteilt. Nur in der letzten Stufe repräsen-
tieren die Namen einzelne Elemente, so daß bei der Struktur-Vereinbarung auch nur sie mit
Attributen zu versehen sind. Innerhalb des Programms kann man die Gesamtstruktur , eine
Unterstruktur oder ein Strukturelement zur Verarbeitung ansprechen. Hierbei verwendet man
oft g e k e n n z eie h n e t e N a m e n, um Doppeldeutigkeiten zu vermeiden. Ein Name
ist voll s t ä n d i g gekennzeichnet, wenn er, jeweils durch einen Punkt getrennt, aus der
4.3.5. Datengruppierungen 171

Namensfolge a 11 e r umfassenden Strukturen besteht. In der Lohnlistenstruktur sind


LOHNLISTE. PERSONALIEN. ANSCHRIFT, LOHNLISTE. STRASSE, ANSCHRIFT.
ORT Beispiele fUr gekennzeichnete Namen. Hierbei hätte man sich mit den einfachen Namen
ANSCHRIFT, STRASSE, ORT begnügen können, da keine Verwechslung möglich ist.
NORMALSTUNDEN hingegen bezeichnet sowohl ein Element der Unterstruktur
ARBEITSSTUNDEN als auch eines der Unterstruktur STUNDENLOHN, so daß hier eine
Kennzeichnung unbedingt erforderlich ist, z. B. ARBEITSSTUNDEN. NORMAL-
STUNDEN und STUNDENLOHN. NORMALSTUNDEN. Die Hauptstruktur LOHNLISTE
enthält die Daten eines einzelnen Lohnempfangers. Wenn die Daten aller Beschäftigten
untereinander verarbeitet werden sollen, muß man die einzelnen Strukturen unterscheiden,
indem man z. B. einen Be r eie h von S t r u k t ure n defmiert: lt..JLOHNLISTE(9999)
bei maximal 9999 Arbeitnehmern. Wenn neben der Anschrift des ersten auch die des
zweiten Wohnsitzes von Interesse ist, empfiehlt sich die EinfUhrung eines Anschriften-
bereiches. Damit ergibt sich als vollständige Vereinbarung der genannten Struktur
DECLARE luLOHNLlSTE(9999),
2uPERSONALlEN,
3uNAME,
4uNACHNAMEuCHARACTER(30),
4uVORNAMEuCHARACTER(15),
3uANSCHRIFT(2),
4uORT,
5uPOSTLEITZAHLuDECIMALuFIXED(4),
5uNAMEuCHARACTER (30),
4uSTRASSE,
5uNAMEuCHARACTER(20),
5uHAUSNUMMERuDECIMALuFIXED(4),
2uPERSONALN UMM ER uDECI MALuF I XED (6),
2uARBEITSSTUNDEN,
3uNORMALSTUNDENuDECIMALuFIXED(3),
3uUEBERSTUNDENuDECIMALuFIXED(3),
2uSTUNDEN LOHN,
3uNORMALSTUNDENuDECIMALuFIXED(2,2),
3uUEBERSTUNDENuDECIMALuFIXED(2,2);

Die Postleitzahl des zweiten Wohnsitzes des Beschäftigten mit der Lohnliste Nr. 35 erhält man in
LOHNLISTE(35).PERSONALIEN.ANSCHRIFT(2).ORT .POSTLEITZAHL
Die einzelnen Bereichsindizes kann man zusammenziehen, die Bezeichnung einschränken, so
daß auch
LOHNLISTE(35,2).POSTLEITZAHL
oder einfach
POSTLEITZAHL(35,2)
ausreichen.
S t r u k t u rau s d r ü c k e enthalten mindestens einen Strukturoperanden. Sind mehrere
Strukturoperanden beteiligt, so müssen sie eine übereinstimmende Gliederung aufweisen.
Daneben dürfen im Strukturausdruck nur noch Elementausdrücke auftreten. Alle Operationen
eines Strukturausdrucks werden nacheinander mit jedem ihrer Elemente ausgeführt. Mit
172 4.3. Einführung in PLII

Tafel 4.51 Newton-Verfahren zur Berechnung n-ter Wurzeln

NWURZ.. PROCEDURE OPTIONS (MAIN),.


/* N-TE WURZEL AUS A KARTENART IN SP. 1
KARTENART 1 ... MAXIMALE ITERATIONSZAHL, GENAUIGKEIT
KARTENART 2 ... WURZELEXPONENT N, RADIKAND A
KARTENART 9 ... ENDE DES PROGRAMMS */
DECLARE (N, MAXITZAHL INITIAL (20), I, NMINUS 1) FIXED (4),
KA FIXED (1), (A, RELGEN INITIAL (SE - 6), XAL T, XNEU, FAKTOR,
ADURCHN) FLOAT,
1 KARTE, 2 KARTENART CHARACTER (1),
2 KARTENREST CHARACTER (79),.
LESEN.. GET EDIT (KARTE) (A (1), A (79)),.
IF KARTENART = '9' THEN RETURN,.
IF KARTENART NE '1' AND KARTENART NE '2' THEN
FEHLER .. 00,.
PUT SKIP (2) LIST ('EINGABEFEHLER 'I,.
PUT SKIP LIST (KARTENART CAT KARTENREST),. GO TO LESEN,. END,.
GET STRING (KARTEN REST) LIST (N, A),.
IF N LE 0 THEN GO TO FEHLER,.
IF KARTENART = '1' THEN IF A LE 0 THEN GO TO FEHLER,.
ELSE 00,.
MAXITZAHL = N,.
RELGEN = A,.
GO TO LESEN,. END,.
I F KARTENART NE '2' THEN GO TO FEH LER,.
PUT SKIP (2) EDIT ('MAXIMAL', MAXITZAHL, 'ITERATIONEN. RELATIVE',
'GENAUIGKEIT', RELGEN) (A, F (5), A, A, E (12,5)), ..
PUT SKIP EDIT ('DIE', N, '-TE WURZEL AUS', A, ' IST ')
(A, F (5), A, E (13,51, AI,.
XALT = 0,. XNEU = A,.
IF A LT 0 AND MOD (N, 2) = OTHEN 00,.
PUT EDIT ('NICHT REELL') (A),.
GO TO LESEN,. END,.
NMINUS1 = N -1,. FAKTOR = NMINUS1/N,. ADURCHN = A/N,.
00 I = OTO MAXITZAHL
WHILE (ABS (XNEU - XALT) GT RELGEN * ABS (XNEU)),.
XALT = XNEU,.
XNEU = FAKTOR * XAL T + ADURCHN/XAL T * * NMINUS1,. END,.
IF 1= MAXITZAHL + 1 THEN 00.,
PUT EDIT ('MIT', MAXITZAHL, 'ITERATIONEN NICHT BESTIMMBAR.',
'XALT =', XALT: XNEU =', XNEU) (A, F (5), A, A, E (13,5), A, E (13,5)),.
GO TO LESEN,. END,.
IF 1= 0 THEN DRUCK .. 00,. PUT EDIT (XNEU) (E (12, 5)),.
GO TO LESEN,. END,.
IF 1= 1 THEN PUT EDIT ('NACH EINER ITERATION ') (A),.
ELSE PUT EDIT ('NACH', I, ' ITERATIONEN ') (A, F (5), A),.
GO TO DRUCK,. END NWURZ,.
Eingabe:

243
24-3
I 5 - 0.0005
1 5 0.00005
222
9 ENDE-KARTE
4.3.6. Eingefügte Funktionen 173

Ausgabe:

MAXIMAL 20 ITERATIONEN. RELATIVE GENAUIGKEIT 5.00000E - 06


DIE 4-TE WURZEL AUS 3.00000E + 00 IST NACH 7 ITERATIONEN 1.31607E + 00
MAXIMAL 20 ITERATIONEN. RELATIVE GENAUIGKEIT 5.00000E - 06
DIE 4-TE WURZEL AUS - 3.00000E + 00 IST NICHT REELL

EINGABEFEHLER
1 5 - 0.0005

MAXIMAL 5 ITERATIONEN. RELATIVE GENAUIGKEIT 5.00000E - 05


DIE 2·TE WURZEL AUS 2.00000E + 00 IST NACH 4 ITERATIONEN 1,41421E + 00

DECLARE 1uSTUNDENSUMME,
2uNORMALuDECIMALuFIXED(8)uINITIAL(0),
2uUEBERuDECIMALuFIXED(8)dNITIAL(0);
erhält man durch
STUNDEN SUMME = ARBEITSSTUNDEN(4) + ARBEITSSTUNDEN(81);
die Summe der Normal- und der überstunden des 4. und des 81. Beschäftigten. PL/I bietet
bei Ergibtanweisungen durch die Zuweisung BY NAME die Möglichkeit, auch Strukturen
unterschiedlicher Gliederung zu verwenden, wobei dann nur solche Strukturelemente ver-
knüpft und zugewiesen werden, die mit Ausnahme des Hauptstrukturnamens überein-
stimmende Namen haben.
Beispiel 7. Tafel 4.51 enthält ein Programm zur näherungsweisen Berechnung n-ter Wurzeln aus
Eingabezahlen a nach dem Newtonschen Verfahren. Solange der Anwender nichts anderes
verlangt, wird mit einer relativen Genauigkeit von 5 . 10- 6 und mit maximal 20 Iterationen
gearbeitet. Die Programmeingaben erfolgen über Lochkarten, die in Spalte 1 die jeweilige
Kartenart tragen. Karten der Art 1 enthalten eine neue maximale Iterationszahl und eine neue
relative Genauigkeit, Karten der Art 2 die Angabe von n und a. Kartenart 9 meldet das Ende
der Berechnungen. Wenn vom Programm eine Datenkarte gelesen wird, ist demnach die Karten-
art nicht vorherzusehen. Insbesondere ist es fraglich, ob in den Spalten 2 bis 80 überhaupt
Zahlen gelocht sind. Eine LIST-gesteuerte Eingabe mit der Maßgabe, zwei Zahlen aus den
Spalten 2 bis 80 zu entnehmen, führt zum Prograrnmabbruch mit Fehlermeldung, sobald die
Karte der Art 9 gelesen wird. Man umgeht diese Schwierigkeit, indem man den Inhalt jeder
Karte zunächst in eine Struktur liest, die aus einer einstelligen und einer 79-stelligen Zeichen-
kette besteht. Sobald feststeht, daß es sich um eine Karte der Art 1 oder 2 handelt, werden aus
der 79-stelligen Kette durch interne übertragung die beiden Zahlen herausgesucht und nach
entsprechender Umwandlung gespeichert. Dies erreicht man durch eine modiflzierte GET LIST-
Anweisung, bei der die Option STRING (anstelle der impliziten Option FILE) darauf hinweist,
daß die Daten einer intern gespeicherten Quellkette zu entnehmen sind.

4.3.6. Eingefügte Funktionen. In den vorangegangenen Beispielen sind bereits häufig


Fun k t ion sau fr u fe als Operanden in Ausdrücken oder selbst als Ausdrücke ver-
wendet worden. PL/I bietet zahlreiche eingefügte Funktionen, die den Prograrnmieraufwand
erheblich verringern. Die Menge der zur Verfügung stehenden Funktionen hängt davon ab,
welche Kompiliererstufe verwendet werden kann. Man informiert sich deswegen zweckmäßig
anhand des gültigen PL/I-Handbuches.
174 4.3. Einführung in PL/I

Die eingeftigten Funktionen werden wie folgt eingeteilt:


1. Eingefügte Funktionen fur Berechnungen
2. Eingeftigte Funktionen fUr Bedingungen
3. Eingefugte Funktionen fur basisbezogenen Speicher
4. Eingefugte Funktionen für Multitasking
5. Gemischte eingeftigte Funktionen
6. Pseudovariable
Ein g e füg t e Fun k ti 0 n e n für B e r e c h nun gen. Die Funktionen dieser
Gruppe erleichtern die Programmierung arithmetischer oder mathematischer Operationen und
die Handhabung von Ketten und Bereichen. Man unterscheidet eingefügte arithmetische und
mathematische Funktionen, eingefugte Kettenfunktionen und eingefügte Funktionen fur die
Behandlung von Bereichen.
Ein g e füg t e a r i t h met i s c h e Fun k t ion e. n erwarten als Argumente im allge·
meinen Element· oder Bereichsausdrücke. Wenn ein Bereich als Argument auftritt, ist das
Ergebnis der Funktion ebenfalls ein Bereich, wobei die Funktion auf jedes Element des
Bereiches angewendet wird. Die Anweisung
Y = ABS (X);
veranlaßt, wenn X (100) und Y (100) vereinbart war, die Speicherung der Beträge sämtlicher
100 Zahlen des Bereiches X im Bereich Y.
Es gibt arithmetische Funktionen fUr die Datenumwandlung, die Maximum· und Minimum·
bestimmung, die Vorzeichenbestimmung und die Rundung. Mit Hilfe entsprechender Funk·
tionen kann man ferner eine Steuerung der Ergebnisgenauigkeit bei den Grundoperationen
veranlassen.
Die Liste der ein g e füg t e n m a t h e m a t i s c h e n Fun k t ion e n besteht beim
PL/I.F·Kompilierer aus
ATAN (x, y) COSH (x) LOG 10 (x) SQRT (x)
ATAND (x, y)ERF (x) LOG2 (x) TAN (x)
ATANH (x) ERFC (x) SIN (x) TAND(x)
COS (x) EXP (x) SIND (x) TANH(x)
COSD (x) LOG (x) SINH (x)
Das nachgesetzte D bedeutet, daß der beteiligte Winkel im Gradmaß angegeben ist. Die
Argumente können im allgemeinen Element· oder Bereichsausdrücke sein und in vielen Fällen
auch komplexe Werte annehmen.
Bei den ein g e füg t e n K e t t e n fun k t ion können die Argumente im allgemeinen
ebenfalls aus Element· oder Bereichsausdrücken bestehen. Zu diesen Funktionen zählen
INDEX und SUBSTR zum Kettensuchen und zur Teilkettenverarbeitung, LENGTH zur
Bestimmung von Kettenlängen, BOOL zur Booleschen Verknüpfung und eine Anzahl von
Kettenfunktionen fUr spezielle Aufgaben. Die ein g e füg t e n B e r e ich s fun k t ion e n
SUM (a) und PROD (a) - a repräsentiert einen Bereich - errechnen die Summe bzw. das
Produkt aller Bereichselemente. Entsprechend verknüpfen ALL (a) und ANY (a) alle Bit·
ketten eines Bereiches konjunktiv bzw. disjunktiv. Die Funktion POLY (a, x) berechnet ein
Polynom mit Koeffizienten aus dem Bereich a. Zwei andere Funktionen ermitteln die gegen·
wärtigen Grenzen der einzelnen Dimensionen fUr den vorgegebenen Bereich.
Ein g e füg t e Fun k t ion e n für B e d i n gun gen. Diese Funktionen erleichtern
dem Programmierer die Suche für den Grund einer wirksam gewordenen ON·Bedingung.
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung 175

Beispielsweise liefert ONCHAR dasjenige Zeichen, das zum Setzen der CONVERSION-
Bedingung geführt hat.
Gern i s c h tee i n g e füg t e Fun k t ion e n. Erwähnenswert sind die Funktionen
DATE und TIME zur Ausgabe des gegenwärtigen Datums (Jahr, Monat, Tag) bzw. der momen-
tanen Uhrzeit (Stunde, Minute, Sekunde, Millisekunde). In dieser Gruppe befmdet sich ferner
die Funktion L1NENO zur Ermittlung der gegenwärtigen Zeilennummer der Druckdatei und
die Funktion COUNT, mit der man die Anzahl der bei der letzten GET- oder PUT-Anweisung
übertragenen Datenelemente bestimmen kann.
Ps e u d 0 v a r i abi e. Der Aufruf einer eingefligten Funktion gilt als Ausdruck; er kann
folglich überall dort erfolgen, wo ein Ausdruck erlaubt ist, z. B. als Operand eines umfassen-
deren Ausdrucks. Einige eingefligte Funktionen können jedoch auch als Pseudovariable auf-
treten, folglich überall dort stehen, wo Variable zugelassen sind, z. B. auf der linken Seite einer
Ergibtanweisung. In diesen Fällen liefern die eingebauten Funktionen keine Werte, sondern
empfangen Daten.
Die Anweisung
ONCHAR = 0;
in der ON-Einheit einer CONVERSION-Bedingung bewirkt, daß das Zeichen 0 den gegen-
wärtigen Wert der eingebauten Funktion ONCHAR ersetzt und beim neuen Versuch der Um-
wandlung verwendet wird.
GET LIST (SUBSTR (KETTE, I, J));
bewirkt, daß eine Zeichenkette eingelesen wird, von der die J ersten Zeichen in der Zeichen-
kette KETTE ab Zeichen Nr. I gespeichert werden. Hierbei können I und J Bereichsnamen sein,
wenn auch KETTE ein Bereichsname ist und alle Bereiche identische Grenzen besitzen.
Es ist nicht gestattet, Pseudovariable zu schachteln, so daß die Anweisung
SUBSTR (SUBSTR (KETTE, 3, 4), 2,1) = 'A';
zurückgewiesen würde.

4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung. Eine wesentliche


Erleichterung besonders bei der Programmierung umfangreicher Projekte ist die Möglichkeit,
PL/I-Programme in einzelne Blöcke zu unterteilen, die ihrerseits wiederum beliebig geschach-
telte Blöcke enthalten können. Dadurch können Namen lokalisiert und Variablenzuordnungen
beschränkt werden. PL/I unterscheidet PROCEDURE- und BEGIN-Blöcke. Jedes PL/I-Pro-
gramm besteht aus mindestens einer externen, also nicht mehr in einer anderen enthaltenen
Prozedur, der Hau p t pro z e dur, die man an der Eintragung MAIN in der OPTIONS-
Liste der PROCEDURE-Vereinbarung erkennt; sie bleibt während des gesamten Programm-
ablaufs aktiv. Daneben können weitere externe Prozeduren vorhanden sein, die dann getrennt
übersetzt werden müssen. Interne Prozeduren werden stets von einem anderen Block
umschlossen.
Beispiel 8. Die Biegelinie eines beidseitig aufgelagerten Trägers mit StreckenIast wird in dem
Programm auf Tafel 4.52 berechnet. Das Programm besteht aus einer externen Prozedur, der
Hauptprozedur BIEGEL. Darin enthalten ist die interne Funktionsprozedur HORNER, die,
wie die eingefügte Bereichsbehandlungsfunktion POLY, Polynomwerte ermittelt. BIEGEL hat
LIST-gesteuerte Eingabe und erwartet auf Lochkarten die Werte der StreckenIast
qo/(kp/cm), des Elastizitätsmoduls E/(kp/cm 2 ), des Flächenträgheitsmomentes I/cm 4 , der
Trägerlänge Q/cm, der Endpunktkoordinaten a/cm und b/cm und der Schrittweite h/cm.
176 4.3. Einführung in PL/I

Tafel 4.52 Biegelinie eines beidseitig aufgelagerten Trägers

BIEGEL.. PROCEDURE OPTIONS (MAIN),.


1* BIEGE LINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS
MIT STRECKEN LAST *1
DECLARE (00, E, I, L, A, B, H, FAKTOR, Z,
CO (5) INITIAL (1, - 2,0,1,0), Cl (5) INITIAL (4, - 6, 0,1),
C2 (5) INITIAL (12, - 12, 0), C3 (5) INITIAL (24, - 12)) FLOAT,.
GET LIST (00, E, I, L, A, B, Hl..
PUT EDIT ('BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS'
: MIT STRECKENLASr, '00 =',00: KP/CM', 'I =', I,
'CM * * 4', 'E =', E,' KP/CM * * 2', 'L =', L,' CM', 'A =', A,
, CM', 'B =', B, ' CM', 'H =', H, ' CM')
(COLUMN (1), A, A, SKIP (2), A, F (6,2), A, X (7), A, F (8,1), A,
X (6), A, E (12, 15), A, COLUMN (1), A, F (7, 1), A, X (1),
3 (X (6), A, F (7, 1), A)),. PUT SKIP (3),.
IF 00 LE 0 OR E LE 0 OR I LE OOR L LE 0 OR A LT BAND H LE 0
OR A GT BAND H GE 0 THEN DO,. PUT LIST ('EINGABEFEHLER'),.
RETURN,. END,.
PUT EDIT ('X/CM', 'V/CM', 'V"', 'V"" * CM', 'V""" * CM * * 2')
(COLUMN (4), A, X (7), A, X (12), A, X (11), A, X (8), A),.
PUT SKIP (2),. FAKTOR = 00 * L * * 4/(24 * E * I),.
DO Z = AlL BV H/L TO B/L,.
PUT EDIT (Z * L, FAKTOR * HORNER (4, CO, Z), FAKTOR * HORNER
(3, Cl, Z)/L, FAKTOR * HORNER (2, C2, Z)/L * * 2, FAKTOR
* HORNER (1, C3, Z)/L * * 3) (COLUMN (1), F (7,1),4 E (15,5)),.
END,.

HORNER .. PROCEDURE (GRAD, POLKOEFF, ARG),. 1* HORNER·SCHEMA *1


DECLARE (POLKOEFF (5). ARG, F INITIAL (0)) FLOAT,
GRAD FIXED (1), I FIXED (3),.
DO 1= 1 TO GRAD + 1,.
F = F * ARG + POLKOEFF (1),. END,.
RETURN (F),. END HORNER,.
END BIEGEL,.

Eingabe:

2 lE5 1940 600 0 600 10


Ausgabe:

BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS MIT STRECKEN LAST

00= 2.00 KP/CM I = 1940.0 CM * * 4 E = 1.00000E + 05 KP/CM * * 2


L = 600.0CM A=.OCM B = 600.0CM H = 10.0 CM

X/CM V/CM V' V" * CM V'" * CM * * 2

.0 .00000E + 00 9.27835E - 02 .OOOooE + 00 - 3.09278E - 06


10.0 9.27324E - 01 9.26306E - 02 -3.04124E - 05 - 2.98969E - 06
20.0 1.85162E + 00 9.21787E - 02 - 5.97938E - 05 - 2.88660E - 06
30.0 2.76994E + 00 9.14382E - 02 - 8.81443E - 05 -2.78351E-06
40.0 3.67945E + 00 9.04192E - 02 - 1. 15464E - 04 - 2.68041 E - 06
50.0 4.57743E + 00 8.91323E - 02 - 1.41753E - 04 - 2.57732E - 06
60.0 5.46124E + 00 8.75877E - 02 - 1.67010E - 04 - 2.47423E - 06
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung 177

70.0 6.32835E + 00 8.57955E - 02 -1.91237E - 04 - 2.37114E - 06


80.0 7.17636E + 00 8.37663E - 02 - 2.14433E - 04 - 2.26804E - 06
90.0 8.00292E + 00 8.15104E-02 - 2.36598E - 04 - 2.16495E - 06
100.0 8.80584E + 00 7.90378E - 02 - 2.57732E- 04 - 2.06186E - 06
110.0 9.58299E + 00 7.63591 E - 02 - 2.77835E - 04 - 1.95876E - 06
120.0 1.03324E + 01 7.34845E - 02 - 2.96907E - 04 - 1.85567E - 06
130.0 1.10521E + 01 7.04244E - 02 - 3.14948E - 04 - 1.75258E - 06
140.0 1.17403E + 01 6.71891E-02 - 3.31959E - 04 - 1.64949E - 06
150.0 1.23953E + 01 6.37887E - 02 - 3.47938E - 04 - 1.54639E - 06
160.0 1.30155E + 01 6.02337E - 02 - 3.62887E - 04 - 1.44330E - 06
170.0 1.35995E + 01 5.65344E - 02 - 3.76804E - 04 - 1.34021 E - 06
180.0 1.41458E + 01 5.27011 E - 02 - 3.89691 E - 04 -1.23711E - 06
190.0 1.46531 E + 01 4.87441 E - 02 - 4.01546E - 04 -1.13402E-06
200.0 1.51203E + 01 4.46736E - 02 -4.12371E-04 - 1.03093E - 06
210.0 1.55462E + 01 4.05001 E - 02 - 4.22165E - 04 - 9.27837E - 07
220.0 1.59300E + 01 3.62338E - 02 - 4.30928E - 04 - 8.24745E - 07
230.0 1.62706E + 01 3.18850E - 02 - 4.38660E - 04 - 7.21652E - 07
240.0 1.65674E + 01 2.74640E - 02 - 4.45361 E - 04 - 6.18559E - 07
250.0 1.68197E + 01 2.29812E - 02 -4.51031E-04 - 5.15466E - 07
260.0 1.70269E + 01 1.84469E - 02 - 4.55670E - 04 -4.12374E-07
270.0 1.71885E + 01 1.38713E-02 - 4.59278E - 04 - 3.09281 E - 07
280.0 1.73042E + 01 9.26474E - 03 - 4.61856E - 04 - 2.06188E - 07
290.0 1.73737E + 01 4.63760E - 03 - 4.63402E - 04 - 1.03095E - 07
300.0 1.73969E + 01 1.21667E-07 -4.63918E -04 - 2.70372E - 12
310.0 1.73737E + 01 - 4.63725E - 03 - 4.63402E - 04 1.03090E - 07
320.0 1.73042E + 01 - 9.26441E - 03 - 4.61856E - 04 2.06183E - 07
330.0 1.71885E + 01 - 1.38710E - 02 - 4.59278E - 04 3.09275E - 07
340.0 1.70269E + 01 - 1.84465E - 02 - 4.55670E - 04 4.12368E - 07
350.0 1.68197E + 01 - 2.29810E - 02 - 4.51031 E - 04 5.15461 E - 07
360.0 1.65674E + 01 - 2.74637k - 02 - 4.45361E - 04 6.18554E - 07
370.0 1.62706E + 01 - 3.18847E - 02 - 4.38660E - 04 7.21646E - 07
380.0 1.59300E + 01 - 3.62335E - 02 - 4.30928E - 04 8.24739E - 07
390.0 1.55462E + 01 - 4.04998E - 02 - 4.22165E - 04 9.27832E - 07
400.0 1.51203E + 01 - 4.46733E - 02 -4.12371E - 04 1.03092E - 06
410.0 1.46531E + 01 - 4.87438E - 02 - 4.01547E - 04 1.13402E - 06
420.0 1.41458E + 01 - 5.27009E - 02 - 3.89691 E - 04 1.23711 E - 06
430.0 1.35995E + 01 - 5.65341 E - 02 - 3.76805E - 04 1.34020E - 06
440.0 1.30156E + 01 - 6.02335E - 02 - 3.62887E - 04 1.44329E - 06
450.0 1.23953E + 01 - 6.37885E - 02 - 3.47939E - 04 1.54638E - 06
460.0 1.17403E + 01 - 6.71888E - 02 - 3.31959E - 04 1.64948E - 06
470.0 1.10521E + 01 - 7.04243E - 02 - 3.14949E - 04 1.75257E - 06
480.0 1.03324E + 01 - 7.34844E - 02 - 2.96908E - 04 1.85566E - 06
490.0 9.58305E + 00 - 7.63590E - 02 - 2.77836E - 04 1.95876E - 06
500.0 8.80589E + 00 -7.90376E - 02 - 2.57733E - 04 2.06185E - 06
510.0 8.00297E + 00 - 8.15101E - 02 - 2.36599E - 04 2.16494E - 06
520.0 7.17643E + 00 - 8.37662E - 02 - 2.14434E - 04 2.26803E - 06
530.0 6.32842E + 00 - 8.57954E - 02 - 1.91238E - 04 2.37113E - 06
540.0 5.46130E + 00 - 8.75875E - 02 -1.67012E - 04 2.47422E - 06
550.0 4.57748E + 00 - 8.91322E - 02 -1.41754E - 04 2.57731 E - 06
560.0 3.67954E + 00 - 9.04192E - 02 -1.15465E - 04 2.68041 E - 06
570.0 2.77002E + 00 - 9.14380E - 02 - 8.81459E - 05 2.78350E - 06
580.0 1.85169E + 00 - 9.21786E - 02 - 5.97954E - 05 2.88659E - 06
590.0 9.27386E - 01 - 9.26305E - 02 - 3.04141 E - 05 2.98968E - 06
600.0 9.95459E - 05 - 9.27835E - 02 - 1.76970E - 09 3.09278E - 06
178 4.3. Einführung in PL/I

PRO C E DUR E - Bio c k. Jeder PROCEDURE-Block beginnt mit einer PROCEDURE-


Vereinbarung und endet mit der zugehörigen END-Anweisung. Die Marke der PROCEDURE-
Vereinbarung ist der Prozedurname. Im Regelfall wird die Prozedur durch den Aufruf dieses
Namens betreten. Jeder andere mögliche Eingang in eine Prozedur ist durch eine ENTRY-
Vereinbarung zu kennzeichnen. Eine Aktivierung der Prozedur ist nur über Prozedur-Aufrufe
möglich, nicht aber durch den sequentiellen Programmablauf. Bei einer U n t e r pro -
g r am m - Pro z e dur erfolgt der Aufruf in einer speziellen CALL-Anweisung mit dem
Prozedur-Eingangsnamen und gegebenenfalls einer liste der aktuellen Prozedur-Argumente:
CALL RUKUGI (ANFANGSVTH, DELTAV, 5E -6);
ist der Aufruf einer Prozedur mit dem Eingangsnamen RUKUGI und den drei Argumenten
ANFANGSVTH, DELTAV, SE - 6, mit denen die Prozedur arbeiten soll (Tafel 4.53). Den
Argumenten beim Prozedur-Aufruf müssen in der Prozedur Par a met e r gegenüberstehen,
die in der Prozedur vereinbart und beim Aufruf durch die Namen der aktuellen Argumente
ersetzt werden:
RUKUGI: PROCEDURE (Y, DY1, RELGEN);
Falls gewisse Argumente keinen Namen besitzen, weil sie z. B. aus arithmetischen Ausdrücken
bestehen, werden Schein argumente gebildet, deren Namen beim Aufruf die Parameterplätze
einnehmen. Bei einer Fun k t ion s pro z e dur erfolgt der Aufruf wie bei den eingefügten
Funktionen durch das Auftreten des Funktionsnamens mit der Argumentenliste innerhalb eines
Ausdrucks. Die Attribute des Funktionswertes können in seiner PROCEDURE-Vereinbarung
explizit vereinbart werden. Wird darauf verzichtet, so verwendet der Kompilierer die Standard-
attribute, die zu einer Variablen mit dem Prozedurnamen gehören. Wenn eine von der Stan-
dardform verschiedene Vereinbarung des Funktionswertes erfolgt, muß die aufrufende Prozedur
ebenfalls eine entsprechende Vereinbarung des Funktionsnamens in einer RETURNS-
Deklaration enthalten.
PL/I bietet die Möglichkeit, r e kur s i v e Pro z e dur e n, d. h. Prozeduren, die im
aktiven Zustand von sich selbst oder von anderen aktiven Prozeduren erneut aktiviert werden
können, zu defmieren. Die Beendigung einer Prozedur geschieht im allgemeinen durch eine
RETURN-Anweisung. Bei Funktionsprozeduren hat man
RETURN (elementausdruck);
zu schreiben, wobei der Elementausdruck den berechneten Funktionswert darstellt. RETURN
in der Hauptprozedur beendet das Programm. Prozeduren werden außerdem durch eine
GO TO-Anweisung inaktiv, wenn zu einer Stelle verzweigt wird, die außerhalb der Prozedur
liegt. Auf diese Weise kann man sehr einfach Fehlerausgänge für Prozeduren festlegen. Man hat
dabei jedoch zu beachten, daß im Falle der Funktionsprozeduren kein Funktionswert über-
geben wird. Sollte die Stelle, zu der verzweigt wird, in einem Block liegen, der die Prozedur
mit der GO TO-Anweisung nicht direkt, sondern über andere Blöcke aktiviert hat, so werden
diese ebenfalls beendet. - Wenn während des Ablaufs die END-Anweisung der Prozedur
erreicht wird, erfolgt die gleiche Beendigung wie bei der RETURN-Anweisung.

Beispiel 9. Tafel 4.53 enthält ein Programm zur numerischen Berechnung der Flugbahn einer
Raumsonde im Vakuum. Dieses Programm besteht aus der Hauptprozedur SONDE, der
externen Prozedur RUKUGI (mit der internen Prozedur GILL) und den beiden externen
Funktionsprozeduren Fund G. Die Flugbahn wird mit der Runge-Kutta-Gill-Methode
ermittelt, wobei das System
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung 179

Tafe14.53 Flugbahn einer Raumsonde

SONDE.. PROCEDURE OPTIONS (MAIN),.


/* RUNGE-KUTTA-GILL-VERFAHREN ZUR NUMERISCHEN BERECHNUNG
DER FLUGBAHN EINER RAUMSONDE */
DECLARE (ANFANGSVTH (3). DELTA, DELTAV, G, (R, A) EXTERNAL)
FLOAT,
(SCHRITTZAHL, DRUCKSPRUNGZAHL) FIXED (4),
MAXFAK EXTERNAL STATIC FIXED (4) INITIAL (1),
RUKUGI EXTERNAL ENTRV,.
ON OVERFLOW GO TO OVER,. ON FIXEDOVERFLOW GO TO FOVER,.
ON SIZE GO TO DATENF,.
(SIZE).. GET LIST (G, R, ANFANGSVTH (3), ANFANGSVTH (1),
SCHRITTZAHL, DRUCKSPRUNGZAHL)..
A = G * R * R,. ANFANGSVTH (2) = 0,.
IF G LE 0 OR R LE 0 OR ANFANGSVTH (1) LE OOR
ANFANGSVTH (3) LT OOR
2 * A LE ANFANGSVTH (1) * * 2 * (ANFANGSVTH (3) + R) OR
SCHRITTZAHL LE 0 OR DRUCKSPRUNGZAHL LE OOR
DRUCKSPRUNGZAHL GT SCHRITTZAHL THEN 00,.
FALSCHEINGABE .. PUT LIST (G, R, ANFANGSVTH (3), ANFANGSVTH (1).
SCHRITTZAHL, DRUCKSPRUNGZAHL,
'EINGABEFEHLER'),. RETURN,. END,.
PUT EDIT (,RAUMSONDENFLUG IN REINEM VAKUUM',
'HIMMELSKOERPER-RADIUS', R/1000, ' KM',
'SCHWEREBESCHLEUNIGUNG AUF DESSEN',
'OBERFLAECHE', G, ' METER/SEK * * 2',
'GESCHW. FLUGDAUER FLUGHOEHE',
, (M/S) (SEK) (METER)')
(A, SKIP (3), A, F (8), A, SKIP (2), A, SKIP, A,
F (8,3), A, SKIP (3). A, SKIP, A),. PUT SKIP (2),.
PUT EDIT (ANFANGSVTH) (R (FORMAT)),.
FORMAT .. FORMAT (COLUMN (1), F (6),2 E (13,3))..
DELTA = - ANFANGSVTH (1)/SCHRITTZAHL,.
00 K = 1 TO SCHRITTZAHL,.
DELTAV = DELTA,.
CALL RUKUGI (ANFANGSVTH, DELTAV, 5E -6),.
IF MOD (K, DRUCKSPRUNGZAHL) = 0 OR K = SCHRITTZAHL THEN
PUT EDIT (ANFANGSVTH) (R (FORMAT)),. END,.
PUT PAGE EDIT (,EFFEKTIVE MAXIMALSCHRITTZAHL',
MAXFAK * SCHRITTZAHL) (A, F (8)),. RETURN,.
DATENF .. PUT LIST ('FALSCHE ODER ZU GROSSE DATEN AUF DER LOCHKARTE'),.
RETURN,.
OVER.. PUT SKIP (2) LIST (,ABBRUCH WEGEN UEBERLAUF'),. RETURN,.
FOVER .. PUT SKIP (2) LIST (,ABBRUCH WEGEN ZU GERINGER SCHRITTWEITE'),.
END SONDE,.

RUKUGI.. PROCEDURE (V, DV1, RELGEN),.


DECLARE (V (3), VANF (3), VDOPP (3), OANF (3), ODOPP (3).
DV1,RELGEN,DELTA)FLOAT,
ZAEHLER FIXED (4),
(0 (3) FLOAT INITIAL ((3) 0),
MAXFAK EXTERNAL FIXED (4) INITIAL (1).
FAKTOR FIXED (4) INITIAL (1)) STATIC,
MERKER BIT (1)..
ZAEHLER = FAKTOR,. DV1 = DV1/FAKTOR,.
180 4.3. Einführung in PL/I

INTERV .. VANF = V,. OANF = 0;. MERKER = 'O'B,.


GILLER .. V = VANF,. 0 = OANF,. VDOPP = VANF,. ODOPP = OANF,.
CALL GILL (VDOPP, ODOPP, DV1),.
CALL GILL (V, 0, DV1/2),. CALL GILL (V, 0, DV1/2),.
DELTA = MAX (ABS ((V (2) - VDOPP (2))/V (2)),
ABS ((V (3) - VDOPP (3))/V (3)))/15,.
IF DELTA GE 10 * RELGEN THEN 00,. MERKER = TB,. DV1 = DV1/2,.
FAKTOR = 2 * FAKTOR,.
IF FAKTOR GT MAXFAK THEN
MAXFAK = FAKTOR,.
ZAEHLER = 2 * ZAEHLER,.
GO TO GILLER,. END,.
IF DELTA LE 0.15 * RELGEN AND NOT MERKER AND
MOD (ZAEHLER, 2) = 0 THEN 00,. DV1 = 2 * DV1,.
FAKTOR = FAKTOR/2,.
ZAEHLER = ZAEHLER/2,.
GO TO GILLER,. END,.
V = V + (V - VDOPP)/15,.
ZAEHLER = ZAEHLER - 1,.
IF ZAEHLER NE 0 THEN GO TO INTERV,.
GILL .. PROCEDURE(V,O,H),.
DECLARE (V (3), 0 (3), K (3) INITIAL (1), H,
A (4),INITIAL (0.5,0.2928932,1.707107,0.1666667),
B (4) INITIAL (2, 1, 1,2),
C (4) INITIAL (0.5,0.2928932,1.707107,0.5)) FLOAT,
(I, J) FIXED (1), (F, G) EXTERNAL ENTRV,.
00 J = 1 TO 4,.
K (2) = F (V),. K (3) = G (V),.
V = V + H * (A (J) * (K - B (J) * 0)),.
0= 0 + 3 * (A (J) * (K - B (J) * Oll - C (Jl * K,.
END,.
END GILL,.
END RUKUGI,.

F. . PROCEDURE (V),.
DECLARE (V (3), (R, A) EXTERNAL) FLOAT,.
RETURN (- (V (3) + R) * * 2/A),.
END,.

G. . PROCEDURE (V),.
DECLARE (V (3), (R, A) EXTERNAL) FLOAT,.
RETURN (- V (1) * (V (3) + R) * * 2/A),.
END,.

Eingabe:

9.81 6.37E6 200000 2000 100 5

Ausgabe:

RAUMSONDENFLUG IN REINEM VAKUUM

HIMMELSKOERPER-RADIUS 6370 KM

SCHWEREBESCHLEUNIGUNG AUF DESSEN


OBERFLAECHE 9.810 METER/SEK * * 2
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung 181

GESCHW. FLUGDAUER FLUGHOEHE


(M/S) (SEK) (METER)

2000 .OOOE + 00 2.000E + 05


1900 1.088E + 01 2.212E + 05
1800 2.183E + 01 2.415E + 05
1700 3.284E + 01 2.607E + 05
1600 4.392E + 01 2.790E + 05
1500 5.505E + 01 2.963E + 05
1400 6.624E + 01 3.125E + 05
1300 7.749E + 01 3.277E + 05
1200 8.878E + 01 3.418E + 05
1100 1.001E + 02 3.548E + 05
1000 1.115E + 02 3.668E + 05
900 1.229E + 02 3.776E + 05
800 1.344E + 02 3.874E + 05
700 1.459E + 02 3.960E + 05
600 1.574E + 02 4.035E + 05
500 1.689E + 02 4.098E + 05
400 1.805E + 02 4.150E + 05
300 1.920E + 02 4.190E + 05
200 2.036E + 02 4.219E + 05
100 2.152E + 02 4.237E + 05
-0 2.268E + 02 4.243E + 05

EFFEKTIVE MAXIMALSCHRITTZAHL 100

dYl
-=-=1
dv dY2
-=-=-
dt (h + R)2 dY3
-=-=-
dh v· (h + Ri
dv dv dv dv g·R2 dv dv g. R2
(Fluggeschwindigkeit v, Flugzeit t, Flughöhe h, Planetenradius R, Schwerebeschleunigung g
auf der Planetenoberfläche) mit den Anfangsbedingungen
Ydvo) = Vo ; Y2 (vo) = t o ; Y3 (vo) = ho
integriert wird. Die Größen g und R tauchen in verschiedenen externen Prozeduren auf.
Durch entsprechende EXTERNAL-Vereinbarungen sind ihre Namen über die defmierende
Prozedur hinaus bekannt.
Die Eingabe ist LIST-gesteuert, die Ausgabe erfolgt formatiert. Das Programm fUhrt mindestens
so viele Berechnungsschritte aus, wie eingabeseitig festgelegt worden ist, im Beispiel also
100 Schritte. Nicht jeder Schritt braucht gedruckt zu werden; im Beispiel bedeutet 5 als letzte
Eingabezahl, daß nur jeder flinfte Wert ausgegeben werden soll. - Falls die vorgeschriebene
Rechengenauigkeit es erfordert, werden zeitweise weitere Zwischenpunkte errechnet. Die
Schlußzeile des Ausdrucks gibt nun an, wieviele Rechenschritte hätten ausgeführt werden
müssen, wenn das gesamte Intervall mit der kleinsten verwendeten Schrittweite hätte durch-
laufen werden müssen.
BEG I N - Bio c k. Ein BEGIN-Block beginnt mit der BEGIN-Vereinbarung und endet
mit der zugehörigen END-Anweisung. Die BEGIN-Anweisung braucht nicht unbedingt eine
Marke zu tragen. Ein BEGIN-Block wird im Regelfall im Zuge der normalen Ablauffolge
aktiviert, er kann aber auch über eine GO TO-Anweisung zur BEGIN-Vereinbarung betreten
werden. Ein BEGIN-Block wird dadurch beendet, daß entweder die END-Anweisung erreicht
182 4.3. Einführung in PL/I

wird, oder daß eine GO TO-Anweisung zu einer außerhalb dieses Blocks liegenden Stelle
auszuführen ist. Alle zwischengestuften Blöcke werden dabei ebenfalls beendet. Von der
Möglichkeit, ein Programm in PROCEDURE-Blöcke aufzuteilen, macht man hauptsächlich
dann Gebrauch, wenn das Problem aus mehreren, nur lose zusammenhängenden Teilen
besteht, die jedes für sich programmiert werden sollen, oder wenn Bausteine anderer Pro-
gramme einzubauen sind. Dagegen bieten sich BEGIN-Blöcke an, wenn es hauptsächlich um
eine sparsame Speicherbelegung geht und man z. B. dynamische Bereichszuweisungen
wünscht. In dem Programm zur Matrixinversion und Gleichungsauflösung könnte man den
Bereich A so speichern, daß nur die Plätze zugewiesen werden, die man zur Speicherung
der M . N Matrixelemente benötigt, indem man A (M, N) als Bereichsvereinbarung deklariert.
Da die in einem Block erforderlichen Platzzuweisungen während des Programmablaufs bei
Betreten dieses Blockes in einem ,,Prolog" erfolgen, setzt die Vereinbarung A (M, N) voraus,
daß dann Mund N schon bekannt sind, also in einem darüberliegenden Block vereinbart und
mit Werten versorgt sein müssen. Die betreffenden Anweisungen des Programms mit
dynamischer Bereichszuweisung könnten so aussehen:
STiFEL: PROCEDURE OPTIONS (MAIN);
DECLARE (M, N) FIXED (2); ...
GET LIST (M, N); ...
MATlN: BEGIN;
DECLARE A(M, N) FLOAT (16); ...
END MATlN; ...
END STiFEL;
Nur im Block MATIN ist hierin dem Bereich A die notwendige Anzahl von Speicherplätzen
zugewiesen.
S p eie her p I atz z u 0 r d nun g. Die Zuordnung von Speicherplatz zu Variablen kann
entweder s tat i s c h oder dyn ami s c h erfolgen. Im ersten Fall bleibt die Zuordnung
ungeändert, solange das Programm abläuft, im zweiten Fall gibt die Variable ihren Platz frei,
sobald ihr Block verlassen wird, bzw. der Programmierer eine entsprechende Anweisung erteilt.
PL/I-Programme arbeiten meistens mit dynamisch zugeordneten Variablen. Hierin unter-
scheidet man nochmals die Typen AUTOMATIC mit blockgesteuerter und CONTROLLED
bzw. BASED mit anweisungsgesteuerter Speicherzuordnung.
G ü I t i g k e i t s b e r e ich der Ver ein bar u n g von N a m e n. Innerhalb eines
Programms kann ein Name verschiedene Bedeutungen haben, von denen während des Ablaufs
jeweils nur eine gültig ist. Wenn ein Programm aus verschiedenen, unabhängig voneinander
programmierten Teilen besteht, braucht daher im allgemeinen keine besondere Vorsorge
bezüglich der Wahl von Namen getroffen zu werden, wenn die Regeln über ihren Gültigkeits-
bereich beachtet werden: Der gesamte Programmtext eines Blockes zwischen der PROCEDURE-
bzw. BEGIN-Anweisung und der zugehörigen END-Anweisung heißt e n t hai t e n im
Bio c k. Davon heißt derjenige Teil in te r n i m Bio c k, der in keinem darin geschach-
telten Block enthalten ist. Die Marken einer PROCEDURE- bzw. BEGIN-Anweisung und jeder
ENTRY-Anweisung sind nicht in ihrem Block enthalten, sondern intern zu dem enthaltenden
Block. Der Gültigkeitsbereich eines Namens hängt nun davon ab, ob eine explizite, eine im-
plizite oder eine textabhängige Vereinbarung vorliegt. Ein Name gilt als ex pli z i t verein-
bart, wenn er in einer DECLARE-Anweisung oder in einer Parameterliste auftritt, oder wenn
er als Anweisungsmarke oder als Marke einer PROCEDURE- oder ENTRY-Vereinbarung
auftritt. Ein explizit vereinbarter Name ist in dem Block gültig, in dem die Vereinbarung
4.3.7. Blockstruktur. Programmablaufsteuerung. Speicherplatzzuweisung 183

Tafe14.54 Gültigkeitsbereiche von Vereinbarungen

A A' S S' L L' LU P Q Z N N' B X C Y E D M U


A: PROCEDURE OPTIONS (MAINI;
DECLARE S CHARACTER (51;
L: P=Q;
CALL Z (31;
GET LIST (S, NI;
B: BEGIN;
DECLARE X (NI;
CALL C;
C: PROCEDURE;
DECLARE S FLOAT(61 EXTERNAL;
CALL Y (X (lI, EI;
CALL D;
END C;
D: PROCEDURE;
L: M = 1;
END D;
END B;
E: END A;
Y: PROCEDURE (U, LI;
DECLARE L LABEL, S FLOAT(61
EXTERNAL;
A: IF U < S THEN RETURN; ELSE GO TO L;
Z: ENTRY (NI;
U= N;
GOTO A;
ENDY;

intern ist, wobei jedoch alle diejenigen darin enthaltenen Blöcke ausgenommen sind, in denen
sich eine erneute explizite Vereinbarung desselben Namens befindet. - Tex tab h ä n gig
vereinbart ist ein nicht explizit vereinbarter Name, der z. B. auf der linken Seite einer Ergibt-
anweisung, vor dem Ergibtzeichen einer OO-Anweisung oder in einer GET-Anweisung auftritt
oder als Prozedurname in einer CALL-Anweisung oder in einem Funktionsaufruf verwendet
wird. Letztere erhalten automatisch die Attribute ENTRY und EXTERNAL. Eine text-
abhängige Vereinbarung wirkt wie eine explizite Vereinbarung intern zur umfassenden
ex t ern e n Prozedur. Innerhalb des Gültigkeitsbereiches einer expliziten Vereinbarung
kann ein Name nicht erneut textabhängig erklärt werden. - Ein Name gilt als i m pli z i t
vereinbart, wenn er weder explizit noch textabhängig erklärt worden ist. Der Gültigkeits-
bereich ist der gleiche wie bei textabhängiger Vereinbarung. Wenn z. B. fälschlicherweise
B = A + U; programmiert worden ist anstelle von B = A + V; und U sonst nicht vorkommt,
gilt U als implizit vereinbart. Eine implizite Vereinbarung wirkt wie eine textabhängige
Vereinbarung.
Ein Name, der sogar in einer anderen externen Prozedur wiedererkannt werden soll, ist in
beiden Vereinbarungen durch das Attribut EXTERNAL zu kennzeichnen. Dateinamen und
die Eingangsnamen externer Prozeduren erhalten standardmäßig das EXTERNAL-, alle
anderen Vereinbarungen das INTERNAL-Attribut. tafel 4.54 zeigt ein willkürlich konstruier-
tes Programm, bei dem die einzelnen Gültigkeitsbereiche rechtsseitig durch senkrechte Striche
angedeutet sind. Die einzelnen Bedeutungen eines mehrfach benutzten Namens sind dabei
durch angehängte Apostrophs angedeutet.
5. Probleme beim Einsatz eines Digitalrechners

Zur Lösung technisch-wissenschaftlicher Aufgaben gehören in den meisten Fällen umfang-


reiche numerische Berechnungen, die den Einsatz eines Digitalrechners wünschenswert erschei-
nen lassen. Hierbei ergeben sich eine Fülle von Problemen, die in diesem Abschnitt zumindest
angedeutet werden sollen.
Ein technisches Problem präsentiert sich zunächst einmal so eingekleidet, daß eine eingehende
Untersuchung erforderlich ist, um den mathematischen Kern herauszuschälen. Ist das endlich
geschafft, so fängt die eigentliche Arbeit erst an, denn nun beginnt die Suche einer geeigneten
Lösungsmethode. Man wird ziemlich schnell entscheiden können, ob eine manuelle Berechnung
genügt oder ob ein Digitalrechner einzusetzen ist - schon davon hängt die Wahl der Methode
ab. Einen Entschluß, manuell zu rechnen, sollte man aber in jedem Falle nochmals gründlich
überprüfen, denn die Erfahrung zeigt, daß häufIg mit einer Erweiterung der ursprünglichen
AufgabensteIlung zu rechnen ist, so daß man sich schließlich wegen der Fülle des Zahlenmaterials
doch flir den Digitalrechnereinsatz entscheiden wird.
Wenn die Ausrechnung einem Digitalrechner übertragen werden soll, wird man sich zunächst in
dessen Programmbibliothek umsehen, ob für eine solche oder eine ähnliche Aufgabe bereits ein
Programm existiert, welche Berechnungsmethode dabei verwendet worden ist, mit welcher
Genauigkeit die Resultate ermittelt werden - womit auch die Frage nach der erforderlichen
Rechenzeit verbunden ist -, welche Eingabedaten in welcher Form erforderlich sind, und wie
die Ergebnisse ausgegeben werden. Im günstigsten Falle entspricht das vorhandene Programm
allen Erwartungen, so daß die Lösung der gestellten Aufgabe damit möglich ist. Anderenfalls
muß ein eigener Weg gesucht werden. Nur selten besteht die Aufgabe aus einer Ansammlung
geschlossener Formeln, in die man nur die Eingangswerte einzusetzen braucht. HäufIg steckt
in der Aufgabe z. B. die Suche nach Nullstellen algebraischer oder transzendenter Funktionen,
die Notwendigkeit, Werte einer in Tabellenform vorliegenden, vielleicht empirischen Funktion
zu interpolieren, gewöhnliche oder partielle Differentialgleichungen numerisch zu integrieren.
Für jede dieser Aufgaben bieten sich eine Fülle numerischer Verfahren an, unter denen es kein
generell bestes gibt. Vielmehr muß man sehr sorgfältig prüfen, welche Methode der konkreten
Aufgabe am ehesten angepaßt ist. Das hängt sehr davon ab, wie genau die Eingabewerte sind,
wie gut das Problem konditioniert ist, welche Genauigkeitsforderungen an die Ergebnisse
gestellt werden, welchen Einfluß also die einzelnen Fehlerarten haben dürfen.
M e ß wer t feh I e r werden von au~n in den Rechner hineingetragen. Ihre Größenordnung
zu kennen ist für die Aufstellung des Programms unerläßlich, um die Genauigkeit der Ergeb-
nisse abschätzen und die Datenausgabe entsprechend steuern zu können. Irr t ü m e r bei der
manuellen Dateneingabe darf man nicht einfach leugnen. Daher müssen im Programm so weit
wie möglich Plausibilitätskontrollen eingebaut werden.
U m w a n d I u n g s feh I e r entstehen bei der Eingabe und bei der Ausgabe von Daten da-
durch, daß einerseits die Anzahl der speicherbaren Stellen einer Zahl begrenzt ist, daß anderer-
seits die interne Zahlendarstellung, zumindest wenn man - wie bei technischen Problemen
5. Probleme beim Einsatz eines Digitalrechners 185

fast ausnahmslos erforderlich - Gleitpunktzahlen verwendet, dual ist. Der Digitalrechner


verwendet dann statt der wahren Eingabewerte nur Näherungswerte; statt der daraus berech-
neten wahren Resultate gibt er nur genäherte Werte aus. Die Dezimalzahl 0,1 z. B. stellt sich
im Dualsystem als periodischer Dualbruch 0,00011 dar, so daß 0,1 in keinem Dualrechner

°
exakt berechnet werden kann. Bei Verwendung einer 21-bit-Mantisse beträgt die Abweichung
etwa 2- 25 = 3 . 10- 8 • Wenn nun ein Verfahren mit dem Anfangswert und der Schritt-
weite 0,1 arbeitet, hat man bei Ausgabe dieser Werte spätestens nach 17 Schritten mit Ab-
weichungen in der sechsten Ziffer nach dem Komma zu rechnen, da ausgabeseitig bei der
Umwandlung noch gerundet wird. Der bei der Umwandlung entstandene Fehler wächst von
Schritt zu Schritt und führt nach einigen hundert Rechnungen dazu, daß mit ganz anderen
als den gewünschten Werten gerechnet wird. - Umwandlungsfehler entstehen außerdem bei
Exponentenumrechnungen zwischen externer dezimaler und interner dualer Gleitpunkt-
darstellung.
Run dun g s feh I e r entstehen bei den Verknüpfungen insbesondere von Gleitpunkt-
zahlen durch Additionen, Subtraktionen, Multiplikationen und Divisionen dadurch, daß für
die Resultate der Verknüpfungen nur ebensoviele Stellen zur Verfügung stehen wie für die
einzelnen Operanden. Durch Rundung bemüht man sich zwar, eine möglichst gute Näherung
zu gewinnen, dennoch bleibt meistens ein Fehler übrig. Einmal entstandene Rundungsfehler
können sich fortpflanzen und das Resultat einer längeren Kette von Operationen vollständig
verfälschen, wie dies bei schlecht konditionierten Problemen geschieht. Um eine einigermaßen
exakte Lösung zu erhalten, muß hier mit erhöhter Genauigkeit gerechnet werden, d. h. für die
Darstellung der Zahlen müssen mehr Stellen als sonst üblich zur Verfügung gestellt werden.
In vielen Programmiersprachen sind spezielle Sprachelemente für das Rechnen mit erhöhter
Genauigkeit vorgesehen, so daß keine besonderen programmtechnischen Schwierigkeiten ent-
stehen. Man muß sich allerdings vergegenwärtigen, daß die Verwendung erhöhter Genauigkeit
mit einem erheblichen Ansteigen der Rechenzeit verbunden ist. - Im allgemeinen sind die
Rundungsfehler jedoch wesentlich kleiner als die durch die Meßungenauigkeit eingeschleppten
Fehler; dennoch muß man in der Lage sein, den Einfluß der Rundungsfehler abzuschätzen,
um das Programm daraufhin testen zu können, ob es frei von Programmierfehlern ist.
Aus der Wahl des Verfahrens ergeben sich weitere mögliche Fehlerquellen. Wenn z. B. eine
Funktion aus einer Wertetabelle durch Interpolation berechnet wird, wenn man mit Hilfe
der Simpson-Regel integriert oder Differentialgleichungen mit Runge-Kutta oder Differenzen-
verfahren löst, weicht man von dem wahren Ergebnis dadurch ab, daß man statt der eigentlich
geltenden Formeln Näherungsausdrücke benutzt, die durch Abbruch in der Potenzreihen-
entwicklung der gesuchten Funktion entstehen. Die hierbei auftretenden Abweichungen nennt
man Ab b ru c h feh I er. Durch Grob- und Feinrechnungen kann man ein gewisse
Korrektur vornehmen, wobei jedoch zu beachten bleibt, daß einmal entstandene Abbruchfehler
bei weiteren Rechenschritten sich als Ungenauigkeiten der Eingangswerte niederschlagen, so
daß die dann entstehenden Resultate in mehrfacher Hinsicht ungenau sind. Über eine größere
Distanz hinweg liefert daher eine Korrektur durch Grob- und Feinrechnung häufig keine
brauchbaren Resultate.

Zur Nullstellenbestimmung von Funktionen verwendet man gerne das Newtonsche Näherungs-
verfahren, das unter gewissen Voraussetzungen bei jedem Rechenschritt eine Verbesserung des
momentanen Schätzwertes vornimmt
186 5. Probleme beim Einsatz eines Digitalrechners

Das Iterationsverfahren ist beendet, wenn "neu = Xalt gilt. Praktisch kann man darauf im
allgemeinen nicht warten, da es infolge von Rundungsfehlern zu Oszillationen kommen kann.
Es ist üblich, wenn auch nicht immer ganz korrekt, die relative oder absolute Differenz
zwischen x alt und x neu als Kriterium zu verwenden, also das Verfahren zu beenden, sobald
der Unterschied unterhalb einer vorgegebenen Schranke liegt. Vorsichtshalber sollte dabei
außerdem festgelegt werden, wie oft maximal iteriert werden darf, um Endlosschleifen infolge
zu hoher Genauigkeitsforderungen zu vermeiden. Man kann aber auch festlegen, daß das
Verfahren dann zu beenden ist, wenn die Differenzen aufeinanderfolgender Werte betrags-
mäßig nicht mehr fallen, da sich dann die Rundungsfehler bemerkbar machen, jedenfalls so-
bald man der wahren Lösung nahe genug ist. - Man muß also mit einer Abweichung vom
wahren Wert rechnen. Wenn nun, wie bei der Nullstellensuche von Polynomen durch Ab-
spalten eines Linearfaktors, eine Vereinfachung des Problems unter Verwendung des errech-
neten Wertes vorgenommen wird, ist anzunehmen, daß die weiteren Rechnungen entsprechend
fehlerbehaftet sind. Es empfiehlt sich, am Ende die erhaltenen Werte nur als Schätzwerte für
eine Nachiteration am ursprünglichen Problem zu verwenden, bei der Nullstellenberechnung
von Polynomen also jede einzelne Nullstellenberechnung unter Verwendung des ursprüng-
lichen Polynoms zu verbessern.
Nachdem die Problemanalyse so weit fortgeschritten ist, daß die Entscheidung über die
Berechnungsmethode getroffen worden ist, beginnt die Vor b e r e i tun g der Pro-
g r a m m i e run g. Zunächst legt man M e d i u m und F 0 r m der Ein - und
Aus gab e d a t e n fest. Sofern die Eingabedaten über Lochkarten und in einem bestimmten
Format gelesen werden, benutzt man dazu zweckmäßig ein Kar t e ne i n t eil u n g s-
f 0 r m u I ar. Tafel 4.7 zeigt eine solche Karteneinteilung.
Man achte weiterhin darauf, daß ausgabeseitig nicht nur die Ergebniswerte erscheinen, sondern
daß dabei auch alle Eingabewerte ersichtlich sind. Wenn die Ausgabe über einen Drucker
erfolgt, legt man die Ausgabeform in einem D r u c k b i I d fest, in dem für variable Daten
die üblichen Bezeichnungen verwendet werden, nämlich X für den Ausdruck eines beliebigen
Zeichens, 9 für eine Dezimalziffer , Z für eine Dezimalziffer mit Unterdrückung führender
Nullen, das Minuszeichen für die Vorzeichenausgabe mit der Maßgabe, ein Minuszeichen bei
negativen, ein Leerzeichen bei positiven Zahlen zu drucken (Tafel 4.8).
Die Pro g r a m m i e run g beginnt mit der Aufstellung eines Pro g r a m m abi auf -
pi an es, gegebenenfalls auch eines Da t e n fl u ß P I a n es. Für die Niederschrift des
Programms verwendet man, wenn irgend möglich, vorgedruckte Programmformulare, schon
um zu lange Zeilen zu vermeiden, und vor allem, um Irrtümer beim Ablochen des Programms
weitgehend auszuschließen. Das gelochte Programm listet man auf und vergleicht es mit der
Niederschrift, die man danach nicht mehr verwenden sollte.
Bevor das Programm erstmalig übersetzt und getestet werden kann, müssen T e s t d a t e n
zusammengestellt werden, mit deren Hilfe das Programm vollständig auf Funktionstüchtigkeit
geprüft werden soll. Folglich sind die Daten so auszuwählen, daß jeder Teil des Programms
wenigstens einmal dabei angesprochen wird. Zweckmäßig notiert man sich bei den einzelnen
Testdatensätzen, welche Reaktion man jeweils darauf vom Programm erwartet. Dazu gehört
auch, daß man sich die numerischen Testresultate in entsprechender Genauigkeit vorher
verschafft, wobei die einzugebenden Testdaten hierbei als exakte Werte anzusehen sind. Man
darf sich daher nicht damit begnügen, derartige Resultate z. B. mit dem Rechenschieber zu
ermitteln. Die Auswahl der erforderlichen Testresultate erfolgt wiederum so, daß alle Teile des
Programms abgedeckt werden. Bei größeren Aufgaben sollte man das Programm für diese
5. Probleme beim Einsatz eines Digitalrechners 187

Testzwecke SO ergänzen, daß auch Zwischenresultate gedruckt werden, um das Testen zu


erleichtern.
Beim übersetzen des Programms erhält man eine Aufstellung der vom übersetzer entdeckten
formalen Fehler -logische Fehler herauszusuchen bleibt dem Programmierer überlassen. Die
Fehlerliste erscheint dabei meistens in verschlüsselter Form mit Angabe der Zeilennummer der
fehlerhaften Anweisung und einem Fehlercode, dessen Bedeutung man dem zur Anlage gehöri-
gen übersetzerhandbuch entnehmen kann. Je nach Güte des übersetzers wird diese Fehler-
erläuterung mehr oder weniger zutreffend sein. Es empfiehlt sich zu versuchen, alle ent-
standenen Fehlermeldungen zu analysieren, damit eine wirkungsvolle Korrektur vorgenommen
werden kann. Es kann allerdings auch vorkommen, daß ein Fehler derart viele Folgefehler
nach sich zieht, daß eine vollständige Aufklärung unmöglich ist. - Bei der anschließenden
Korrektur des Programms ist zu prüfen, ob der bisherige Programmablaufplan ebenfalls zu
ändern ist, denn alle Programmunterlagen sollten stets auf dem neuesten Stand gehalten
werden.
Einer fehlerfreien übersetzung schließt sich der erste Testlauf an. Im besten Falle liefert das
Programm Resultate, die man überprüfen kann; häufig verirrt es sich aber in einer Endlos-
schleife, die auflogische Fehler im Programm zurückzufiihren ist. Dann wird man anhand eines
Speicherabzugs versuchen, die Schleife zu lokalisieren und die Fehler zu finden. Es kann dabei
vorkommen, daß das Programm sich selbst zerstört hat, so daß im Speicherabzug keine brauch-
baren Informationen mehr zu fmden sind. In einem solchen Falle leistet ein in den meisten
Betriebssystemen vorhandenes überwachungsprogramm TRACE gute Dienste, das während der
Rechnung laufend die wichtigsten Registerinhalte ausdruckt. Nach entsprechender Korrektur
beginnt man mit einem neuen Testlauf, bis schließlich Resultate geliefert werden, die alsdann
mit den errechneten Testresultaten zu vergleichen sind. Sowohl infolge von Umwandlungs- und
Rundungsfehlern als auch infolge von Programmfehlern können hierbei Unterschiede auftreten,
so daß die Ursache etwaiger Abweichungen genau zu klären ist. Hierbei empfiehlt sich wiederum
die Ausgabe und Kontrolle möglichst vieler Zwischen werte. Wenn das Programm so weit
getestet worden ist, daß keine Fehler mehr festzustellen sind, beginnt die Pro g r a m m-
D 0 k urne n tat ion. Diese vom Programmierer meist als lästig empfundene Arbeit kann
nicht hoch genug eingeschätzt werden, denn nur wenn sie sorgfältig ausgefiihrt worden ist,
kann man einerseits erfolgreich mit dem Programm arbeiten, andererseits spätere Änderungen
in vernünftiger Zeit vornehmen. Zur Programmdokumentation gehören
1. Datenflußplan
2. Operator-Anweisung
3. Programm-Kurzbeschreibung
4. Lochkarten- und sonstige Satzeinteilungen
5. Druckbild
6. Ausflihrliche Programmbeschreibung
7. Programmablaufplan
8. Programmausdruck
9. Vom übersetzer gelieferter Ausdruck
10. Aufstellung der Testdaten mit Abschätzung der Testergebnisse
11. Testspiele

Zu den Programmunterlagen gehören außerdem das Quell- und das Maschinencodeprogramm


auf den entsprechenden Datenträgern.
188 5. Probleme beim Einsatz eines Digitalrechners

Obige Aufstellung gilt fUr selbständige Programme. Bei dem Aufbau einer Programmbibliothek
ist andererseits großer Wert darauf zu legen, eine möglichst große Anzahl von Unterprogram-
men zur Verfügung zu haben, um komplexere Aufgaben mühelos durch einen bausteinartigen
Zusammenbau vorhandener Unterprogramme zu lösen. Die Dokumentation eines Unter-
programms geschieht getrennt fUr das Unterprogramm und für das zugehörige Test- oder
Rahmenprogramm. Bei der Unterprogrammdokumentation entfallen meistens die Punkte, die
sich auf die Ein- und Ausgabe von Daten beziehen, da nur in Ausnahmefallen vom Unter-
programm her externe Datenbewegungen veranlaßt werden.
An die Stelle der Operator-Anweisung tritt beim Unterprogramm die Benutzer-Anweisung,
worin der Unterprogrammaufrufund die Parameterübergabe genau zu schildern sind. ln der
ausflihrlichen Programmbeschreibung sind bei Unterprogrammen die Hinweise auf Rechen-
genauigkeit und Rechenzeit von besonderer Wichtigkeit. Die Programmbibliothek einer DVA
darf nicht einer Programmsammlung gleichen, in der sich jedes Stück von den anderen durch
besondere Eigenheiten abhebt, sondern es muß dafür gesorgt werden, daß die Unterprogramme
einheitlich behandelt werden können, indem z. B. eine einheitliche Aufrufform verwendet
wird. Sofern die Unterprogramme in einer problemorientierten Sprache verfaßt wurden, sind
diese Forderungen zum größten Teil von selbst erfiillt, nicht aber bei Unter programmen in
maschinenorientierter Sprache.
Nur wenn die Programmbibliothek alle Dokumentationen vollständig enthält, wenn sie über-
sichtlich angeordnet ist und wenn sie stets auf dem neuesten Stand gehalten wird, kann sie
wirkungsvoll eingesetzt werden und damit die Menge der Probleme, die sich beim Einsatz
eines Digitalrechners ergeben, wesentlich reduzieren.
6. Anwendungen der Datenverarbeitung im Bauwesen

Die elektronische Datenverarbeitung hat seit ihren Anfangen bei den Bauingenieuren großes
Interesse gefunden. Einer der maßgebenden Pioniere der Computerentwicklung, Konrad Zuse,
ist von Haus aus Bauingenieur. Diese Interessenkombination muß einen nicht verwundern,
denn von der Planung bis zur Fertigstellung eines Bauwerkes im Hoch· oder Tiefbau fallen im
allgemeinen große Mengen von Zahlen und anderen Daten an, die in umfangreichen Rechen·
operationen zu verarbeiten sind. Nicht zuletzt auf ihnen gründen wichtige Entscheidungen
während der Planung und Fertigung. Solchen Aufgaben ist die automatische Datenverarbeitung
wie keine andere Rechenhilfe zuvor in hohem Maße gewachsen.
Um die DV für seine Zwecke zu nutzen, legte der Bauingenieur zunächst die ihm geläufigen
Rechenverfahren der Programmierung zugrunde. Beim Einsatz der DVA ergab sich aber rasch
eine Rückwirkung auf das jeweilige Fachgebiet, das heißt, die Möglichkeiten der DV verändern
die Betrachtungsweise und teilweise auch die Arbeitsweise der Bauingenieure. Neue Verfahren
wurden und werden entwickelt und programmiert, die den Fähigkeiten der Rechner besser
angepaßt sind. Zum Beispiel wird der in der Mathematik schon lange eingeführte Matrizenkalkül
wegen seiner übersichtlichen Programmierbarkeit nun auch in der Statik verwendet. In diesem
Zusammenhang seien die Obertragungsmatrizen für Durchlaufträger , die Methode der fmiten
Elemente sowie die Matrizenverfahren für Fachwerke erwähnt.
Auch Problemstellungen, die bei den bisher zur Verfügung stehenden Rechenhilfen schon
einfach wegen des zu großen Arbeitsaufwandes unbewältigt bleiben mußten, können nun durch
die DV mit ihren hohen Rechengeschwindigkeiten gelöst werden. Es wird jetzt möglich, auch bei
umfangreichen Planungsaufgaben mehrere Varianten durchzurechnen, um die beste Lösung zu
fmden. Z. B. auf den Straßenbau angewendet bedeutet das, daß sich die optimale Gradiente
elektronisch ermitteln läßt, wobei die Optimierung auf verschiedene Ziele hin erfolgen kann:
auf ein Minimum an Baukosten, auf ein Minimum an Betriebskosten, aber auch auf ein Minimum
an Erdbewegungen, Brückenflächen oder ähnlichem.
Ein umfassender Einsatz der DV erfordert eine "Integration", das heißt, daß die Arbeitsgänge
zusammengefaßt werden und ineinandergreifen. In einer ersten Integrationsstufe werden mehrere
Teilprobleme durch ein übergeordnetes Programm in einem Arbeitsgang gelöst. Ein Beispiel: Bei
der Planung einer Brücke wird man die Querschnittsberechnung, die Aufstellung und Auswertung
der Einflußlinien sowie die Spannungsnachweise geschlossen behandeln. Solche Teilintegrationen
von Programmen sind schon für viele Gebiete des Bauwesens erreicht. Ziel der Entwicklung aber
ist, für a 11 e Aufgaben des Bauwesens ein automatisch ablaufendes Programmsystem aufzu-
stellen. Der Ablauf soll regelbar sein, das heißt, er muß nach Bedarf gestoppt, verändert und
wiederholt werden können. Alle Zwischenergebnisse werden in einem Speichersystem verwaltet.
Sie müssen dabei einzeln abrufbar und geschützt sein. Ein derartiges baukastenartig aufgebautes
Informationssystem wird zur Zeit erarbeitet.
Was den Einsatz der DV in der Berufspraxis angeht, so wird der Ingenieur nach wie vor einfache,
wenig umfangreiche und leicht prüfbare Berechnungen mit dem Rechenschieber oder mit den
herkömmlichen Rechenmaschinen, zu denen besonders die elektronsich arbeitenden Tischrechner
190 6. Anwendung der Datenverarbeitung im Bauwesen

zu zählen sind, durchftihren. Aber er muß wissen, wann für seine Probleme die Verwendung
einer DYA sinnvoll wird. Zur Erleichterung der Rechen- und Schreibarbeit bei kurzen, in sich
geschlossenen Rechengängen wird ein Kleincomputer bereits gute Dienste leisten. Bei schwieri-
gen, umfangreicheren und schlecht kontrollierbaren Berechnungen wird die Frage, ob der Ein-
satz einer DYA sinnvoll ist, zu bejahen sein. Dies gilt vor allem dann, wenn es sich um ständige
Wiederholung derselben oder ähnlicher Arbeitsgänge handelt. Es empfiehlt sich zuerst festzu-
stellen, ob für die vorliegende Aufgabe bereits ein Programm existiert. Das kann sich lohnen, weil
die Programmbibliotheken der Computerfirmen und der Rechenzentren heute schon recht
umfangreich sind.
Zur Anwendung eines Bibliotheksprogrammes muß der Benutzer sein Problem präzise formu-
lieren und die erwarteten Ergebnisse möglichst abschätzen. Er sollte die Programmbeschreibung
so genau studieren, daß er den Ablauf der einzelnen Programmschritte übersehen und die
zugrunde gelegten Annahmen beurteilen kann. Dann sind die Eingangsdaten aufzubereiten und
auf ihre Richtigkeit zu überprüfen. Nur bei Beobachtung größter Sorgfalt kann man brauchbare
Ergebnisse erwarten. Anfallende Ergebnisdaten sollten jeweils stichprobenartig kontrolliert
werden. Nach dem Programmablauf kommen die gewiinschten Resultate meist in Form von
Tabellen vom Rechenzentrum zurück. Diese Ergebnisdaten müssen nun gedeutet und genutzt
werden. Bei guten Programmen enthält der Ausdruck außer den Eingabedaten genügend
erläuternden Text und in übersichtlicher Form nur (!) das notwendige Zahlenmaterial. Im
Yermessungswesen und im Straßenbau ist es zweckmäßig, die Ergebniswerte durch auto-
matische Zeichengeräte direkt graphisch darstellen oder entsprechende Pläne anfertigen zu
lassen. Auch werden oft die Ergebnisse auf Karten oder Streifen gestanzt und erneut als
Eingabewerte für anschließende Programme verwendet.
Wird für die gestellte Aufgabe kein brauchbares allgemeines Programm gefunden, so kann ein
spezielles Programm in einer problemorientierten Sprache geplant und neu aufgestellt werden
- vorausgesetzt, der Aufwand lohnt sich (s. Abschn. 3 und 4, in denen das Programmieren
besprochen ist). Bei der Mathematisierung, dem ersten Schritt des Programmierens, greife
man zweckmäßig aufYerfahren zurück, die eine möglichst große innere Häufigkeit ergeben,
bei denen sich also der Rechenablauf auf wenige kurze, nach Bedarf häufig eingesetzte Pro-
grammteile stützt. In der Statik zum Beispiel sind Iterationsverfahren, Obertragungsverfahren
und Matrizenoperationen unter diesem Gesichtspunkt ideal. Ein spezielles Programm kann
man unter verschiedenen Aspekten planen. In einem Fall möchte man ein schnelles Programm
erreichen, im anderen möglichst wenig Speicherplatz belegen, vielleicht strebt man aber auch
besondere Anschaulichkeit und leichte Lesbarkeit an. Ein Gesichtspunkt schließt im wesent-
lichen die beiden anderen aus oder schränkt sie zumindest ein. Die äußere Häufigkeit, das ist
die möglichst allgemeine Anwendbarkeit eines Programmes, sollte nur so weit getrieben
werden, daß unter den drei genannten Gesichtspunkten keine allzugroßen Nachteile entstehen.
Falls das zu entwickelnde Programm häufig verwendet werden soll, oder falls Schwierigkeiten
auftreten, wendet man sich am besten an einen DY-Spezialisten. Der Ingenieur steht dann vor
der Aufgabe, sich mit dem Programmierer über sein Problem zu verständigen. Die zu dieser
Verständigung notwendigen Begriffe und Kenntnisse sollten in Zukunft jedem Studenten des
Bauwesens in einer DY-Grundausbildung vermittelt werden.

Die Aufgabe der Fes t i g k e i t sie h reist die Berechnung von Spannungen und Form-
änderungen. Dazu werden die Querschnittswerte - Fläche, Schwerpunktslage, Trägheits-
momente und Lage der Hauptachsen - für beliebige Querschnittsformen benötigt. Dieses
Problem ist in Abschn. 6.1.1 behandelt. Die zur Spannungs- bzw. Formänderungsberechnung
6. Anwendung der Datenverarbeitung im Bauwesen 191

außerdem notwendigen Schnittgrößen - Biegemomente, Querkräfte, Normalkräfte und


andere - werden durch die Methoden der S tat i k für die verschiedensten statischen Systeme
bei verschiedenartiger Belastung geliefert. Firmen und Rechenzentren stellen viele spezielle
Programme zur Bestimmung von Querschnittswerten, Schnittgrößen, Spannungen und Form-
änderungen zur Verfligung. Ihre Programmverzeichnisse geben einen guten tlberblick. Besonders
wichtige Systeme sind: Fachwerke, Durchlaufträger, Rahmen und Trägerroste. Weitere Pro-
gramme fmdet man unter den Stichworten Stahlbetonbau, Stahlbau, Grundbau. Als Grundbau-
probleme seien Pfahlroste, Spundwände, die Spannungsverteilung unter Fundamenten und die
Setzungsberechnungen genannt. Die Vielfalt der vorkommenden statischen Systeme ist so
groß, daß oft keines der genannten speziellen Programme anwendbar ist. Für solche Tragwerke,
zum Beispiel Gernischtsysteme, gibt es allgemeiner gültige Programme, die meist eine freie
Dateneingabe erlauben. Die Programmsprachen FRAN, RASTA, STRESS, STRIP und ähnliche,
die auch für ebene und räumliche Fachwerke, Durchlaufträger, Rahmen, Trägerroste, teils
sogar flir Flächentragwerke wie Platten, Schalen und Faltwerke benutzt werden können, liefern
ebenfalls Schnittgrößen und Formänderungen. Bei vielen Statik-Programmen werden die
ungünstigsten Werte rur die Schnittgrößen so bestimmt, daß aus allen denkbaren Laststellungen
automatisch die jeweils maßgebenden Fälle herausgesucht werden. Diese Untersuchungen sind
im Hochbau verhältnismäßig einfach, die Ermittlung der Summeneinflußlinien im Brückenbau
beispielsweise erfordert jedoch bei komplizierten Lastenzügen umfangreiche Rechenarbeit.
Bei den heute verwendeten Statik-Programmen gehören die Querschnittsabmessungen zu den
Eingabewerten, obwohl sie letzten Endes gesucht sind. Der Konstrukteur muß bei der elektro-
nischen wie bei der konventionellen Berechnung Werte fiir die Stabquerschnitte vor Beginn
des Rechengangs schätzen. Besonders bei statisch unbestimmten Systemen kann diese Vor-
dimensionierung recht beschwerlich sein. Deshalb fordert die Praxis fiir die Zukunft Programm-
systeme, welche auch die Dimensionierung als Ergebnis liefern.
Der Statiker und Konstrukteur wird heute schon dadurch stark entlastet, daß sich die meisten
Teilprobleme elektronisch bearbeiten lassen. Hierzu werden oft, wie bereits erwähnt, Klein-
computer mit großem Erfolg eingesetzt. Es fehlt jedoch zur Zeit noch die Möglichkeit, die
Einzelprogramme nahtlos so aneinanderzureihen, daß komplette prüffahige statische
Berechnungen automatisch ausgedruckt werden. Durch eine neu zu schaffende problem-
orientierte "lngenieursprache", die der Rechenanlage wie dem Benutzer direkt verständlich
ist, sollte dies in Zukunft erreicht werden können.
Die Berechnung der S t a h I b e ton - Tragwerke stützt sich auf die Methoden der Statik
und der Festigkeitslehre. Für die Bestimmung der Schnittgrößen und der Formänderungen
aller vorkommenden Systeme liegen Programme vor. Besondere Merkmale des Stahlbetons sind
die inhomogenen Querschnitte, deren Zugzone meist als gerissen zu betrachten ist. Die auf dem
,,n-Verfahren" beruhende gebundene Bemessung - das ist die Ermittlung der Bewehrungsflächen
fiir einen gegebenen Betonquerschnitt bei gegebenen Schnittgrößen - ist bei einfachen Flächen
nicht problematisch. ln der neuen DIN 1045 ist jedoch das n-freie Traglastverfahren vorgesehen.
Hierbei tritt als neues Problem auf, daß das Hookesche Gesetz nicht gilt, sondern die empirisch
gefundenen Spannungsdehnungslinien fiir Beton gekrümmt sind. Die Berechnung des Trag-
moments muß deshalb numerisch durchgeführt werden. Dann sind auch ganz beliebige Quer-
schnitte, die als polygonal umgrenzt dargestellt werden, erfaßbar. Man geht von beliebigen,
vernünftigen Randdehnungen aus, ermittelt die Biegedruckkraft nach Größe und Lage und über-
prüft das Gleichgewicht. Falls noch kein Gleichgewicht besteht, ist die Rechnung mit einer
neuen Annahme rur die Randdehnungen zu wiederholen. Die elektronische Berechnung der
192 6. Anwendung der Datenverarbeitung im Bauwesen

beschriebenen Arbeitsgänge ist noch nicht allgemein gebräuchlich. Die Programmlisten für
Stahlbeton enthalten jedoch eine ganze Reihe von Einzelproblemen, zum Beispiel auch die
automatische Aufstellung von Stahllisten.
Im S pan n b e ton bau rechnet man für Gebrauchslasten mit homogenen Querschnitts-
werten (Zustand I). Sind diese vorgegeben und ist die Spannkraft bekannt, so können mit Hilfe
der DV die Längsspannungen für die einzelnen Lastflille ermittelt und überlagert werden. Bei
beliebiger Spanngliedftihrung lassen sich die Ordinaten der Spannglieder , die Umlenkwinkel
und damit die Verluste an Vorspannkraft infolge Reibung berechnen. Für frei wählbare Schnitt-
stellen eines Trägers können der Spannkraftverlust infolge Schwinden und Kriechen, sowie die
zur Rissesicherung erforderliche schlaffe Bewehrung bestimmt werden. Der Nachweis der Sicher-
heit unter rechnerischer Bruchlast kann für Zustand 11 bei gegebener Vordehnung entweder bei
vorgegebenem Spannstahlquerschnitt oder durch Bemessung des erforderlichen Spannstahl-
querschnittes gefUhrt werden. Die Berechnung der Hauptzugspannungen aus den Längs- und
Schubspannungen und die gegebenenfalls erforderliche Bewehrung für die Schubsicherung kann
ebenfalls programmiert werden. Für Vorspannung mit sofortigem Verbund liegen Programme
vor, welche die aufgezählten Teilprobleme enthalten und somit den gesamten Berechnungs-
ablauf durchfUhren (s. Abschn. 6.1.3). Es ist auch für Vorspannung mit nachträglichem Verbund
und beliebiger Spanngliedführung wünschenswert, alle Teilprobleme in ein Programm einzu-
beziehen und damit den Ingenieur von Rechenarbeiten erheblichen Umfanges zu entlasten.
Für S t a h I bau - Konstruktionen gelten die grundsätzlichen Probleme der Statik und der
Festigkeitslehre. Spezielle Probleme des Stahlbaus, für die bereits weitgehend Einzelprogramme
vorliegen, sind z. B. Querschnittswerte für zusammengesetzte geschweißte Träger, Berechnung
der Wölbkrafttorsion, Traglastprobleme und Stabilitätsprobleme wie Knicken, Kippen und
Beulen. Man kann auch Trägerverbindungen, Stöße und Lager elektronisch berechnen. Die
Informationsverarbeitung in der Stahlbauwerkstatt wird in Zukunft in immer stärkerem Maße
automatisiert werden. Es ist ein Programmsystem geplant, das den Entwurf einer optimalen
Stahlskelettkonstruktion liefert, wobei eine Integration der statischen Berechnung und der
Preiskalkulation angestrebt wird. Schließlich soll die DV für die Optimierung von Berechnung,
Konstruktion und Werkstattfertigung im Stahlbau eingesetzt werden.
Schon früh wurden Computerprogramme für den S t r aß e n bau geplant, um den Ingenieur
von den umfangreichen Routinearbeiten für Entwurf, AusfUhrung und Abrechnung zu ent-
lasten. Man hatte ursprünglich Daten aus graphischen Vorentwürfen entnommen und teils
rechnerisch, teils zeichnerisch weiterverarbeitet. Es wurde nun notwendig, die bestehenden
Verfahren zu mathematisieren, um zunächst Teilprogramme zu erhalten, die ein möglichst
geschlossenes System darstellen. Ergebnisse eines Programmes sollen so formuliert sein, daß
sie als Eingabedaten für ein anderes Programm verwendet werden können. Die Straßenbau-
Richtlinien müssen dabei beachtet werden. Änderungen, die sich im Verlauf der Planung
ergeben, können vom Programm noch berücksichtigt werden.
Die Grundprobleme im Straßenbau sind die Linienftihrung im Grundriß (Trassierung), im
Aufriß (Gradiente) und die Massenberechnung. Für die Ausftihrung werden Absteckungswerte
und Höhenkoten benötigt. Die Linienführung für Verkehrsknotenpunkte ist ein besonderes
Problem. Für die zu planende Straße ist der Sichtraum zu prüfen. Für alle diese Arbeiten liegen
von mehreren Firmen für verschiedene Maschinentypen Programme vor, die zum Teil bereits
voll integriert arbeiten. Zu ihrer Verwendung sind die Eingabedaten zu erstellen, in Formulare
einzutragen und schließlich die Ausgabedaten weiterzuverarbeiten, wie es für den Gebrauch
von Bibliotheksprogrammen auf Seite 190 geschildert ist. An dieser Stelle soll kurz auf Einzel-
6. Anwendung der Datenverarbeitung im Bauwesen 193

heiten eingegangen werden. Mit einem Trassierungsprogramm wird die Unienftihrung der
Straße durch die Festlegung der Hauptpunkte und der Elemente eines Systems von Geraden,
Kreisen und Übergangsbögen (Klotoiden) bestimmt. Im Absteckungsprogramm werden aus
den Hauptpunkten Koordinaten oder andere Absteckungswerte für eine Reihe von Stations-
punkten auf der Straßenachse berechnet. Für die damit festliegende Trasse sind nun die
Geländehöhen und die Bodenverhältnisse festzustellen. Nun karm die elektronische Berechnung
des Deckenbuches anschließen. Eingabewerte sind die Breiten der einzelnen Straßenelemente,
der Mittelstreifen, Fahrbahn, Nebenspur usw. mit den zugehörigen Querneigungen. Die Breiten
können veränderlich sein, Randstreifen können eine begrenzte Länge haben. Schließlich ist das
Tangentengerüst der Gradienten mit Festlegungen über die Art der Ausrundung einzugeben.
Das Programm bestimmt dann die Ausrundungselemente und die Maße der charakteristischen
Querschnittspunkte sowie die Höhenkoten von Decke und Planum. Diese Daten werden weiter-
verwendet zur Mengenberechnung des Erd- und Mutterbodens, getrennt nach Abtrag und Auf-
trag, sowie der Grunderwerbsflächen. Zu den Eingabewerten gehören auch die Böschungs-
neigungen für Ab- und Auftrag und die Angaben über die Entwässerungsmulden. Zur Bestim-
mung der Geländedurchstoßpunkte muß das Programm Auftrag und Einschnitt unterscheiden
und bei Sonderflillen, wenn z. B. kein Böschungsendpunkt gefunden wird, eine entsprechende
Meldung ausdrucken.
Ein solches Programmsystem im Straßenbau karm ein Baustein der zukünftigen integrierten
Datenverarbeitung im Bauwesen sein. Es wird noch verbessert und ergänzt werden durch
weitere dreidimensionale Programme und Optimalisierungsprogramme. Beispielsweise wird man
die optimale Trasse nach verschiedenen Gesichtspunkten elektronisch ermitteln können.
Im Bau b e tri e b tritt bei der Planung von ablaufabhängigen Arbeiten das besondere
Problem auf, die technologischen Abhängigkeiten des Bauwerks mit den arbeitstechnischen
und organisatorischen Gegebenheiten des Bauablaufs zu koordinieren. Für die Lösung dieser
Aufgabe wurden in den Jahren 1956/58 verschiedene Verfahren der Ne t z p I a n t e c h n i k
- auch Netzwerktechnik oder Netzwerkanalyse genarmt - entwickelt, die eine Optimierung
des Bauablaufs ermöglichen. Der Projektleiter wird damit in die lage versetzt, den für den
Ablauf kritischen Weg zu erkennen und durch geeignete Maßnahmen die Einhaltung der vor-
gesehenen Termine und Kosten sicherzustellen. Bei den meisten Bauaufträgen ergeben sich
durch nicht exakt vorherbestimmbare Einflüsse Zeitverschiebungen, die rasche Entscheidungen
des Bauführers und kurzfristige Umstellungen des Bauablaufs erfordern, wenn der geplante
Fertigstellungstermin eingehalten werden soll. Diese Änderungen sind umso schwieriger auf-
einander abzustimmen, je mehr Vorgänge davon betroffen werden.
Für Projekte größeren Umfangs ist der Einsatz von DVA sinnvoll. Durch die Anwendung von
geeigneten Programmen können viele Schwierigkeiten der normalen Bauplanung und Bau-
überwachung überwunden und nachteilige äußere Einflüsse korrigiert werden. Vom Beginn
der Planung beim Bauherrn und Architekten über Massenermittlung, Ausschreibung und Durch-
führung der Arbeiten bis zur Abrechnung der Leistungen einschließlich Kostenkontrolle sind
viele Unterlagen aufzustellen und anfallende Zahlen zu verarbeiten. Ob es sich hier um den
Bauablauf selbst, um Randarbeiten oder auch Routinearbeit der Verwaltung handelt, bei
größeren Projekten sollte der Einsatz von DVA immer ins Kalkül gezogen werden.
In das Ver m e s s u n g s wes e n fand die DV sehr bald Eingang, wie aus speziellen
vermessungstechnischen Entwicklungen (Zuse, Seifers) hervorgeht. In einem ersten Stadium
der Programmentwicklung wurden lediglich rechnerische Einzelprobleme behandelt (s. Abschn.
6.3.1). In einer zweiten Phase, etwa ab 1967, wurden diese vielfältigen Einzelprogramme zu
194 6. Anwendung der Datenverarbeitung im Bauwesen

größeren integrierten Programmsystemen zusammengeschlossen. Inzwischen liegen solche


Systeme rur die Teilgebiete der lngenieurvermessung, der Katastervermessung, der Landes-
vermessung und der photogrammetrischen Vermessung vor und sind ständig im Einsatz
(s. Abschn. 6.3.2). In einer dritten Entwicklungsphase wird zur Zeit an der Erstellung einer
umfassenden Fachdatenbank gearbeitet, die wiederum die verschiedenen vorliegenden Pro-
grammsysteme zusammenfassen soll und zwar unter gleichzeitigem Einschluß sämtlicher an-
fallender Verwaltungsarbeiten, wie z. B. Kataster- und Grundbuchfortflihrung.
Beim Einsatz der DV im Vermessungswesen entstehen einige organisatorische und technische
Probleme besonderer Art, von denen hier drei hervorgehoben seien:
1. Es fallen stets sehr große Mengen von zu bearbeitenden Meßdaten an, die auf Datenträger
übertragen werden müssen. Diese langwierige und fehleranfällige Arbeit ist nur durch
zunehmenden Einsatz automatisch registrierender Meßgeräte (digitale Theodolite und Ent-
fernungsmesser) befriedigend zu lösen.
2. Außerdem stimmen vielfach das mathematische und das stochastische Modell nicht hin-
reichend überein, oder es gehen IdentifIZierungs- und unregelmäßige Fehler in die Rechnung
ein. Der Benutzer von integrierten Programmsystemen wird häufig gezwungen, eine Rechnung
vorzeitig abzubrechen und sie auf ihre Glaubwürdigkeit zu überprüfen.
3. Die durch die Berechnung entstehenden Ergebnisse, die Punktkoordinaten, sind schließlich
in der Regel dauerhaft aufzubewahren (externe Speicher) und außerdem meist graphisch dar-
zustellen (Katasterkarten).
Die DV wird in der Was s e r wir t s c h a f t in erheblichem Maße eingesetzt, um große
Datenmengen aus statistischen Erhebungen rur Planungszwecke (wie beispielsweise Pegelwerte)
zu verarbeiten und um die komplizierten und umfangreichen Berechnungen auf dem Gebiet
der Hydraulik und der Rohrnetze durchzufiihren. Auch bei der Planung und Ausfiihrung von
Baurnaßnahmen im Wasserbau rechnet man weitgehend elektronisch. Als Beispiele für die
Anwendung von Prozeßrechnern seien genannt: die Hochwasserregelung in wichtigen Gebieten,
die überwachung der Gewässergüte und die Steuerung des Betriebes von Wasserkraftanlagen.
Im letztgenannten Fall werden hydraulische, elektrische und meteorologische Meßwerte ver-
arbeitet, um stets mit einem optimalen Betriebsprogramm, das der Rechner liefert, zu fahren.
Weitere interessante Einzelprobleme sind die Berechnung der Wasserspiegellage in offenen
Gerinnen, und zwar einmal für den stationären Fall Q = const. und fiir den instationären Fall
einer Hochwasserwelle, was einen besonders großen Rechenaufwand erfordert. Die problem-
orientierte Programmiersprache HYDRO wurde zur Behandlung von solchen allgemeinen wasser-
baulichen Aufgaben geschaffen.
Gebiete des Bauingenieurwesens, die mit DV arbeiten, sind auch das Verkehrswesen und das
Eisenbahnwesen. Auf sie kann nicht eingegangen werden. Die hier gegebene übersicht kann
schon deshalb nicht vollständig sein, weil durch die rasche technische Entwicklung im Bauwesen
ständig neue Teilgebiete mit speziellen Problemen hinzukommen. Der im Bauwesen arbeitende
Ingenieur wird jedenfalls, wo immer er auch tätig sein mag, bei Behörden, bei Firmen der
Bauindustrie oder Ingenieurbüros, einen in Zukunft enger werdenden Kontakt mit der Daten-
verarbeitung haben müssen.
6.1.1. Querschnittswerte 195

6.1. Statik und konstruktiver Ingenieurbau

6.1.1. Querschnittswerte
A 11 g e m ein es. Die Berechnung von Querschnittswerten ist eine der grundlegenden Auf-
gaben der Statik und Festigkeitslehre. Deshalb wird dieses Problem gewählt, um die Schritte
zu zeigen, die notwendig zu einem Programm in einer problemorientierten Sprache fUhren. Man
vergleiche hierzu auch den Abschn. 3.1. Zunächst wird die Aufgabenstellung beschrieben, dann
das Lösungsverfahren, das mit der Problemanalyse gekoppelt ist, skizziert. Daraus ergibt sich
der Ablaufplan des Programms; schließlich wird dann das fertige Programm dargestellt und
besprochen.
Pro b 1 e m b e s c h r e i b u n g. Gegeben ist eine beliebige polygonal umgrenzte Fläche
durch die Koordinaten ihrer Eckpunkte (Bild 6.1a). Gesucht sind fur den eingeschlossenen
Querschnitt: Flächeninhalt, statische Momente, Trägheitsmomente, Zentrifugalmoment, Lage

i.*
des Schwerpunktes, Hauptachsen mit Drehwinkel und Hauptträgheitsmomente.

! !YsF /~
I .
i xs . S 3 Xs

6.1 Polygonal umgrenzte Flächen


mit Angabe der Punktnume-
rierung für Vollquerschnitt und
i r~J~ t,~~~~~~c,-
a)X- b)X-~
HOhlquerschnitt

Lös u n g s ver f a h ren und Pro b 1 e man a 1y se. Die Mathematisierung, also der
mathematische Kern fiir den ersten Teil des Problems, liegt vor. Für die Berechnung der auf
ein angenommenes Koordinatensystem bezogenen Querschnittswerte fmdet man in der
literatur l ) die nachstehenden Formeln für den Flächeninhalt.
1 n
F=- ~ (~YI+l-~+lYi) (6.1)
2 i= 1
die statischen Momente
1 n
S =- ~ [(~Yi+I-~+IYi)(Yi+Yi+I)]
x 6 i= 1
(6.2)
1 n
S =- ~ [(~Yi+l-~+IYi)(~+~+I)]
Y 6 j= 1
die Trägheitsmomente
1 n
Jx = 12 i~1 [(~Yj+ 1 - ~+ IYi)([Yi + Yi+ .1 2 -YjYj+ I)]
(6.3)
1 n
Jy = 12j~1 [(~Yi+I-~+IYi)([~+~+.12-x;x;+1)]

I) F I e ß n er, H.: Ein Beitrag zur Ermittlung von Querschnittswerten mit Hilfe elektronischer
Rechenanlagen. Der Bauingenieur 37 (1962) 146-149.
196 6.1. Statik und konstruktiver Ingenieurbau

und das Zentrifugalmoment


1 n 1
JXY = 12 i~l {(XiYi+ 1 - Xj+ lYi)[ (Xj + Xj+ l)(Yi + Yi+ 1) - 2" (XjYi+ 1 + Xj+ lYi)]}
(6.4)
Der Flächeninhalt ergibt sich aus der ersten Formel positiv, wenn die Numerierung der Punkte
in aufsteigender Reihenfolge entgegengesetzt zum Uhrzeigersinn vorgenommen wird. Für Hohl-
räume muß der Umfahrungssinn umgekehrt sein. Die Endpunkte der gedachten Doppellinie zum
Aufschneiden einer Fläche mit Hohlraum bekommen doppelte Numerierung (s. Bild 6.1b).
Aus der Definition des Flächenschwerpunktes erhält man seine Lage im gewählten Koordinaten-
system
Sy Sx
x=- Ys=- (6.5)
S F' F
Der Steinersche Satz liefert die auf die Schwerachsen bezogenen Trägheitsmomente

(6.6)

Für Spannungsnachweise bei unsymmetrischen Querschnitten braucht man die Richtung der
Hauptachsen und die Hauptträgheitsmomente. Dafür gilt
2JXYS
t = tan (2.,00) = - = - (6.7)
JyS - Jxs
1
.,00 = - arctan t (6.8)
2
1
Al = 2" (Jxs + Jys )
1
A2 = 1- (Jxs - J ys ) cos (2.,00) - J XYS sin (2.,00) 1 (6.9)
2

Bis zur Berechnung der Eingangswerte für GI. (6.7) bis (6.9) war der Gang der Berechnung, von
den Summierungen abgesehen, linear. Dadurch, daß nun Fallunterscheidungen notwendig
werden, entstehen im Ablauf Verzweigungen und Sprünge. Es muß z. B. vermieden werden, daß
bei der Ausführung der GI. (6.7) eine Division bei JyS = Jxs ' also verschwindendem Nenner
vorkommt. In Tafel 6.2 sind alle denkbaren Kombinationen für die Fälle J xs ~ JyS und JxyS ~ 0
angegeben . .,00 ist der aus dem Hauptwert der Standardfunktion arctan t stammende Winkel. Für
den wirklichen Achsendrehwinkel .,0 soll gelten, daß er sich innerhalb - 90° und + 90° bewegt
und daß er zwischen der positiven x-Achse und der positiven Hauptachse ~ liegt, für die J~ das
Maximum ist. Trifft man diese Verabredung, so liegt die Richtung der ~-Achse fest. Im Bild 6.3
sind die verschiedenen Querschnittstypen für die Fälle abis h dargestellt, wie sie im Ablaufplan
erfaßt und programmiert werden.
6.1.1. Querschnittswerte 197

Tafe16.2 Fallunterscheidungen für die Drehung der xs-Achse in die Richtung der ~-Achse

JxS < JyS JxS = J yS J xs >J yS

J xyS <0 =0 >0 <0 =0 >0 <0 =0 >0

t <0 =0 >0 -00 0/0 +00 >0 =0 <0

<Po <0 =0 >0 -45° unbe- + 45° >0 =0 <0


stimmt

<P <Po + 90° 90° <Po - 90° + 45° -45° <Po =0 <Po

Fall a b c d e f g h

Der unbestimmte Fall wird ausgelassen, weil er als Sonderfall (Fläche ist Quadrat, Achteck usw.
oder Kreis) mit fertigen Formeln zu lösen ist. Ein eventueller Programmlauf soll der Einfachheit
halber <P = 45° ergeben. Damit ist der vorgesehene Rechengang einschließlich der Sonderfälle
festgelegt. Die Ausgabe soll nicht hier, sondern bei den Programmen betrachtet werden.
Abi auf p la n. Der erste Teil des Ablaufplanes bis zur Berechnung von Jxs , JyS und JxyS
braucht wegen der Linearität nicht bildlich dargestellt zu werden. Es genügt eine kurze Er-
läuterung der Einzelschritte, die dann .lediglich der Reihe nach in eine Programmiersprache zu
übersetzen sind. Die Eingabewerte sind: die Anzahl der Eckpunkte n, und n Wertepaare "i und
Yi' die Koordinaten der Eckpunkte. Die gelesenen Werte sollen unter der Überschrift "Poly-
gonpunkte" in der Ausgabe wieder tabelliert werden. Als Zahlenfelder werden außer den
Koordinaten "i und Yi die Hilfsgrößen

(6.10)
und ~i = Yi +Yi+ 1

eingeführt und gespeichert, damit sie nicht mehrfach zahlenmäßig berechnet werden müssen.
Zur Bildung der Summen in den Formeln für F, Sx' Sy' Jx ' Jy und Jxy werden nach dem Null-
setzen die endgültigen Summenwerte in einer Laufanweisung schrittweise aufgebaut. Hierzu sei
auf Abschn. 4.2.7 (ALGOL), 4.1.4 (FORTRAN) und 4.3.2 (PL/I) verwiesen. Danach werden
die Bruchteile der Summen berücksichtigt, die Schwerpunktskoordinaten ermittelt und schließ-
lich die Flächenmomente für die Schwerachsen berechnet. Nun stehen die Ausgangswerte für
die Untersuchung der einzelnen Fälle abis h zur Verfügung. In Bild 6.4 ist der nicht mehr
lineare Teil des Ablaufplanes dargestellt. Zunächst ist zu entscheiden, ob Jxs = JyS ist. Falls
dies zutrifft, gilt GI. (6.7) für t nicht, sondern der Absolutwert von <Po ist 45°. Die dann
folgende Bedingung lautet JxyS > O. Ist sie erfüllt, so gilt Fall e, und <P wird - 45°. Andernfalls
(JxyS ~ 0) bleibt <P = + 45° (Fall d). Für die beiden Fälle e und d ist 2I{)o = 90°, und die
beiden ersten GI. (6.9) vereinfachen sich zu

(6.11)

Schließlich kann der nach der Übergangsstelle W (Weiter) noch folgende Schlußteil ablaufen.
198 6.1. Statik und konstruktiver Ingenieurbau

Sind die beiden Trägheitsmomente J xs und J yS nicht gleich, was im allgemeinen der Fall ist, so
ist in Gl. (6.7) der Nenner ungleich Null und t kann berechnet werden. Weiter können <Po und
die beiden Summanden Al und A2 gespeichert werden. Die endgültigen Werte <p hängen nun
laut Tafel 6.2 noch davon ab, welcher der beiden Werte J xs und JyS der größere ist und welches
Vorzeichen J xyS hat. Der Ablauf ist hier so gesteuert, daß zunächst nach J xs > JyS verzweigt
wird. Ist diese Bedingung erfüllt, so bleibt <p = <Po' was bei gleichem Namen PHI für beide
Größen eine Leeranweisung ergibt, die entfallen kann. Es kann vorwärts zu W gesprungen
werden (Fälle f, g und h). Nun steht noch das linke Drittel der Tafel 6.2 offen. Für diesen
Fall gilt das Nein der vorangegangenen Bedingung J xs > J ys • Hier muß, je nachdem ob
JXYS > 0 stimmt oder nicht, 90° von <Po abgezogen (Fall c) oder zugezählt werden (Fall a
mit J XYS < 0 und Fall b mit JxyS = 0). Anschließend setzt sich die Rechnung wieder bei W
fort.

6.3 Flächentypen aus den Fallunterscheidungen


nach Tafel 6.2

6.4 Zweiter Teil des Ablaufplanes mit Angabe der


Fälle abis f nach Tafel 6.2. Die eingeklammer-
ten Zahlen sind Anweisungsnummern des
FORTRAN-Programms

Nach W folgt noch die Umwandlung von <p ins Gradmaß und die Berechnung der beiden
Hauptträgheitsmomente aus Al und A2 • Schließlich wird die Ausgabe der Ergebnisdaten
veranlaßt. Im Ablaufplan (Bild 6.4) sind die Fälle abis h dort gekennzeichnet, wo jeweils
die Wertzuweisungen an <p erfolgen. Auch einige Anweisungsnummern des FORTRAN-
Programmes, die ebenfalls diese Fälle betreffen, sind im Ablaufplan eingetragen. Im Programm
wurde in den Vergleichen anstelle der 0 als Genauigkeitsschranke 10- 8 eingesetzt, damit
auch bei einer kleinen Rechenungenauigkeit die richtige Verzweigung durchgeflihrt wird.
Pro g r a m m i e run gin A L G 0 L 60. Wie bereits erläutert, konnte der erste Programm-
teil direkt aus bekannten Formeln und dem besprochenen Sumrnierungsverfahren aufgestellt
6.1.1. Querschnittswerte 199

Tafel 6.5 ALGOL 60-Programm

0001 'BEGIN' 'COMMENT' OUERSCHNITTSBERECHNUNG, FLAECHE POLYGONAL


0002 UMGRENZT, NECKPUNKTE, KOORDINATEN X/Y.,
0003
0004 'REAL' F, SX, SV, JX, JY, JXY, YS, XS, JXS, JYS, JXYS,
0005 TAN2FI, PHI, PHIGRD, A1, A2, JMAX, JMIN, PI.,
0006 'INTEGER' N, 1.,
0007 'ARRAY' X, Y (/1 .. 31/1, A, AX, AY (/1 .. 30/1.,
0008
0009
0010 ININTEGER (0, N)., PI .= 3.14159265359.,
0011 SYSACT (1, 15, 1).,
0012 OUTSTRING (1, '(' POLYGONPUNKTE')')., SYSACT (1,14,2).,
0013 OUTSTRING (1, '(' X Y')').,
0014 SYSACT (1, 14, 1).,
0015
0016 'FOR' I .= 1 'STEP' 1 'UNTlL' N '00' 'BEGIN'
0017 INREAL (0, X(/I!))., INREAL (0, Y (/1/1).,
0018 OUTINTEGER (1, I)., OUTREAL (1, X (/111)"
0019 OUTREAL (1, Y(/I!))., SYSACT (1, 14, 1) 'END'.,
0020
0021 X (IN + 1/1 .= X (/11)., Y (/N + 1/1 .= Y (/1/1.,
0022
0023 'FOR' I .= 1 'STEP' 1 'UNTlL' N '00' 'BEGIN'
0024 A (/1/1 .= X (/1/1 * Y (/1 + 1/1 - X (/1 + 111 * Y (/1/1.,
0025 AX (/111 .= X (/1/1 + X (/1 + 1/1.,
0026 AY (/111 .= Y (/1/1 + Y (/1 + 1/1 'END'.,
0027
0028 F .= SX .= SY .= JX .= JY .= JXY .= 0.,
0029
0030 'FOR' I .= 1 'STEP' 1 'UNTIL' N '00' 'BEGIN'
0031 F .= F + A (/111 .,
0032 SX.= SX + A (/1/) * AY (/1/1.,
0033 SY .= SY + A (/1/1 * AX (/111.,
0034 JX .= JX + A (/111 * (AY (/111 * * 2 - Y (/111 * Y (/1 + 1/)).,
0035 JY .= JY + A (/111 * (AX (/I/) * * 2 - X (/111 * X (/1 + 1/)).,
0036 JXY .= JXY + A (/111 * (AX (/I/) * AY (/111 - (X (/111 * Y (/1 + 111 +
0037 X (/1 + 111 * Y (/1!))/2) 'END'.,
0038
0039 F .= F/2.,
0040 SX .= SX/6., SY .= SY16.,
0041 JX .= JX/12., JY .= JY112.,
0042 JXY .= JXY/12.,
0043
0044 YS.= SX/F., XS.= SY/F.,
0045
0046 JXS .= JX - YS * * 2 * F.,
0047 JYS .= JY - XS * * 2 * F.,
0048 JXYS.= JXY - XS * YS * F.,
0049
0050 'IF' JYS 'EOUAL' JXS 'THEN' 'BEGIN'
0051 PHI .= PI/4.,
0052 'IF' JXYS 'GREATER' '- 8 'THEN' PHI .=- PHI.,
0053 A1 .= JXS.,
0054 A2 .= ABS (JXYS).,
200 6.1. Statik und konstruktiver Ingenieurbau

0055 'GOTO'W 'END'.,


0056
0057 TAN2FI .= 2 * JXYS/(JYS - JXS).,
0058 PHI .=.5 * ARCTAN (TAN2FI).,
0059
0060 A 1 .= .5 * (JXS + JYS).,
0061 A2 .= ABS (.5 * (JXS - JYS) * COS (2 * PHI)
0062 -JXYS * SIN (2 * PHI)).,
0063
0064 'IF' JXS 'GREATER' JYS 'THEN' 'GOTO' W.,
0065 'IF' JXYS 'GREATER' '- 8 'THEN' 'BEGIN'
0066 PHI .= PHI - PI/2.,
0067 'GOTO'W 'END'.,
0068 PHI .= PHI + PI/2.,
0069
0070 W.. PHIGRD .= PHI * 180/PI., 'COMMENT' ALTGRAD.,
0071
0072 JMAX .= A 1 + A2.,
0073 JMIN .=A1-A2.,
0074
0075 SYSACT (1, 14,2).,
0076 OUTSTRING (1, '(' FLAECHE SCHWERPUNKTSABSTAENDE')').,
0077 OUTSTRING (1, '(' TRAEGHEITSMOMENTE')')., SYSACT (1,2,36).,
0078 OUTSTRING (1, '('KOORD-ACHSEN SCHWERACHSEN')').,
0079 SYSACT (1, 14, 1)., OUTREAL (1, F)., SYSACT (1,14,2).,
0080 OUTSTRING (1, '(' X ' ) ' ) . , OUTREAL (1, XS).,
0081 OUTREAL (1, JX)., OUTREAL (1, JXS)., SYSACT (1, 14, 1).,
0082 OUTSTRING (1, '(' Y ')')., OUTREAL (1, YS).,
0083 OUTREAL (1, JY)., OUTREAL (1, JYS)., SYSACT (1, 14, 1).,
0084 OUTSTRING (1, 'I' XY ')'1., SYSACT (1, 2,341.,
0085 OUTREAL i1, JXY)., OUTREAL (1, JXYSI., SYSACT (1, 14,21.,
0086 OUTSTRING (1, 'I' DREHUNG DER ACHSEN'I')., SYSACT (1, 14, 11.,
0087 OUTSTRING (1, 'I' PHI =')')., OUTREAL (1, PHIGRD).,
0088 OUTSTRING (1, 'I' ALTGRAD)')')., SYSACT (1,14,2).,
0089 OUTSTRING (1, '(' HAUPTTRAEGHEITSMOMENTE ')').,
0090 OUTSTRING (1, '('JMAX JMIN')')., SYSACT (1, 2, 34).,
0091 OUTREAL (1, JMAXI., OUTREAL (1, JMIN)., SYSACT (1, 14,3).,
0092 'END'

werden. Der zweite Teil des Programmes ist anband des Ablaufplanes, der auf ALGOL zuge-
schnitten ist, entwickelt. Dazu sind die in Abschn. 4.2 behandelten Regeln anzuwenden. Das
ALGOL-Programm, das in Tafel 6.5 vollständig wiedergegeben ist, soll nun noch kommentiert
werden, weil Abschn. 4.2 auf die DVA Siemens 303 ausgerichtet ist, und das vorliegende
Programm mit der IBM 1130 gerechnet wurde.
Die beiden Kompilierer unterscheiden sich in einigen Punkten voneinander, die zwar nicht
grundsätzlicher Natur sind, aber bei der Anwendung doch beachtet werden müssen. Bei der
IBM-Anlage [98] werden einige Zeichen flir die Druckerausgabe umgewandelt, wie in Tafel 6.6
dargestellt ist (s. auch DIN 66006).
Die Ausgabe von Text hätte auch hier wie in Abschn. 4.2 mittels OUTSYMBOL und Lauf-
anweisungen zeichenweise bewirkt werden können, im Programm werden aber stattdessen
ganze Zeichenketten mittels OUTSTRING ausgegeben. Die Steuerung der Ausgabe erfolgt bei
IBM 1130 mit den Prozeduren SYSACT. Im Aufruf SYSACT (K, N, I) bedeuten K die Kanal-
6.1.1. Querschnittswerte 201

nummer des Ausgabegerätes, N die Kennziffer der Wirkungsweise und I die Anzahl der Zeichen,
Zeilen oder Karten. Die wichtigsten im Programm vorkommenden Varianten sind:
SYSACT (1,15,1) bewirkt: neue Seite bei Druckerausgabe,
SYSACT (1, 14, 1) bewirkt: neue Zeile,
SYSACT (1, 14,2) bewirkt: eine Leerzeile, dann neue Zeile,
allgemein also
SYSACT (1,14, Z) bewirkt: Z - 1 Leerzeilen, dann neue Zeile,
und schließlich
SYSACT (1,2, I) bewirkt: Einrücken auf das I-te Zeichen der laufenden Zeile,
oder, falls der mitgeflihrte Zeichenzähler einen Wert ~ I hat, der nächsten Zeile.
Für die Ausgabe von Dezimalzahlen wurde OUTREAL verwendet. Dadurch wird das sog.
Standardformat alOb erzeugt, wobei a und b in der Form + D.8D bzw. + DD erscheinen und
die 10 zum' (Apostroph) umgewandelt ist. D soll (wie in den FORMAT-Zeichenketten von
IBM 1130-ALGOL) eine Dezimalstelle bedeuten und + das Vorzeichen symbolisieren. Der
verwendete ALGOL-Kompilierer erlaubt die Festkommaausgabe von Dezimalzahlen in belie-
bigen Formaten in Verbindung mit Text, ähnlich wie bei FORTRAN. Von dieser Möglichkeit
wurde jedoch hier kein Gebrauch gemacht.

Tafel6.6
Zeichendarstellung in
ALGOL (links) und bei
der IBM 1130 (rechts)

......
......
......
10
...... ( /
...... / )
.- ...... =
...... 6.7 Querschnitt zum Beispiel 1 für das ALGOL-
x * Programm mit dem berechneten Schwer-
punkt und den Hauptachsen

Beispiell. Der in Bild 6.7 dargestellte Querschnitt wurde mit dem ALGOL-Programm
berechnet. Die Ergebnisse sind in der Tafel 6.8 wiedergegeben.
Aus der rechten Spalte kann man ersehen, daß J xs < J yS und J xyS > 0 ist. Also handelt es
sich um den Fall c in Tafel 6.2. Die ~-Achse, für die J den überhaupt größten Wert J~ bekommt,
ist gegenüber der x-Achse um 68,37° nach unten gedreht.
Pro g r am m i e run gin FORTRAN. Das in Tafel 6.9 wiedergegebene FORTRAN-Pro-
gramm ist auf die IBM 1130 [101) abgestimmt. Hierbei stand nicht der volle, im Abschn. 4.1
dargestellte Umfang von FORTRAN zur Verfligung. Insbesondere fehlen die Vergleichsopera-
toren. Trotzdem ist eine Codierung möglich, die sich eng an den Ablaufplan (Bild 6.4) anlehnt.
Dies gelingt mit den arithmetischen IF-Anweisungen (s. Abschn. 4.1.4). Die zugehörigen An-
weisungen 25 bis 32 sind im Ablaufplan angegeben.
Zu Beginn der Fallunterscheidungen ist zu prüfen, ob J xs = J yS ist (ALGOL-Programm Zeile
0050). In FORTRAN steht dafür IF (JXS - JYS) 28, 25, 28. Der Ausgang "Ja" dieser ersten
202 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6.8 Ausgegebene Daten zum Zahlenbeispiel I - ALGOL

POLYGONPUNKTE

X Y
1 0 o
2 3.50000000' + 00 o
3 3.50000000' + 00 6.00000001' + 00
4 8.50000001' + 00 7.50000001' + 00
5 1.45000000' + 01 7.50000001' + 00
6 1.45000000' + 01 9.00000002' + 00
7 - 2.00000000' + 00 9.00000002' + 00
8 - 2.00000000' + 00 6.00000001' + 00
9 0 6.00000001' + 00

FLAECHE SCHWERPUNKTSABSTAENDE TRAEGHE ITSMOMENTE


KOORD-ACHSEN SCHWERACHSEN
5.77500000' + 01

X 3.75757575' + 00 2.50284374' + 03 3.92224430' + 02


Y 6.04545455' + 00 1.74481249' + 03 9.29418560' + 02
XY 1.56459375' + 03 2.52730114' + 02

DREHUNG DER ACHSEN


PHI = - 6.83716490' + 01 ALTGRAD

HAUPTTRAEGHEITSMOMENTE JMAX JMIN


1.02962617' + 03 2.92016812' + 02

Tafel6.9 FORTRAN-Programm

II FOR
*IOCS (CARD, 1132PRINTER)
* LIST SOURCE PROGRAM
*EXTENDED PRECISION
C QUERSCHNITTSBERECHNUNG, FLAECHE POLYGONAL UMGRENZT,
C NECKPUNKTE, KOORDINATEN X/Y
REAL JX, JY, JXY, JXS, JYS, JXYS, JMAX, JMIN
DIMENSION X (31), Y (31), A (30), AX (30), AY (30)
11 FORMAT (16)
READ (2, 11) N
PI = 3.14159265359
12 FORMAT (8Fl0.3)
READ (2, 12) (X (I), Y (I), I = 1, N)
13 FORMAT (lHl,' POLYGONPUNKTE'1112X'X7X'Y')
WRITE (3, 13)
DO 22 I = 1, N
14 FORMAT (lH 16, 2(F8.3))
22 WRITE (3, 14) I, X (I), Y (I)
X(N+l)=X(l)
Y(N+l)=Y(l)
DO 23 I = 1, N
A (I) = X (I) * Y (I + 1) - X (I + 1) * Y (I)
601.1. Querschnittswerte 203

AX (I) = X (I) + X (I + 1)
23 AY(I)=Y(I)+Y(I+l)
F=O
SX=O
SY= 0
JX= 0
JY= 0
JXY= 0
DO 24 I = 1, N
F=F+A(I)
sx = SX + A (I) * A Y (I)
SY = SY + A (I) * AX (I)
JX = JX + A (I) * (A Y (I) * * 2 - Y (I) * Y (I + 1))
JY = JY + A (I) * (AX (I) * * 2 - X (I) * X (I + 1))
JXY = JXY + A (I) * (AX (I) * AY (I) - (X (I) * Y (I + 1) + X (I + 1) * Y (1))/2)
24 CONTINUE
F = F/2
SX = SX/6
SY = SY/6
JX = JX/12
JY=JY/12
JXY = JXY/12
YS = SX/F
XS = SY/F
JXS = JX - YS * * 2 * F
JYS = JY - XS * * 2 * F
JXYS = JXY - XS * YS * F
IF (JYS - JXS) 28,25,28
25 PHI = PI/4
IF (JXYS - 100E - 08) 27,27,26
26 PHI = - PI/4
27 Al = JXS
A2 = ABS (JXYS)
GO TO 32
28 T AN2F = 2 * JXYS/(JYS - JXS)
PHI = 05 * ATAN (TAN2F)
Al = 05 * (JXS + JYS)
A2 = ABS (.5 * (JXS - JYS * COS (2 * PHI) - JXYS * SIN (2 * PHI))
I F (JYS - JXS) 32, 32, 29
29 IF (JXYS - 100E - 08) 30,30,31
30 PHI = PHI + PI/2
GO TO 32
31 PHI = PHI - PI/2
32 PHIGR = PHI * 180/PI
C ALTGRAD
JMAX=Al+A2
JMIN=Al-A2
15 FORMAT (lHO/6X' FLAECHE'9X'SCHWERPUNKTSABSTAENDE TRAEG
1 HEITSMOMENTE'/ 36X, 'KOORD-ACHSEN SCHWERACHSEN'/E1708
2//12 X'X'3X, 3 (E1708)/12X'Y'3X, 3 (E1708)/ 12X'XY'19X, 2 (E1708)//
36X'DREHUNG DER ACHSEN'/ 7X' PHI = 'F802, 2X'ALTGRAD'//
46X'HAUPTTRAEGHEITSMOMENTE'12X'JMAX'13X'JMIN'/33X, 2 (E1708)///)
WRITE (3, 15) F, XS, JX, JXS, YS, JY, JYS, JXY, JXYS, PHIGR, JMAX, JMIN
CALL EXIT
END
204 6.1. Statik und konstruktiver Ingenieurbau

Verzweigung im Ablaufplan entspricht wegen EQUAL dem Wert 0 für J xs - J ys • Demnach


bekommt die auf das "Ja" folgende Anweisung PHI = PI/4 die mittlere der drei Anweisungs-
nummern, also 25. Zum "Nein" dieser Verzweigung gehören die erste und die dritte An-
weisungsnummer, also 28. Die weiteren Verzweigungen wurden entsprechend programmiert,
jedoch bekommen die jeweils auf das "Ja" folgenden Anweisungen wegen GREATER die
letzte der drei Anweisungsnummern.
Die Ein- und Ausgabeanweisungen und -formate sind genau Abschn. 4.1.5 entsprechend
formuliert. Die Ausgabedaten unterscheiden sich nur im Format einiger Zahlenwerte von der
Ausgabe nach dem ALGOL-Programm.

fR
tI Beispiel 2. Der in Bild 6.10 dargestellte Querschnitt

/~
wurde mit dem FORTRAN-Programm berechnet.
Die Ergebnisse sind in der Tafel 6.11 wiedergegeben.
Wegen J xs = J yS und J XYS < 0 handelt es sich hier um
'" I / den Fall d der Tafel 6.2 mit I{) = 45°.
70{~'~-'*50
-- *
9

f-iT~/~5
~i""'/
r f,{Lz.s--l k 2 '3

~;,o -J.;'o x=:;: 6.10 Querschnitt zum Beispiel 2 ftir das FORTRAN-
2,0 1> Programm

Tafel 6.11 Ausgegebene Daten zum Zahlenbeispie12 - FORTRAN

POL VGONPUNKTE

X V
1 3.000 2.000
2 3.000 0.000
3 5.000 0.000
4 5.000 2.000
5 3.000 2.000
6 2.000 3.000
7 2.000 5.000
8 0.000 5.000
9 0.000 3.000
10 2.000 3.000

FLAECHE SCHWERPUNKTSABSTAENDE TRAEGHEITSMOMENTE


KOORD-ACHSEN SCHWERACHSEN
0.80000000E 01

X 0.25000000E 01 0.70666666E 02 0.20666666E 02


V 0.25000000E 01 0.70666666E 02 0.20666666E 02
XV 0.32000000E 02 - 0.18000000E 02

DREHUNG DER ACHSEN


PHI = 45.00 ALTGRAD

HAUPTTRAEGHEITSMOMENTE JMAX JMIN


0.38666666E 02 0.26666666E 01
6.1.1. Querschnittswerte 205

Tafel 6.12 PLJI-Programm und SLJI-Programm

11 JOB POLYGO
11 OPTION LINK, LOG, NODECK, LIST, ERRS, 48C
11 EXEC PLII
POLYGO. . PROCEDURE OPTIONS (MAIN),.
1* QUERSCHNITTSBERECHNUNG, FLAECHE POLYGONAL UMGRENZT,
NECKPUNKTE, KOORDINATEN X!Y*I
DECLARE (N, I) FIXED (2), (PI INITIAL (3, 141592653589793EO),
(F, SX, SV, JX, JY, JXY) INITIAL (0), PHI, PHIGRD,
JXS, JYS, JXYS, JMAX, JMIN, A1, A2, X (31), Y (31),
A (30), AX (30), AY (30), XS, YS) FLOAT (16),.
GET LIST (N, (X (I), Y (I) 00 1= 1 TO N)),.
PUT PAGE EDIT ('POLYGONPUNKTE', 'X', 'V')
(COLUMN (7), A, SKIP (2), COLUMN (12), A (8), A)
((I, X (I), Y (I) 00 1= 1 TO N))
(SKIP, F (6),2 F (8,3)),.
X (N + 1) = X (1),. Y (N + 1) = Y (1),.
00 I = 1 TO N,.
A (I) = X (I) * Y (I + 1) - X (I + 1) * Y (I),.
AX (I) = X (I) + X (I + 1),. AY (I) = Y (I) + Y (I + 1),.
SX = SX + A (I) * AY (I),. SY = SY + A (I) * AX (I),.
JX = JX + A (I) * (AY (I) * * 2 - Y (I) * Y (I + 1)),.
JY = JY + A (I) * (AX (I) * * 2 - X (I) * X (I + 1)),.
JXY = JXY + A (I) * (AX (I) * AY (I) - (X (I) * Y (I + 1) + X (I + 1)
* Y (1))/2),.
F = F + A (I)"
END,.
F = F12,. SX = SX/6,. SY = SY 16,.
JX = JX/12,. JY = JY 112,. JXY = JXY 112"
YS= SX/F,. XS= SY/F,.
JXS = JX - YS * * 2 * F,. JYS = JY - XS * * 2 * F,.
JXYS = JXY - XS * YS * F,.
IF JYS = JXS THEN 00,. IF JXYS LE 1E - 8 THEN PHI = PI/4,.
ELSE PHI = - PI/4,.
A1 = JXS,. A2 = ABS (JXYS),. END,.
ELSE 00,. PHI = ATAN (2 * JXYS/(JYS - JXS))/2,.
A1 = (JXS + JYS)/2,.
A2= ABS ((JXS-JYS)/2 * COS (2 * PHI)
-JXYS * SIN (2 * PHI)),.
IF JXYS LE 1E - 8 THEN PHI = PHI + PI/2,.
ELSE PHI = PHI- PI/2,.
END,.
PHIGRD = PHI * 180/PI,. 1* ALTGRAD *1
JMAX = A1 + A2,.
JMIN=A1-A2,.
PUT SKIP (3) EDIT ('FLAECHE', 'SCHWERPUNKTSABSTAENDE
'TRAEGHEITSMOMENTE', 'KOORD-ACHSEN '
'SCHWERACHSEN' , F, 'X', XS, JX, JXS,
'V', YS, JY, JYS, 'XV', JXY, JXYS,
'DREHUNG DER ACHSEN', 'PHI =', PHIGRD,
'ALGTRAD', 'HAUPTTRAEGHEITSMOMENTE',
'JMAX', 'JMIN', JMAX, JMIN)
(X (6), A (10), A, A, COLUMN (36), A, A,
SKIP. E (15,8), SKIP (2),
2 (COLUMN (13), A (2),3 E (17,8)),
206 6.1. Statik und konstruktiver Ingenieurbau

COLUMN (13), A (19), 2 E (17,8), SKIP (2),


X (6), A, COLUMN (9), A, F (8,2), X (2), A,
SKIP (2), X (6), A (32), A (17), A, SKIP,
COLUMN (32),2 E (17,8)),.
END,.
/*
// EXEC LNKEDT
// EXEC

// XEO SL 1C
*10 POLYGONFLAECHE
POL YG. . PROC.,
/* OUERSCHNITTSSERECHNUNG, FLAECHE POLYGONAL UMGRENZT,
NECKPUNKTE, KOORDINATEN XIV */
DCL JX FLOAT, JY FLOAT, JXY FLOAT, JXS FLOAT, JYS FLOAT,
JXYS FLOAT, JMAX FLOAT, JMIN FLOAT,
X (31) FLOAT (15), Y (31) FLOAT (15), A (30) FLOAT (15),
AX (30) FLOAT (15), AY (30) FLOAT (15),.
PI = .314159265E01.,
F = 0., SX = 0., SY = 0., JX = 0., JY = 0.,
JXY = 0.,
GET LIST (N).,
00 I = 1 TO N.,
GET LIST (X (I), Y (I)).,
END,.
PUT EDIT ('POLYGONPUNKTE', 'X', 'Y') (PAGE, COLUMN (7), A (13),
SKIP (2), COLUMN (12), A (8), A (1)).,
00 1= 1 TO N.,
PUT EDIT (I, X (I), Y (I)) (F (6), 2F (8,3)).,
END,.
X(N+1)=X(1),. Y(N+1)=Y(1),.
00 1= 1 TO N,.
A (I) = X (I) * Y (I + 1) - X (I + 1) * Y (I),.
AX (I) = X (I) + X (I + 1),. AY (I) = Y (I) + Y (I + 1),.
SX = SX + A (I) * AY (I),. SY = SY + A (I) * AX (I),.
JX = JX + A (I) * (A Y (I) * * 2 - Y (I) * Y (I + 1)),.
JY = JY + A (I) * (AX (I) * * 2 - X (I) * X (I + 1)),.
JXY = JXY + A (I) * (AX (I) * AY (I) - (X (I) * Y (I + 1) + X (I + 1)
* Y (1))/2),.
F = F + A (I),.
END,.
F = F/2,. SX = SX/6,. SY = SY/6,.
JX = JX/12,. JY = JY /12,. JXY = JXY /12,.
YS = SX/F,. XS = SY/F,.
JXS = JX - YS * * 2 * F,. JYS = JY - XS * * 2 * F,.
JXYS = JXY - XS * YS * F ,.
IF JYS EO JXS THEN 00,. IF JXYS LE 1E - 8 THEN PHI = PI/4,.
ELSE PHI = - PI/4,.
A1 = JXS,. A2 = ASS (JXYS),. END,.
ELSE 00,. PHI = ATAN (2 * JXYS/(JYS - JXS))/2,.
A 1 = (JXS + JYS)/2,.
A2 = ASS ((JXS - JYS)/2 * COS (2 * PHI)
-JXYS * SIN (2 * PHI)),.
IF JXYS LE 1E - 8 THEN PHI = PHI + PI/2,.
ELSE PHI = PHI - PI/2,.
END,.
6.1.2. Rahmenberechnung 207

PHIGRD = PHI" 180/PI,. /* ALTGRAD */


JMAX = Al + A2,.
JMIN=Al-A2,.
PUT EDIT (' FLAECHE SCHWERPUNKTSABSTAENDE 'CAT
'TRAEGHEITSMOMENTE', 'KOORD-ACHSEN SCHWERACHSEN' F)
(SKIP (3). A (60), SKIP (1), COLUMN (36), A (29), SKIP (1), E (15,8))..
PUT EDIT ('X', XS, JX, JXS) (SKIP (1), X (13), A (2). 3E (17,8)).,
PUT EDIT ('Y', YS, JY, JYS) (X (13). A (2), 3E (17,8)).,
PUT EDIT (,XY', JXY, JXYS) (X (13). A (19). 2E (17,8)).,
PUT EDIT (,DREHUNG DER ACHSEN', 'PHI =', PHIGRD, 'ALTGRAD',
'HAUPTTRAEGHEITSMOMENTE', 'JMAX', 'JMIN', JMAX, JMIN)
(SKIP (1). X (6), A (18), SKIP (1), COLUMN (9), A (5), F (8,2), X (2).
A (7), SKIP (2), X (6), A (32), A (17). A (4), SKIP (1), X (32),
2 E (17,8)).,
END POLYG.,

Pro g r a m m i e run gin PL/I und SL/I. SL/I ist eine Untermenge von PL/I (s. Abschn.
4.3), wobei einige weitere Einschränkungen und Abweichungen zu beachten sind [103]. Um
einen vollständigen Überblick zu geben, werden ohne besondere Erläuterungen in der Tafel
6.12 zuerst das PL/I-Programm (für die Anlage IBM 360-30), und anschließend das SL/I-Pro-
gramm (fUr die IBM 1130 mit 16 K) wiedergegeben.

Beispiel 3. Der in Bild 6.13 dargestellte Quer"


schnitt wurde mit den beiden vorstehenden
Programmen berechnet. Die Ergebnisse sind
in der Tafel 6.14 dargestellt.

6.13 Querschnitt zum Beispiel 3 rur das PL/!-


Programm

Es sei noch einmal darauf hingewiesen, daß die Eingabedaten fUr alle vier Programme gleich
sind, wie aus den Erläuterungen zum Ablaufplan hervorgeht. Für Beispiel 3 wurde eingegeben:

10
0.0 0.0 6.0 0.0 6.0 4.0 0.0 4.0
1.5 2.5 5.5 2.5 5.5 0.5 1.5 0.5
1.5 2.5 0.0 4.0

6.1.2. Rahmenberechnung
A 11 g e m ein es. Aus den im einflihrenden Abschnitt genannten Tragwerken werden die
Rahmen herausgegriffen und dargestellt. Es ist ein einstöckiges, ebenes Rahmentragwerk
angenommen. Aus einer überschlägigen Vordimensionierung stammen die vorläufigen Quer-
208 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6.14 Ausgegebene Daten zum Zahlenbeispiel 3 - PLII, SLII

POLVGONPUNKTE

X v
1 .000 .000
2 6.000 .000
3 6.000 4.000
4 .000 4.000
5 1.500 2.500
6 5.500 2.500
7 5.500 .500
8 1.500 .500
9 1.500 2.500
10 .000 4.000
FLAECHE SCHWERPUNKTSABSTAENDE TRAEGHEITSMOMENTE
KOORD-ACHSEN SCHWERACHSEN
1.60000000E + 01
X 2.75000000E + 00 1.07333333E + 02 2.63333333E + 01
V 2.25000000E + 00 1.79333333E + 02 5.83333333E + 01
XV 1.02000000E + 02 3.00000000E + 00
DREHUNG DER ACHSEN
PHI = - 84.69 ALTGRAD
HAUPTTRAEGHEITSMOMENTE JMAX JMIN
5.86121529E + 01 2.60545127E + 01
POLYGONPUNKTE

X V
1 .000 .000
2 6.000 .000
3 6.000 4.000
4 .000 4.000
5 1.500 2.500
6 5.500 2.500
7 5.500 .500
8 1.500 .500
9 1.500 2.500
10 .000 4.000

FLAECHE SCHWERPUNKTSABSTAENDE TRAEGHEITSMOMENTE


KOORD·ACHSEN SCHWERACHSEN
. 16000oo0E + 002
X .27500000E + 001 .10733300E + 003 .26332990E + 002
V .22500000E + 001 .17933290E + 003 .58332900E + 002
XV .10200000E + 003 .30oo0000E + 001
DREHUNG DER ACHSEN
PH I = - 84.69 ALTGRAD
HAUPTIRAEGHEITSMOMENTE JMAX JMIN
.58611710E + 002 .26054170E + 002
6.1.2. Rahmenberechnung 209

schnittsabmessungen und Werte (s. Abschn, 6.1.1), die flir die statisch unbestimmte Berechnung
bereits bekannt sein müssen. Die Aufgabe des Statikers ist es nun, den Verlauf der Schnitt-
größen (Biegemoment, Qu'erkraft und Normalkraft), insbesondere die Werte an den ungünstig-
sten Stellen des Rahmens zu berechnen, und daflir zu bemessen. Schließlich sind die vorhan-
denen Spannungen zu ermitteln und den zulässigen Werten gegenüberzustellen. Ergeben sich
Spannungsüberschreitungen, so müssen die entsprechenden Querschnitte abgeändert werden.
Mit den neuen Querschnittswerten muß dann die statische Berechnung wiederholt werden. Da-
nach kann die endgültige Konstruktion erfolgen.
Handelt es sich bei dem Rahmen um ein System, das in der Praxis häufig vorkommt, beispiels-
weise um einen zweistieligen Rahmen, so kann man die Schnittgrößen mit Hilfe von fertigen
Formeln oder Tabellen berechnen. Für das hier behandelte Beispiel wäre [90] geeignet; eine
solche Berechnung ist jedoch nicht Gegenstand dieses Buches. Existiert die benötigte Rahmen-
formel oder Tabelle in der Literatur nicht, so ist man, wenn man die DVA nicht heranzieht,
auf das Kraftgrößen oder Weggrößenverfahren angewiesen [93]. Auf die Weggrößenverfahren
soll hier nicht näher eingegangen werden. Es sei dazu nur bemerkt, daß das System des Beispiels
(s. Bild 6.15) verschiebliche Knoten hat, also z. B. das normale Crossverfahren nicht anwendbar
ist. Die Behandlung des Beispiels mit dem Kraftgrößenverfahren wird unten dargestellt, soweit
es flir die Berechnung mit einer DVA notwendig ist.

14----8,00m-------i~--6'OOm
3,00+3,00 1
2345678970 77 72
7 (3) (4) (5) (6) (7) (8) (9) (10) 2 (17) (73)
6.15 Rahmensystem mit Maßen, Quer-
schnittswerten und Belastungen. An-
(2)
gabe der Punktnummern 0 bis 12 und
der Teilstücknummern (1) bis (12) flir
das Programm MAINI - Kraftgrößen-
verfahren o

Weist das Rahmensystem eine größere Zahl von statisch oder geometrischen überzähligen auf,
so ist der Einsatz einer DVA lohnend. Allerdings wird der Statiker im Normalfall keine eigenen
Programme aufstellen, sondern vorhandene allgemeine Programme entweder selbst anwenden
oder im Rechenzentrum anwenden lassen. Er kann sich anhand der jeweiligen Programm-
beschreibung informieren, nach welchem Verfahren das Programm arbeitet, welche Annahmen
und Vereinfachungen gelten, wie die Eingabedaten aufzustellen und die Ausgabedaten zu
verwenden sind. Für das Aufstellen und Prüfen der Berechnung ist [95] zu beachten.
K r a f t g r ö ß e n ver f a h ren. Es soll die Anwendung von zwei allgemeinen Programmen
gezeigt werden. Der in Bild 6.15 dargestellte Rahmen wird zunächst mit MAINI [99], einem
FORTRAN-Programm der IBM, behandelt. Dieses Programm berechnet die Schnittgrößen
210 6.1. Statik und konstruktiver Ingenieurbau

beliebiger n-fach statisch unbestimmter Stab tragwerke nach dem Kraftgrößenverfahren. Die
Aufstellung der Eingabedaten basiert auf der Einteilung des Systems in Teilstücke und deren
Numerierung in aufsteigender Reihenfolge, wobei das Teilstück r begrenzt ist durch die
Schnittpunkte r - 1 und r. Ein Sclmittpunkt kann dabei mehr als eine Nummer haben. Wie bei
der konventionellen Methode muß der Benutzer ein statisch bestimmtes Grundsystem (s. Bild
6.16) festlegen und die Unbekannten ansetzen. Die Zustandsflächen für die gewünschten
Schnittgrößen werden für die Lastfälle der äußeren Belastung (X = 0) und die n Einheits-
belastungszustände (~ = 1) aufgestellt. In Bild 6.16 sind nur die Momentenlinien wieder-
gegeben.

L ,~~
x=o
Riegel/asten
~. I~I====
l Xz=1
(Lastfal/l)

6.16 Statisch bestimmtes Grundsystem mit


den drei Überzähligen, M 0 m e n t e n-
f 1 ä c h e n ftir die äußeren Lasten
und ftir die Einheitsbelastungszustände
~= 1

Alle Eingabedaten sind mit festgelegten Formaten auf Karten abzulochen (s. Tafel 6.17).
Nach einer Steuerkarte, die das Betriebssystem der Rechenanlage anspricht, folgen zwei Text-
karten, auf denen beliebige überschriften für die Ausgabedaten angegeben werden können.
Die nächste Karte muß enthalten: Anzahl der Sclmittkraftarten, Anzahl der Teilstücke des
Systems, Anzahl der Lastfälle, Anzahl der statisch Unbestimmten. Danach folgen 2 Leit-
karten für die erste Schnittkraftart: niedrigste und höchste Sclmittnummer des Systems, sowie
eine Textkarte für die Kennzeichnung der Schnittkraft in der Ausgabe (z. B. Moment). Vor
den Datenkarten eines Datenblocks, der höchstens 20 Schnittnummern umfassen darf, wird
eine Blockkarte eingegeben, die die niedrigste und höchste Schnittnummer des Blocks enthält.
Im Beispiel ist nur ein Block erforderlich. Die Intervallängen, gekennzeiclmet durch 51 in den
beiden ersten Spalten, nehmen im Beispiel 3 Karten ein, wobei in den Spalten 5-7 und 11-13
von jeweils vier Teilstücknummern die erste und die letzte angegeben sind. Die folgende Karte
(mit 14 in den beiden ersten Spalten) enthält den E-Modul, der im Beispiel für alle Schnitt-
nummern konstant ist. Auf den nächsten 3 Karten (24 am Anfang) sind die Trägheitsmomente
abgelocht. Die Kennziffern 3 bzw. 4 in der ersten Spalte bezeichnen die Karten mit den
Ordinaten der Zustandsflächen Mo bzw. Mi (s. Bild 6.16). Bei diesen Karten bedeuten die
Ziffern der zweiten Spalte den Ver lau f der Momentenlinien. Dabei symholisieren 1 und 2
linearen, 3 parabolischen und 4 konstanten Kurvenverlauf. Die Ordinaten der Schnittgrößen
sind in die Spalten 14 bis 23, 24 his 33 usw. einzusetzen. In Spalte 4 steht bei den Mo-Karten
die Lastfall-Nummer und bei den MrKarten die Nummer i der statisch überzähligen, im Bei-
spiell bis 3. In den Spalten 5 bis 7 und 11 bis 13 findet man die Sclmittnummern, zusätzlich
6.1.2. Rahmenberechnung 211

Tafel 6.17 Eingabedaten für das Rahmensystem nach Bild 6.15 zur Verarbeitung mit dem
Programm MAIN I

// XEO MAIN1
o KRAFTGROESSENVERFAHREN
ZWEISTIELIGER ZWEIFELDRAHMEN
3 12 2 3
0 12
0 MOMENT
0 12
51 1 4 5. 5. 1. 1.
51 5 8 1. 1. 1. 1.
51 9 12 1. 1. 3. 3.
14 0 12 21000000.
24 0 1 0.0000595
24 1 2 0.0000595
24 2 12 0.0001196
34 1 0 2 O.
33 1 2 6 10 O. 12. O.
31 1 10 11 O. 3.75
31 1 11 12 3.75 O.
31 2 0 1 O. 4.
34 2 1 2 O.
32 2 2 10 4. O.
34 2 10 12 O.
44 1 0 1 1.
44 1 1 2 O.
42 1 2 10 1. O.
44 1 10 12 O.
44 2 0 2 O.
42 2 2 10 O. 1.
42 2 10 12 1. O.
41 3 0 1 O. -5.
41 3 1 2 O. -5.
44 3 2 10 -5.
44 3 10 12 O.
6202
0 12
o OUERKRAFT
0 12
14 0 12 8000000.
24 0 1 0.00827
24 1 2 0.00827
24 2 12 0.0111
34 0 2 O.
32 1 2 10 6. -6.
34 1 10 11 1.25
34 1 11 12 -1.25
34 2 0 1 0.8
34 2 1 2 O.
34 2 2 10 '-0.5
34 2 10 12 O.
44 1 0 2 O.
44 1 2 10 - 0.125
44 1 10 12 O.
44 2 0 2 O.
212 6.1. Statik und konstruktiver Ingenieurbau

44 2 2 10 0.125
44 2 10 12 -0.166667
44 3 0 1 -1.
443 1 2 1.
44 3 2 12 o.
51 1 4 o. o. o. o.
51 5 8 o. o. o. o.
51 9 12 o. o. o. o.
6201
0 12
o NORMALKRAFT
0 12
51 1 4 5. 5. 1. 1.
51 5 8 1. 1. 1. 1.
51 9 12 1. 1. 3. 3.
14 0 12 21000000.
24 0 1 0.00827
24 1 2 0.00827
24 2 12 0.0111
34 0 1 -6.
34 1 2 -7.25
34 1 2 12 O.
34 2 0 1 0.5
34 2 1 2 -0.5
34 2 2 12 O.
44 1 0 1 0.125
44 1 1 2 -0.125
44 1 2 12 O.
44 2 0 1 -0.125
44 2 1 2 0.291667
44 2 2 12 O.
44 3 0 2 o.
44 3 2 10 -1.
44 3 10 12 O.
51 1 4 O. O. O. O.
51 5 8 O. O. O. O.
51 9 12 O. O. O. o.
63

wird bei Parabeln die Nummer des Mittelschnitts in den Spalten 8 bis 10 angegeben. Allgemein
gilt, daß bei ganzzahligen Größen wie Nummern und Kennziffern kein Dezimalpunkt stehen
darf (I-Format), sonst aber ein Dezimalpunkt stehen sollte (F-Format). Die Daten fUr eine
Schnittgröße werden durch eine Steuerkarte (hier 6202) abgeschlossen.
Werden die in der Tafel 6.17 dargestellten Daten für die Berechnung der Schnittgrößen in die
IBM 1130 mit 8 K Kernspeicher und Plattenspeicher eingegeben, dann bewirkt das Programm
MAIN1 die automatische Aufstellung der llik-Matrix, deren Auflösung nach den X; und die
Superpositionen

(6.12)

wobei Y für M, Q und N steht, mjede der numerierten Schnittstellen sein kann und n die Anzahl
der Unbekannten X ist. Die Ausgabedaten des Druckers für das Beispiel sind in der Tafel 6.18
wiedergegeben.
6.1.2. Rahmenberechnung 213

Tafel 6.18 Ausgegebene Daten des Programms MAIN I ftir das Beispiel nach Bild 6.15

KRAFTGROESSENVERFAHREN
ZWEISTIELIGER ZWEIFELDRAHMEN

KOEFFIZIENTENMATRIX 0 (I, K)

1 0.50633372E - 02
2 0.53086993E - 03
3 - 0.17967037E - 01

1 2 0.53086993E - 03
2 2 0.18580451 E - 02
3 2 - 0.79630501 E - 02

1 3 - 0.17967037E - 01
2 3 - 0.79630501 E - 02
3 3 0.14632374E 00

LASTGLIEDER B (J, L)

1 0.12541798E - 01
2 0.12250153E-Ol

2 1 0.14781408E - 01
2 2 0.21234792E - 02

3 1 - 0.12541803E 00
3 2 - 0.58529481 E - 01

UNBEKANNTE X (J, L)

1 - 0.13342118E 00
2 O.17410068E 01

2 1 0.55425644E 01
2 2 - 0.19910761E 00

3 1 - 0.57187938E 00
3 2 - 0.19705793E 00

KRAFTG ROESSENVER FAH REN


ZWEISTIELIGER ZWEIFELDRAHMEN

MOMENT
I LF. S(I-1) S (I)

1 0.13342118E 00 - 0.27259755E 01
2 - 0.17410068E 01 0.12737038E 01

2 1 O.OOOOOOOOE 00 - 0.28593964E 01
2 2 O.OOOOOOOOE 00 - 0.98528957E 00

3 1 - 0.27259755E 01 0.18145263E 01
3 2 0.12737038E 01 0.10162179E 01
214 6.1. Statik und konstruktiver Ingenieurbau

4 1 0.18145263E 01 0.48550281 E 01
4 2 0.10162179E 01 0.75873220E 00

5 1 0.48550281 E 01 0.63955288E 01
5 2 0.75873220E 00 0.50124657E 00

6 1 0.63955288E 01 0.64360313E 01
6 2 0.50124657E 00 0.24376067E 00

7 1 0.64360313E 01 0.49765329E 01
7 2 0.24376067E 00 - O. 13724865E - 01

8 1 0.49765329E 01 0.20170345E 01
8 2 - 0.13724865E - 01 - 0.27121067E 00

9 1 0.20170345E 01 - 0.24424629E 01
9 2 - 0.27121067E 00 - 0.52869630E 00

10 1 - 0.24424629E 01 - 0.84019603E 01
10 2 - 0.52869630E 00 - 0.78618204E 00

11 1 - 0.55425644E 01 0.97871840E 00
11 2 0.19910761E 00 0.99553808E - 01

12 1 0.97871840E 00 O.OOOOOOOOE 00
12 2 0.99553808E - 01 O.OOOOOOOOE 00

KRAFTGROE55ENVERFAHREN
ZWEI5TIELIGER ZWEIFELDRAHMEN

QUERKRAFT
I LF. 5(1-1) 5 (I)

1 - 0.57187938E 00 - 0.57187938E 00
2 0.60294211 E 00 0.60294199E 00

2 1 0.57187938E 00 0.57187938E 00
2 2 0.19705793E 00 0.19705793E 00

3 1 0.52905025E 01 0.37905020E 01
3 2 - 0.25748574E 00 - 0.25748574E 00

4 1 0.37905020E 01 0.22905020E 01
4 2 - 0.25748574E 00 - 0.25748574E 00

5 1 0.22905020E 01 0.79050183E 00
5 2 - 0.25748574E 00 - 0.25748574E 00

6 1 0.79050183E 00 - 0.70949816E 00
6 2 - 0.25748574E 00 - 0.25748574E 00

7 1 - 0.70949816E 00 - 0.22094984E 01
7 2 - 0.25748574E 00 - 0.25748574E 00

8 1 - 0.22094984E 01 - 0.37094979E 01
8 2 - 0.25748574E 00 - 0.25748574E 00
6.1.2. Rahmenberechnung 215

9 1 - 0.37094979E 01 - 0.52094974E 01
9 2 - 0.25748574E 00 - 0.25748574E 00

10 1 - 0.52094974E 01 - 0.67094974E 01
10 2 - 0.25748574E 00 - 0.25748574E 00

11 1 0.21737628E 01 0.21737628E 01
11 2 - 0.33184662E - 01 - 0.33184662E - 01

12 1 - 0.32623767E 00 - 0.32623767E 00
12 2 - 0.33184662E - 01 - 0.33184662E - 01

KRAFTGROESSENVERFAHREN
ZWEISTIELIGER ZWEIFELDRAHMEN

NORMALKRAFT
LF. S (1- 1) S (I)

1 - 0.52905025E 01 - 0.52905025E 01
2 0.25748574E 00 0.25748574E 00

2 1 - 0.88832607E 01 - 0.88832607E 01
2 2 - 0.22430104E 00 - 0.22430104E 00

3 1 - 0.57187938E 00 - 0.57187938E 00
3 2 - 0.19705793E 00 - 0.19705793E 00

4 1 - 0.57187938E 00 - 0.57187938E 00
4 2 - 0.19705793E 00 - 0.19705793E 00

5 1 - 0.57187938E 00 - 0.57187938E 00
5 2 - 0.19705793E 00 - 0.19705793E 00

6 1 - 0.57187938E 00 - 0.57187938E 00
6 2 - 0.19705793E 00 - 0.19705793E 00

7 1 - 0.57187938E 00 - 0.57187938E 00
7 2 - 0.19705793E 00 - 0.19705793E 00

8 1 - 0.57187938E 00 - 0.57187938E 00
8 2 - 0.19705793E 00 - 0.19705793E 00

9 1 - 0.57187938E 00 - 0.57187938E 00
9 2 - 0.19705793E 00 - 0.19705793E 00

10 1 - 0.57187938E 00 - 0.57187938E 00
10 2 -0.19705793E 00 - 0.19705793E 00

11 1 O.OOOOOOOOE 00 O.OOOOOOOOE 00
11 2 O.OOOOOOOOE 00 O.OOOOOOOOE 00

12 1 O.OOOOOOOOE 00 O.OOOOOOOOE 00
12 2 O.OOOOOOOOE 00 O.OOOOOOOOE 00
216 6.1. Statik und konstruktiver Ingenieurbau

Für die beiden Lastfälle wurden außer der eS-Matrix die Unbekannten X und die Schnitt-
größen an den Schnittstellen 0 bis 12 ausgedruckt. Bei allen Schnittgrößen gehört eine Zeile zu
einem Teilstück r mit den begrenzenden Schnittpunkten r - 1 und r. Zur Veranschaulichung
der Zahlenwerte dienen die Zustandsflächen im Bild 6.19. Die Auflagerreaktionen können den
Zustandsflächen als Endschnittkräfte entnommen werden.
Lastfall 7 Lastfall2

6.19
Biegemomente. Quer-
kräfte und Normalkräfte
nach Tafel 6.18 - grafi-
5,29/ sche Darstellung der
8,883 Ausgabedaten

MAlNl bietet die Möglichkeit, bei den eS-Werten entweder nur den Anteil der Biegung oder
zusätzlich noch die Anteile anderer Schnittgrößen mitzunehmen. Im Beispiel wird nur der
Momentenanteil berücksichtigt, indem in Verbindung mit den entsprechenden Steuerkarten
(6202 bzw. 6201) die Systemlängen fUr die Querkräfte und Normalkräfte gleich Null gesetzt
wurden (s. Tafel 6.17). Mit dem Programm ist es auch möglich, mehrere Lastfälle einzeln oder
in bestimmten Kombinationen zu berücksichtigen oder nicht zu berücksichtigen und dann
ungünstig zu überlagern. Hiervon wurde im Beispiel kein Gebrauch gemacht. Die Vorbereitungs-
zeit für das Programm MAIN 1 ist fUr die praktische Anwendung zu groß, weil der Ansatz fUr
das Kraftgrößenverfahren vom Benutzer durchgeführt werden muß. Für die Praxis sind all-
gemeinere Programme besser geeignet, wie im nächsten Abschnitt gezeigt wird. MAIN1 kann
jedoch mit Vorteil fUr die Ausbildung in Statik eingesetzt werden.
STRESS. Als zweites allgemeines Programm soll nun STRESS ([100], [89]) besprochen werden.
Es handelt sich um ein auf dem Weggrößenverfahren aufbauendes Programmiersystem, mit
dem statische Berechnungen von Stabtragwerken mit Hilfe einer DVA gelöst werden können.
STRESS besteht aus zwei Teilen, der Eingabesprache, auch STRESS-Sprache oder Quellen-
programm genannt, und dem übersetzungs- und Ausflihrungsprogramm. Die STRESS-Sprache
ist von der Fachsprache der Ingenieure hergeleitet und deshalb leicht zu handhaben. In dieser
Sprache beschreibt der Benutzer sein Problem, indem er mit Kennworten und Zahlen eine
6.1.2. Rahmenberechnung 217

Reihe von Befehlen aufstellt, welche Art und Form des Systems, Abmessungen, Belastungen
und die gewünschte Ausgabe definieren. Mit STRESS können ebene und räumliche Fachwerke,
ebene und räumliche Rahmen und ebene Trägerroste berechnet werden. Die Stäbe müssen
gerade sein und konstanten Querschnitt haben. Jeder Stab kann fest eingespannt oder gelenkig
gelagert sein. Alle benötigten Lastfeille und Lastfallkombinationen können in einem Arbeits-
gang behandelt werden. STRESS berechnet die gesuchten Schnittgrößen an den Stabenden, die
Auflagerreaktionen und Formänderungen. Diese Ergebnisse kann man je rur sich oder in
beliebigen Kombinationen und über verschiedene Ausgabeeinheiten erhalten.
Bevor das STRESS-Quellenprogramm für das Rahmentragwerk des vorangegangenen Beispiels
aufgestellt werden kann, sind die Knoten und Stäbe des Systems in aufsteigender Reihenfolge
zu numerieren. Dann muß ein beliebiges, aber zweckmäßig zu wählendes XYZ-Koordinaten-
system nach der Rechte-Hand-Regel eingefiihrt werden (s. Bild 6.20). Das xyz-Stabkoordinaten-
system eines Stabes liegt dadurch fest, daß die x-Achse die positive Stabachsenrichtung ist

(1) (2)
6.20 Rahmensystem mit Gesamtkoordina-
tensystem, Belastungen, Knoten- und
Stabnummern für das STRESS-
Quellenprogramm. DIe Maße und
i 2
Querschnittswerte sind wie im Bild /~. x--
6.15 /

und die Achsen wieder ein Rechtssystem bilden. Auf die Koordinatensysteme wird noch
eingegangen werden. Die Kennworte und Befehle der STRESS-Sprache sind in [100] zusammen-
gestellt und erläutert. Man unterscheidet Leitbefehle (STRUCTURE und LOADING), system-
beschreibende Befehle (z. B. NUMBER OF SUPPORTS), Systemkenngrößen (z. B. MEMBER
PROPERTIES) und Belastungsdaten (z. B. JOINT LOADS). Die wichtigsten Worte sind in der
Tafel 6.21 rechts neben dem Quellenprogramm erläutert. Für die Reihenfolge der einzelnen
Befehle sind einige Regeln einzuhalten. So muß STRUCTURE das erste Wort eines Programms
sein. Die Typenausgabe, die NUMBER-Angaben und die Knoten-Koordinaten folgen anschlie-
ßend. Weitere Regeln betreffen die Art der Ausgabe (TABULATE). Das letzte Wort ist SOLVE.
Das Quellenprogramm wird auf Karten abgelocht. Dabei sind lediglich folgende Punkte zu
beachten: Nur die Spalten 1-72 dürfen benutzt werden;ganzzahlige Werte wie Nummern
müssen ohne Dezimalpunkt und sonstige Zahlen dürfen nicht ohne Dezimalpunkt geschrieben
werden. Kommentar- und Leerkarten müssen in der Spalte 1 ein * bekommen. Im übrigen
ist die Eingabe nicht an bestimmte Kartenspalten gebunden.
Zusätzlich zu den Erläuterungen in der Tafel 6.21 soll noch auf einige Punkte genauer
eingegangen werden. Sieht man für einen Knoten JOINT RELEASES nicht vor, so bekommt
man die Ergebnisse fiir ein fest eingespanntes Auflager. Zur Beschreibung des Systems
gehören also bei Gelenken die Momenten-Freigabe und bei Verschiebungsmöglichkeiten
die Kraft-Freigabe. Freigaben können für Knoten oder auch mit MEMBER RELEASES
für Stabenden (Bilder 6.22 und 6.23) vereinbart werden. Bei Auflagerknoten ist beides
identisch. Deshalb hätte man im Beispiel anstelle der Knoten-Freigaben mit denselben Resul-
218 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6.21 STRESS-Quellenprograrnm für das Beispiel nach Bild 6.20 mit Erläuterungen.
Der senkrechte Strich und die rechts davon stehenden Kommentare gehören
nicht zum Programm

STRUCTURE ZWEIFELDRAHMEN UEBERSCHRIFT


*
TYPE PLANE FRAME TRAGWERKSTYP EBENER RAHMEN
NUMBER OF JOINTS 5 ANZAHL DER KNOTEN
NUMBER OF MEMBERS 4 ANZAHL DER STAEBE
NUMBER OF SUPPORTS 3 ANZAHL DER LAGER
NUMBER OF LOADINGS 2 ANZAHL DER LASTFAELLE
*
JOINT COORDINATES KOORDINATEN DER KNOTENPUNKTE
1 O. O. S KNOTENNUMMER
2 8. o. S X-ORDINATE IN M
3 O. 5. Y-ORDINATE IN M
4 8. 5. S = AUFLAGERKNOTEN
5 14. 5. S
*
JOINT RELEASES KNOTEN-FREIGABEN
2 MOMENT Z KNOTEN 2.. MOMENT Z WIRD 0 (GE-
* LENK)
5 FORCE X MOMENT Z KNOTEN 5 .. MOMENT Z WIRD 0 (GE-
* LENK)
UND KRAFT X WIRD 0 (GLEITLAGER)

MEMBER PROPERTIES PRISMATIC STABQUERSCHNITTSWERTE


1 AX 0.00827 IZ 0.0000595 STABNUMMER
2 AX 0.00827 IZ 0.0000595 QUERSCHNITTSFLAECHE IN M QUAD-
RAT
3 AX 0.0111 IZ 0.0001196 TRAEGHEITSMOMENT
4 AX 0.0111 IZ 0.0001196 UM DIE Z-ACHSE IN M HOCH 4

MEMBER INCIDENCES STABORIENTIERUNG


1 1 3 STABNUMMER
224 STABANFANGSKNOTEN
334 STABENDKNOTEN
445

CONSTANTS E 21000000. ALL E-MODUL IN MP/M QUADRAT


*
LOADING 1 RIEGELBELASTUNG LASTFALL 1 UEBERSCHRIFT
TABULATE FORCES REACTIONS AUSDRUCK DER SCHNITTGROESSEN UND
* REAKTIONEN
MEMBER LOADS STAB LASTEN
3 FORCE Y UNIFORM - 1.5 STAB 3, KRAFT Y, GLEICHSTRECKEN-
* LAST 1.5 MP/M ENTGEGEN DER
* POSITIVEN ACHSENRICHTUNG
4 FORCE Y CONC P - 2.5 L 3.0 STAB 4, KRAFT Y, EINZELLAST 2.5 MP
ENTGEGEN DER POSITIVEN ACHSEN-
RICHTUNG IN 3.0 M ABSTAND VOM
* STABANFANG

LOADING 2 HORIZONTALLAST LASTFALL 2 UEBERSCHRIFT


TABULATE ALL AUSDRUCK DER SCHNITTGROESSEN,
6.1.2. Rahmenberechnung 219

* I REAKTIONEN UND FORMAENDE-


* I RUNGEN
JOINT lOADS I KNOTEN lASTEN
3 FORCE X 0.8 I KNOTEN 3, KRAFT X, 0.8 MP IN RICH-
* I TUNG DER POSITIVEN GLOBALEN
* I X-ACHSE
* I
SOlVE I ENDE DER DATEN FUER DIESES BEISPIEL

taten auch programmieren können


MEMBER RELEASES
2 START MOMENT Z
4 END MOMENT Z
4 END FORCE X
Hierbei bedeuten START Stabanfangspunkt und END Stabendpunkt. Mit den MEMBER
INCIDENCES sind für jeden Stab Anfang und Ende und somit die positive Richtung der
Stabachse x festgelegt. Dies ist im Bild 6.24 für den Stab 1 des Beispiels dargestellt. Das Stab-
koordinatensystem dient zur Richtungsangabe und zur Vorzeichenregelung für die angreifenden
Stabbelastungen und fur die ausgedruckten Stabendschnittgrößen (s. Bild 6.24). Das Gesamt-
koordinatensystem hat entsprechende Funktionen rur angreifende Knotenlasten (und -momen-
te) und für die ausgedruckten Reaktionen und Verformungen.

+N
+1 ~! Knoten 3

I
L ~._.-
/L x-
"'! Stobende

/
Stob(1)

6.22 Stabkoordinatensysteme anje einem


Stabende eines senkrechten und eines
waagrechten Stabes

6.24 FestJegung des Stabkoordinatensys-


tems und der Vorzeichenregelung der
Schnittgrößen an den Stabenden
6.23 Stabenden mit Momentenfreigabe durch MEMBER INCIDENCES

Ein positiv ausgegebenes Moment dreht als Rechtsschraube um die z-Achse, greift also ent-
gegengesetzt zum Uhrzeigersinn am Stabende an. Eine positive Normalkraft wirkt am Stab-
ende in Richtung der positiven x-Achse, eine positive Querkraft in Richtung der positiven
y-Achse.
Das Beispiel wurde auf der IBM 1130 mit 8 K Kernspeicherkapazität und Plattenspeicher
gerechnet, wobei eine Kassette ausschließlich STRESS gewidmet werden mußte. Der Ausdruck
ist in der Tafel 6.25 dargestellt.
220 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6.25 Ausgegebene Daten des STRESS-Programmes für das Beispiel nach Bild 6.20

STRUCTURE ZWEIFELDRAHMEN
==========================================================================
LOADING 1 RIEGELBELASTUNG
==========================================================================
MEMBER FORCES

MEMBER JOINT AXIAL FORCE SHEAR FORCE MOMENT


1 1 5.286 -0.584 -0.14
1 3 -5.286 0.584 -2.78
2 2 8.890 0.584 0.00
2 4 -8.890 - 0.584 2.92
3 3 0.584 5.286 2.78
3 4 -0.584 6.713 -8.49
4 4 -0.000 2.177 5.56
4 5 0.000 0.322 -0.00

APPLIED JOINT LOADS, FREE JOINTS

JOINT FORCE X FORCE Y MOMENT Z


3 -0.000 0.000 0.00
4 -0.000 -0.000 -0.00

REACTIONS, APPLIED LOADS SUPPORT JOINTS

JOINT FORCE X FORCE Y MOMENT Z


1 0.584 5.286 -0.14
2 -0.584 8.890 0.00
5 0.000 0.322 -0.00

STRUCTURE ZWEIFELDRAHMEN

LOADING 2 HORIZONTALLAST
==========================================================================
MEMBER FORCES

MEMBER JOINT AXIAL FORCE SHEAR FORCE MOMENT


1 1 - 0.257 0.603 1.74
1 3 0.257 -0.603 1.27
2 2 0.223 0.197 0.00
2 4 -0.223 -0.197 0.98
3 3 0.196 -0.257 -1.27
3 4 - 0.196 0.257 -0.78
4 4 -0.000 -0.033 -0.20
4 5 0.000 0.033 0.00
APPLIED JOINT LOADS, FREE JOINTS

JOINT FORCE X FORCE Y MOMENT Z


3 0.799 0.000 0.00
4 0.000 -0.000 0.00
6.1.2. Rahmenberechnung 221

REACTIONS. APPLIED LOADS SUPPORT JOINTS

JOINT FORCE X FORCE Y MOMENT Z


1 -0.603 - 0.257 1.74
2 - 0.197 0.223 0.00
5 0.000 0.033 0.00

FREE JOINT DISPLACEMENTS

JOINT X-DISPLACEMENT Y-DISPLACEMENT ROTATION


3 0.0073 0.0000 -0.0009
4 0.0073 -0.0000 -0.0001

SUPPORT JOINT DISPLACEMENTS

JOINT X-DISPLACEMENT Y-DISPLACEMENT ROTATION


1 0.0000 0.0000 0.0000
2 0.0000 0.0000 - 0.0021
5 0.0073 0.0000 0.0000

Für den Lastfalll werden infolge des Befehls TABULATE FORCES REACTIONS die Schnitt-
größen, die an den freien Knoten angesetzten Belastungen (nur im Lastfall 2 von 0 verschieden)
und die an den Auflagerknoten entstehenden Reaktionen ausgedruckt. Im Lastfall 2 kommen,
weil TABULATE ALL gewünscht war, noch die Verschiebungen und Verdrehungen an allen
Knoten hinzu. Die Zahlenwerte der Ausgabe haben alle dieselben Einheiten wie die Eingabe-
werte, also Mp und m, sowie Mpm.
Der wichtigste Vorteil von STRESS gegenüber vergleichbaren Programmiersystemen ist die
leichte Lesbarkeit der Quellenprograrnme. Dies wird allerdings dadurch erkauft, daß die Auf-
stellung verhältnismäßig langwierig ist. Von Vorteil ist wiederum, daß das Programm während
des übersetzungsvorganges und während der Ausflihrungsphase auf Fehler kontrolliert wird.
Seit kurzem gibt es zwei Zusatzprograrnme zu STRESS. Das eine liefert eine Tabelle mit den
Schnittgrößen an vorher gewählten Punkten zwischen den Stabknoten (MEMBER SECTIONAL
FORCES). Das zweite Zusatzprogramm steuert einen Zeichenautomaten, der das eingegebene
System einschließlich der Knoten- und Stabnumerierung aufzeichnet. Dies kann insbesondere
zur Kontrolle der Eingabe dienen und Fehler aufzeigen, die das Ausflihrungsprograrnm nicht
fmdet.
Nun soll auch auf zwei Nachteile von STRESS hingewiesen werden. Während z. B. mit dem
Programm Statik-CODE Ein f I u ß I i n ie n fUr jede Schnittgröße ermittelt werden können,
sind bei STRESS keine Einflußlinien vorgesehen. Es ist auch nicht möglich, arn n - 1 fach
statisch unbestimmten System nach dem Satz von Land Ordinaten für Einflußlinien zu erhalten,
denn mit STRESS werden nur Knotenverformungen, aber keine Stabendverformungen aus-
gegeben, auch nicht mit dem genannten Zusatzprograrnm fUr Stabschnittgrößen. Eine verfeiner-

6.26 Verformungen und


Biegemomente Ma aus
dem ersten Lauf mit
STRESS ftir das Bei-
spiel nach Bild 6.20
- Ausgangswerte zur
Berechnung nach
Theorie Il. Ordnung
222 6.1. Statik und konstruktiver Ingenieurbau

Tafe16.27 Ausgangswerte für Theorie 11. Ordnung

STRUCTURE ZWEIFELDRAHMEN MP. CM

LOADING 3 UEBERLAGERUNG

MEMBER FORCES

MEMBER JOINT AXIAL FORCE SHEAR FORCE MOMENT


1 1 5.029 0.017 160.10
1 3 -5.029 -0.017 -151.13
2 2 9.114 0.781 0.00
2 4 - 9.114 -0.781 390.94
3 3 0.781 5.029 151.13
3 4 -0.781 6.970 -927.47
4 4 -0.000 2.144 536.52
4 5 0.000 0.355 -0.00

APPLIED JOINT LOADS. FREE JOINTS

JOINT FORCE X FORCE Y MOMENT Z


3 0.799 0.000 0.00
4 -0.000 -0.000 -0.00

REACTIONS. APPLIED LOADS SUPPORT JOINTS

JOINT FORCE X FORCE Y MOMENT Z


1 - 0.017 5.029 160.10
2 - 0.781 9.114 0.00
5 0.000 0.355 -0.00
FREE JOINT DISPLACEMENTS

JOINT X-DISPLACEMENT Y-DISPLACEMENT ROTATION


3 1.5717 - 0.0144 -0.0062
4 1.5690 -0.0262 0.0020
SUPPORT JOINT DISPLACEMENTS

JOINT X-DI SPLACEMENT Y-DISPLACEMENT ROTATION


1 0.0000 0.0000 0.0000
2 0.0000 0.0000 -0.0057
5 1.5690 0.0000 0.0001

te Einteilung des betreffenden Stabes in Verbindung mit der Anwendung der Definitions-
methode (wandernde Einzellast !) würde Einflußlinien liefern, aber mit etwa dem gleichen Auf-

-rr
9,1I411p 6.28
Ideal verformtes System
und Stiellasten für den 2.
Lauf zur Berechnung
nach Theorie 11. Ord-
nung mit STRESS, Biege-
momente Mj als Ergeb-
nisse dieses Laufes
6.1.2. Rahmenberechnung 223

Tafel 6.29 STRESS-Programm für den zweiten Lauf zur Berechnung des Beispiels nach
Theorie 11. Ordnung

STRUCTURE ZWEIFELDRAHMEN MP, CM


*
TYPE PLANE FRAME
NUMBER OF JOINTS 5
NUMBER OF MEMBERS 4
NUMBER OF SUPPORTS 3
NUMBER OF LOADINGS 1
*
TABULATE ALL
JOINT COORDINATES
1 O. O. S
2 800. O. S
3 1.570 500.
4 801.570 500.
5 1401.570 500. S

JOINT RELEASES
2 MOMENT Z
5 FORCE X MOMENT Z

MEMBER PROPERTIES PRISMATIC


1 AX 82.7 IZ 5950.
2 AX 82.7 IZ 5950.
3 AX 111.0 IZ 11960.
4AX 111.0 IZ 11960.
*
MEMBER INCIDENCES
1 1 3
224
334
445

CONSTANTS E 2100. ALL


*
LOADING STlEL-NORMALKRAEFTE
JOINT LOADS
3 FORCE Y - 5.029
4 FORCEY -9.114
SOLVE
PROBLEM CORRECTL Y SPECIFIED, EXECUTION TO PROCEED.

STRUCTURE ZWEIFELDRAHMEN MP, CM

LOADING STIEL-NORMALKRAEFTE
==========================================================================.\
MEMBER FORCES

MEMBER JOINT AXIAL FORCE SHEAR FORCE MOMENT


1 1 5.019 0.031 9.51
1 3 -5.019 - 0.031 5.98
2 2 9.114 0.013 0.00
224 6.1. Statik und konstruktiver Ingenieurbau

2 4 - 9.114 - 0.013 6.68


3 3 - 0.015 -0.009 -5.98
3 4 0.015 0.009 - 1.41
4 4 -0.000 -0.008 -5.27
4 5 0.000 0.008 -0.00

APPLIED JOINT LOADS, FREE JOINTS

JOINT FORCE X FORCE Y MOMENT Z


3 -0.000 - 5.028 0.00
4 0.000 - 9.113 0.00
REACTIONS, APPLIED LOADS SUPPORT JOINTS

JOINT FORCE X FORCE Y MOMENT Z


1 - 0.015 5.019 9.51
2 0.015 9.114 0.00
5 0.000 0.008 -0.00

FREE JOINT DISPLACEMENTS

JOINT X·DISPLACEMENT Y·DISPLACEMENT ROTATION


3 0.0434 - 0.0145 -0.0000
4 0.0435 - 0.0263 0.0000

SUPPORT JOINT DISPLACEMENTS

JOINT X·DISPLACEMENT Y·DISPLACEMENT ROTATION


1 0.0000 0.0000 0.0000
2 0.0000 0.0000 - 0.0001
5 0.0435 0.0000 0.0000

wand könnten die erforderlichen Lastfälle selbst durchgerechnet werden, so daß die Auswertung
bereits erledigt wäre und auf die Einflußlinien verzichtet werden könnte.
Mit dem Programmiersystem RASTA können Probleme der T h e 0 r i e 11. 0 r d nun g
automatisch gelöst werden, was bei STRESS nicht durchzuführen ist. Wie man jedoch auch
mit STRESS die Schnitt· und Verformungsgrößen nach der Theorie 11. Ordnung bestimmen
kann, soll nun anhand des gewählten Beispiels gezeigt werden (Bild 6.26). In der Tafel 6.27
sind als Ergebnisse aus einem weiteren STRESS·Programm die Daten abgedruckt, die als
Grundwerte der endgültigen Schnittgrößen nach der Theorie 11. Ordnung dienen. Die beiden
Lastfälle (s. Bild 6.20) wurden dabei überlagert. Um genauere Zahlenwerte zu erhalten, sind
hier alle Längen in cm angegeben. In diesen Grundwerten, von denen insbesondere die
Biegemomente betrachtet werden sollen, ist der Einfluß der Querbelastungen der Stäbe ent·
halten.

Aus der Tafel 6.27 geht auch die waagrechte Verschiebung des Riegels va = 1,57 cm hervor. Bei
der Theorie 11. Ordnung sind nun die Hebelarme aus den Verformungen mit in die Rechnung
einzubeziehen. Zusätzliche Hebelarme finden nur noch die inneren Stablängskräfte vor. Während
die kleinen Längskräfte der Riegel in einer Linie liegen, sind die viel größeren Längskräfte der
Stiele, wenn man sie als richtungstreu betrachtet, um va gegeneinander versetzt. Man begeht
nach Chwalla [88] einen nur geringen Fehler, wenn man die Biegelinie so idealisiert, daß nur die
6.1.3. Spannbeton 225

Tafel 6.30 Riegelverschiebung und Biegemoment nach Theorie 11. Ordnung für das Beispiel
nach Bild 6.20

1. Lauf 2. Lauf Summe

Verschiebung v 1,572 0,043 1,615 cm


Biegemomente M
Stab Knoten
1 1 160,10 9,51 169,61 Mpcm
1 3 - 151,13 5,98 - 145,15

2 2 0 0 0
2 4 390,94 6,68 397,62

3 3 151,13 - 5,98 145,15


3 4 - 927,47 - 1,41 - 928,88

4 4 536,52 - 5,27 531,25


4 5 0 0 0

Knotenverschiebungen berücksichtigt werden, und die Stäbe gerade bleiben. Die dafür not-
wendige Voraussetzung, daß die Stabkennzahl € < l,5 sein muß, ist hier erfüllt, denn für den
Stiel ergibt sich € = 0,32. Im Bild 6.26 ist die wirkliche und im Bild 6.28 die vereinfachte Biege-
linie dargestellt, wie sie dem erforderlichen zweiten Programmlauf als statisches System zu-
grunde gelegt wird. Die Stiellängskräfte werden als äußere Knotenlasten angesetzt.
Quellenprogramm und Ergebnisdaten für den zweiten Lauf sind in Tafel 6.29 wieder-
gegeben. In Bild 6.28 sind die Biegemomente Ml grafisch dargestellt.
Für die Fortsetzung der Rechnung interessiert die neue Knotenverschiebung vl = 0,0435 cm,
die nun wiederum als Hebelarm zu berücksichtigen ist, und deshalb im dritten Lauf an die
Stelle von va tritt. Im Prinzip bleibt das System unverändert, auch die Stiellasten können über-
nommen werden. Ein dritter Lauf ergibt entsprechend die Momente M2 und die Verschiebung
v2 = 0,0043 cm. Dieser Lauf ist aber nicht mehr erforderlich, denn v2 beträgt nur noch 0,27%
von va' Auch bei den Momenten verläuft die Iteration befriedigend, bzw. ist die Grenze der
numerischen Genauigkeit erreicht. Die endgültigen Werte nach der Theorie II. Ordnung erhält
man schließlich durch Überlagerung der Ergebnisse aus den beiden Programmläufen (Tafel 6.30)
Mit diesem letzten Beispiel sollten die besonderen Möglichkeiten eines allgemeinen Programms
gezeigt werden. Die Momente nach Theorie Il. Ordnung könnten auch über den Ansatz einer
Horizontalkraft in Riegelhöhe

H= ~V'v/h

ermittelt werden, wobei ~V die Summe der Stiellasten, v die Horizontalverschiebung und h die
Systernhöhe ist.

6.1.3. Spannbeton. Wie in der Einftihrung zu Abschn. 6 bemerkt, erfordert der Stand sicherheits-
nachweis für Spannbetonkonstruktionen einen hohen Rechenaufwand. Wegen dieses Aufwandes
wird häufig auf die Optimierung der Konstruktion von Bauwerken und Bauteilen verzichtet.
226 6.1. Statik und konstruktiver Ingenieurbau

Der sinnvolle Einsatz der DV ermöglicht dem Ingenieur durch die Entlastung von routine-
mäßiger Rechenarbeit, konstruktive und ausflihrungstechnische Probleme in den Vordergrund
zu stellen.
Am Beispiel eines Spannbetondachbinders mit sofortigem Verbund, der in einem Fertigteil-
werk im Spannbett hergestellt wird, werden Berechnungsablauf und Einsatz des in FORTRAN
IV geschriebenen Programms IBM-Form 80700 für die DVA IBM 1130 demonstriert.
x-,o,oom---t

'-!t----""-------1-25,00m - - - - - - - - - i + _
+----------25,20m

13,5cm<
@
Querschnitte mit Schwerpunkt/agen der Spannstränge
CD
72.6
-+--

- - - 2 - - - -H-++--- 9250
-- - 3 - - - -t+-H -1-++-- 9300
- -- 4 -- i-+t-+i-+t-+i
""""..:--:..,..:..,,:...;..,.~ --- 5-- -++++1-++-- 9300 6.31
9300
Spannbetondachbinder
30 mit Querschnitten flir
rechnerische N ach-
Querschnitte mit den einzelnen Lagen der Spanndrähte weise

In Bild 6.31 ist der Dachbinder mit den nachzuweisenden Querschnitten dargestellt.
Es sind folgende Baustoffe vorgesehen: Spannstahl St 145/160 (Sigma Oval 50)
Ez = 2,1 . 106 kp/cm 2 , Schlaffe Bewehrung St III b, Betongüte B 600 (schnell erhärtender
Zement) ~ = 4· 105 kp/cm 2 .
6.1.3. Spannbeton 227

Die Vorspannung wird aufgebracht, wenn der Binder 80% seiner Würfelfestigkeit W28 erreicht
hat (s. DIN 4227, Ziffer 5.1, Tafel 1, Zeile 2). Nach dem Vorspannen lagert der Binder drei
Wochen im Freien. Anschließend erfolgt der Einbau in einem trockenen hmenraum.
Als äußere Lasten im Gebrauchszustand wirken: Nach dem Vorspannen das Eigengewicht gl'
nach dem Einbau aus der Dachdeckung (Gasbetondachplatte und doppelte, bekieste Papplage)
g2 = 0,850 Mp/m und als Verkehrslast (Schnee) p = 0,375 Mp/m.
Damit sind alle rur die Berechnung des Trägers erforderlichen Daten angegeben. Folgende
Zusammenstellung gibt - zunächst unabhängig von dem Programm - den nach DIN 4227
erforderlichen Berechnungsablauf in zweckmäßiger Reihenfolge an.
Bei den Einzelaufgaben sind die wichtigsten Formeln ftir die Berechnung angegeben, woraus
der Rechenaufwand abgeschätzt werden kann.
1. Schnittgrößen aus äußeren Lasten
..9:r1 11 ii! ,,!I!!II!!I!!ii!"11 SL Las/fall gl

(Bild 6.32). Auflagerkräfte A, B, sowie Querkräfte und


Biegemomente ftir die Querschnitte 1, 2 und 3 sind zu
Lastfall gz
berechnen.

lastfall p
6.32 Lastfälle für SchnittgIÖßenbestimmung

2. I d e e 11 e Q u e r s c h n i t t s wer t e. Die erforderlichen Querschnittswerte sind in


Bild 6.33 zusammengestellt. In den Formeln ist n = Ez/~.

F j = Fb + (n - 1) (F u + F z2 )
J j = Jb + Fb (YbU - Y1ui

+ (n - 1) (F u . Ybzi, 1 2 + F z2 . Ybzj, 22)


Jj Jj
WiO = - ; Wiu = -
YiO Yju
Jj Jj
6.33 Die erforderlichen Quer- WibZ1 = - - ; Wibz2 = - -
schnittswerte Ybzi, 1 Ybzi, 2

3. Las t fall Vor s pan nun g. Für die Schnitte 1, 2 und 3 sind die nachstehend
angegebenen Spannungen zu berechnen (Bild 6.34).
Bei Zusammenfassung der Spanndrähte eines Gurtes zu einem Spannstrang gilt:

7(01)
"v
+ "v
7(02) 7(0).
"vI
Y
bzil
7(0) • Y
+ "v2 bzi2
°bv,O =-
Fj WiO WiO
o __ z!0)
1
+ ~) + z!0).
1
Ybzil Ybzi2
z!0) •
2
bv,u - F. W. W
I 111 lu
Z!~) + Z!~) Z!~). Ybzil + Z!~) Ybzj2 . 6bzv.2 -Be/anspannung
°bzv, 1 =- im Schwerpunkt
Fj WibZ1 WibZ1 6bv,u des Spannsfra~es
o -_ "vI
7(0) + "v2
7(0)
+
Z(O) . Y.
vI bzll
7(0) • Y .
"v2 bzi2 6.34 Betonspannung im
bzv,2- F W W Lastfall Vorspannung
j ibz2 ibz2
228 6.1. Statik und konstruktiver Ingenieurbau

Mit den Querschnitten und Spannbettspannungen der einzelnen Lagen nach Bild 6.31 ist
zW = 3,0' 6000 kp = 18000 kp
und ~~) = [2,0' 9250 + (3,5 + 4,5 + 3,5) . 9300] kp = 125450 kp
Die Spannungen im Spannstahl nach dem Lösen der Verankerung sind
a
zv = a(O)
zv + n' a bzv
Hierin ist a~) die Spannbettspannung der einzelnen Lagen; ftir die Lagen 2 bis 5 des unteren
Stranges kann mit genügender Genauigkeit abzv = abzv.2 gesetzt werden.
Das Programm berechnet Beton- und Stahlspannungen ftir die einzelnen Lagen mit Hilfe der
Steifigkeitswerte Cl! nach Rüsch/Kupfer in: (Franz, G., Hrsg.): Betonkalender 1971. Teil!.
Berlin-München-Düsseldorf, S. 756-758.
4. Ä u ß e r e Las t e n i m G e b rau c h s z u s t a n d. Für die Lastfälle gl , g2 und p
sind die Betonspannungen ab = M/Wj und die Stahlspannungen a z = n . abz ftir die Schnitte
1,2 und 3 zu berechnen (Bild 6.35).

~ Hg1,g2,p

a ---
~ f----~~~g'!!---1-!b~2'~----115~P'O
-- ---

- ---- + -----
i5bz2,gl
6bZI,gl
--"
6bZI,g2
------
+ i5bZZ,g2
-------
i5bzl,p

6bZ2,p

i5bg7,U 6bg2,u I5bp,u 6.35 Betonspannungen fUr die Lastfälle


Lastfall g7 g2 P gl·g2· P

5. Las t fall Sc h w in den und Kr i e c h e n (s + k). Nach DIN 4227, Ziffer 8,


Tafel V, sind für Lagerung im Freien die Restkriechzahlen min I{J = 2,0 . kund max I{J = 3,0 . k.
Das Restschwindmaß ftir Bauteile mit Stärken dünner als 20 cm ist ES = 1,25 . 20 . 10- 5
= 25' 10- 5 .
Für Lagerung in trockenen Innenräumen wird die Restkriechzahl max I{J = 4,0 . k und das Rest-
schwindmaß ES = 1,25 . 30 . 10- 5 = 37,5 . 10- 5 •
Zum Zeitpunkt t l des Vorspannens ist

Wu 0,8' W28
-= =07
W.. 1,15' W28 '
und der Zeitbeiwert nach DIN 4227, Ziffer 8.3, Bild 2, K 1 = 1,25. Dabei hat der Beton ein
Alter von etwa 7 Tagen. Zum Einbauzeitpunkt t 2 (3 Wochen nach dem Vorspannen) ist der
Träger 28 Tage alt. Dafür wird mit

Wt2 1,0' W28


-= =0,86
W.. 1,15' W28

der Zeitbeiwert K2 = 0,75.


Das Programm berechnet den Spannkraftverlust nach dem Kriechfaserverfahren in zwei Stufen:
6.1.3. Spannbeton 229

1. Stufe von t 1 bis t 2 ftir die Lastfälle

mit min <Pt t = 2,0 (1,25 - 0,75) = 1,0


1, 2
max<Pt t =3,0(1,25-0,75)=1,5
1, 2

und
(1,25 - 0,75)
Es,t 1 ,t 2 = - 25· 10- 5 = -10,0' 10- 5
1,25
2. Stufe von t 2 bis t"" flir die Lastfälle

v + gl + g2 mit max <Pt t = 4 . 0,75 = 3,0


2' ""
5 0,75 5
und Es,t 2 ,t"" = - 37,5' 10- . - = - 22,5' 10-
1,25
Die Spannungsveränderung am Ende der 1. Stufe infolge max <Pt t und Es t t wird in der
L' b
2. StUle .. kSlC
. h tlgt.
. l' 2 ' l' 2
eruc
Der Fall min <P interessiert wegen des gerirlgsten Spannkraftverlustes nur zum Zeitpunkt t 2 ,
während im Endzustand t"" nur der Fall max <P von Bedeutung ist, so daß die Einflüsse aus
max <Pt l' t 2 ' Es'1'
t t 2 ' max <Pt 2' t und Es t 2' t zu überlagern sirld.
00 , 00

Der Spannkraftverlust kann nun mit den Schwind- und Kriechwerten nach den Kriechfaser-
verfahren oder nach Näherungsverfahren berechnet werden. Der Rechenaufwand ist flir zwei-
strängige Vorspannung erheblich. Mit bekanntem Spannkraftverlust werden die Betonrand-
spannungen infolge s + k proportional zum Lastfall Vorspannung ermittelt.
Die ftir die einzelnen Lastfälle v, gl' g2' p, min <Pt und max <Pt berechneten Spannungen
2 ""
werden in einer Tabelle zusammengestellt und zu den ungünstigsten Werten überlagert.
6. Rissesicherung durch Zugkeildeckung. Nach DIN 4227, Ziffer 10.31,
kann die Kraft des Betonzugkeils Zb = f ab' dF b ftir Zustand I berechnet werden. Die
F b (+)

Spannungsreserve im Spannstahl a z Res = a z zul - a z, v + q + s + k ~ 2000 kp/cm 2 kann zur


Aufnahme der Zugkeilkraft Zb herangezogen werden, wenn die Spanndrähte über die Zugzone
verteilt sind.
Die Reservekraft im Spannstahl beträgt ZRes = a z Res' F z2' Durch schlaffe Bewehrung ist
abzudecken Fe = (Zb - Z Res) /a e zul, wobei ae zul flir die schlaffe Bewehrung nach DIN 4227,
Tafel VI, Zeile 41 bis 43, zu wählen ist.
7. B r u c h s ich e r h e i t s n ach w eis - r e c h n e r i s c heB r u chi ast. Die Bruch-
sicherheit wird durch Bemessung des erforderlichen Spannstahlquerschnittes unter rechneri.cher
Bruchlast nachgewiesen. Die Grenzwerte nach DIN 4227, Ziffer 12.21, sirld

6.37 Größen flir das Bemessungsverfahren


230 6.1. Statik und konstruktiver Ingenieurbau

2
€bu = 20 / 00 ; ubu = :3 .ßw ; a = 0,4 . x,.

Für den Leitwert m z = Mzu /(1 ,75bh2 . ßw ) erhält man nach der Bemessungstafel von Rüsch/
Kupfer (s. Betonkalender 1971, S. 779)

x = ~ . h, z = ~ . hund €z, qu = €bzu


Das Moment unter rechnerischer Bruchlast ist Mzu = 1,75 Mq . Der erforderliche Spannstahl-
querschnitt wird F zerf = Mzuluzu . z, wobeiu zu fUr die Gesamtdehnung €zu der Spannungs-
Dehnungslinie des Spannstahls zu entnehmen ist.
Die Bruchsicherheit ist gewährleistet, wenn F zvorh ~ F zerf'
8. Sc hub s ich e run g. Nach DIN 4227, Ziffer 13.2, sind die Hauptzugspannungen für
Gebrauchslast und fUr rechnerische Bruchlast nachzuweisen (Bild 6.38). überschreitet die
Hauptspannung u l unter rechnerischer Bruchlast die Spannungen nach Tafel VI, Zeile 30 bis
32, so ist die schiefe Hauptzugkraft ZI = ul . b . .:lx sin a l durch schlaffe Bewehrung aufzu·
nehmen. Die rechnerische Bruchlast ist durch überlagerung der Lastfälle v + 1,75 . q + s + k
gegeben.
Der Nachweis erfolgt im Bereich der Nullinie oder in der Druckzone nach den Gleichungen
Ux 1
u =-+-vu 2 +47 2 (Hauptzug)
I 2 2 x

Ux 1
und u = - - -vu2 + 47 2
2 2 x

j"-
Il

flir den Richtungswinkel tan 2a = 27/U x '

Befonspannungen
-' am Ende der
finfragungs/änge

e· 6bv2,mitte,
fintragungslänge
6.38 Definition der Span-
nung am Balkenelement 6.39 Berechnung der Schul>- bzw. Spaltzugkraft

Die Betonlängsspannungen Ux sind aus den entsprechenden Lastfillen bekannt. Die Schub-
spannung wird berechnet aus 7 = Q . S/I . b. Werden die obengenannten Hauptzugspannungen
unter rechnerischer Bruchlast überschritten, dann ist die schlaffe Bewehrung Fe l = Zl/ue zul
in Richtung von Z. bzw. ul einzulegen. Für senkrechte Bügel wird
ZBü
ZBü = u l . b ·.:lx und Fe Bü = - -
uezul
Dabei ist ue zul fur Bruchlast nach Tafel VI, Zeile 44 bis 46, zu wählen.
9. Ein lei tun g der S pan n kr ä f te. Zur Ermittlung der Spaltzugkraft wird bei End-
verankerung durch Haftung und Reibung meist folgender Weg gewählt (s. Rüsch/Kupfer in:
Betonkalender 1971, S. 804).
6.1.3. Spannbeton 231

T = ~ - Ubv,2 mittel· Fb2 entspricht der Spaltzugkraft (Bild 6.39). Bei untenliegendem
Spannstrang ist die erforderliche Biigelbewehrung für ZBII = T/3 zu bemessen, womit
FeBII = ZBII/Uezul. Die Bügel werden über die Eintragungslänge e = ~ verteilt. Es
bedeuten: s = Störungslänge "'" d und ü = übertragungslänge für den Spannstahl gemäß
Zulassung. Die Schubbewehrung am Trägerende kann für rechnerische Bruchlast nach dem
Vorschlag von Rüsch/Kupfer in: Betonkalender 1971, S. 805, bemessen werden.
Nach dem überblick über den Berechnungsablauf werden die Möglichkeiten des Programm·
einsatzes zur Lösung der Einzelaufgaben erläutert. Für die Ermittlung der Schnittgrößen
müssen Trägerformen zur Berechnung von gl sowie Lastarten, Lastbilder und Lastgrößen
festgelegt werden. Das Programm bietet diesbezüglich eine Auswahl nach Bild 6.40.
Kennziffer Triigerform Lastbild
KTII

;:" J",,,,~q: .
l!!!!I1!!!!!!!!!!!!!!!!!!!!!!!!!!~

2 J; RII"""IIIIIIIIII~IIIIIIIIIIII[ :J I--a-f q - ba

, J: ~lIlIlIlllIlIlIlIlmlllllll~ :J
,-Lle---~Ll2
3
LLa~
iia~
A
~-N t
. J! ]JIIIIIIIIIIIIII!lIII~~J
4 -N
5 -----------,
J'i :Li b-a f
<::>

/:==LI- .1 6 .D.~-~-+H-----:Li"" b-a


L -c::
~a~
Högliche Trägerformen (Längsschnitt)
6.40 Mögliche Trägerformen und Lastbilder Högliche Lastbilder

Die Trägerform im Längsschnitt wird auf dem Eingabedatenformblatt, Kartenart 2, durch die
Trägerformkennziffer KTR in Spalte 1 festgelegt (s. Tafel 6.41) 1).
Die Lastbilder sind durch die Lastkennziffern G2 und P den Lastarten bzw. LastfaIlen zuge·
ordnet (s. Kartenart 7 und 9, Tafel 6.42). Bei den Karten 7 und 9 wird die Nummer des Last·
bildes durch die Spalte gekennzeichnet, in welche die Anzahl der Lastbilder eingetragen wird.
Es sind entsprechend den 6 Lastbildern 6 Spalten vorhanden. Die Lastgrößen werden auf den
Kartenarten 8 und 10 (s. Tafel 6.42) in Mp bzw. Mp/m eingetragen.
Stützweite und Trägerhöhe werden in Kartenart 2 notiert, wobei für geneigten Obergurt die
höhenveränderliche Schicht NSD in Spalte 27 anzugeben ist (s. Tafel 6.41).
Weitere, für den gesamten Träger maßgebende Daten sind in die Kartenarten 3 bis 6 (s. Tafel
6.41) einzutragen.
Karte 3
Ez' Eb für die Berechnung von n = Ez/~. Erforderlich für ideelle Querschnittswerte und die
Ermittlung der Stahlspannungen für alle Lastflille (v, gl ' g2' p, S + k),
W28 = ßw Würfelfestigkeit des Betons,
uStr' uBr Stahlspannung an Streck· und Bruchgrenze,
EStr , EBr Stahldehnung an Streck· und Bruchgrenze sind für den Bruchsicherheitsnachweis
erforderlich.
1) Genehmigter Nachdruck der Tafeln 6.41, 6.42 und 6.43a, b, c aus: Spannbetonträger,
IBM-Form 80700 - Copyright IBM Deutschland.
Tafel 6.41 Trägerhauptdaten IV
W
Programm Spannbetonträger Eingobl!daten Formbl.tt 113 IV

Kartenart 1 ?'
:-
~
!:!.
~
s=
:s
KTR • Kennz.ff.,n
Kartenart 2 ür\lJi!Chmtt ;0;-
'o""
:s
~ L[m] hm,n[ cnill I h ...... [cmJ LI[mJ I I~ KTA 1 '"
'"
11113 4 5 I I. 19 10 11121314 U '1Illlll~P' t22!24nFlp,~n
2
~
I: 1 1 11 KTR 2 <'
3IiJ2.5 ... 0.oLl! .2.5 .. .0RI1 .5.0 .. MI [hltl]
J. ...'"
KTR 3
Kartenart 3 I: 1
:
., :::];=:3-1 1
' I
-
~:l
Str[06~~~~ 1'H28[Kp,tm2J1 !OSt,~~ FBt-~2JI IE5I' 0100 1 IEerO/oo KTR4
(;;'
11 ~~ J s=
1234 i L:-,,". J r ...0-
2 . 1 ~

NSO • NlJmmllf der Schicht. die bei KTR 2-. In Höhe-zunlmn'll


Kartenart 4
Fell5 m2J I I Fe2@m2J1 1r.3~m2J 11F~@m2] 11F05@m2] 1 1F06@rn2J • 0
I 2 I 4 i 01 " ~
Sc:hicht3 . . .'@
3 0 if):}Ktt -0 ~
~ iI
..6) • Gl
Kartenart 5 1- .......
Ov~[Kp/c~ Ov~[~m2j IOJli!<Pkm2Jj 1'\2~ZJI r~[~2JI IO,~!f<s,km2J
[""'~'J
~~~!~~~~~t~~~:!~~*t!:
-.:11 Vtrllul,.lwrdlote.r.ct>-
Kartenart 6
."
ClSlr ~0tftfIu"""'1ML
..... -
l <P,min I I"'2m,n I I <P'mlJ< I I 'Ilz mu I IE'm,n~O''SJ I IEzm,nUO"'J1 1 I E,ma.{!o-5] I IE2",",,~O·5J
l' 2 3 4 5 ~ 11 I I 10 "121' 141516 II111U1I21 t2 2*4 ~ n 212128 311 ~ .2 3334 3i1UnU9 40 4142 4344 ~51141 4141 so 51 ~2
0
[1•••• Vlo H3 0 - f:::j 0 0 ql """'"'" [ 1>.. ]
,., ,. 0 " fl." 1. , 5• . ........ 1-.::1 •
1 .0. .0. I(::jo
~ . .0. . . 1=:.,.,: \ , 1•••• k, . 2, 2• , 5 , I:':':: : t$l.I (Ir
Tafel 6.42 Lastdaten
Programm $pannbetonträger Eingabed''''" Form"'''' 2/3
Kar1enar1 7

lastbortnzlffe-rn 62 't A
~ i. ,__..._T_'
Laskennz .. Anzahl der
.I;.
1° ~
At: :l. ~ .• I

Lasten mit Lastbild 1 bis 6


~ --:-:rrt " --,~

"': :A J:j: F ...


Kar1enar18

Kar1enar19

Lasten [Mp] Langen [mJ

Kar1enan 10 ~

~
tIl
'1:1
~
,.::I<T
g
::I

N
W
W
234 6.1. Statik und konstruktiver Ingenieurbau

Be m e r ku n g : Das Programm benötigt EBr und uBr' um flir Bruchdehnung Ezu > EStr den
Spannungsanstieg im Fließbereich zu berücksichtigen, was heute flir rechnerische Verfaluen
nicht üblich ist. Man läßt die Spannung im Fließbereich konstant mit UStr = ßs bzw. ßO,2 •
Karte4
Fe = Fz ' Spannstahlquerschnitte der einzelnen Lagen (vgl. Bild 6.31)
Karte 5
u~O) = u~), Spannbettspannungen der einzelnen Lagen (vgl. Bild 6.31)
Karte 6
Kriechzahlen im ersten Belastungszeitraum von t l bis t 2 '
I{) I min' I{) I max ,
1{)2min = 0, da kaum von Interesse,
1{)2max ' Kriechzahl im zweiten Belastungszeitraum von t 2 bis t ..
E Imin' E Imax ' Schwindmaße im ersten Belastungszeitraum von t l bis t 2 , im allgemeinen

E Imin = E Imax'
E 2m in = 0, da kaum von Interesse
E2max ' Schwindmaß im zweiten Belastungszeitraum von t 2 bis t ...

Mit den Karten 1 bis 10 (s. Tafel 6.41 und 6.42) sind die flir alle Schnitte maßgebenden
"Trägerhauptdaten" festgelegt.
Die jeweils nur einen Schnitt kennzeichnenden Daten, die sogenannten Querschnittsdaten,
werden auf den Karten 11 bis 15 erfaßt. Für die im Berechnungsbeispiel gewählten Schnitte 1,
2 und 3 sind die Daten jeweils in Tafel 6.43a, b und c eingetragen.
Karte 11
Angabe der Schnittnummer
Karte 12
Abstand des Schnittes vom linken Auflager. Ferner wird hier durch die Bezeichnung = und °
°
=1= in Kennziffernspalten der Ausdruck spezieller Ergebnisse nicht gefordert oder gefordert.

Kar te 13
Höhe h der einzelnen Schichten des Querschnittes. Bei Querschnittssprung wegen Schicht-
dicke = 0, ~ = ~ + I
Ka r t e 14
Breite b der einzelnen Schichten des Querschnittes,
Karte 15
Abstand e der einzelnen Lagen der Spannstähle von der Bezugsachse gemäß Tafel 6.43.
Für die Eingabe in die DVA muß folgende Anordnung der Karten eingehalten werden:
a) Trägerhauptdaten Karten 1 bis 10,
b) Schnitt Nr. 1 Karte 11,
c) Querschnittsdaten für Schnitt 1 Karten 12 bis 15,
d) Schnitt Nr. 2 Karte 11,
e) Querschnittsdaten flir Schnitt 2 Karten 12 bis 15,
usw.
Soll ein neuer Träger gerechnet werden, so muß nach der Querschnittskarte 15 des vorherigen
Trägers eine Leerkarte liegen. Darauf folgen die Trägerhauptdaten des neuen Trägers, usw.
Die Datenausgabe beginnt mit einer Auflistung der eingegebenen Trägerhauptdaten von den
Karten 1 bis 10 (s .. Tafeln 6.44). Dabei weist der Ausdruck "Trägerart 3" auf die Sattelform
6.1.3. Spannbeton 235

"
• ~,
"

~ ~

I
§
Ge 11 11
~
=
Iö Iö
g 11
11
11
11 i
~

c s2 ~

'5 . a
:l :l
a
V> "
..
g
.. :;$;:' •....i
g
c


I
11
111
:I
11
11 ..,,W
c; c; t:
::11 :I l!
iI :I '"§
"::I :l
::I
W !
'S' :;: :;:
I~ '"!
':
·.
:I 11

.. f,@:
.g

'l I
~
,11 >ß;" ~ j
7' 11 11 E
~ ':I ~

I
G

"
il~
~
':I c..
N ~::.»
11
0
7' 11 11 C
!c
~ 11 11
11 11 l
" I; ~

. i
...., 11 11
~
E
;:
A
:l <:>

11 <:>
I. "A 11 ....
" '"
'-a.
!
I"
11 i"':

.. ...,
I: I: 0

..
~

7' I: <:> 'e1 I:


....
~
o.!!J ;;
~
....
--.« I!
0
" I~
=-c:: ....:

f
~'-

c:: <:>
7' I: 0 'E' I:
....
" .5
"
~
2 11 0 ~ 11

- ::m
0
~
~
t 'E' <:> 7' 1
'" "
.
~
~
· !
:~ 0
"
.2 N : "5;. ~~

-- i
.8c: :: <:>

-· *'..," "E
0
c:
•... ~};' co
0
i! ....

·- i
C/)
.-;.:-.-
E :: :!: ~ Z
E t: t:
'E' - t:
7'
i ·
<:> <D

e Si ~
l! ~ ~ ~
E .ä
~
...... a
- .....
~ <:> Ö ~
~

a.. '" ~ ~ :i

unter Kennziffer KTR 3 hin. Bei der Wiedergabe der Schwind- und Kriechwerte ist zu sehen,
daß \02min = 0 und f 2min = 0 eingegeben wurden. Unter Spannbewehrung und Vorspannung
fmdet man die Querschnittswerte und Spannbettspannungen der einzelnen Lagen der Spann-
drähte nach Bild 6.31 vor, die auf den Karten 4 und 5 eingegeben wurden. Aus den Lastkenn-
ziffern G2 100000 und P 100000 ist ersichtlich, daß es sich bei den Lastfällen g2 und p um je
eine Gleichstreckenlast nach Lastbild 1 handelt, die sich wegen b bzw. B = 25,00 m über die
ganze Trägerlänge erstreckt. Die Lastgrößen sind g2 = 0,85 Mp/m und p = 0,375 Mp/m.
236 6. 1. Statik und konstruktiver Ingenieurbau

IllU"4~
ua6un.JvtOndIWH uap~
"":tItW!P Jt'\I)

i:
'p
"",:;
,.....- - - - - "" - -- - - - ! 'Je:I" ~fr 'Je1:1" "W 'Je:I"

I
@::
~------~I-------~

ii 1II
:I
..
:I


..
1:1 ~
!
:2
:I
:2
:I
:I
:2
:I
:a
;:1
@,
i
8-
:a
1II1 11
I: :!W: ...
-~

.., •
I: I:

I:: "I
:;; :;; .:l3[':

:: • :;!i
111
:I
111
S .~
:3
... :;
~ S
tl
:;;

. ~
':11 :I
-"""'r--I-~"G
::M ,;, ill 1II
~ §
::I ::I ::I
'-L-f-..L..-."G 'E' :; :; ~
l' ~" ":iI '"~
-
:I :I
:: -g
-',-::; :~ ::
!; ~
'E' 'E'
" "<: "::
E

..
E

..t
~ <: ~

I;
-
.c ~
I; ':f
-.;:;:;:
;

l~
::;; 0
7 so 7L!CI " "11:
t.
L!CI :;
. :; "
~

Im
II :I
~
~
.c

g
'E'
=A 0
e
11
7
I;;;
A •
l!
h i....
;1\ ;1\ 0 ;1\

- '? '"- ·
SI 0 L!CI R ~ R
~~ !; : ~- 0 ~ !;

~ tP ~
""':i I~
·5
f.. ~ ~!
';i ~ 0 ~ I: 0

·.. ~ ...
'E' 7~ 'e' ~
! -:t ~1U I:
I: I: 0

.. I: -6

--
.s:; co ~ I:: "-

... -
1U=.s! ....
~
f
<'l
~_ .~~H.~-j!
'"
I;;
l!!i
~ 0
C
u ~~ 2
I!
""
~

~ ~i H ~ -.. "" -" ~


--'I..
W 11
.2u i o8-.l: b n H.e 1
~ 11 11 11
~
......
0 0

.j 'E' r:: 7 r:: '? r::


0
CI) 'E~e ·';CC'g"CI ·E €
c .•• :: ~ &~ =.= ""E ~ I::
"" ~ I:: ~ I:: g
'"
-
;J 0
~ @'@':§~ ~~ ~ -~ h -" ~
~ ~
~ ~
x 22C-CC~..!",,_
:;:;:::;
co

~
:;~~: Hnn'!~l1 -
0 ~
-g
;; .......
, ::::: ~~ tc';j
&:.c '" '[ 0 'E'
.-
ll~~ H~~d
-
~
.~
CI>
C
..c: ""~ ~ 0 ww Xl: IIlID - '" ~ 0
!
..
u
- .xt~
!
0000000000
Z
~
..,ic e • .::.~

{
II~

---
0

·-
§ :::
'i' 'E
.. .x'" -
:s 7L!CI
'"
0 e
---'~
-- ...
Cf c og I!!.J co
~H 0- ~
...
-- - :;;i-
I'
~ .~
0
Q. ~ Ji' ~

i
.L> Vl ,H
<:'---

.e;. i. ~ -- r.. -
::? :!
-- .,.,
M ~ N _.':'X ~

-- '"
E 4
z
r 'E'
-- '"
~ E eH
r t:
i! 7 '"
ct i il - '" ::2 ,. -
;:;.:.-' 0

--
..0
c :z ~ Z.
~-
0 i! 'E' 1!' ~ ~ ~
-.;
5 a
~
" ~ ~
r
-- ö
0

- '"
'- 0 ::-:::!:" ~
~ ~
.c
::2 '"
~

co ~
'" :t
0
!- '"
AufTafeI6.44b sind alle für Schnitt 1 erforderlichen rechnerischen Nachweise ausgedruckt.
Zuerst die Querschnittsabmessungen und die Höhenlagen der Spannstähle zur Kontrolle der
Eingabedaten auf den Karten 13, 14 und 15. Dann die Querschnittswerte, wobei PB der reine
Betonquerschnitt ist und Pi' YBO = Yio ' YBU = Yiu und I = Ii (vgl. Bild 6.33) ideelle
Querschnittswerte sind.
Beim Eigengewicht bezeichnet GI die Gleichstreckenlast und GOI die Dreieckslast infolge des
Höhenzuwachses der Schicht 3. Auflagerkräfte und Schnittgrößen Mund Q für Schnitt 1
6,1.3. Spannbeton 237

11 .......)lJoI6
uiilfkHlUuildsldl'lllH UIIPJaM
.lfI$'::Ilf$iJtp Jn*)
'p

"_-- - ----1
" 0: 0:
;w

I it
~ ~ ~
1-- - - - -<.1- - - ---.;
11
:;
11
:;
11 m
Be :. c;

c~
<:> 11
12
11
'*
12
11
11
12
11

. ~~ I
.s::;
u " 1:1 :; g :Bi"
(I) ><
,; I: I: ~

,...,
:;
11 51 11

.. ~
'E' :l :l :@
~ :z :z :z ::S;::
:::
~
fj,
:z :z
:l!
'"
:z
lM :z
..
:g ::l
:z
:z
§
'E'
~
'E' :;;
:;; .. ®
:; ~

Iir
~ :!!
~
c

-
~ !II 15
::.,,:::
":; ~
::!-.•,
r; r;
'E' :; 'E'
......, :; E
E
<;t
~----,.----~
" I; "
m
ft
'l
j
;
$,( ~
~:~i
=
I
Ioo-----c.----~
'E' 'E'
\!!J Il \!!J '" ~
;: ~ ... : J:
11 ~
I,. ·:·x·: I; ~

'E'
IR
7
IR
'E'
IR 5
i
.
;11 ;11 ;11
..::.
'? s;
·
:t ~ :t R

.. :: s; ~ ..J
I~
" -::~::
!a ::;:;:::;
c
';;;
I: "E

-
I: I: CI

·.. :; ...
M 'E' I: 'E' I:
;;
'? I: -6
~ L!!J ;; "-
'2
~ l1:l:c ::
l~ ~
..c:: ::;:;:;-:
~

:::.:-:-. 1!
u 8.
I'l I'l I'l <:> t
eil
'E' I:: 'i' I:: 7 J: -E
.,'" "";:
" '"
~
'"
!:'"
~
~

-
;:
~
I: I:
.!
~ :;::' g
..,
=
:tf' - -
<:>
'2 t 7 '7 c
L!!J '"
'"
· - ... t2
'~

..c:: :~
- ~ -
.,....'"
U ~

C
0 .:::;:;:
;; 00;:;
= ,.= <:>
N

= <:> ,....,
.-
<:>
'"." 'i' =
"""N -- <:>
CI 'E'
-· ""
e i.
" ~
i:
<0 'I,!

. ..,.
u
'" J;' <:> I-

·· l!
M CI)
~
\0
e
..e t:
.
:::;:::.
;!:
t:
:;:::;:::
:!! .. '" z

'"""
t:
'i' :! 'E'
;:§ ;;,
<:>
'" ~
.~
~
~

5 """ - 5 """;- - '"


ft ft ft
co t: ~
'"
0 i; <:>
E-< ci: F N
...., N

:t
" " " '"
getrennt nach den Lastfallen gl' g2 und p, sowie die überlagerung der Einzelwerte zu
q = gl + g2 + P sind tabellarisch ausgedruckt.
Die Steifigkeitswerte Cl! können gemäß Bemerkung zu Lastfall Vor spannung zur Berechnung der
Beton- und Stahlspannungen dienen.
Unter "Spannungen" sind für alle Lastfalle (v, gl' g2' p, min I{J und max I{J) die Betonspannungen
rur den unteren und oberen Querschnittsrand und die Stahlspannungen in allen Spannstahllagen
(hier 1 bis 5 nach Bild 6.31) zusammengestellt. Gleichzeitig ist die überlagerung der Einzelwerte
238 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6.44a Ausgabewerte Trägerhauptdaten

PROGRAM SPANNBETONTRAEGER DATUM 16.06.72


BEARBEITER SCHROEDER
TRAEGERBEZEICHNUNG DACHBINDER TRAEGERNR. 1

TRAEGERART 3
L = 25.00 M
HMIN = 125.0 CM HMAX = 150.0 CM

MATERIALWERTE (KP/CM2 UND PRO MILLE)


E STAHL = 2100000. E BETON = 400000.
SIGMA STR = 14500. SIGMA BR = 16000. EPS STR = 7.2 EPS BR = 80.0

SCHWIND- UND KRIECHWERTE


PHI1 PHI2 EPS1 EPS2
MIN 1.00 0.00 - 0.000100 0.000000
MAX 1.50 3.00 - 0.000100 - 0.000224

SPANNBEWG. U. VORSPANNUNG (CM2 UND KP/CM2)


NR. FE SV
1 3.00 6000.
2 2.00 9250.
3 3.50 9300.
4 4.50 9300.
5 3.50 9300.

LASTKENNZIFFER G2 100000 LASTKENNZIFFER P 100000

BELASTUNG (MP UND M)


NR. LAST B A LAST B A
1 0.85 25.00 0.00 0.375 25.00 0.00

zu den ungünstigsten Werten für die Lastfallkombinationen (v + gl)' (v + gl + g2 + min .,0)


und (v + gl + g2 + P + max .,0) ausgedruckt, so daß der überblick sofort gegeben ist, ob die
zulässigen Spannungen nach DlN 4227 eingehalten sind.
Der Lastfall v + 1,75 q + max .,0 ist erforderlich ftir die Berechnung der schiefen Hauptzug-
spannungen unter rechnerischer Bruchlast und ggf. für die Bemessung der schlaffen Bewehrung
ftir die Schubsicherung. Diese Bemessung wird vom Programm nicht durchgeführt. Die Haupt-
zugspannungen sind für Schnitt 1 im Mittenbereich des Trägers nicht von Interesse, so daß deren
Berechnung auf Karte 12 nicht aufgerufen wird (0 in Spalte 5 ftir Kennziffer K3).

Für die Zugkeildeckung wird die Kraft des Betonzugkeils ~ = DZ angegeben und die Höhe des
Zugkeils a = XO. Liegt der Spannungszuwachs tla = DS ~ 2000 kpjcm 2 und wird die zulässige
Stahlspannung des Spannstahls nicht überschritten, so ist keine schlaffe Bewehrung erforderlich.
Für tla > 2000 kpjcm 2 wird die erforderliche schlaffe Bewehrung ftir Stahl IIIb berechnet.

Der Bruchsicherheitsnachweis wird gemäß den Angaben im Berechnungsablauf als Bemessung


durchgeführt und die Bruchsicherheit ist gegeben, wenn das berechnete F z erf ~ F zvorh' Die
6.1.3. Spannbeton 239

Tafel 6.44b Ausgabewerte Spannungen Schnitt I

SCHNITT NR. 1 X (M) = 10.00

ABMESSUNGEN DES OUERSCHNITTS UND LAGE DER BEWEHRUNGEN (CM)


H B E
1 5.0 30.0 1 17.6
2 25.0 30.0 2 138.0
3 30.0 10.0 3 141.0
4 133.0 10.0 4 144.0
5 138.0 30.0 5 147.0
6 150.0 30.0

OUERSCHNITTSWERTE (CM, CM2, CM4)


FB FI YBO YBU I
2190.0 2260.1 70.00 74.99 5762178.

EIGENGEW. (MP/M) Gl = 0.506 GOl = 0.062


SCHNITTKRAEFTE (MP UND MPM)
A B M 0 N
Gl 6.719 6.719 41.047 1.406 0.000
G2 10.624 10.625 63.749 2.124 0.000
P 4.687 4.687 28.124 0.937 0.000
Gl+G2+P 22.032 22.032 132.922 4.468 0.000

ALPHA-WERTE
1 2 3 4 5
1 0.01597 - 0.00194 - 0.00395 - 0.00578 - 0.00504
2 -0.00291 0.01187 0.02138 0.02827 0.02259
3 - 0.00338 0.01222 0.02201 0.02912 0.02328
4 - 0.00385 0.01256 0.02265 0.02997 0.02397
5 -0.00432 0.01291 0.02328 0.03081 0.02465

SPANNUNGEN (MP/CM2)
LASTFALL SBU SBO 1 2 3 4 5
1V -161. 27. 6059. 8485. 8515. 8494. 8474.
2 Gl 53. -49. - 214. 235. 246. 258. 269.
3G2 82. -77. -333. 365. 383. 400. 418.
4P 36. -34. -147. 161. 169. 176. 184.
5 MINFI 12. -2. -374. -648. -655. -662. -669.
6 MAXFI 25. O. - 2370. -1472. -1450. -1428. -1405.
71+2 - 107. -22. 5844. 8721. 8761. 8752. 8743.
3+4+5+7 24. -136. 4990. 8599. 8658. 8667. 8676.
3+4+6+7 37. -133. 2993. 7775. 7863. 7902. 7940.
1+1.750+6 167. -254. 2472. 8347. 8463. 8528. 8594.

ZUGKEILDECKUNG
DZ (KP) XO (CM) DS (KP/CM2) ERF.SCHL.BEW. (CM2)
UNTEN 14404. 31.86 1067.00 0.00
OBEN O. 0.00 0.00 0.00

BRUCHSICHERHEIT FZ ERF. = 11.30 CM2 XO = 27.0 CM Z = 128.6 CM


240 6.1. Statik und konstruktiver Ingenieurbau

Tafel 6,44c Ausgabewerte Spannungen Schnitt 2

SCHNITT NR. 2 X (M) = 1.70

ABMESSUNGEN DES OUERSCHNITTS UND LAGE DER BEWEHRUNGEN (CM)


H B E
1 21.6 30.0 1 26.2
2 41.6 30.0 2 138.0
3 46.6 10.0 3 141.0
4 133.0 10.0 4 144.0
5 138.0 30.0 5 147.0
6 150.0 30.0

OUERSCHNITTSWERTE (CM, CM2, CM4)


FB FI YBO YBU I
2024.0 2094.1 61.91 66.48 4209885.

EIGENGEW. (MP/M) G1 = 0.506 G01 = 0.062

SCHNITTKRAEFTE (MP UND MPM)


A B M 0 N
G1 6.719 6.719 10.687 5.851 0.000
G2 10.624 10.625 16.834 9.179 0.000
P 4.687 4.687 7.426 4.049 0.000
G1+G2+P 22.032 22.032 34.948 19.081 0.000

ALPHA-WERTE
1 2 3 4 5
1 0.01981 -0.00277 -0.00560 -0.00817 - 0.00710
2 - 0.00416 0.01241 0.02244 0.02977 0.02387
3 -0.00480 0.01282 0.02319 0.03079 0.02470
4 -0.00544 0.01323 0.02395 0.03181 0.02553
5 -0.00609 0.01364 0.02470 0.03282 0.02636

SPANNUNGEN (KP/CM2)

LASTFALL SBU SBO 1 2 3 4 5


1V -170. 26. 6101. 8452. 8478. 8454. 8430.
2 G1 16. -15. -76. 72. 76. 80. 84.
3G2 26. -24. -120. 114. 120. 126. 133.
4P 11. -10. -53. 50. 53. 56. 58.
5MINFI 17. -4. -212. -813. -829. -845. -86L
6 MAXFI 56. -12. - 1118. -2689. - 2731. -2773. -2816.
71+2 -153. 10. 6024. 8525. 8554. 8534. 8514.
3+4+5+7 -97. -29. 5638. 7876. 7899. 7872. 7845.
3+4+6+7 -58. -37. 4732. 6000. 5997. 5943. 5890.
1+1.750+6 -16. -75. 4545. 6178. 6184. 6141. 6098.

ZUGKEILDECKUNG
DZ(KP) XO (CM) OS tKP/CM2) ERF.SCHL.BEW. (CM2)
UNTEN o. 0.00 0.00 0.00
OBEN 1312. 8.27 0.00 0.54
6.1.3. Spannbeton 241

HAUPTZUGSP. (KP/CM2)

D TG2A TAU SIGl SIG2


BRUCHL. 83.51 -1.3567 32.13 16.23 63.60
GEBRL. 83.51 -0.7725 18.29 6.24 - 53.61

Tafel 6.44d Ausgabewerte Spannungen Schnitt 3

SCHNITT NR. 3 X (M) = 1.30

ABMESSUNGEN DES OUERSCHNITTS UND LAGE DER BEWEHRUNGEN (CM)


H B E
1 22.4 30.0 1 26.6
2 86.2 30.0 2 138.0
3 150.0 30.0 3 141.0
4 144.0
5 147.0

OUERSCHNITTSWERTE (CM. CM2. CM4)


FB FI YBO YBU I
3828.0 3898.1 64.44 63.15 5423840.

EIGENGEW. (MP/M) Gl = 0.506 GOl = 0.062


SCHNITTKRAEFTE (MP UND MPM)
A B M 0 N
Gl 6.719 6.719 8.305 6.057 0.000
G2 10.624 10.625 13.094 9.519 0.000
P 4.687 4.687 5.776 4.199 0.000
G1 +G2 + P 22.032 22.032 27.177 19.777 0.000

ALPHA-WERTE
1 2 3 4 5
1 0.01456 -0.00326 -0.00633 -0.00892 -0.00755
2 -0.00490 0.00775 0.01409 0.01879 0.01513
3 -0.00542 0.00805 0.01465 0.01954 0.01575
4 -0.00595 0.00835 0.01520 0.02029 0.01636
5 -0.00647 0.00865 0.01575 0.02103 0.01697

SPANNUNGEN (KP/CM2)
LASTFALL SBU SBO 1 2 3 4 5
1V -106. 34. 6154. 8760. 8793. 8776. 8758.
2 Gl 9. -9. -48. 41. 43. 45. 48.
3G2 15. -15. -76. 64. 68. 72. 76.
4P 6. -6. -33. 28. 30. 31. 33.
5MINFI 8. -3. -127. -603. -615. -628. -641.
6MAXFI 27. -11. -610. -2082. - 2121. - 2161. -2201.
71+2 -96. 24. 6106. 8802. 8837. 8822. 8807.
3+4+5+7 -66. -1. 5869. 8292. 8320. 8297. 8275.
3+4+6+7 -47. -9. 5386. 6813. 6814. 6765. 6716.
1+1.750+6 -23. -33. 5267. 6914. 6921. 6877. 6834.
242 6.2. Straßenbau

ZUG KEI LDECKUNG


DZ (KP) XO (CM) DS (KP/CM2) ERF.SCHL.BEW. (CM2)
UNTEN O. 0.00 0.00 0.00
OBEN 9362. 25.65 0.00 3.90

HAUPTZUGSP. (KP/CM2)
D TG2A TAU SIG1 SIG2
BRUCHL. 86.84 -0.9055 12.88 4.96 - 33.43
GEBRL. 86.84 - 0.5155 7.33 1.77 - 30.24

SPALTBEWG. (ST3)
EINTR.·LAENGE (CM) = 101. FE BUEGEL (CM2) = 17.42

Höhe der Druckzone x = XO und der Hebelarm der inneren Kräfte z werden ebenfalls ausge-
druckt.
Für Schnitt 2 (s. Tafe16.44c), 1,7 m vom Auflager werden die gleichen Nachweise ausgedruckt,
nur sind hier flir die Schubsicherung zusätzlich in den letzten beiden Zeilen die Hauptzug-
spannungen flir Bruchlast und Gebrauchslast angegeben. Hier gibt D den Abstand der betrach-
teten Faser von der Bezugsachse an (s. Tafel 6.43), tan 2Q = TG2A den Richtungswinkel der
Hauptzugspannung, T = TAU die in der betrachteten Faser vorhandene Schubspannung,
01 = SIG 1 die Hauptzugspannung und on = SIG2 die Hauptdruckspannung im Beton.

°
Die Hauptzugspannung unter Bruchlast 01 = 16,23 kp/cm 2 < 24 = zul erfordert also keinen
Nachweis der Schubsicherung.
Für Schnitt 3 (s. Tafe16.44d), der im Verstärkungsbereich des Trägers 1,3 m vom Auflager
liegt, wird in der letzten Zeile die erforderliche Spaltzugbewehrung Fe Bü angegeben. Der Bügel-
querschnitt errechnet sich hier flir St IIIb unter Annahme einer Spaltzugkraft Z = P/3, wobei
P die Vorspannkraft des unteren Stranges, also der Bewehrungslagen 2 bis 5, ist. Diese An-
nalIme liefert gegenüber den Ausführungen zum Berechnungsablauf unter 9. etwas höhere
Bewehrung. Die Eintragungslänge ist mit 101 cm etwas zu klein, da für die Übertragungslänge
ü ein etwas zu knapper Wert von 35 cm zugrundegelegt ist. Die Schubbewehrung am Trägerende
wird vom Programm nicht behandelt. Sie kann nach den Angaben zum Berechnungsablaufunter
9. bemessen werden.
Abschließend, nach Betrachtung des Berechnungsablaufes, der Besprechung der Ein- und
Ausgabedaten anhand des Berechnungsbeispieles und dem Kommentar zur Ausgabe der
Ergebnisse ist festzustellen, daß der Einsatz des Programms für eine so umfangreiche Rechen-
arbeit einen beachtlichen Zeitgewinn und die Entlastung von Routinearbeit bringt. Das Zeit-
verhältnis zwischen Programmeinsatz und Berechnung von Hand liegt etwa bei 1 : 6.

6.2. Straßenbau

Für die Erstellung baureifer Planungsunterlagen bestehen auf dem Gebiet des Straßenbaues
inzwischen ausgereifte Programmsysteme rur mittlere DV-Anlagen. Sie haben gegenüber
Einzelprogrammen den Vorteil der unmittelbaren Übernahme von Zwischendaten (Datenfluß).
Die Anwendung der DV im Straßenbau bietet gegenüber früheren Handhabungen insbesondere
die schnellere, bessere und billigere Möglichkeit, mehrere Varianten zu untersuchen und die
Zeichenarbeiten so lange zurückzustellen, bis rechnerisch optimale Endergebnisse vorliegen.
6.2.1. Massenermittlung 243

Durch übersichtliche und systematische Auflistung der Berechnungsergebnisse (Absteckwerte,


Planumshöhen, Deckenhöhen) und durch den Einsatz programmgesteuerter Zeichentische
(z. B. für Längsschnitte, QuerprofIle, Perspektiven) werden manuelle Zeichenarbeiten reduziert.
Im einzelnen gliedert sich der DV-Einsatz wie folgt:
I. Berechnung der Festpunktkoordinaten (trassennaher Polygonzug)
2. Berechnung der Achsen einschließlich der Sonderfälle (Anschlußstellen, zwei Achsen).
Ergebnisse dieser Berechnung sind die Koordinaten der Hauptpunkte, die Bogenelemente und
die Stationierung.
3. Berechnung der Absteckmaße für verschiedene Messungsverfahren.
4. Berechnung und Darstellung der GeländeprofIle aus Höhenschichtenplänen, photogram-
metrischen oder terrestrischen Aufnahmen.
5. Berechnung und Zeichnung der Gradiente und des Rampenbandes.
6. Berechnung und Auflistung der Planums- und Fahrbahndeckenhöhen.
7. Massenberechnung und -verteilung.
8. überprüfung der Sichtweiten, Darstellung von Perspektiven, Untersuchungen zur Fahr-
dynamik.
In den folgenden Abschnitten wird die Anwendung der DV und die Programmierung einzelner
Aufgaben an Beispielen gezeigt.

6.2.1. Massenermittlung. Durch die rapide technische Entwicklung der Baumaschinen und der
Produktionsmittel bei der BauausfUhrung einerseits und durch den Bedarf an modem ausge-
bauten Straßen andererseits entstand die Notwendigkeit, auch für das Gebiet der Bauabrechnung
und insbesondere der Massenermittlung sich der Datenverarbeitung zu bedienen. Das wird
besonders deutlich, wenn man bedenkt, daß beim Bau von Straßen der Erdbau, der Brückenbau
und der Deckenbau etwa zu gleichen Teilen an den Baukosten teilhaben und dadurch rund die
Hälfte der Baukosten durch die Massenermittlung unmittelbar beeinflußt wird.
Sowohl für den Auftragnehmer als auch für den Auftraggeber bringt der Einsatz von DVA
Vorteile: Bei der Bauabrechnung liegt das besondere Merkmal in der häufigen Wiederholung
gleichartiger Rechenvorgänge und gerade durch Massenberechnungen werden den Bauunter-
nehmungen und den Auftraggebern hochwertige Personalkräfte durch zeitraubende manuelle
Rechnungen gebunden. Die Anwendung der Datenverarbeitung fUhrt zur Entlastung von Fach-
personal, beschleunigt die Arbeiten und spart Kosten. Darüber hinaus werden nunmehr tech-
nische Untersuchungen und Rechnungen möglich, denen bisher wegen der aufwendigen
manuellen Methoden wirtschaftliche Grenzen gesetzt waren: Die Untersuchung von Varianten
in der Linienführung (Massenoptimierung), die rechnerische Berücksichtigung des Schwerpunkt-
abstandes in der ProfIlfläche und sein Einfluß auf die Massenberechnung aus ProfIlen bei
gekrümmten Bauwerkachsen, das Erstellen von Massenverteilungs- und Massentransportplänen.
Im Zuge dieser Entwicklung wurden bereits im Jahre 1962 von der Forschungsgesellschaft für
das Straßenwesen e. V. Verfahrensvorschriften und Programmbeschreibungen [96] heraus-
gegeben und in der Folgezeit ergänzt, die in der Bauwirtschaft zur EinfUhrung einheitlicher und
rationeller Methoden in Aufmaß und Abrechnung fuhren sollen. Diese Bestrebungen werden
seitens des Bundesministers für Verkehr sowie seitens der Länder und der Gemeinden durch
Erlasse, Richtlinien und Rundschreiben unterstützt. Auf diesem technischen Gebiet beeinflußt
die Datenverarbeitung die gesamte Abrechnungstechnik, d. h. die Verfahren der Leistungs-
erfassung, die Aufmaße und Mengenberechnungen und die Rechnungslegung sowie die fach-
technische und rechnerische Prüfung (Prüfprogramme). Das Zusammenwirken von Auftrag-
244 6.2. Straßenbau

geber und Auftragnehmer wird vor neue Aufgaben gestellt hinsichtlich der Datenorganisation,
der umfassenderen Berechnungsrnöglichkeiten und der Auswahl der Ergebnisse.
In der BRD wurden Programme für die Massenberechnung im Bauwesen entwickelt, die auf den
bekannten Methoden für manuelle Rechnungen aufbauen und je nach Maschinenkonfiguration
mehr oder weniger komfortabel ausgestattet sind. Obwohl die Tendenz zur Ausnutzung der
elektronischen Rechentechnik und damit zur Entwicklung zusammenhängender (komplexer)
Abrechnungsverfahren besteht, ist auch der Einsatz von DVA mittlerer Größe und von Klein-
rechnern lohnend, weil es sich der Natur nach um häufig wiederkehrende und meist einfache
Rechenvorgänge handelt.
Nachstehend ist eine Auswahl von Rechenprogrammen zur Massenermittlung gegeben, die z. Zt.
bei den Recheninstituten im Einsatz sind:

1. M ass e n b e r e c h nun gau s Pro f i I e n. Für langgestreckte Baukörper werden die


Massen aus Querschnittsflächen und Profllabständen unter Berücksichtigung der Flächenschwer-
punkte und der Krümmungen in den Profllen berechnet.
2. M ass e n b e r e c h nun gau s Q u e r pro f i I e n mit pol y gon alb e g ren z -
te n B 0 den s chi c h t e n. Das Verfahren gleicht dem unter 1., jedoch werden die Massen
verschiedener Bodenarten (Mutterboden, mittelschwerer Boden, Fels, Frostschutzmassen
u. dgl.) nach ihren Begrenzungslinien in den Profllen gesondert abgerechnet.
3. Kom pIe xe M ass e n b e r e c h nun g. Es wird profllweise abgerechnet, jedoch auf
der Grundlage von beliebigen Nivellements und tachymetrischen Aufnahmen. Die Meßdaten
werden auf Querproflle transformiert.
4. M ass e n e r mit t I u n gau s Pr i s m e n. Bei flächenhaft ausgedehnten Erdkörpern
wie Kiesgruben, Halden und Seitenentnahmen ist wegen fehlender Bauwerkachse diese Art der
Massenberechnung derjenigen aus Längs- und Querprofllen vorzuziehen. Grundlage sind tachy-
metrische Messungen oder Nivellements.
5. Rauminhalts- und Oberflächenberechnungen für Stollen-
und Tun n el bau t e n. Es wird nach den SOLL-Werten der Profile abgerechnet unter
Berücksichtigung weiterer im Leistungsverzeichnis vorhandener Positionen.
6. A II g e m ein e Bau a b r e c h nun gei n s chI i e ß I ich R e c h nun g s -
s c h r e i b u n g. Der abzurechnende Baukörper wird in einfache geometrische Figuren
zerlegt. Die Berechnung erfolgt nach festgelegten Formelnummern und Einheitspreisen.
In den nachstehend mitgeteilten Programmbeispielen werden weniger umfangreiche Aufgaben
gewählt, sondern einer vollständigen Darstellung mit Ablaufplan, Programm und Testbeispiel
der Vorzug gegeben. Es soll hierbei auch gezeigt werden, daß Kleinrechner auf dem Gebiet der
Massenberechnung wirksame Programme abwickeln.

6.2.1.1. Massenberechnung aus ProfIlen.


Auf gab e. Der zu berechnende Erdkörper ist durch Querproflle und Profllabstände
(Stationierung) sowie durch die Krümmungsradien der Achse beschrieben. Im einzelnen sind
die Eckpunkte der Profilflächen durch ihre Koordinaten gegeben; dies gilt auch für die
Schnittpunkte der Entwurfslinie mit der Geländelinie. Es wird ein (y, z)-Koordinatensystem
zugrunde gelegt, bei dem die z-Achse (HOCH) in der Bauwerkachse liegt (Bild 6.46) und die
y-Werte (RECHTS) den seitlichen Abstand der Punkte von der z-Achse angeben. In Richtung
der Stationierung gesehen erhalten y-Werte von Punkten links der z-Achse negative Vorzeichen.
6.2.1. Massenermittlung 245

Bei rechtsläufiger Umfahrung wird dann die Fläche positiv. Bei Profilen mit der Fläche Null
(Nullfläche ) werden Y (1) = 0 und x (1) = 0 eingegeben.
Die Stationierung muß fortlaufend steigend oder fallend sein, die Stationen können positive
oder negative Werte annehmen. Fehlstationen dürfen nicht auftreten.

3 4
t
'" 0'
~r1~
7//-- r1f11118~ ~7 5 ~
9

Entwurf
~
<0'
~
l5
t:-.'
~
~ ~~
~ N~
~ ~~
~lt>~
C\:l~~
~~~
l:!2 lr)<:::>
~

~
"><:::>
~~
Kl
Oct
~
0,
fJ
~
~
..
~

Gelände <:::>
~ ~ l5 ~ ~ ~
<0'
~
<0'
~
N
~
,,"'
~
00'
~
"'"
0;-
~
.
~
\l200.00
6.46 Querschnitts- 7,33 4,85 2,80 0.60 i 0.94 7,95 2,80 4,30 5,80 7,50
fläche 2,30 2,50 3,60 +Y ___

Für jede Station wird nur ein Krümmungsradius eingelesen (stetiger Krümmungsvedaufwird
vorausgesetzt). In Stationierungsrichtung gesehen ist bei Rechtsbögen (Linksbögen) der Radius
positiv (negativ) anzugeben. Bei Profilen im Bereich einer Geraden und im Klotoidenanfangs-
punkt wird der Radius gleich Null gesetzt.
Auf eine vollständige übereinstimmung mit den REB-Verfahrensvorschriften [96] wird ver-
zichtet.
Die Berechnung der Massen erfolgt nach DIN 18300, Abschn. 5.1.1.1 (s. Verdingungsordnung
fur Bauleistungen, Abschnitt C). Hiernach wird das Mittel zweier Profilflächen mit dem
Profilabstand multipliziert. In Krümmungen wird als Abstand zwischen den Querschnitten
die Länge der gekrümmten Mittellinie zwischen den beiden Flächenschwerpunkten eingesetzt.

F 0 r m ein. Profilfläche
1 n
F= - ~ (zi· Yi + 1 - zi + 1 • Yi)
2 i= 1

Statisches Moment

S
z
=!..6 i=l; 1 (zi· Yi + 1 - zi + 1 . Yi)(Yi + Yi + 1)
Horizontaler Schwerpunktsabstand
Sz
Ys = -
F
Verbesserungsfaktor (profilweise )
k=(R-Ys)
R
246 6.2. Straßenbau

6.47 Ablaufplan zum Programm Massenermittlung aus Profilen

Teilrnasse zwischen zwei Profilen mit dem Abstand L


1
M=4"(F 1 +F 2 )(k 1 +~)L

Die Gesamtmasse erhält man dann durch Summierung der Teilmassen.


Da t e n ein gab e. Die Daten (Anzahl der ProfIle, Koordinaten usw.) werden auf den
gebräuchlichen 80-spaltigen Lochkarten nach folgender Vorschrift abgelocht:
6.2.1. Massenermittlung 247

Tafel 6.48 Massenberechnung aus Profilen


C
C MASSENBERECHNUNG AUS PROFILEN
C
REAL Kl (100)
DIMENSION Y (30), Z (30), ST (100), FLAE (100), YS (100),
1 R (100), TL (100), TM (100), GM (100)
50 READ (2, 1001) POS, NP
WRITE (5, 1002)
WRITE (5, 1003) POS, NP
N=l
C
C EINLESEN DER RADIUS· UND PROFILKARTEN
C
34 1=0
4 READ (2, 1004) ST (N), KZ, Y (I + 1), Z (I + 1), Y (I + 2), Z (I + 2), Y (I + 3),
1 Z (I + 3), Y (I + 4), Z (I + 4), Y (I + 5), Z (I + 5)
I F (KZ - 1) 1, 2, 3
1 IF (I) 20,51,20
51 R(N)=Y(l)
WRITE (5, 1009) ST (N), KZ, R (N)
GOTO 4
20 WRITE (5, 1006)
PAUSE
GO TO 50
2 WRITE (5, 1005) ST (N), KZ, Y (I + 1), Z (I + 1), Y (I + 2), Z (I + 2), Y (I + 3),
1 Z (I + 3), Y (I + 4), Z (I + 4), Y (I + 5), Z (I + 5)
IF (Y (1)) 5,6,5
6 IF (Z (1)) 5, 7, 5
5 K=3
11 IF (Y (K)-Y (1)) 8,9,8
9 IF (Z (K) - Z (1)) 8, 10,8
8 K=K+l
IF (K-5) 11,11,12
3 WRITE (5, 1005) ST (N), KZ, Y (I + 1), Z (I + 1), Y (I + 2). Z (I + 2), Y (I + 3).
1 Z (I + 3), Y (I + 4), Z (I + 4), Y (I + 5), Z (I + 5)
K=I+l
15 IF (Y (K) -Y (1)) 13,14,13
14 IF (Z (K) - Z (1)) 13,10,13
13 K=K+l
IF (K - 1- 5) 15,15,12
12 1= 1 + 5
IF (I - 30) 4, 20, 20
C
C FLAECHE IST GESCHLOSSEN
C
10 IN = K-l
FLAE (N) = 0.0
SM = 0.0
C
C FLAECHE UND STATISCHES MOMENT
C
DO 16 I = 1, IN
DF = (Z (I) * Y (I + 1) - Z (I + 1) * Y (1))/2.
FLAE (N) = FLAE (N) + DF
16 SM = SM + (DF * (Y (I) + Y (I + 1)))/3.
248 6.2. Straßenbau

C
C SCHWERPUNKTABSTAND UND FAKTOR K1
C
YS (N) = SM/FLAE (N)
GO TO 17
7 FLAE (N) = 0.0
YS (N) = 0.0
17 IF (R (N)) 18,19,18
18 K1 (N) = (R (N) - YS (N))/R (N)
GO TO 23
19 K1 (N) = 1.0
C
C BERECHNUNG DER TEILLAENGE, DER TEILMASSE UND DER GESAMT-
C MASSE
23 IF (N - 1) 30, 31, 30
31 TL (N) = 0.0
TM (N) =0.0
GM (N) =0.0
GO TO 32
30 TL (N) = ST (N) -ST (N -1)
TM (N) = (FLAE (N) + FLAE (N -1)) * (K1 (N) + K1 (N -1)) * TL (N)/4.
GM (N) = GM (N -1) + TM (N)
32 N=N+1
IF (N - NP) 34,34,33
C
C AUSGABE DER ERGEBNISSE
C
33 WRITE (5,1007)
WRITE (5, 1008) (ST (N), FLAE (N), YS (N), R (N), K1 (N),
1 TL (N), TM (N), GM (N), N = 1, NP)
CALL EXIT
1001 FORMAT (F7.2, 15)
1002 FORMAT (1H1, 10X, 29HMASSENBERECHNUNG AUS PROFILEN///11X,
112HEINGABEWERTE/)
1003 FORMAT (11X, 8HPOSITION, F8.2, 15, 2X, 7HPROFILEII11X, 7HSTATlON,
1 2X, 10HKZ RADIUS/11X, 7HSTATION, 2X, 2HKZ, 4X, 2HY1, 5X, 2HZ1, 5X,
2 2HY2, 5X, 2HZ2, 5X, 2HY3, 5X, 2HZ3, 5X, 2HY 4, 5X, 2HZ4, 5X, 2HY5, 5X,
32HZ5/)
1004 FORMAT (F7.2, 12, 10F7.2)
1005 FORMAT (10X, F8.2, 13, F9.2, 9F7.2)
1006 FORMAT (10X, 35HPROFIL UND RADIUSKARTE UEBERPRUEFEN)
1007 FORMAT (1H1,10X,31HERGEBNISSE DER MASSENBERECHNUNG///11X,
116HSTATION FLAECHE, 4X, 2HYS, 3X, 6HRADIUS, 4X, 6HFAKTOR,
23X, 24HLAENGE T.MASSE G.MASSE/)
1008 FORMAT (10X, 3F8.2, F9.2, F8.3, 3F10.2)
1009 FORMAT (1HO, 9X, F8.2, 13, F9.2)
END

1. Position· des Leistungsverzeichnisses und die Anzahl der Profile werden auf der ersten Daten-
karte in den Spalten 1 bis 7 und 8 bis 12 abgelocht.
2. Für jedes Profil wird vor die Prof11karten mit den Punktkoordinaten eine Radienkarte
gelegt:
Spalte 1 bis 7: Station
Spalte 8 bis 9: Kennziffer 0
Spalte 10 bis 16: Radius
6.2.1. Massenermittlung 249

Tafel 6.49 Eingabeliste

MASSENBERECHNUNG AUS PROFILEN

EINGABEWERTE

POSITION 12.24 10 PROFILE

STATION KZ RADIUS
STATION KZ Yl Zl Y2 Z2 Y3 Z3 Y4 Z4 Y5 Z5

920.00 o -240.00
920.00 - 7.30 89.94 - 5.55 90.03 - 0.50 90.35 0.00 90.42 0.70 90.23
920.00 2 1.80 90.71 2.70 90.97 8.20 91.12 9.25 91.06 7.70 90.02
920.00 3 - 7.30 89.94 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

940.00 o -240.00
940.00 1 -8.26 89.50 - 5.00 89.60 0.00 89.85 0.90 89.90 2.10 89.63
940.00 2 2.90 90.14 3.70 90.34 9.50 90.51 9.90 90.45 7.88 89.13
940.00 3 -7.83 89.21 - 8.26 89.50 0.00 0.00 0.00 0.00 0.00 0.00

960.00 o -360.00
960.00 1 -8.66 88.64 - 5.00 88.73 0.00 89.13 1.20 88.60 2.20 89.17
960.00 2 2.90 89.32 8.30 89.65 9.30 89.42 9.76 89.27 7.85 88.00
960.00 3 -7.79 88.08 - 8.66 88.64 0.00 0.00 0.00 0.00 0.00 0.00

980.00 o -720.00
980.00 - 9.26 87.80 - 6.20 87.89 - 4.80 87.54 - 4.30 87.86 - 3.60 88.04
980.00 2 0.00 88.32 2.60 88.51 5.00 88.33 10.00 88.36 10.29 88.37
980.00 3 7.85 86.74 -7.79 86.82 -9.26 87.80 0.00 0.00 0.00 0.00

1000.00 o 0.00
1000.00 - 8.55 86.03 - 5.00 86.27 0.00 86.50 5.00 86.67 9.86 86.78
1000.00 2 7.55 85.24 - 7.49 85.32 - 8.55 86.03 0.00 0.00 0.00 0.00

1020.00 o 500.00
1020.00 - 6.85 84.33 - 5.00 84.44 0.00 84.75 5.00 84.84 8.81 84.78
1020.00 2 6.29 83.10 5.25 83.10 4.50 83.60 4.50 83.72 3.60 83.83
1020.00 3 3.60 83.26 - 3.60 83.40 - 3.60 83.95 - 4.50 83.84 - 4.50 83.72
1020.00 4 - 4.70 83.59 - 5.74 83.59 - 6.85 84.33 0.00 0.00 0.00 0.00

1040.00 o 250.00
1040.00 1 -6.50 82.66 - 5.00 82.72 0.00 82.29 5.00 82.77 7.79 82.72
1040.00 2 6.35 81.76 5.31 81.76 4.50 82.30 4.50 82.42 3.60 82.53
1040.00 3 3.60 81.96 -3.60 82.10 -3.60 82.65 - 4.50 82.54 - 4.50 82.42
1040.00 4 -4.80 82.22 - 5.84 82.22 - 6.50 82.66 0.00 0.00 0.00 0.00

1060.00 o 250.00
1060.00 5.40 80.40 7.85 80.37 7.12 79.95 6.08 79.95 5.40 80.40

1080.00 o 250.00
1080.00 8.01 77.39 10.08 77.13 9.76 76.92 8.72 76.92 8.01 77.39

1100.00 o 250.00
1100.00 10.43 74.68 12.61 74.72 12.01 74.32 10.97 74.32 10.43 74.68
250 6.2. Straßenbau

Tafel 6.50 Ergebnisliste

ERGEBNISSE DER MASSENBERECHNUNG

STATION FLAECHE YS RADIUS FAKTOR LAENGE T.MASSE G.MASSE

920.00 8.98 3.71 -240.00 1.015 0.00 0.00 0.00


940.00 13.26 2.66 -240.00 1.011 20.00 225.38 225.38
960.00 17.97 1.93 -360.00 1.005 20.00 314.91 540.29
980.00 24.68 1.13 -720.00 1.001 20.00 428.09 968.39
1000.00 20.05 1.22 0.00 1.000 20.00 447.79 1416.18
1020.00 17.98 1.48 500.00 0.997 20.00 379.83 1796.02
1040.00 9.37 1.17 250.00 0.995 20.00 272.53 2068.55
1060.00 0.75 6.60 250.00 0.973 20.00 99.75 2168.31
1080.00 0.50 9.06 250.00 0.963 20.00 12.23 2180.54
1100.00 0.61 11.51 250.00 0.953 20.00 10.68 2191.23

3. Die folgenden ProfIlkarten enthalten:


Spalte I bis 7: Station
Spalte 8 bis 9: Laufende Nummer der ProfIlkarte
Spalte 10 bis 59: (y, z)-Koordinaten ftir flinfProfIlpunkte
Pro g r a m m abi auf (Bild 6.47). Es werden jeweils Koordinaten von 5 Punkten in einem
Datensatz eingelesen. Die Radienkarte wird an der Kennziffer (lfd. Nr.) 0 erkannt. Die ProfIl-
fläche ist geschlossen, wenn die Koordinaten eines Punktes mit denen des ersten Punktes über-
einstimmen.
Im Beispiel werden die Rechenergebnisse für Station, Fläche, Schwerpunktsabstand usw.
indizierten Variablen zugewiesen (ST (N), FLAE (N), YS (N), usw.); dies ist nicht notwendig,
wenn eine weitere Verarbeitung der Daten nicht vorgesehen ist.
Die Auflistung der Daten und Ergebnisse erfolgt nach Beendigung der Rechnung. Das Pro-
gramm ist in FORTRAN geschrieben, das Beispiel wurde auf einer IBM 1130 gerechnet.
6.2.1.2. Massenberechnung aus Prismen
Auf gab e. Als Ergebnis der tachymetrischen Geländeaufnahmen, die vor und nach Durch-
führung der Erdarbeiten ausgeführt wurden, liegt ein Koordinatenverzeichnis vor. Die aufge-
nommenen Punkte wurden so ausgewählt, daß ihre Dreiecksmaschen die Geländeoberfläche
bzw. die Bodenhorizonte genähert durch ein unregelmäßiges Polyeder darstellen (Bild 6.52).
Beide Aufnahmen haben den gleichen Umriß (Bild 6.53).
Die Auf- oder Abtragsmasse ergibt sich aus der Differenz der heiden Erdkörper, deren Ober-
flächen durch die beiden Polyeder dargestellt werden und deren untere Bezugsebenen überein-
stimmen. Die Erdkörper werden durch Summierung der schief abgeschnittenen lotrechten Drei-
kantprismen berechnet (Bild 6.52).
Das vorliegende Programm wird zwar in Anlehnung an die Verfahrensheschreibung REB-VB
4.4.2.2.0 I1 aufgestellt, jedoch wird auf eine vollständige sachliche und förmliche überein-
stimmung verzichtet.
F 0 r m ein. Grundfläche eines Prismas
I
FP = - «X2 - XI) (Y3 - YI) - (X3 - XI) (Y2 - YI))
2
6.2.1. Massenermittlung 251

6.51 Ablaufplan zum Programm Massenberechnung aus Prismen


252 6.2. Straßenbau

y----
6.52 Unregelmäßiges Polyeder als

,(~
6.53 Dreiecksmaschen
Begrenzung des Erdkörpers

Für das benachbarte Dreieck 3, 2, 4 (Bild 6.54) ergibt sich


1
FP = - ((X3 - X4) (Y2 - Y4) - (X2 - X4) (Y3 - Y4)) .'
2
Volumen eines Prismas .~
6.54 Beschreibung zweier be-
1 nachbarter Dreiecke
VP = - (ZI + Z2 + Z3) . FP (Punktfolge 1- 2- 3-4)
3
D a t e n ein gab e. I. Koordinatenverzeichnis, Kartenart (KA) 10. Die Punktnummern NU
und die Koordinaten Y, X, Z sind in den Spalten 1-2, 14-20,51-60,61-70,71-80 abge-
locht. Nach dem Koordinatenverzeichnis sowie nach dem Verzeichnis der Dreiecksmaschen muß
eine Leerkarte folgen.
2. Verzeichnis der Dreiecksmaschen, Kartenart 20. Die Kennziffern (KZ) für den Boden-
horizont, die laufende Nummer (NR) der Dreiecke bzw. Vierecke und die Punktnummern
(NP 1 , NP2, NP3, NP4) sind in den Spalten 9 bis 10, 17 bis 20, 24 bis 30, 34 bis 40, 44 bis 50,
54 bis 60 abgelocht. Die in Bild 6.54 erläuterte Punktfolge ist zu beachten.
Pro g r a m m abi auf. Nach der Dateneingabe wird zunächst die Höhe der Bezugsebene
entsprechend der niedrigsten Punkthöhe ermittelt. Dann werden die Flächen und Volumen
der Prismen des alten Zustandes und ihre Summen gerechnet und die Berechnung für den
neuen Zustand wiederholt. Die Punktkoordinaten werden mit Hilfe des Suchprograrnms
SUKO aus dem Koordinatenverzeichnis bereitgestellt. Nach Berechnung der Auf- oder Ab-
tragsmasse (Abtragsrnasse negativ) werden die Eingabelisten, die beiden Grundflächen und die
Masse ausgedruckt. Bild 6.51 zeigt den Prograrnmablaufplan, Tafel 6.55 das FORTRAN-
Programm.

Tafe16.55 Programm Massenberechnung aus Prismen


C MASSENBERECHNUNG AUS PRISMEN
C
DIMENSION KZ (200), NPl (200), NP2 (200). NP3 (200), NP4 (200), NR (200)
COMMON NU (200). Y (200), X (200), Z (200)
KEE= 2
KDE = 5
100 K= 1
6.2.1. Massenermittlung 253

110 READ (KEE, 1000) KA, NU (K), Y (K), X (K), Z (K)


IF (KA - 10) 130,120,130
120 K= K + 1
GOTO 110
130 IF (KA) 150, 140, 150
140 KN = K-l
GOTO 160
150 WRITE (KDE, 1010)
PAUSE
GOTO 100
160 1=1
170 READ (KEE, 1020) KA, KZ (I), NR (I), NPl (I), NP2 (I), NP3 (I), NP4 (I)
IF (KA - 20) 190,180,190
180 I = 1+1
GOTO 170
190 IF (KA) 150,200,150
C
C HOEHE DER BEZUGSEBENE FESTLEGEN
C
200 MN = 1-1
HMIN = Z (1)
00 220 I = 2, KN
IF (Z (I) - HMIN) 210,220,220
210 HMIN = Z (I)
220 CONTINUE
C
C FLAECHEN· UND MASSENBERECHNUNG
C
M= 1
230 FLAE = 0.0
VOL= 0.0
MERK = KZ (M)
240 NP= NPl (M)
CALL SUKO (NP, Yl, Xl, Zl, KN)
NP= NP2 (M)
CALL SUKO (NP, Y2, X2, Z2, KN)
NP= NP3 (M)
CALL SUKO (NP, Y3, X3, Z3, KN)
FP = ((X2 - Xl) * (Y3 - Yl)- (X3 - Xl) *(Y2 - Yl))/2.
VP = (Zl + Z2 + Z3) * FP/3.
FLAE = FLAE + FP
VOL= VOL+ VP
IF (NP4 (M)) 250, 260, 250
250 NP= NP4 (M)
CALL SUKO (NP, Y4, X4, Z4, KN)
FP = ((X3 - X4) * (Y2 - Y4) - (X2 - X4) * (Y3 - Y4))/2.
VP = (Z2 + Z3 + Z4) * FP/3.
FLAE = FLAE + FP
VOL= VOL+ VP
260 M=M+l
IF (M - MN) 270,270,290
270 IF (MERK - KZ (M)) 280,240,280
280 Fl = FLAE
Vl = VOL
GOTO 230
290 AMASS = VOL - Vl
254 6.2. Straßenbau

C
C AUSDRUCK DER LISTEN
C
WRITE (KDE, 1030)
WRITE (KDE, 1040) (NU (I), Y (I), X (I), Z (I), I = 1, KN)
WRITE (KDE, 1050)
WRITE (KDE, 1060) (KZ (I), NR (I), NPl (I), NP2 (I), NP3 (I), NP4 (I), I = 1, MN)
WR ITE (KDE, 1080)
WRITE (KDE, 1070) Fl, FLAE, AMASS
CALL EXIT
1000 FORMAT (12, llX,I7, 30X, 3Fl0.3)
1010 FORMAT (lHO, 10X, 15HLEERKARTE FEHLT)
1020 FORMAT (12, 6X, 12, 6X, 14, 3X, 17, 3X, 17, 3X, 17, 3X, 17)
1030 FORMAT (lH1, 19X, 28HMASSENBERECHNUNG AUS PRISMENII20X,
122HKOORDINATENVERZEICHNISI/20X, 5HP.NR., 8X, lHY, 11X, lHX, l1X,
21HZ/)
1040 FORMAT (20X, 15, 3F12.3)
1050 FORMAT (lHl, 9X, 15HDREIECKSMASCHENI/l0X, 2HKZ, 4X, 7HLFD.NR.,
1 7X, 7HPUNKT l,5X, 7HPUNKT 2,5X, 7HPUNKT 3,5X, 7HPUNKT 4/)
1060 FORMAT (10X, 12, 6X,I4, 4112)
1070 FORMAT (lHO, 9X, F9.3, 3X, F9.3, F20.3)
1080 FORMAT (lHO, 9X, 9Hl.FLAECHE, 3X, 9H2.FLAECHE, 15X, 5HMASSE)
END

SUBROUTINE SUKO (NP, YP, XP, ZP, KN)


COMMON NU (200), Y (200), X (200), Z (200)
KDE=5
DO 110 I = 1, KN
IF (NP - NU (I) 110, 100, 110
100 YP = Y (I)
XP = X (I)
ZP= Z (I)
RETURN
110 CONTINUE
WRITE (KDE, 1000) NP
PAUSE
CALL EXIT
1000 FORMAT (lHO, 10X, 15HKOORDINATEN VON, 17, 3X, 6HFEHLEN)
END

Tafe16.56 Eingabelisten und Ergebnisse

MASSENBERECHNUNG AUS PRISMEN


KOORDINATENVERZEICHNIS

P.NR. Y X Z

1 17.500 4.460 304.340


2 2.450 30.350 304.800
3 6.000 45.220 306.000
4 19.800 63.000 308.120
5 69.200 54.500 307.900
6 88.800 30.350 307.750
7 79.950 8.000 305.240
6.2.1. Massenermittlung 255

8 49.100 3.500 304.600


9 17.600 31.500 315.250
10 23.900 51.840 320.430
11 55.840 40.000 318.800
12 72.000 27.300 315.450
13 49.000 12.850 309.900
101 24.120 40.000 308.000
102 45.500 24.100 308.000
103 67.000 26.800 308.000
DREIECKSMASCHEN
KZ LFD.NR. PUNKT 1 PUNKT 2 PUNKT 3 PUNKT 4
21 1 1 2 9 3
21 2 9 3 10 4
21 3 4 5 10 11
21 4 10 11 9 13
21 5 8 1 13 9
21 6 13 11 12 5
21 7 7 12 6 5
21 8 8 13 7 12
28 9 1 2 102 101
28 10 2 3 101 4
28 11 102 101 5 4
28 12 102 5 103 6
28 13 1 102 8 103
28 14 8 103 7 6
1. FLAECHE 2. FLAECHE MASSE
3879.835 3879.835 - 20379.071

6.2.1.3. Massenbßanz
Auf gab e. Die in dem Abschnitt zwischen zwei Profilen gewonnenen Massen (Abtrag)
werden ganz oder teilweise im gleichen ProfIlabschnitt zum Einbau (Auftrag) genutzt (quer zu
fOrdernde Massen) und der Massenüberschuß oder das -defIZit wird in die nächste ProfIlstrecke
übernommen (längs zu fOrdernde Massen). Die Summenlinie der längs zu fördernden Massen
(Massenkote) gibt einen Überblick über den Massenüberschuß oder -bedarf in jeder Profil-
station.
Festlegungen Speicherfunktionen der Register
AB (I) Abtragsfläche im i-ten Profil BI ProfIlstation
AUF (I) Auftragsfläche im i-ten Profil B jeweils kleinste Fläche AB oder AUF
QMASSE quer zu fördernde Masse CI Differenz AB-AUF
LMASSE längs zu fördernde Masse C Massenkote
MKOTE Massenkote 01 ProfIlabstand

Pro g r a m m abI auf für den Kleinrechner OLIVETTI P 203 [104]. Bild 6.57 zeigt den
Programmablaufplan, Tafel 6.58 das Programm. Nach Laden des Programms durch eine Magnet-
karte oder seiner Eingabe über Tastatur wird das Programm gestartet. Nach Eingabe der Profll-
256 6.2. Straßenbau

Tafel 6.58 Programmbefehle

Register I Register 2 Register F


A V 33 65 01 t
2 FIS 34 oI ~ 66
3 S 35 S 67 o Ix
4 +- 36 +- 68 A +-
5 C 0 37 C 0 69 C +-
6 BIt 38 70 W
:;0 7 S 39 '"
S 71
8 +- 40 +- 72
9 C 0 41 C 0 73
10 42 74
11 S'" 43 0 t 75
12 +- 44 cn 76
13 C 0 45 C/+ 77
14 46 AI t 78
15 cn 47 01 t 79
16 CU 48 80
17 IV 49 o Ix 81
18 + 50 A +- 82
19 B ~ 51 C +- 83
20 o y 52 C + 84
21 A/V 53 A +- 85
22 B t 54 C +- 86
23 E Y 55 C ~ 87
24 C * 56 CU 88
25 A W 57 IW 89
26 FIS 58 0 + 90
6.57 Ablaufplan zum Programm Massenbilanz 27 S 59 B ~ 91
28 +- 60 A/W 92
29 C 0 61 0 .J. 93
30 62 B ~ 94
31 B/~ '" 63 B + 95
32 ~ 64 AI t 96
Tafel 6.59 Ein- und Ausgabeliste Massenbilanz

Längs zu Quer zu
Station Abtrag Auftrag fördernde Massenkote fördernde
Masse Masse

340.00 34.20 6.20


360.00 26.80 14.20 406.00 406.00 204.00
380.00 12.00 19.40 52.00 458.00 262.00
400.00 6.20 19.20 204.00- 254.00 182.00
6.2.2. Trassierung 257

station (ST AT) sowie von AB und AU F über die Tastatur wird für jede ProfIlstation LMASS,
MKOTE und QMASS ausgeschrieben (Tafel 6.59).

6.2.2. Trassierung

6.2.2.1. Achsberechnung. Im Bereich des Straßenbaus ist die Entwurfsbearbeitung heutzutage


ohne elektronische Datenverarbeitung kaum noch denkbar. Entwurfsbearbeitungen können im
Grundriß, im Aufriß und in Querschnitten auftreten. In diesem Abschnitt soll jedoch nur auf
die Bearbeitung im Grundriß eingegangen werden und zwar speziell auf die Berechnung der
Trasse. In der Praxis wird i. allg. von einem zeichnerischen Entwurf ausgegangen, wobei Folgen
von Geraden und Kreisen (meist verbunden durch Klotoiden) grob festgelegt sind. Die sich
anschließenden aufwendigen Rechenarbeiten zur Bestimmung der Hauptpunkte (Anfangs· und
Endpunkte der Trassierungselemente ) und der Kleinpunkte (Zwischenpunkte der Achse)
werden einer DVA übertragen, sofern man über geeignete Programme verfügtl ). Diese Pro·
gramme benötigen als Eingabe·Elemente Koordinatenwerte von dem Trassenanfangs· bzw.
Endpunkt, feste oder genäherte Koordinaten von einigen Zwischenpunkten, sowie Werte für
Krümmung und Klotoidenparameter. Außerdem werden gewisse :Angaben benötigt, wie die
einzelnen Trassierungselemente (Gerade und Kreise) von der DVA rechentechnisch behandelt
werden sollen. Die Bezeichnungen Fest·, Puffer', Koppel· und Schwenk·Element sind üblich.
Sie werden im folgenden anhand von drei Aufgaben aus dem Straßenbau zusammen mit der
Aufbereitung des Zahlenmaterials und den entsprechenden Ergebnislisten vorgeführt.
Fes t· und Pu f fe r eie m e n t. Zwischen eine bereits bestehende Gerade und einen
gleichfalls festliegenden Kreis (vgl. Bild 6.60) soll ein Kreis von umgekehrter Krümmung
eingeschaltet werden. An die Gerade soll sich kein Übergangsbogen anschließen, während die
beiden Kreisbögen wie üblich über Klotoiden verbunden werden (Aufgabe 1).

?/O7
I

106'U. I Puffcrclement
Kk32 Otll /
~
",
----- \1:10 ~,/
.---

-
R-100m
R=OO • _
103 Festelement
102 KA-30 105
Fcsfelement
Anfang KA -30 Ende

6.60 Fest· und Pufferelement

Die beiden bereits bestehenden Trassierungselemente nennt man Fes tel e m e n t e. Sie
sind festgelegt durch die Punkte (s. Tafel 6.61) 102 und 103 (Gerade), und andererseits durch
die Punkte 104 und 105 und den Radius + 100,000 m (Kreis). Das Vorzeichen bei dem Kreis·
radius ist so festgelegt, daß in der Richtung des Trassenverlaufs die Rechtskrümmung mit
positivem, die Unkskrümmung mit negativen Zeichen erklärt wird.

l) Es werden Programme der Firma IBM verwendet. Die Berechnung erfolgt auf einer IBM 1130.
258 6.2. Straßenbau

Tafel 6.61 Koordinatenverzeichnis rur Aufgabe 1

Nr. y x

102 80 605,000 50 790,800


103 80 652,500 50 795,900
104 80 709,000 50 809,801
105 80 735,432 50 815,481
106 80 760, 50 799,
107 80 685, 50 804,

Der zwischen die Elemente einzulegende Kreisbogen soll so an die gegebenen Festelemente ange-
paßt werden, daß der Radius r = - 100,000 m und die Klotoidenparameter A = 35,000 m
erreicht werden. Von dem neuen Kreisbogen kennt man außer dem Radius nur seine ungefähre
Lage durch die Näherungspunkte 106 und 107. Aufgabe des Programmes ist es nun, den Kreis
so lange parallel zu verschieben, bis er an die Festelemente anschließt (P u f f er eie m e n t).

Bei der Aufbereitung ist nur anzugeben (vgl. Tafel 6.62):


1. KA Elementenkennung, 30 für Festelement, 32 für Pufferelement
2. NR laufende Nummer des Elements
3. 0.000 Station des Anfangspunktes
4. R Radius des Elements, 0.000 für Gerade, - Zeichen für Kreis mit Linkskriimmung
5. DL Länge des Elements (fehlt meist)
6. Al Parameter der 1. auf das Element folgenden Klotoide, 0.000 1 für k ein e
Klotoide
7. A2 Parameter der 2. auf das Element folgenden Klotoide
8. Yl, Xl Rechts- und Hochwert des 1. Elementenpunktes
9. Y2,X2 Rechts- und Hochwert des 2. Elementenpunktes

Tafel 6.62 Aufbereitung für Aufgabe 1

ACHSE 1 ORTSVERBINDUNG BULLENDORF-MUEHLBACH

KA NR R DL Al A2 Yl Xl Y2 X2
30 1 0.000 0.0 0.0001 0.0001 80605.000 50790.800 80652.500 50795.900
32 2 -100.0 35.000 35.000 80660.000 50799.000 80685.000 50804.000
30 3 100.0 0.000 0.000 80709.000 50809.800 80735.432 50815.481

Nach der richtigen Eingabe ermittelt die DVA die in Tafel 6.63 angegebenen Werte, deren
Bedeutung in Bild 6.64 und Tafel 6.65 erläutert ist.
Eine Skizze des endgültigen Trassenverlaufs zeigt Bild 6.66.

Das K 0 P P eie I e m e n t. In der 2. Aufgabe sind 2 Geradenstücke (s. Bild 6.67) vorge-
geben (Koordinaten in Tafel 6.68). An die 1. Gerade (204-205) soll über eine Klotoide
(A = 80 m) ein Kreis mit dem Radius R = 160 mals Pufferelement angeschlossen werden. Auf
dieses Element folgt ein weiterer Kreis ohne zwischenliegende Klotoide (Korbbogen). Das
Besondere an diesem 2. Kreis (R = 600 m) ist nun, daß er sich mit seinem nachfolgenden
6.2.2. Trassierung 259

Tafel 6.63 Ausgabe von Aufgabe 1

ACHSE 1 ORTSVERBINDUNG BULLENDORF-MUEHLBACH

ACHSE NO. 1
STATION R A PHI-T YH XH
STAT·DIFF T1 T2 D-PHI YT XT
S PHI-S YM XM
0.000 0.000 0.000 93.1907 80605.000 50790.800
63.270 0.000 0.000 0.0000 0.000 0.000
63.269 93.1908 0.000 0.000
63.270 -100.000 0.000 93.1907 80667.908 50797.554
21.287 10.684 10.684 -13.5519 80678.531 50798.695
21.247 86.4148 80657.233 50896.983
84.557 -100.000 -35.000 79.6388 80688.674 50802.054
12.250 4.085 8.167 -3.8992 80692.552 50803.335
12.247 77.0392 80657.233 50896.983
96.807 0.000 35.000 75.7395 80700.134 50806.376
12.250 8.168 4.085 3.8992 80707.715 50809.414
12.247 77.0392 0.000 0.000
109.057 100.000 0.000 79.6388 80711.594 50810.699
24.374 12.250 12.245 15.5167 80723.222 50814.550
24.313 87.3957 80743.034 50715.170
133.431 100.000 0.000 95.1555 80735.432 50815.481

tlbergangsbogen (A = 200 m) derart an die Gerade


(206-207) anschließen soll, daß der Punkt 206
genau der Anfangspunkt des letzten geradlinigen
Trassenstückes wird.
Man will also den Kreis R = 600 m an den Punkt
206 des Festelementes ankoppeln, weshalb nun
der Kreis als K 0 P P eie I e m e n t angesprochen
wird. Bei einem derartigen Koppelelement ist außer
den anderen Angaben die Länge des Elementes
DL = 108 m erforderlich (s. Tafel 6.69).

6.64 Erklärung zur Ausgabe

Die Eingabedaten sind wie in der 1. Aufgabe aufgebaut. Unter der Abkürzung KA fmdet sich
die Elementenbezeichnung, wobei mit 30 das Festelement, mit 31 das Koppelelement und mit
32 das bereits bekannte Pufferelement gekennzeichnet ist. Das Koppelelement benötigt neben
dem Radius die Angabe der Elementenlänge DL.
In Tafel 6.70 sind die Ergebnisse nachgewiesen. Hier zeigt es sich, daß bei dem Koppelelement
als tatsächliche Länge der Wert 107,605 entstanden ist und die Gerade genau mit den Koordi-
naten von Punkt 206 beginnt (s. auch Bild 6.71).
260 6.2. Straßenbau

Tafe16.65 Erläuterungen zum Ausgabe-Protokoll

I. Zeile
STATION Station des Hauptpunktes
R Radius im Hauptpunkt (- heißt linksgekrümmt)
A Parameter der auf den Hauptpunkt folgenden Klotoide
PHI-T Richtungswinkel der Tangente im Hauptpunkt
YH Rechtswert des Hauptpunktes
XH Hochwert des Hauptpunktes
2. Z eil e
STAT-DIF Stationsdifferenz zum nächsten Hauptpunkt (Länge des Elementes)
Tl Länge der auf den Hauptpunkt folgenden Tangente
T2 Länge der auf den Tangentenschnittpunkt folgenden Tangente
D-PHI Brechungswinkel des Tangentenpolygons
YT Rechtswert des Tangentenschnittpunktes
XT Hochwert des Tangentenschnittpunktes
3. Z eil e
S Länge der Sehne zum nächsten Hauptpunkt
PHI-S Richtungswinkel der Sehne
YM Rechtswert des Kreismittelpunktes
XM Hochwert des Kreismittelpunktes

705 Tafel 6.68 Koordinatenverzeichnis


R-100 für Aufgabe 2

Nr. y x

204 80 526.770 62 852.870


205 80 547,500 62 673,150
6.66 Trassenverlauf mit Stationierung 206 80 499,323 62 582,960
207 80 462,116 62 490,140

t
Koppelelement
Kk37
I----Ldo e
ZOS
/_-.---__ R.iöo-
--1-;- ~
2061ZwangspunkIJ
\1:"" , R·160.... ~ - l'
Fes/element Puffer~ement '",
KA-JO KA-3Z
Anfang
72479,344 Ende 6.67 Das Koppelelement

Tafe16.69 Aufbereitung für Aufgabe 2

ACHSE 2 VERBINDUNGSSTRASSE BIEBELRIED-AMMERGRUND

KANR DL R Al A2 Yl Xl Y2 X2
30 1 12479.344 O. 80. 80. 80526.770 62852.870 80547.550 62673.150
32 2 160. 0.0001 0.0001
31 3 108.0 600. 200. 200.
30 4 O. 80499.323 62582.960 80462.116 62490.140
6.2.2. Trassierung 261

Tafel 6.70 Ausgabe von Aufgabe 2

ACHSE 2 VERBINDUNGSSTRASSE BIEBELRIED-AMMERGRUND

ACHSE NO. 2
STATION R A PHI·I YH XH
STAT·DIFF T1 T2 D·PHI YT XT
S PHI·S YM XM
12479.344 0.000 0.000 192.6891 80526.770 62852.870
90.001 0.000 0.000 0.0000 0.000 0.000
90.000 192.6891 0.000 0.000
12569.345 0.000 80.000 192.6891 80537.083 62768.462
40.000 26.688 13.353 7.9577 80540.141 62736.950
39.972 195.3413 0.000 0.000
12609.345 160.000 0.000 200.6463 80540.005 62723.597
39.567 19.885 19.884 15.7431 80539.803 62703.713
39.466 208.5184 80380.014 62725.223
12638.912 600.000 0.000 216.3899 80534.740 62684.484
40.939 20.479 20.475 4.3437 80529.526 62664.680
40.930 218.5617 79954.515 62837.255
12689.850 600.000 - 200.000 220.7337 80522.975 62645.280
66.667 22.229 44.451 3.5367 80515.867 62624.220
66.657 223.0916 79954.515 62837.255
12756.517 0.000 0.000 324.2705 80499.323 62582.960
100.000 0.000 0.000 0.0000 0.000 0.000
99.999 224.2705 0.000 0.000
12856.516 0.000 0.000 224.2705 80462.116 62490.140

302 Fes/element
R~800m Kk30
204 .".", 3031lwangspunkIJ
~15'
207 ""';" 304

~
-~
'fp ~....,f'·/SOa
"-~305
,~ Schwenkelement Ilwangs~
~ KA-37 punkt)
6.71 Trassenverlauf mit Stationierung 6.72 Das Schwenkelement

Das Sc h wen k eie m e n t, In dieser 3. Aufgabe (s. Bild 6.72) liegen ein Anfangselement
(Kreis R = 800 m) und zwei nachfolgende Klotoiden mit unrunden Parametern bereits fest
(Koordinaten in Tafel 6.73). Die Klotoidenparameter dürfen durch die Berechnung nicht ge-
ändert werden, da sie die Achse einer bereits ausgebauten Straße defInieren. An die beiden
Klotoiden soll sich ein Kreis (R = 1500 m) anschließen, der verbindlich in dem Punkt 305
enden muß. Hier kann zur Lösung nicht das Pufferelement herangezogen werden, da hierbei
der Anfangs- und Endpunkt des Elementes nicht festgehalten werden können. Ebensowenig
kann das Koppelelement eine Lösung bringen, weil sich hier die Klotoidenparameter ändern
würden. Abhilfe kann nur das S c h wen k eie m e n t schaffen. Bei diesem Element bleibt
stets der z· w e i t e Punkt fest, um den dann das Element in die Trasse eingeschwenkt wird.
262 6.2. Straßenbau

Aus den Eingabedaten (Tafel 6.74) ist ersichtlich, daß das Schwenkelement die gleiche
Elementenkennzeichnung KA = 31 trägt wie das Koppelelement, sich aber von diesem unter-
scheidet durch die Angabe der Koordinatenwerte und durch Fehlen der Länge DL.
Tafe16.73 Koordinatenverzeichnis für Aufgabe 3

Nr. y x

302 83 304,512 54 486,215


303 83 353,433 54 304,781
304 83 365,- - - 54 153,- - -
305 83 377,250 53 986,650

Tafel 6.75 zeigt die Ergebnisse der Berechnung. Die Punkte 302, 303 und 305 sind als Haupt-
punkte ausgewiesen. Gleichfalls sind die unrunden Parameter (A = 348,096 und A = 499,330)
der beiden Klotoiden bestehen geblieben.

Tafe16.74 Aufbereitung für Aufgabe 3

TIEFSTRASSE KREISEL IMMERMANNSTRASSE

KANR DL R Al A2 Y1 X1 Y2 X2
30 1 346.586 800. 348.096 499.330 83304.512 54486.215 83353.433 54304.781
31 2 -1500. 83365. 54153. 83377.250 53986.650

Tafel 6.75 Ausgabe von Aufgabe 3

TIEFSTRASSE KREISEL IMMERMANNSTRASSE

ACHSE NO. 3
STATION R A PHI-T YH XH
STAT-DIFF T1 T2 D-PHI YT XT
S PHI-S YM XM
346.586 800.000 0.000 175.7390 83304.512 54486.215
189.333 95.111 95.11'1 15.0666 83339.887 54397.928
188.891 183.2723 82561.904 54188.669
535.919 800.000 -348.096 190.8056 83353.575 54303.807
151.464 50.530 101.023 6.0265 83360.848 54253.803
151.403 194.8235 82561.904 54188.669
687.383 -0.000 499.330 196.8322 83365.873 54152.904
166.220 110.832 55.421 -3.5273 83371.385 54042.208
166.197 195.6565 0.000 0.000
853.603 - 1500.000 0.000 193.3049 83377.203 53987.093
0.445 0.000 0.000 - 0.0188 0.000 0.000
0.445 193.2584 84868.916 54144.551
854.048 - 1500.000 0.000 193.2860 83377.250 53986.650
6.2.2. Trassierung 263

6.2.2.2. Gradientenberechnung. Aus den verschiedenen AufgabensteIlungen bei der Gradienten-


berechnung soll nachstehend die Programmierung des Nonnalfalles mittels Kleinrechner dar-
gestellt werden.
Auf gab e. Aus der vorgegebenen graphischen Lösung des Längsschnittes werden die
Stationen (XO' Xl' X2 ' ..•) und die Höhen (y 0' y I' Y2' ...) der Tangentenschnittpunkte sowie
die Ausrundungshalbmesser H der Kuppen und Wannen übernommen (Bild 6.76) und über die
Tastatur des Kleinrechners eingegeben. Bei Kuppen erhält der Halbmesser negatives, bei
Wannen positives Vorzeichen. Es sollen die Steigungen s, die Tangentenlängen t, die Stich-
maße f sowie die Stationen und Höhen am Anfang und Ende der Ausrundung (AA, AE) be-
rechnet und aufgelistet werden, ebenso die Höhen der Gradiente in konstanten Abständen x
von einer zu wählenden ersten (runden) Station x R an.

AA AE AA
I--t~1---

~r---~----------~~~----------~
Tangente ~. ~ ~
~ ~ ~
6.76 Längsschnitt Km 0,7 0,9+55,00 1,5+55,00 2,1+35,00

Ver fa h ren und F 0 r m ein. Entsprechend den Richtlinien für den Ausbau der Land-
straßen (Teil Linienflihrung) ergeben sich folgende Beziehungen:
Tangentenlänge
1
t = - H (s - s ) (s Steigung der Tangente (Tangens))
2 2 I

t2 x2
Bogenstich f = - Höhenordinate y= -
2H 2H

wobei x der horizontale Abstand vom Tangentialpunkt AA bzw. AE bedeutet.


Die Gradientenhöhe für runde Stationen ergibt sich dann zu

YR = Y AE + Ix R - xAE I.s

für Gradientenpunkte außerhalb der Ausrundungen.

Für Punkte innerhalb der Ausrundungen lautet die Beziehung


x R -xAA
YR = YAA + (xR - xAA)(
2H
+ s)

Pro g r a m m a b lau f. Die Programme sind in der maschinenabhängigen assemblierten


Programmiersprache für den OLIVETTI-Bürocomputer P 203/00 geschrieben [104]. Bei den im
Ablaufplan und im Programm verwendeten Symbolen AV, AW, AZ, BV handelt es sich um
264 6.2. Straßenbau

Ankunftspunkte unbedingter Sprünge im Programm. zu denen die Ausgangspunkte V. W. Z.


CV gehören. Die Symbole N. IV sind Ausgangspunkte bedingter Sprünge; ist an diesen Stellen
im Programm der Inhalt des Operationsregisters A positiv. so wird nach den Marken AN. AIV
verzweigt. Wenn bei der Abfrage der Registerinhalt negativ oder gleich Null ist. so wird der
nächste Programmbefehl ausgeführt.
Zur Maschinenausstattung gehören neben dem Rechner ein Lochstreifenleser und -stanzer.
Das in Tafel 6.77 mitgeteilte Programm veranlaßt die Niederschrift der eingegebenen Daten
(xo• Yo' Xl' YI' HI •...) mit Schreibmaschine (Tafel 6.78) und die Ablochung durch den Loch-

Tafel 6.77 Programm für Ablochbeleg Tafel 6.78 Ablochbeleg

Register 1 700.000 XO
256.600 VO
A V 955.000 Xl
2 FIS 259.750 Vl
20000.000 Hl
3 S 1555.000 X2
4 ~ 279.200 V2
8000.000- H2
5 B * 2135.000 X3
6 S 254.750
7 ~ 6000.000
2754.000
8 B * 276.900
9 V 25000.000-
3100.000
282.950

6.79 Ablaufplan Gradientenkleinpunkte


6.2.2. Trassierung 265

streifenstanzer auf einen ISO-8-Kanal Lochstreifen (Bild 6.79). Der so erstellte Lochstreifen
wird über den Lochstreifenleser eingelesen, nachdem das von einer Magnetkarte in den Rechner
übernommene Programm "Gradientenhauptpunkte" (Tafel 6.80) durch Druck auf die Taste V
gestartet wurde. Es folgt die Berechnung, Niederschrift und Ablochung aller s, t, f, X AA , YAA'
xAE' YAE {Tafel 6.81).

Tafe16.80 Programm Gradientenhauptpunkte

Register 1 Register 2 Register F Register E

1 A V 33 CI+- 65 Elt 97 FIS


2 FIS 34 C * 66 A + 98 DIS
3 DIS 35 FIS 67 A: 99 cn
4 A S 36 A S 68 100 BI-
S BIt 37 "- 69 E/x 101 CIt
6 +- 38 A ~ 70 E/x 102 Bit
7 B * 39 E/~ 71 A +- 103 C "-
8 A S 40 +- 72 C +- 104 B ~
9 B t 41 E * 73 FIS 105 0 "-
10 +- 42 D/+- 74 DIS 106 01 ~
11 B * 43 E";- 75 Bn 107 W
12 FIS 44 DIS 76 EI - 108
13 DIS 45 A S 77 A +- 109
14 A S 46 CI t 78 B * 110
15 "- 47 A S 79 on 111
16 B/~ 48 C t 80 E/x 112
17 t 49 en 81 A - 113
18 50 B 1- 82 114
19 CI~ 51 0 ~ 83 B + 115
20 A S 52 C "- 84 A +- 116
21 "- 53 B 85 B * 117
22 B ~ 54 0 86 DIS 118
23 ~ 55 0 ~ 87 Bn 119
24 56 0 "- 88 E/+ 120
25 CI: 57 0/- 89 A +- 121
26 01 ~ 58 AI t 90 B * 122
27 A W 59 01 t 91 0 "- 123
28 BI+- 60 92 E/x 124
29 C * 61 E/x 93 B + 125
30 B +- 62 A ~ 94 A +- 126
31 C * 63 A +- 95 B * 127
32 DIS 64 * 96 FIS 128
266 6.2. Straßenbau

Tafel 6.81 Ergebnisliste Gradientenhauptpunkte

xa Ya
xI YI XI - x l _ 1
H 5 t f
XAA YAA XAE YAE

700.000 256.600
955.000 259.750 255.000
20000.000 0.0123529 200.636 1.006
754.364 257.271 1155.636 266.253
1555.000 279.200 600.000
8000.000- 0.0324166 298.286 5.560
1256.713 269.530 1853.286 266.625
2135.000 254.750 580.000
6000.000 0.0421551- 233.815 4.553
1901.184 264.606 2368.815 263.116
2754.000 276.900 619.000
25000.00cr- 0.0357835 228.725 1.046
2525.275 268.715 2982.725 280.899
3100.000 282.950 346.000

Mit diesen Zwischenergebnissen wird zunächst der graphische Entwurf der Gradiente überprüft,
bevor man den zweiten Lochstreifen und das Programm "Gradientenldeinpunkte" einliest
(Tafel 6.82). In diesem Programmteil werden automatisch alle Gradientenhöhen berechnet und
mit Schreibmaschine niedergeschrieben, nachdem man den Stationsabstand dx und die erste
runde Station x R über die Tastatur eingegeben hat {Tafel 6.83).

6.2.2.3. Automatische Kartienmg. Der Einsatz eines automatischen Zeichengerätes ist in


Technik und Wissenschaft sinnvoll, wenn man sich einen optischen Eindruck des bereits
verarbeiteten Datenmaterials in seiner Gesamtheit verschaffen will. Die Programmierung eines
automatischen Zeichners soll nachfolgend anhand eines Beispiels gezeigt werden.
Wie bei jeder Programmierung muß auch hier die Aufgabe präzise und vollständig beschrieben
werden. Das heißt bei einem automatischen Zeichengerät, daß nicht nur die Bewegung des
Zeichenstiftes gesteuert werden muß, sondern daß man vorher ein Koordinatensystem (Lage
des Nullpunktes und Achsmaßstab) defmieren muß. Ähnliche zusätzliche Angaben sind bei
einer geplanten Textausgabe erforderlich. Neben dem Inhalt des Textes (der gezeichnet wird!)
ist der Ort, die Größe und die Richtung der Schrift anzugeben.
Bei dem hier eingesetzten Gerät (Plotter)l) steuern 6 Unterprogramme die verschiedenen
Funktionen:
1. SCALE (= Maßstab). Speicherung von Angaben für ein Koordinatensystem (Achsmaßstab,
Lage des Nullpunktes)
2. EG R ID (von grid =Gitter). Zeichnung von Gitterlinien (Koo.-Achsen)
3. EPLOT (von plot = zeichnen). Bewegung des Zeichenstiftes in senkrechter und horizontaler
Richtung

1) Plotter IBM 1627 der DVA IBM 1130.


6.2.2. Trassierung 267

Tafe16.82 Programm Gradientenkleinpunkte Tafe16.83 Ergebnisliste


Gradientenkleinpunkte
Register 1 Register 2
STATION HÖHE
1 A V 33 Z
2 FIS 34 A/V 700.000 256.600
3 S 35 BI+- 720.000 256.847
740.000 257.094
4 o/t 36 C * 760.000 257.341
5 S 37 Bf.I. 780.000 257.604
800.000 257.886
6 Bit 38 E/- 820.000 258.189
7 A S 39 IY 840.000 258.512
860.000 258.854
8 B t 40 + 880.000 259.217
9 A Z 41 B - 900.000 259.600
10 A S 42 C x 920.000 260.002
940.000 260.425
11 CI t 43 C/+ 960.000 260.868
12 B +- 44 C V 980.000 261.331
13 1000.000 261.813
C * 45 A/Y
14 CI+- 46 A x
15 C * 47 F t 4. POINT (= Punkt). Zeichnung von Punkt-
16 FIS 48 0 t signaturen (z. B. + oder x)
17 A S 49 A + 5. ECHAR (von character = Zeichen). Spei-
18 0 t 50 t cherung von Angaben zum Malen von Zei-
chen (Ort, Größe, Richtung)
19 A S 51 0 t
6. WR ITE (= schreiben). Zeichnung von
20 C t 52
Buchstaben, Ziffern, Sonderzeichen
21 A S 53 F t
Bei dem hier vorgefiihrten Programmbeispiel
22 E/t 54 C x
will der Plotterbenutzer sich ein Bild von
23 A S 55 F + einer bereits berechneten Straßentrasse
24 E t 56 E + machen. Da ihm die im Abstand von 5 m be-
25 A S 57 B V rechneten orthogonalen Absteckwerte (von
26 Fit 58 A +- Trasse und Fahrbahnrändern) schon in Kar-
27 A W 59 C * tenforrn vorliegen, sollen lediglich die ent-
sprechenden Kleinpunkte miteinander ver-
28 Ff.I. 60 FIS
bunden werden. Das Lochkartendeck ent-
29 B/- 61 Bf.I.
hält bereits die zusammengehörenden Punkte
30 IV 62 0/+ Geweils max. 50), die von den anderen durch
31 F/.\. 63 Bit eine Karte 900 getrennt sind. Am Schluß be-
32 B t 64 W fmdet sich die Karte 999. Ein vollständiger
Datensatz (s. Tafel 6.84) umfaßt die folgen-
den Angaben: Kartenart (001), laufende Nummer (1 oder blank), Punktnummer, Koordinaten
X und Y. Der Buchstabe H kennzeichnet einen Achshauptpunkt.
Zur Vorbereitung der Programmierung dienen die in Bild 6.85 festgehaltenen überlegungen
über die Lage des Koordinatenursprungs und über die Skalierung der Koordinatenachsen. Die
zu erstellenden Schriftbilder sind lagemäßig und der Größe nach angedeutet.
268 6.2. Straßenbau

Tafel 6.84 Vollständiger Datensatz zur Kartierung

001 011 00.00 0.00 H


001 021 04.98 0.40
001 031 09.97 0.80
001 041 14.95 1.20

001 191 84.31 4.50 H


001 201 84.75 4.44
001 211 89.68 3.65
001 221 94.60 2.73
001 231 96.37 2.38 H
001 241 99.50 1.77
001 251 104.42 0.88
001 261 108.43 0.27 H
001 271 109.37 0.15
001 281 114.34 -0.34
001 291 119.34 -0.59
001 301 124.34 -0.58
001 311 129.33 -0.32
001 321 132.75 -0.00 H
900
001 012 00.32 -3.99 H
001 022 05.30 -3.59

900

999

Nach den Voruberlegungen kann das Programm (Tafel 6.86) entstehen, das im wesentlichen
folgende Arbeiten erledigt:
1. Defmition des Koordinatensystems
2. Zeichnen der Gitterlinien
3. Setzen von überschriften
4. Beschriften der x- und der y-Achse
5. Einlesen und Verbinden der Kleinpunkte

HO,3Z) 6rb"Be derZeicheno,Z'xo,Z"


~ ~l IRI I SchriftleisfezuFORf1AT44G
1/1) 13~ I
L..._ _ _ _ _ _ _ _ -..J

ZO -i"
70
o ___ Nullpunkt des KOOrdinatensystems
_____________
""~
It
®.L-~~=-~ ~~~

zo ••••• (11) 130


'-Abstand für TOEinheiten-0.7inch'" 18,5mm +x-Achse
Erste Wr-) Position des Zeichenstiftes (-2; -70) 6.85 Bildplanung
6.2.2. Trassierung 269

Tafel 6.86 Kartierungsprogramm

C ZEICHNEN EINER TRASSE


C =======================
DATA KHP/,H'/
WRITE (1,444)
444 FORMAT ('BITTE DEN PLOTTER ANSCHALTEN'/
1 'DEN STIFT IN DIE UNTERE RECHTE ECKE SETZEN'/
2 'UND ZWAR ETWA 5 CM VOM RAND ENTFERNT'/
3 'BITTE OVA-ZENTRALEINHEIT STARTEN***')
PAUSE
C
C MASSTABSFESTLEGUNG,KOORDINATENGITTER ZEICHNEN UND BILD-
C UEBERSCHRIFT
C
CALL SCALE (0.07,0.07, - 2., - 10.)
C
C SCALE SETZT MASSTAB UND NULLPUNKT DES KOORDINATENSYSTEMS
C FEST
C L U N D 2. ZAHL (0.07) INCH PRO EINHEIT IN X- UND Y-RICHTUNG
C 3. UND 4. ZAHL (- 2. UND - 10.) LETZTE POSITION DES STIFTES
CALL EGRID (0,0., - 10., 10., 13)
C
C EGRID ZEICHNET GITTER LINIE EINES KOORDINATENSYSTEMS
C 1. ZAHL = RICHTUNG (0 = + X-RICHTUNG) (1 = + Y)
C 2. UND 3. ZAHL (0., - 10.) ANFANGSPUNKT DER LINIE
C 4. ZAHL (10.) ABSTAND DER QUERSTRICHE
C 5. ZAHL ANZAHL DER QUERSTRICHE - 1
C
CALL EGRID (1,0., - 10.,10.,3)
CALL ECHAR (40.,32.,0.2,0.2, 0.)
C
C ECHAR SETZT ORT, GROESSE UND DREHUNG EINES BUCHSTABENS FEST
C 1. UND 2. ZAHL LINKE UNTERE ECKE DES BUCHSTABENS (X, Y)
C 3. UND 4. ZAHL BREITE UND HOEHE DES BUCHSTABENS
C 5. ZAHL DREHUNG DES BUCHSTABENS IN BEZUG AUF POSITIVE X-RICH-
C TUNG
C
WR ITE (7, 446)
C
C DIE AUSGABE-EINHEIT 7 IST DER PLOTTER
C
CALL ECHAR (40.,27.,0.2,0.2,0.)
WRITE (7,447)
C
C BESCHRIFTEN DER X-ACHSE
C
0050 I = 1, 13
J = I * 10
X=J
CALL ECHAR (X - 3., - 13., 0.15, 0.15, 0.)
50 WRITE (7,445) J
CALL ECHAR (X + 5., - 13., 0.15, 0.15,0.)
WRITE (7,448)
445 FORMAT (13)
270 6.2. Straßenbau

C
C BESCHRIFTEN DER V-ACHSE
C
DO 60 I = 1,3
J = 1* 10-10
V=J
CALL ECHAR (- 8., V - 3., 0.15, 0.15, 0.1
WRITE (7,4451 J
60 CONTINUE
448 FORMAT ( (MI I
CALL ECHAR (- 8., V + 5., 0.15, 0.15, 0.1
WRITE (7,4481
446 FORMAT (' -TRASSE 1 . 'I
447 FORMAT ('BULLENDORF-MUEHLBACH'I
CALL EPLOT (3, 0., 0.1
C
C EPLOT BEWEGT DEN ZEICHENSTIFT HOCH UND RUNTER, HIN UND HER
C 1. ZAHL GERADE = STIFT SENKEN UNGERADE = STIFT HEBEN
C 2. UND 3. ZAHL GIBT KOORDINATEN DES NEUEN STIFT STANDPUNKTES AN
C
C
C KOORDINATEN DER KLEINPUNKTE EINLESEN UND VERBINDEN
C
10 DO 20 11 = 1, 50
READ (2,1001 KA,LFN,NP,X,V,KP
IF (KA - 900141,11,43
41 IF (11- 1130,30,31
30 CALL EPLOT (+ 1, X, VI
CALL EPLOT (+ 2, X, VI
GO TO 25
31 CALL EPLOT (0, X, VI
25 IF (KP - KHPI 20,32,20
32 CALL POINT (11
C
C POINT ZEICHNET SIGNATUR AN DER AUGENBLICKLICHEN STELLE
C 1 = KREUZ MALEN
C
20 CONTINUE
11 CALL EPLOT (1,0.,0.1
GOTO 10
100 FORMAT (13,14, 9X, 13, 6X, F6.0, F6.0, 6X, A21
43 CALL EXIT
END

In Bild 6.87 ist der Ablaufplan der in Punkt 5 zu erledigenden Arbeiten dargestellt (im Pro-
gramm zwischen den Anweisungsnummern 10 und 43).
In Bild 6.88 fmdet man eine Abbildung der erstellten automatischen Zeichnung. Hier ist
erkennbar, daß gekrümmte Linien nicht in einer glatten Kurve, sondern durch ein Aneinander-
reihen von Sehnenpolygonen entstehen.
6.2.2.4. Entwurfs- und Abstecktabelle für Knotenpunkte. Beim Entwurfund Ausbau von Knoten
werden für die Bordsteinführung sowohl im Landstraßenbau als auch bei der Anlage von Stadt-
straßen dreiteilige Korbbögen zugrundegelegt (Bild 6.89a). Für die Konstruktion wie auch für die
Absteckung ist die Kenntnis einzelner Bogenelemente (Tangentenlängen, Bogenlängen, Sehnen
6.2.2. Trassierung 271

6.89a Bordsteinflihrung

6.87 Programmablaufplan

-TRASSE 1-
(MJ
8ULLENDDRF-MUEHL8ACH
20

6.88 Automa-
10L_-----==::===:=
tisch erstell-
te Zeich-
nung

usw.) erforderlich. Da die Zentriwinkel der äußeren Bögen konstant sind und die Krümmungs-
radien meist im Verhältnis RE :R:RA = 2: 1:3 gewählt werden (die Indizes E und A kenn-
zeichnen die Größen für den einleitenden und ausleitenden Bogen), ist die Gesamtkonstruktion
nur von den beiden Parametern 'Y (Tangentenschnittwinkel) und R abhängig.
Auf gab e. Unter Zugrundelegung der Richtlinien für den Ausbau der landstraßen (Teil
Knotenpunkte) ist eine Tabelle der Einheitswerte (R = 1) für die Bogenlänge (LM), die Sehne
(SM), Pfeilhöhe (PFM) des mittleren Hauptbogens sowie für die beiden Tangenten (TE' TA) zu
drucken, und zwar für Tangentenwinkel 'Y zwischen 701 und 120' und einer Tafeldifferenz
von tl.'Y = 0,1'.
272 6.2. Straßenbau

Tafel 6.89b Programm Bordsteinführung

1000 FORMAT (lHO, 9X, 25HTABELLE DER EINHEITSWERTE/,


1 10X, 33HFUER BORDSTEINFUEHRUNG NACH RAL-K/,
2 10X, 38HALPHA - E = 17,5 GON, ALPHA - A = 22,5 GON/,
3 10X, 38HVERHAELTNIS DER RADIEN RE/R/RA = 2/1/3//)
1001 FORMAT (lHO, 30X, 28HRADIUS LAENGE SEHNE PFEIL,
1 5X,9HX V//l0X, 19HEINLEITENDER BOGEN,
2 47H 2,000 0,5498 0,5480 0,0188 0,5428 0,0750/,
3 10X, 19HAUSLEITENDER BOGEN, 15H 3,000 1,0602,
4 32H 1,0548 0,0468 1,0383 0,1854////21 X, 5HGAMA,
5 3X, 5HALPHA, 4X, 2HLM, 6X, 2HSM, 6X, 3HPFM, 5X, 2HTE, 6X, 2HTA//)
1002 FORMAT (19X, 2F8.2, 5F8.4)
WRITE (5, 1000)
WRITE (5, 1001)

GAM = 70.
BGAM = GAM * 0.015708
GAM2 = GAMI2.
BGAM2 = GAM2 * 0.015708
ALF = GAM -40.
BALF = ALF * 0.015708
ALF2 = ALF/2.
BALF2 = ALF2 * 0.015708
ALF4 = ALF/4.
BALF4 = ALF4 * 0.015708
S = 2. * SIN (BALF2)
F = 2. * SIN (BALF4) * * 2
EK = (0.123618 - 0.037545 * COS (BGAM))/SIN (BGAM)
AK = (0.037545 - 0.123618 * COS (BGAM))/SIN (BGAM)
TAN = SIN (BGAM2)/COS (BGAM2)
TE = TAN + 0.27144 + EK
TA = TAN + 0.692234 + AK
ALFl = ALF + 0.0001
GAM 1 = GAM + 0.0001
WRITE (5, 1002) GAM1, ALF1, BALF, S, F, TE, TA
GAM = GAM + 0.1
IF (GAM -120.) 1,1,2
2 CALL EXIT
END

F 0 r m ein. Für die Zentriwinkel gilt


aE = 17,Sg aA = 22,Sg aM =r - 40,~

Bogenlänge
L = R· a - 0,01S708
Sehne
s = 2R . sin a/2
Pfeilhöhe

Tangenten
TE = R· tan r/2 + E + e
TA = R· tanr/2+ A+ a
6.2.2. Trassierung 273

Tafel 6.90 Tabelle der Einheitswerte

TABELLE DER EINHEITSWERTE FUER BORDSTEINFUEHRUNG NACH RAL-K


ALPHA - E = 17,5 GON, ALPHA - A = 22,S GON
VERHAEL TNIS DER RADIEN RE/R/RA = 2/1/3

RADIUS LAENGE SEHEN PFEIL X Y

EINLEITENDER 2,000 0,5498 0,5480 0,0188 0,5428 0,0750


AUSL. BOGEN 3,000 1,0602 1,0548 0,0468 1,0383 0,1854

GAMMA ALPHA LM SM PFM TE TA

70.00 30.00 0.4712 0.4668 0.0276 1.0038 1.2841


70.10 30.10 0.4728 0.4684 0.0278 1.0048 1.2854
70.20 30.20 0.4743 0.4699 0.0279 1.0059 1.2867
70.30 30.30 0.4759 0.4714 0.0281 1.0069 1.2880
70.40 30.40 0.4775 0.4729 0.0283 1.0080 1.2893
70.50 30.50 0.4790 0.4745 0.0285 1.0090 1.2906
70.60 30.60 0.4806 0.4760 0.0287 1.0101 1.2919
70.70 30.70 0.4822 0.4775 0.0289 1.0111 1.2932
70.80 30.80 0.4838 0.4791 0.0291 1.0122 1.2945
70.90 30.90 0.4853 0.4806 0.0293 1.0133 1.2958
71.00 31.00 0.4869 0.4821 0.0294 1.0143 1.2971
71.10 31.10 0.4885 0.4836 0.0296 1.0154 1.2984
71.20 31.20 0.4900 0.4851 0.0298 1.0164 1.2997
71.30 31.30 0.4916 0.4867 0.0300 1.0175 1.3010
71.40 31.40 0.4932 0.4882 0.0302 1.0186 1.3023
71.50 31.50 0.4948 0.4897 0.0304 1.0196 1.3036
71.60 31.60 0.4963 0.4912 0.0306 1.0207 1.3049
71.70 31.70 0.4979 0.4928 0.0308 1.0218 1.3062
71.80 31.80 0.4995 0.4943 0.0310 1.0228 1.3075
71.90 31.90 0.5010 0.4958 0.0312 1.0239 1.3088
72.00 32.00 0.5026 0.4973 0.0314 1.0250 1.3101
72.10 32.10 0.5042 0.4989 0.0316 1.0260 1.3114
72.20 32.20 0.5057 0.5004 0.0318 1.0271 1.3127
72.30 32.30 0.5073 0.5019 0.0320 1.0282 1.3141

mit E= R sin<XE A= 2R sin<X A


ARA ARE ARE ARA
e=----- a=-----
sin 'Y tan 'Y sin 'Y tan'Y

ARE=R(I-cos<XE) ARA = 2R (1- cos <XA)

Mit <XE = 17,5 g und <XA = 22,5 g ergibt sich dann


ARE = 0,037545 R ARA = 0,123618 R
R (0,123618 - 0,037545 cos 'Y) R (0,037545 - 0,123618 cos 'Y)
e= a=
sin 'Y sin 'Y
E = 0,271440 R A = 0,692234 R
274 6.3. Vermessungswesen

Pro g r a m m. Als Programmiersprache wird FORTRAN gewählt. Die Ein- und Ausgabe-
einheiten beziehen sich auf den Rechner IBM 1130 mit dem Schnelldrucker IBM 1403.
Nach Ausdruck der Überschriften und der konstanten Bogenelemente flir die äußeren Bogen
werden flir 'Y = 70,0' (GAM) der Zentriwinkel a (ALF) sowie die TeilwinkeI 'Y/2, a/2, a/4
(GAM2, ALF2, ALF4) und ihre Bogenmaße (BGAM, BGAM2, ... ) gerechnet. Nach Berechnung
von Sehne, Pfeilhöhe, e (EK), a (AK) und Tangenten (TE, TA) werden die Ergebnisse ausge-
druckt und die Variable um 11'Y = O,l g erhöht. Statt des Einschaltens eines Aufrundungs-
programms fiir die Winkelwerte 'Y und a mit zwei Nachkommanstellen wird jeweils eine Ein-
heit der 4. NachkommasteIle addiert, um in der ausgedruckten Tabelle runde Werte (70.1O,
70.20, usw.) zu erhalten.
In der Ausgabeliste steht LM, SM, PFM fiir Länge, Sehne und Pfeilhöhe des mittleren Bogens.

6.3. Vermessungswesen

Nachfolgend werden drei charakteristische Beispiele aus dem Vermessungswesen vorgeführt.


In Abschn. 6.3.1 wird ein Ein z el pro g r a m m über ein allen Vermessungsingenieuren
geläufiges Problem (Kleinpunktberechnung) behandelt. Ein Beispiel (Richtungswinkel und
Entfernung) mit einem U nt e r pro g r am m wird in Abschn. 6.3.2 gezeigt. Schließlich
wird in Abschn. 6.3.3 ein Beispiel vorgeführt, das sich eines i n t e g r i e r t e n Pro g r amin -
s y s te m s (aus dem Gebiet der Katastervermessung) bedient. Es handelt sich hierbei um
eine "Vorausberechnung" nach einem Aufteilungsplan.

6.3.1. Kleinpunktberechnung. Die Problemstellung ist hierbei folgende: Ge g e ben sind die
Koordinaten zweier Punkte A (YA, XA)I) sowie E (YE, XE) es. Bild 6.91). Gern es sen
sind 1. die Entfernung zwischen diesen beiden Punkten SG = SE - SA und 2. die orthogonalen
Bestimmungselemente SYj, S~ flir die i Punkte (Kleinpunkte). Gesucht sind die kartesischen
Koordinaten dieser Kleinpunkte Yj' ~ und zwar in dem Koordinatensystem, dem auch die
Koordinaten YA, XA bzw. Ye, Xe angehören. Es handelt sich also bei der vorliegenden Aufgabe
um eine Koordinatentransformation von einem örtlichen System (mit der Koordinatenachse
A-E) in ein überörtliches ("Landes"-) System, kurz bezeichnet mit "Kleinpunktberechnung"
oder ,,Messungslinienberechnung" .

6.91 Kleinpunktberechnung; ( ) Gegeben,


y- c:=I Gesucht;

Zur Berechnung der Kleinpunkte stehen Messungen zur Verfiigung, die stets mit unvermeid-
baren Fehlern behaftet sind. Diese treten insbesondere dann zutage, wenn gerechnete und
gemessene Größen gegenübergestellt werden müssen, wie dies beim Vergleich von

1) Bei den Formelgrößen handelt es sich um die im Programm (s. Tafel 6.92) verwendeten
FORTRAN-Variablen.
6.3.1. Kleinpunktberechnung 275

Tafel 6.92 Programm Kleinpunktberechnung

C KLEINPUNKTBERECHNUNG
C ------------------
DIMENSION NR (101), X (101), Y (101), SX (101), SY (101)
C PROGRAMM IST FUER 100 PUNKTE VORGESEHEN
C
FSZUL (A1, B1, C1) = A1 * SORT (S) + B1 * S + C1
C NRR IST DIE LAUFENDE NUMMER DER EINZELNEN BERECHNUNGEN
C
NRR = 0
999 NRR = NRR + 1
C EINGABE VON PUNKT A UND E
C
READ (2, 100) KA, NRA, VA, XA, SA
IF (KA - 99) 1,990,990
WRITE (3, 118)
READ (2, 100) KA, NRE, YE, XE, SE
C KLASS IST DIE GELAENDE-KLASSE
C
READ (2, 102) KLASS
IF (KLASS) 22,22,24
22 KLASS = 1
24 IF (KLASS - 3) 26,26,22
C BEGINN DER RECHNUNG
C
26 SG = SE -SA
C SG IST DIE GEMESSENE STRECKE
C
YD=YE-YA
XD = XE-XA
SO = YD * * 2 + XD * * 2
S= SORT (SO)
C S IST DIE GERECHNETE STRECKE
C
GOTO (2,4,6), KLASS
C BERECHNUNG DER ZULAESSIGEN STRECKENDIFFERENZ
C ---------------------------------------
2 FSZ = FSZUL (0.008, 0.0003, 0.05)
GOT08
4 FSZ = FSZUL (0.010, 0.0004,0.05)
GOTO 8
6 FSZ = FSZUL (0.012,0.0005,0.05)
8 FS= S-SG
C BERECHNEN VON 0 UND A
C
0= YD/SG
A = XD/SG
NZ=O
C NZ IST DIE ANZAHL DER KLEINPUNKTE
C
C EINLESEN DER MESSWERTE FUER DIE KLEINPUNKTE
C ------------------------------------
00141=1,100
READ (2, 108) KA, NR (I), SX (I), SY (I)
IF (KA - 10) 13, 16, 16
276 6.3. Vermessungswesen

13 NZ = NZ + 1
14 CONTINUE
16 IF (ABS (FS) - FSZ) 10, 10, 12
C PRUEFUNG OB FS ZULAESSIG
C
12 WRITE (3, 104)
C BEI UNZULAESSIGER STRECKENDIFFERENZ ERFOLGT KEINE WEITER-
C RECHNUNG
GOTO 999
C AUSGABE DER GRUNDRECHNUNG
C -----------------------
10 WRITE (3, 106) NRR, S, FS, FSZ, KLASS, 0, A
C BERECHNUNG DER KLEINPUNKTE
C -----------------------
D0181=l,NZ
Y (I) = 0 * (SX (I) - SA) + A * SY (I)
Y(I)=YA+Y(I)
X (I) = A * (SX (I) - SA) - 0 * SY (I)
X (I) = X (I) + XA
18 CONTINUE
WRITE (3, 114)
C AUSGABE DER KOORDINATEN
C ---------------------
WRITE (3, 110) SA, YA, XA, NRA
WRITE (3, 110) SE, YE, XE, NRE
WRITE (3, 116) YD, XD
WRITE (3,112)
0020 1= 1, NZ
20 WRITE (3, 210) SY 111, SX (I), Y (I), X (I), NR (I)
WRITE (3,112)
IF (KA - 99) 999, 990, 990
C FORMATE
C
100 FORMAT (12, 14, 2Fll.2, F8.3)
102 FORMAT (11)
104 FORMAT (lH ,30HUNZULAESSIGE STRECKENDIFFERENZ)
106 FORMAT (lH ,10 (lH-)/lH , lH/: NR. ',13:/' 4HS = ,F8.3, 2X, 'FS = 'F
1 6.3: ZUL' .F6.3, lH(.ll,lH) /lH ,10(lH-)
2 /lH , 14X:0 = "F9.6, 2X, 'A = ',F9.6//)
108 FORMAT (12,14, 2F8.3)
110 FORMAT (lH ,10X, F8.3, 2X, 2 (Fll.2, 2X), 4 (lH.), 16)
112 FORMAT (lH ,56 (lH-))
114 FORMAT (lH ,4X, 2HSY, 8X, 2HSX, llX, lHY, 12X, lHX, 13X, 3HNR.)
116 FORMAT (lH ,20X, 2 (Fl1.2, 2X))
118 FORMAT (lHl, 16HVERMVORDRUCK 22,4 (lH*), 20HKLEINPUNKT
1 BERECHNUNG,4 (lH*)/lH ,20X, 20 (lH=)//)
210 FORMAT (lH ,2 (F8.3, 2X), 2 iFll.2, 2X), 4 (lH.), 16)
990 CALL EXIT
END

SG = SE - SA und S = .J(YE - YA)2 + (XE - XA)2 (6.13)

der Fall ist. Der Unterschied zwischen diesen Größen


FS= S-SG (6.14)
6.3.1. Kleinpunktberechnung 277

kann nun in Bezug auf eine (amtlich festgesetzte) empirisch ermittelte Fehlergrenze FSZ noch
zulässig sein und muß dann auf die Zwischenwerte proportional verteilt werden, oder aber er ist
nicht mehr erlaubt, was ein Indiz für die Unglaubwürdigkeit der gesamten Messung (grober
Fehler!) ist und eine Durchrechnung mit den zugehörigen Messungszahlen verbietet.
Die Fehlergrenzformellautet

FSZUL= A1·YS+ BI· S + Cl (6.15)

wobei die hier vorkommenden KoeffIzienten Al, BI, Cl je nach Steilheit des Geländes oder
dem örtlichen Bodenwert in 3 "Klassen" (KLASS) unterschiedliche Werte annehmen können.
Die Fehlergrenzformel ist in dem nachfolgenden Programm zu Beginn als "Formelfunktion"
festgelegt; die Größen Al, BI, Cl werden später im weiteren Verlauf des Programmes gemäß
der entsprechenden Klasse mit Zahlenwerten geftillt (s. Anw.-Nummem 2, 4 u. 6).
Die Formeln zur Berechnung der Kleinpunkte sind folgendermaßen aufgebaut

Yj = YA + 0 . (S~ - SA) + A . SYj


(6.16)
~ = XA+ A· (S~ -SA)-O· SYj
wobei o= (YE - YA)/SG und A = (XE - XA)/SG (6.17)

Tafe16.93 Eingabedaten Kleinpunktberechnung

01 97 53138.25 71498.52 000.00


01 14 52986.02 71518.40 153.55
02 87 10.04
02 88 11.43
02 55 35.06
10
01 58 53080.40 71577.39 000.00
01 43 53203.57 71569.56 123.39
02 64 034.28 +4.23
02 65 038.44 + 0.67
02 66 045.99 - 6.41
02 67 048.98
02 68 074.13 -4.21
02 69 089.55
02 70 112.16
02 170 112.17 -0.35
02 71 121.69 + 3.48
99

Bei diesen Formeln ist zu beachten, daß


1. die Größen S~ sich jeweils auf den Ursprung der Linie A-E beziehen ("durchlaufende
Messung")
2. die Werte SYj mit den entsprechenden Vorzeichen (links von A-E negativ!) versehen sein
müssen und
3. durch die Berechnung von 0 und A (s. GI. 6.17) die Proportional-Verteilung der unvermeid
lichen Fehler vorgenommen wird.
278 6.3. Vermessungswesen

Das hier abgedruckte Programm ist anhand der zahlreichen Komrnentarkarten (erkenntlich
durch das C in Spalte 1) auch ohne Programmablaufplan verständlich.
Die Größe KA (= Kartenart) übernimmt in dem Programm die Steuerung des Ablaufes. Zu
Beginn einer erneuten Berechnung kann die Größe KA = 99 das logische Programmende (hier:
CALL EXIT) aufrufen (vor Anw.-Nr. 1). Ist KA = 10, so wird das Ende einer Serie von Meß-
werten angezeigt, und es kann eine neue Kleinpunktberechnung erfolgen (vor Anw.-Nr. 13).

Tafe16.94 Ausgabe-Liste Kleinpunktberechnung

VERMVORDRUCK 22****KLEINPUNKTBERECHNUNG****
=========================

/NR. 1/ S = 153.522 FS = - 0.027 ZUL 0.19i (1)


o= - 0.991403 A= 0.129469

SV SX V X NR.
0.000 53138.25 71498.52 97
153.550 52986.02 71518.40 14
-152.23 19.88
0.000 10.040 53128.29 71499.81 87
0.000 11.430 53126.91 71499.99 88
0.000 35.060 53103.49 71503.05 55

VERMVORDRUCK 22****KLEINPUNKTBERECHNUNG****
=========================

/NR.2/ S = 123.418 FS = 0.028 ZUL 0.175 (1)


0=0.998216 A = - 0.063456

SV SX V X NR.
0.000 53080.40 71577.39 58
123.390 53203.57 71569.56 43
123.16 -7.82
------------------------------------------------------ --
4.230 34.280 53114.35 71570.99 64
0.670 38.440 53118.72 71574.28 65
-6.410 45.990 53126.71 71580.87 66
0.000 48.980 53129.29 71574.28 67
- 4.210 74.130 53154.66 71576.88 68
0.000 89.550 53169.79 71571.70 69
0.000 112.160 53192.36 71570.27 70
- 0.350 112.170 53192.39 71570.62 170
3.480 121.690 53201.65 71566.19 71

Die verschiedenen vorher erwähnten Klassen zur Ermittlung der zulässigen Fehler werden
angesteuert über ein "Berechnetes GO TO" (vor Anw.-Nr. 2). Zur Vermeidung einer Ober- oder
Unterschreitung des Steuerwertes KLASS, wird die Größe der Variablen vor Eingang in das
GO TO überprüft und es wird bei Vorhandensein von KLASS = 0 oder KLASS > 3 der Wert
KLASS = 1 gesetzt.
6.3.2. Richtungswinkel-Berechnung 279

Der Streckenfehler FS wird im Programm erst zu dem Zeitpunkt überprüft (Anw.-Nr. 16), zu
dem sämtliche Meßwerte bereits eingelesen sind, damit ein Rücksprung (Anw.-Nr. 999) an die
logisch richtige Stelle (Beginn einer neuen Messungslinie) erfolgen kann.
In Tafel 6.93 ist die Liste der Eingabedaten dargestellt. Jeder Zeile entspricht einer Lochkarte.
Die ersten beiden Ziffern geben die jeweilige Kartenart (KA) an. Die Kartenart 01 enthält die
Elemente der beiden b e k a n n t e n P unk t e A und E der Messungslinie : Punktnummer,
Koordinaten Yund X und die zugehörigen Strecken (SA bzw. SE). Die Leerkarte gibt den
Zahlenwert für die Größe KLASS an. In dem hier gezeigten Beispiel wird der Wert 0 eingelesen,
so daß vom Programm KLASS = 1 gesetzt werden muß. Die Kartenart 02 enthält die Elemente
der K lei n p unk t e, nämlich neben der Punktnummer , die Zahlenwerte für SX und SY.
Deutlich erkennbar die beiden Karten, die den Programmablauf steuern: KA 10 (Ende einer
Messungslinie ) sowie KA = 99 (Ende der gesamten Rechnung).
In Tafel 6.94 sind zwei Seiten (hier vereinigt) der Ausgabe-Liste abgedruckt. Neben einer
überschrift enthält das Ausgabe-Protokoll als erstes die Grundelemente der Rechnung: die
laufende Nummer der Berechnung, die Größen S (gerechnete Strecke) und FS (Streckenfehler),
den zulässigen Streckenfehler in der betreffenden Klasse (in Klammern angegeben) und in
der Zeile darunter die Umformungskonstanten 0 und A. Daran schließen sich die Elemente
für die einzelnen Kleinpunkte an: SV, SX, Y, X sowie die Punktnummer.

6.3.2. Richtungswinkel-Berechnung. Sehr häufig wird im Vermessungswesen der Richtungs-


winkel von einem gegebenen Punkt zu einem anderen verlangt (s. Bild 6.95). Die Gleichung
zur Bestimmung des Richtungswinkels gewinnt man durch die Umkehrung von
DIFY
tant=-- (6.18)
DIFX
DIFY (6.19)
nämlich t = arctan - -
DIFX
wobei DIFY = Y2 - YI und DIFX = x 2 - Xl die Koordinatenunterschiede zwischen den
gegebenen Punkten sind.
In den Bibliotheksprogrammen des Betriebssystems einer DVA ist meistens nur die Arcustangens-
Funktion für die Hauptwerte vorhanden (s. Bild 6.96). Bei dem zu bearbeitenden Problem sind
jedoch die Winkelwerte zwischen 0 und 21T verlangt, was bedeutet, daß man die bereits pro-
grammierte Arcustangens-Funktion (hier mit dem FORTRAN-Namen ATAN) zu erweitern hat.
2J(

y--
6.95 Der Richtungswinkel 1 2 3 'f 5
:J(

6.96 Die Funktion ARCTA


---------~~--------
280 6.3. Vermessungswesen

Tafel 6.97 Vorzeichen des Arcustangens

Quadr. DlFY DlFX DlFY DlFX

1. >0 >0 On =0 >0


2. >0 <0 1/2n >0 =0
3. <0 <0 In =0 <0
4. <0 >0 3/2n <0 =0
falsch =0 =0

Diese Umrechnung läßt sich mit Hilfe der Vorzeichen von DIFYund DIFX durchfuhren.
Die Umrechnung ist in dem folgenden Unterprogramm dargestellt. Anhand von Bild 6.96 und
Tafel 6.97 läßt sich die "Verwandtschaft" der benötigten Arcustangens-Kurven leicht
ermitteln. Die Werte im 2. und 3. Quadranten erhält man nämlich durch Verschieben der
Grundkurve um den Betrag n nach oben. Diese Verschiebung hat stets dann zu erfolgen, wenn
die Größe DIFX negativ ist (s. Bild 6.98). Ist dieser Wert positiv, so erfolgt die Verzweigung

} Eingongsgrö8en OIFY, OIFX

} Sonderfälle (reChts)

} AusgangsgräOe ARCTA

6.98 Programmablaufplan ARCTA


6.3.2. Richtungswinkel-Berechnung 281

gemäß dem Vorzeichen von DIFY. Ist in diesem Fall DIFY > 0, so behält die Grundkurve ihre
Gültigkeit, d. h. es erfolgt keine Verschiebung (1. Quadrant). Ist anderenfalls DIFY< 0, so muß
die Grundkurve um den Betrag 21T verschoben werden.

Tafel6.99 Unterprogramm ARCTA

FUNCTlON ARCTA (DIFY, DIFX)


C EINGANGSGROESSEN SIND DIE KOO.-DIFFERENZEN
PI =3.14159265
PI2 = PI * 2.
C NORMALFAELLE
C
TR = ATAN (DIFY/DIFX)
C WENN DIFX = 0, RECHNET DIE MASCHINE MIT DIFX = 1
IF (DIFX) 40,6,41
C 2. UND 3. QUADRANT
40 TR =TR + PI
GOT019
41 IF (DIFY) 42, 7, 19
C 4. QUADRANT ODER UNVERAENDERT LASSEN (19)
42 TR = TR + PI2
GOT019
C SONDERFAELLE
C
7 IF (DIFX) 4,18,8
C FAKT IST DER FAKTOR
C MIT DEM P I MULTIPLIZIERT WERDEN MUSS
4 FAKT = 1.
GOTO 16
8 FAKT = O.
GOT016
6 IF (DIFY) 12, 18, 14
12 FAKT = 1.5
GOTO 16
14 FAKT = 0.5
16 TR = FAKT * PI
GOTO 19
18 TR = 999.99999
C DIESER WERT ENTSPRICHT DEM WERT UNENDLICH
19 ARCTA=TR
RETURN
END

Wichtig ist außerdem die Behandlung der Sonderfälle. Nach GI. (6.19) ergeben sich für
DIFX = 0 Unstetigkeitsstellen. Modeme DVA besitzen innerhalb ihres Betriebssystems ein
Programm, das den Divisor (d. h. DIFX) im Falle von 0 auf den Wert 1 setzt, so daß der Quoti-
ent nicht unendlich groß werden kann. Es sind hier also die Ergebnisse unter Umgehung der
Arcustangens-Berechnung vom Programm her festzulegen und zwar je nach Vorzeichen von
DIFY auf (1/2) 1T oder (3/2) 1T. Sollte der Zähler DIFY Null sein, so wird gleichfalls vom Pro-
gramm der feste Zahlenwert (0 oder 1T) gesetzt, ohne daß das Arcustangens-Programm benutzt
wird (keine Rundungsfehler!).
282 6.3. Vermessungswesen

Zum Schluß ist noch der Fall zu behandeln, daß Zähler und Nenner gleichzeitig Null sind. Hier
wird es sich in der Regel um einen groben Fehler handeln. Vom Programm her wird das Ergeb-
nis auf eine sehr große Zahl (t = 999,99 rad) gebracht, um anzuzeigen, daß der entstandene
Zahlenwert nicht verwendungsfähig ist.
Bei dem beschriebenen Programm (Tafel 6.99) handelt es sich um ein FUNCTION-Unter-
programm mit dem Namen ARCTA. Für das Unterprogramm sind zwei Eingangsgrößen
DIFY sowie DIFX erforderlich. Wie bei allen FUNCTION-Unterprogrammen gibt es auch hier
nur eine Ausgangsgröße, nämlich ARCTA.

Tafel 6.100 Hauptprogramm Richtungswinkel

C HAUPTPROGRAMM
REAL NAMEl (3), NAME2 (3)
C NAME IST DIE PUNKTNUMMER (ALPHA·NUMERISCHE ZEICHEN)
NR =0
C NR IST DER ZAEHLER FUER EINZELNE RECHNUNGEN
RHO = 63.661977
C DRUCKEN EINER UEBERSCHRIFT
WRITE (3,101)
101 FORMAT (lHl, 16HVERMVORDRUCK... 8,17X,30HRICHTUNGSWINKEL
UND ENTFERNUNG/1H ,33X, 30 (lH=1I
999 NR = NR + 1
C EINGABE·FELDER
C SP. 8 BIS 19 PUNKTNAME, SP 20 BIS 31 Y, SP 32 BIS 43 X
READ (2, 102) KA, NAME1, Yl, Xl, KA, NAME2, Y2, X2
102 FORMAT (12, 5X, 3A4, 2F12.3/ 12, 5X, 3A4, 2F12.3)
IF (KA - 99) 200,800,800
200 DX = X2-Xl
DY=Y2-Yl
T = ARCTA (DY, DX) * RHO + 0.00005
C DIE ADDITION VON 0.00005 BEWIRKT EIN RUNDEN AUF VOLLE SEKUN
C DEN
SO = DX * * 2 + DY * * 2
S=SORT (SO)
WRITE (3, 103) NAME2, Y2, X2, T, NAME1, Yl, Xl, S, NR, DY, DX
103 FORMAT (lHO, 4X, 3A4, 4X, 2 (F12.3, 4X), 4HT = ,F9.4/1H ,4X, 3A4, 4X,
2 (F12.3, 4X), 4HS = ,F9.3/1H ,10X, 3HNR., 13, 4X, 2 (F12.3 4X))
GO TO 999 '
800 CALL EXIT
END

In Tafel 6.100 ist das zugehörige Hauptprogramm dargestellt, das im wesentlichen die Eingabe
der Koordinaten, die Berechnung der Strecke und des Richtungswinkels und die Ausgabe der
Koordinaten und der gerechneten Größen enthält. Die Koordinaten werden mit einer alpha-
numerischen "Punktnummer" (NAMEI und NAME2) gekennzeichnet. Der Aufruf des Unter-
programms geschieht über die Anweisung T = ARCTA (DY, DX), wobei die Größen DY und
DX den Variablen DIFY bzw. DIFX im Unterprogramm entsprechen. Da die vom Unter-
programm berechnete Ausgangsvariable ARCTA im Bogenmaß entstanden ist, muß sie in die
Einheit gon durch Multiplikation mit p umgeformt werden.
Die Ergebnisliste (Tafel 6.101) zeigt, wie das Programm auf seine Einsatzfähigkeit ausgetestet
wird, indem Richtungswinkel in allen Quadranten und in allen Sonderfällen gerechnet werden.
6.3.3. Vorausberechnung 283

Tafel 6.101 Ergebnisliste

VERMVORDRUCK ... 8 ~J~~l~!:l~~~!~~J.,'=~~!?=~!:lJf=~~~=~~~=


02 2000.000 2000.000 T= 50.0000
01 1000.000 1000.000 s= 1414.213
NA. 1 1000.000 1000.000
04 2000.000 -2000.000 T= 150.0000
03 1000.000 -1000.000 s= 1414.213
NR. 2 1000.000 -1000.000
06 -2000.000 -2000.000 T= 250.0000
05 -1000.000 -1000.000 s= 1414.213
NR. 3 - 1000.000 -1000.000
08 -2000.000 2000.000 T= 350.0000
07 -1000.000 1000.000 s= 1414.213
NR. 4 -1000.000 1000.000
10 2000.000 0.000 T= 100.0000
09 1000.000 0.000 s= 1000.000
NA. 5 1000.000 0.000
12 0.000 - 2000.000 T= 200.0000
11 0.000 -1000.000 s= 1000.000
NR. 6 0.000 -1000.000
14 -2000.000 0.000 T= 300.0000
13 - 1000.000 0.000 s= 1000.000
NR. 7 - 1000.000 0.000
16 0.000 2000.000 T= 0.0000
15 0.000 1000.000 s= 1000.000
NR. 8 0.000 1000.000
17 1000.000 1000.000 T= *********

NR.
17 1000.000 1000.000 s= 0.000
9 0.000 0.000

In der laufenden Nummer (NR) 9 am Schluß der liste wird ein Richtungswinkel zwischen
zwei identischen Punkten bestimmt. Das entstehende Ergebnis zeigt dem Benutzer, daß der
gerechnete Wert nicht verwendet werden kann.

6.3.3. Vorausberechnung. In der Praxis wird der Vermessungsingenieur häufig vor die Aufgabe
gestellt, eine "Vorausberechnung" nach einem Bebauungsplan (Aufteilungsplan) vornehmen
zu müssen. Bei diesem Problem liegt eine graphische Darstellung einer Grundstücksaufteilung
zum Zwecke der späteren Bebauung vor. Auf der GrUndlage von bekannten Vermessungs-
punkten müssen nun ohne eine örtliche Messung berechnet werden:
1. die K 0 0 r d i n a t e n der neuen Grenzpunkte
2. die F 1 ä c h e n der neuen Flurstücke
3. die Ab s t eck eie m e n t e fiir die neuen Grenzen und ggf. fiir die neuen Bauwerke
4. die K 0 n t roll maß e fiir die Absteckelemente
S. Außerdem ist stets eine Z e ich nun g des Planes nach den einschlägigen Kataster-
vorschriften zu erstellen.
284 6.3. Vermessungswesen

Es liegt auf der Hand, daß man die ständig wiederkehrenden Arbeiten einer DVA übertragen
will. Grundvoraussetzung sind hierfiir geeignete Anlagen und Programme. Die DVA muß mit
externen Speichern ausgerüstet sein, die einen möglichst direkten Zugriff gestatten (z. B. Mag-
netplatte). Es fallen nämlich einerseits sehr große Mengen von abzuspeichernden Daten
(Koordinaten der Fest- und Neupunkte) an, und es sind andererseits die Rechen- und sonstigen
Hilfsprogramme so umfangreich, daß sie nicht mehr gemeinsam von dem Kernspeicher auf-
genommen werden können. Außerdem ist es zweckmäßig, wenn über die nötigen automatischen
Kartiergeräte verfügt werden kann, um auch die Zeichenarbeiten maschinell ausführen zu
können.
Was den Einsatz der Programme angeht, so muß (unter Würdigung der Wirtschaftlichkeit)
ein i n t e g r i e r t e s Pro g r a m m s y s t e m vorhanden sein, das sowohl die erforderlichen
einzelnen Rechenprogramme enthält, als auch eine Anzahl von Hilfsprogrammen, die ihrerseits
die Verwaltung der Einzelprogramme und die Kontrolle des Datenflusses übernehmen.
In dem hier zu behandelnden Beispiel ist der Aufteilungsplan eines Bauingenieurs (Bild 6.102)
vorgegeben, der das Flurstück 37/1 aufteilt. Für diesen Plan soll die Vorausberechnung durch-
geführt werden.
Die Vor b e r e i tun g besteht in der Beschaffung der Fes t p unk t k 0 0 r di nat en
(s. Tafel 6.103).
Die Punkte sind im Koordinatenkataster stets eindeutig numeriert. Hierbei bezieht sich die
Numerierung auf einen übergeordneten N u m e r i e run g s b e z i r k (Gemarkung) und in
diesem auf den nächst gelegenen Haupt-Vermessungspunkt (Dreiecks- oder Polygonpunkt), der

Tafel 6.103 Festpunktkoordinaten

Pkt. Nr. y x

380/04 65514,74 31048,43


380/05 65502,02 31060,50
380/06 65472,42 31099,96
380/07 65384,75 3'1014,18
380/08 65441,99 30969,64

6.102 Aufteilungsplan

als Lei t p unk t be~ichnet wird (hier pp 380, s. Bild 6.104). Die benachbarten Grenz-
punkte (F 0 I g e p unk t e) bestehen aus der Nummer des Leitpunktes und einer mehr-
ziffrigen, fortlaufenden Folgenummer (z. B. 380/04). Punkte, die später nicht vermarkt und
deren Koordinaten nicht dauerhaft aufbewahrt werden müssen, werden von den übrigen
Punkten eindeutig unterschieden (Voranstellung eines Buchstabens z. B. LOl). Hat man sich
die Koordinaten der Anschlußpunkte beschafft, sind nach Möglichkeit zuerst die alten
Grenzen durch örtliche Messungen zu überprüfen. In dem Aufteilungsplan sind die neuen
Flurstücke und die neuen Grenzpunkte im Anschluß an die letzte vergebene Nummer sinnvoll
zu numerieren. Es entsteht sodann ein überarbeiteter Aufteilungsplan (s. Bild 6.104), der die
Grundlage fiir die weiteren "Aufbereitungsarbeiten" ist.
6.3.3. Vorausberechnung 285

~W~
~II
__
1i5
Lr)'
<0
------~~--------~~----~~----~~-----.
1i",,'5
I.ö
1i<::,'5
<t-
1i<::,'5
""135
132 133 13*

'iF 25,0 'iF20,0


50 57 52
-1l§}
,\~?~
/
I
I
14-7 I

/52
59
58 57 56

Sl!'6I: 162
~;m;-----~~--_2~5~.a~v~~~m~7
380106 ______~~______Jt~ ______~
380o 380/07 0,00
6.104 Rechenplan Gegebene Punkte.

Im folgenden soll nun der Ablauf der Aufbereitung ftir ein vorhandenes Programmsystem 1) ver-
folgt werden.
Bei Beginn einer völlig neuen Berechnung ist es häufig zweckmäßig, den gesamten Fes t -
P unk t s p e ich e r zu lös c h e n. Hierdurch wird sichergestellt, daß die in den weiteren
Arbeitsschritten abzuspeichernden Punkte nicht bereits (u. U. mit anderen Koordinaten) in
den Koordinatenspeicher übernommen wurden. Das Löschen geschieht hier lediglich mit
einer Steuerkarte: //uXEQuFSLOE (s. Tafel 6.105).
Im nächsten Arbeitsgang werden die benötigten Fes t p unk tein den hierftir vorgesehenen
Bereich ab g es p e ich e r t. Der Aufruf des entsprechenden Programmes lautet:
/ /uXEQuFSPAE. Die Eingabedaten ftir dieses Programm sind folgendermaßen aufgebaut: die
Kartenart (001), die laufende Nummer des Datensatzes, die Punktbezeichnung (alphanumerisch),
sowie der Rechts- und Hochwert der Koordinaten. Die Kartenart 999 dient der Beendigung des
aufgerufenen Programmes (s. Tafel 6.105).2)

Wenn nun auf diese Weise die Koordinaten der Festpunkte abgespeichert sind, kann mit der
Berechnung der Neupunkts-Koordinaten begonnen werden. Hierbei ist zu Beginn der Ansatz
einer (orthogonalen) K lei n pu n k t b e r e c h nun g angebracht, weil hiermit die auf den
Begrenzungslinien liegenden Zwischenpunkte berechnet werden können. Der Aufruf des
Programmes erfolgt über die Steuerkarte //uXEQuKLORT. Die Daten müssen aus den folgenden
Elementen bestehen (s. Tafel 6.106): die Kartenart (hier Oll), die laufende Nummer des Satzes,
die Anfangs- und Endpunktbezeichnung der Messungslinie, das Endmaß, der Kleinpunktnummer,
sowie das Abszissen- und das Ordinatenmaß des Kleinpunktes in dem örtlichen System. Ist mehr

1) Es handelt sich um ein Programmsystem, das flir die DVA IBM 1130 und IBM/360 von der
Herstellerfirma konzipiert wurde.
2) Jeder Zeile des EiIi.gabefeldes entspricht eine Lochkarte.
286 6.3. Vermessungswesen

als ein Kleinpunkt auf der gleichen Unie zu bestimmen, so unterbleibt einfach die Angabe der
gleichbleibenden Elemente (Anfangs- und Endpunktnummer, sowie Endmaß) - vgl. Ifd. Nr.
3-6 in Tafel 6.106.

Tafe16.105 Löschen und Füllen des Festpunktspeichers

11 JOB
// XEa FSLOE
// XEa FSPAE
001 1 380/04 6551474 3104843
001 2 380/05 6550202 3106050
001 3 380/06 6547242 3109996
001 4 380/07 6538475 3101418
001 5 380/08 6544199 3096964
999

Die erste Zeile in dem Datenfeld der Tafel 6.106 ist so zu lesen, daß der Punkt 380/57 mit dem
Abszissenmaß 32,00 m auf der Messungslinie von 380/07 bis 380/08 koordinatenmäßig zu
bestimmen ist (vgl. Bild 6.104). Am Ende der gesamten Kleinpunktberechnung - das Ende ist
auch hier wieder mit der Kartenart 999 gekennzeichnet - sind nun die Punkte 32 bis 35,

Tafe16.106 Eingabedaten zur Kleinpunktberechnung

// XEa KLORT
011 1 380/07 380/08 7251 380/57 3200
011 2 380/05 380/06 4935 380/63 2970
011 3 380/08 380/04 10724 380/35 2000
011 4 380/34 4000
011 5 380/33 6000
011 6 380/32 8500
011 7 380/57 380/63 380/55 2200
011 8 380/54 4400
011 9 380/53 6600
999

53 bis 55, sowie 57 und 63 berechnet und deren Koordinaten in den daflir vorgesehenen
Koordinatenspeicher zur weiteren Verwendung übertragen. Die Tafel 6.107 zeigt das Ergebnis·
Protokoll, das bei einer Vorausberechnung im wesentlichen nur die etwa anfallenden Fehler·
kommentare und den Fortgang der Rechnung aufzunehmen hat (Nebenprotokoll). Die erste
Zeile flir eine Messungslinie besteht aus den Nummern des Anfangs· und Endpunktes, der
gerechneten und der gemessenen Strecke, sowie des vorhandenen und zulässigen Strecken·
fehlers mit der entsprechenden Geländeklasse. Darunter wird lediglich der bereits gerechnete
und abgespeicherte Punkt mit seiner Bezeichnung aufgelistet. Auf die Ausgabe der sonst
üblichen Werte (vgl. Abschn. 6.3.2), wie z. B. der Koordinatenwerte, wird hier zugunsten einer
schnelleren Bearbeitung der Rechnung verzichtet.

Der nächste Teil der Aufbereitung ist eine S c h n i t't pu n k t b e r e c h nun g. Das
Programm wird aufgerufen durch / /LXEQuSCHBE und ermöglicht die Berechnung von
Schnitten zwischen den Elementen: "Gerade-Gerade", "Gerade-Kreis" und "Kreis-Kreis".
6.3.3. Vorausberechnung 287

Tafel 6.107 Ergebnisprotokoll der Kleinpunktberechnung

1/ XEQ KLORT
380/07 380/08 72.53 72.51 0.02 0.14
380/57
380/05 380/06 49.33 49.35 - 0.02 0.12
380/63
380/08 380/04 107.24 107.24 0.00 0.17
380/35
380/34
380/33
380/32
380/57 380/63 116.43
380/55
380/54
380/53

AUSGABE BEENDET

Unter dem Begriff "Gerade" werden verschiedene Möglichkeiten gefaßt (s. Bild 6.108).
Eine Grundgerade (Abkürzung G) kann durch zwei Punkte (Fall a) oder durch einen Punkt
und den Richtungswinkel (Fall b) vorgegeben sein. Als Gerade gilt auch die Parallele
(Abkürzung P) oder das Lot (Abkürzung L) zu einer bekannten Geraden, wobei die Lage
der Parallelen oder des Lotes weiter festgelegt werden muß entweder durch die Angabe eines
Abstandes (Fall c und Fall e) oder eines Punktes (Fall d und Fall O·

~~~
a)
A
c)
~
A e) A
\,.-0 8

~x
I

~ A
6.108 Festlegung einer Geraden b) d) A f)

Als Beispiel soll die Ermittlung des Hilfspunktes 1.04 (Mittelpunkt des Wendekreises - s. Bild
6.104) herangezogen werden. Dieser Punkt liegt auf einer Parallelen (P) zu der Geraden
380/05-380/06 Oinke Begrenzungslinie). Die Parallele hat einen Abstand Oinks von der Gera-
den, also negativ!) von 31,50 m. Ferner liegt der zu bestimmende Punkt 1.04 parallel zur
Geraden 380/57-380/63 im Abstand von + 12,00 m (Radius des Wendekreises). Für die
Eingabe (s. Tafel 6.109) gilt folgende Vorschrift: zuerst die Kartenart (017), dann die laufende
Nummer (sie ist in dem Beispiel jeweils für ein Zeilenpaar gleich), die Bezeichnung des Schnitt-
punktes, die beiden Punktnummern der Bezugsgeraden, die Abkürzung für das betreffende
Schnitt-Element (hier: P), sowie die nähere Lagebeschreibung für dieses Element (hier - 31,50
288 6.3. Vermessungswesen

Tafel 6.109 Eingabedaten zur Berechnung von Geradenschnitten

// XEa SCHBE
017 10 L04 380/05 380/06 P -3150
017 10 L04 380/57 380/63 P 1200
017 11 L09 380/05 380/06 G
017 11 L09 380/05 380/06 L04L
017 12 380/38 380/57 380/63 P 900
017 12 380/38 380/57 380/63 380/35 L

Tafel 6.110 Ergebnisprotokoll der Geradenschnitt-Berechnung

// XEa SCHBE

SCHNITT GERADE - GERADE LNR 10 - 10


1. GERADE PARALLELE IM ABSTAND - 31.50
ANF.PUNKT 380/05
END PUNKT 380/06
2. GERADE PARALLELE IM ABSTAND 12.00
ANF.PUNKT 380/57
END PUNKT 380/63
SCHNITTPUNKT L04

SCHNITT GERADE - GERADE LNR 11 - 11


1. GERADE
ANF.PUNKT 380/05
END PUNKT 380/06
2. GERADE LOT DURCH SEITLICHEN PUNKT L04
ANF.PUNKT 380/05
END PUNKT 380/06
SCHN ITTPUN KT L09

SCHNITT GERADE - GERADE LNR 12 - 12


1. GERADE PARALLELE IM ABSTAND 9.00
ANF.PUNKT 380/57
END PUNKT 380/63
2. GERADE LOT DURCH SEITLICHEN PUNKT 380/35
ANF.PUNKT 380/57
END PUNKT 380/63
SCHNITTPUNKT 380/38

bzw. 12,00). Jede Zeile in dem Eingabefeld legt jeweils ein Schnitt-Element fest; zwei Schnitt-
elemente defmieren einen Schnittpunkt.
Als nächstes soll die Schnittpunktberechnung des Punktes L09 verfolgt werden. Der Schnitt
wird gebildet durch die Gerade (= G) 380/05-380/06 mit dem Lot (= L) auf diese gleiche
Gerade 380/05-380/06, wobei das Lot durch den bereits gerechneten Punkt L04 hindurch
läuft (vgl.lfd. Nr. 11 von Tafel 6.109).
6.3.3. Vorausberechnung 289

Im weiteren Ablauf wird der Schnittpunkt 380/38 (rechts oben an der Straße in Bild 6.1 04)
gebildet aus der Parallelen zur Grundgeraden 380/57-380/63 im Abstand von 9,00 m mit dem
Lot auf die gleiche Gerade 380/57 -380/63 durch den vorher gerechneten Punkt 380/35
(s.lfd. Nr. 12 von Tafel 6.109).
Ein Auszug aus dem Ergebnisprotokoll wird in Tafel 6.110 gezeigt. Es dient wie bei der
Kleinpunktberechnung im wesentlichen nur der Kontrolle im Fortgang der Rechnung.
Wie beim Vorliegen eines Kreises die Aufbereitung des Zahlenmaterials für die Schnittpunkt-
berechnung erfolgt, zeigen folgende Beispiele. Bestimmt werden sollen die beiden Grenz-
punkte 380/49 und 380/44 (links in Bild 6.104). An den Wendekreis mit dem Radius 12,00 m
schließen sich zwei Ausrundungsbögen mit dem Radius 3,00 m an. Bei der Aufbereitung ist
jeweils der Mittelpunkt des Kreises r = 3,00 zuerst zu ermitteln. Zum Beispiel wird der Hilfs-
punkt L08 einerseits durch den Kreis (= K) um den Punkt L04 mit dem Radius von
12,00 + 3,00 = 15,00 gebildet, andererseits liegt der Schnittpunkt L08 parallel zu der Geraden
L09-L04 im Abstand von 3,00 + 3,00 = 6,00.

Tafel 6.111 Eingabe zur Berechnung von Kreis-Geradenschnitten

017 37 L08 L04KMR 1500


017 37 L08 L09 L04 P 600
017 38 L05 L09 L04 P -300
017 38 L05 L04KML 1500
017 39 380/49 L09 L04 P 300
017 39 380/49 L09 L04 L08L
017 40 380/44 L09 L04
017 40 380/44 L09 L04 L05L
// XEQ KLORT
011 41 L05 L04 1500 380/43 300
011 42 L08 L04 1500 380/50 300
999

Die Eingabe (vgl. Tafel 6.111) muß im Falle eines Kreises so aufgebaut sein, daß sämtliche
Möglichkeiten der Kreisfestlegung enthalten sind (s. Bild 6.112). Neben der Kartenart (017),
der laufenden Nummer des Satzes (hier 37) und der Schnittpunktnummer gibt es in dem
Eingabefeld drei Felder fur die eventuell vorhandenen 3 Peripheriepunkte (Fall a und b). Damit
der u. U. vorhandene Mittelpunkt (Fall c und d) nicht noch ein weiteres Feld beansprucht, ist
vorgesehen, daß der Mittelpunkt im Bedarfsfalle in das Feld 3. Bogenpunkt zu setzen ist. Die
Punktbezeichnung wird dann durch Anbringung des Buchstabens M als Mittelpunkt gekenn-
zeichnet. Außerdem ist bei einem Schnitt mit dem Element Kreis eine Aussage darüber er-
forderlich, um welchen von den beiden möglichen Schnittpunkten es sich handelt. Bild 6.113

Gerode
Rechts

UG
Lot \

6.112 Festlegung eines Kreises


6.113 Schnitt Kreis-
Gerade
290 6.3. Vermessungswesen

verdeutlicht die Problemstellung. Die Lösung in dem vorliegenden Programm ist so


erfolgt, daß bei dem Schnitt "Kreis-Gerade" das Lot auf die Gerade durch den Mittelpunkt
die Schnittpunktlage defmiert. Der Schnittpunkt befmdet sich entweder links (= L) oder rechts
(= R) bezogen auf das vom Mittelpunkt weg gerichtete Lot. In dem Datensatz fmdet man
also u. U. 3 Buchstaben: K gibt das Element "Kreis" an; M erklärt den dritten Bogenpunkt
zum Kreismittelpunkt; L oder R legt die Lage des Schnittpunktes fest. Innerhalb des Daten-
satzes muß natürlich auch ein Feld für den eventuell vorhandenen Radius vorgesehen sein.
Dieses befmdet sich jeweils am Schluß.
Nach diesen Erläuterungen sind die Angaben in Tafel 6.111 zu lesen. Zum Beispiel bedeutet die
erste Zeile, daß der Schnittpunkt L08 auf einem Kreis (Buchstabe K) liegt, der wiederum fest-
gelegt wird durch den "dritten Bogenpunkt" L04 und den Radius 15,00. Der dritte Bogenpunkt
wird allerdings erklärt zum Mittelpunkt (Buchstabe M) und von den beiden möglichen Schnitt-
punkten wird der rechts liegende berechnet (Buchstabe R).
Ähnlich wie der Hilfspunkt L08 wird auch der Punkt L05 bestimmt (s. Bild 6.104): als
Schnitt zwischen der Parallelen zu L09-L04 (Kennung P) im Abstand von - 3,00 m (Minus-
zeich, da links von der Geraden) und dem Kreis um L04 mit dem Radius 15,00 m. In dem
entsprechenden Datensatz, der sich auf den Kreis bezieht, fmdet man ein "L", das die Auswahl
aus den beiden Schnittpunktmöglichkeiten trifft.
Der Punkt 380/49 (entsprechend 380/44) kann nun als nächstes ermittelt werden durch das
1. Schnitt-Element: Parallele (= P) zu L09-L04 im Abstand 3,00 m und durch das 2. Schnitt-
Elernent: Lot (= L) auf L09-L04 durch den Punkt L08.
Zum Abschluß dieses Ausschnitts aus der vorliegenden Aufbereitung sei noch die Bestimmung
der Punkte 380/50 und 380/43 vorgeführt. Der Punkt 380/50 muß auf der Verbindungslinie
L08-L04liegen, da er beiden Kreisen (Radius r = 12,00 und Radius r = 3,00) angehört. Also
kann der Punkt über eine Kleinpunktberechnung (Aufruf: lIuXEQuKLORT) ermittelt werden
(s. Tafel 6.111).
Tafel 6.114 zeigt einen Ausschnitt aus dem Nebenprotokoll, in dem die Bestimmung des
Punktes L08 erläutert wird.

Tafe16.114 Ergebnisliste zur Berechnung von Kreis-Geradenschnitten

SCHNITT GERADE - KREIS LNR 37 - 37


GERADE PARALLELE IM ABSTAND 6.00
ANF.PUNKT LOg
END PUNKT L04
KREIS
MITTELPKT L04
RADIUS 15.00
SCHNITTPUNKT L08

Nach Beendigung der Koordinatenrechnung schließt sich die Flächenberechnung an. Sie beginnt
mit dem Programmaufruf //uXEQuFLBER (s. Tafel 6.115). In dem Programm FLBER können
Flächen berechnet werden, die durch geradlinige oder kreisfOrmig verlaufende Kurvenstücke
begrenzt sind. Außerdem gestattet das Programm eine überprüfung der zwischen 2 Eckpunkten
liegenden Strecke (durch Vergleich mit der entsprechenden gemessenen Strecke).
6.3.3. Vorausberechnung 291

Der Datensatz rur die Eingabe (s. Tafel 6.115) enthält: l. die Kartenart (021),2. die laufende
Nummer (z.B. 1), die Kennzeichnung der Fläche, bestehend aus 3. der Blocknummer (37/1),
4. der Blockteilnummer (z. B. 1001) und 5. der Flurstücksnummer (z. B. 59), und außerdem
6. vier weitere Datenfelder, die hauptsächlich die Begrenzungslinie der Fläche näher beschrei-
ben. Die Angaben fur die Bezeichnung der Fläche (Blocknummer usw.) können in zusammen-
gehörigen Folgekarten weggelassen werden. Sie müssen nur jeweils bei einem entsprechenden
Wechsel neu eingetragen werden.

Tafel 6.115 Eingabedaten zur Flächenberechnung

// XEQ FLBER
021 1 37/11001 59 380/06 380/47 3000+ 380/48
021 2 380/49 3000+ 380/50 12000-
021 3 380/51 380/62 380/06
021 4 58 380/51 12000- 380/52 380/53
021 5 380/61 380/62
021 6 57 380/53 220005 380/54 380/60
021 7 380/61 380/53
021 8 56 380/54 380/55 220005 380/59
021 9 380/60 380/54
021 10 55 380/55 380/56 9000+ 380/58
021 11 380/07 380/59
021 12 37/11002 54 380/58 9000- 380/56 380/55
021 13 220005 380/54 220005 380/53
021 14 380/52 12000+ 380/51 12000+
021 15 380/50 3000- 380/49 380/48
021 16 3000- 380/47 380/46 3000-
021 17 380/45 380/44 3000- 380/43
021 18 12000+ 380/42 12000+ 380/4 1
021 19 12000- 380/40 12000- 380/64

Die Datenfelder der Begrenzungslinie tragen im Regelfall die im Uhrzeigersinn aufgeflihrten


Eckpunkte der Fläche. Ist jedoch zwischen zwei Eckpunkten ein Kreis eingeschaltet, so ist
in das Datenfeld zwischen den Eckpunkten der Radius einzutragen, der sich von den üblicher-
weise eingetragenen Eckpunktnummem durch die Anhängung des Zeichens + oder - unter-
scheiden muß. Welches von diesen beiden Zeichen zu verwenden ist, richtet sich danach, ob
das Kreissegment die Fläche vergrößert (+) oder verkleinert (-) (vgl. Tafel 6.115 Flurstück-
nummer 59). Will man eine Strecke zwischen zwei Eckpunkten überprüfen, so ist in das Daten-
feld zwischen diese beiden Eckpunkte die Strecke mit dem Zusatz Seinzutragen (vgl. Tafel
6.115 bei Flurstück 57).

Zum Beispiel wird das Flurstück 59 (in Block 37/1 und BlockteillOOl gelegen) wie folgt
berechnet: Vom Punkt 380/06 verläuft die Linie geradlinig zu Punkt 380/47, gefolgt von einem
Kreisbogen mit Radius 3,000 m, der die Fläche in Bezug auf die geradlinige Verbindung ver-
größert (also Zeichen +) und zum Punkt 380/48 fUhrt. Von dort verläuft die Begrenzung der
Fläche geradlinig zu Punkt 380/49. Zwischen den Punkten 380/49 und 380/50 liegt wiederum
ein Kreisbogen mit dem Radius 3,000+, wobei sich hieran ein Kreisbogen mit der umgekehrten
Krümmung (-) und dem Radius 12,000 anschließt. Die letzten Stücke der Begrenzungslinie
der Fläche sind geradlinig.
292 6.3. Vermessungswesen

Die Ausgabe erfolgt in zwei Teilen. Im Teil 1 erscheint als Nebenprotokoll für jedes Flächen-
stück die Block-, Blockteil- und Flurstücksnummer sowie alle zwischen den Eckpunkten
liegenden Strecken. Entsprechend der Eingabe werden die gemessene Strecke, die Differenz
zur gerechneten Strecke und der Radius außerdem mit ausgedruckt.
Bei dem Wechsel der Blocknummer erfolgt die eigentliche Ausgabe der Ergebnisse: Für jedes
Flurstück die berechnete und die gerundete Fläche und außerdem der Flächeninhalt für jeden
Blockteil, zum Schluß ferner noch die zugehörige Blockfläche. Die Blockteil- und die Block-
fläche werden durch Aufsummieren der Einzelflächen gebildet (s. Tafel 6.116).

Tafel 6.116 Ergebnisliste Flächenberechnung

BLOCK BL.TEIL FLSTNR. BER.FLAECHE GER.FLAECHE

37/1 1001 59 867.4126 867.


37/1 1001 58 600.9448 601.
37/1 1001 57 567.3553 567.
37/1 1001 56 617.9695 618.
37/1 1001 55 720.6996 721.
37/1 1001 3374.3821 3374.

Um eine gewisse Verprobung der Flächenberechnung und auch der gesamten Koordinaten-
berechnung zu erzielen, ist es zweckmäßig, die Fläche der Blockteile und des Blockes
getrennt fUr sich nochmals in Ansatz zu bringen. Diese Flächen müssen dann völlig mit denen
der vorher durch Summation der Einzelflächen berechneten Flächen übereinstimmen
(Abweichungen nur in den cm 2 zulässig!).

04
\ \
Blockte;11000 \
05 \ \
\ \
\ \

B/ocktei/51f

I I I
I \ \
Blockte;1 1001 \
I \ \

06 6.117 Block- und Blockteilbildung

Bei dem vorliegenden Beispiel (s. Bild 6.117) werden sämtliche Blockteile als Einzelflurstücke
1000,54 und 1001 in "Block BLOK", und außerdem in "Block A" das Flurstück 37/1 noch-
mals getrennt von der übrigen Berechnung neu bestimmt (s. Tafel 6.118).
Da man meistens nach einer Vorausberechnung auch die berechneten Punkte in die örtlichkeit
übertragen muß, schließt sich gewöhnlich an die Koordinaten- und Flächenberechnung die
Ermittlung der "Absteckelemente" an. Diese können je nach örtlichen Gegebenheiten in
polarer oder orthogonaler Form verlangt werden. Bild 6.119 beschreibt den Sachverhalt.
Gegeben sind die Koordinaten der Punkte A, E und P. Bezüglich der Linie A-E sind die Koordi-
naten von P zu transformieren. Von dem vorliegenden Programm wird bestimmt der Richtungs-
6.3.3. Vorausberechnung 293

winkel T, die Länge der linie A-E, die orthogonalen Maße U, V, W, wobei U und W die
Abszissen auf der Linie A-E, sowie ßI und SI die polaren Maße bei Punkt A (bzw. ß2 und S2
bei Punkt E) sind.

Tafel 6.118 Ergebnisliste Block-Flächenberechnung

BLOCK BL.TEI L FLSTNR. BER.FLAECHE

BLOK 1000 3283.2320


BLOK 54 1219.0888
BLOK 1001 3374.3830
BLOK 7876.7039 A

6.119 Absteckungselemente
BLOCK BL.TEIL FLSTNR. BER.FLAECHE
A 37/1 7876.7042

Da in der vorliegenden Aufbereitung bereits sämtliche Koordinaten berechnet sind, ist die Auf-
bereitung rur die Transformation denkbar einfach (s. Tafel 6.120).

Tafe16.120 Transformations-Aufbereitung

// XEQ TRAME
013 1 380/57 380/63 380/58 380/56 380/37
013 2 380/55 380/38 380/39
013 3 380/54 380/64 380/40
013 4 380/53 380/41 380/52
013 5 380/51 380/42 380/50
013 6 380/49 380143 380/44
013 7 380/45 380/48 380/47
013 8 380/52 380/46 380/51 380/50 380/49
013 9 380/44 380/48 380/45
013 10 380/07 380/08 380/58 380/57 380/56
013 11 380/37 380/36 380/08
013 12 380/62
013 13 380/05 380/06 380/62 380/06
013 14 380/46 L09 380/45
013 15 380/48 380/47 380/63
013 16 380/06
999

Nach dem Programmaufruf //uXEQuTRAME wird in einem Datensatz angegeben: die Karten-
art (013), die laufende Nummer (z. B. 1), die beiden Punktnummern von A und E (z. B.
380/57 und 380/63) der Messungslinie und danach die eventuell umzuformenden Punkte
(z. B. 380/58). Es erfolgt solange die Transformation auf die angegebene linie bis erneut 2
Punktnummern einer neuen linie erscheinen.
In dem Ergebnis-Protokoll werden die oben beschriebenen Absteck-Elemente ausgewiesen
(Tafel 6.121).
294 6.4. Netzplantechnik

Tafel 6.121 Ergebnisliste Transformation auf Messungslinien

ANF. PUNKT NR END PUNKT NR RIWI. T SBER.


380/57 380/63 43.9868 116.43

PUNKT NR U V W BETA 1 S1 BETA 2 S2


380/57
380/58 -0.26 -8.73 116.69 298.1364 8.74 4.7556 117.01
380/56 8.74 0.00 107.69 399.9890 8.74 400.0000 107.69
380/37 9.54 9.00 106.89 48.1345 13.12 394.6523 107.27
380/55 22.00 0.00 94.43 399.9955 22.00 0.0000 94.43
380/38 21.18 9.00 95.25 25.5802 23.01 394.0028 95.68

Zum Abschluß der hier behandelten Vorausberechnung soll ein Verzeichnis erstellt werden, in
dem alle berechneten oder vor der Rechnung abgespeicherten Koordinaten erscheinen. Diese
Festpunktausgabe soll anband von 2 Protokollarten erläutert werden, wobei der Programm-
aufruf jeweils / /uXEQuFAUSG lautet.
Zuerst sollen die Koordinaten nach der Einspeicherfolge (d. i. in der Reihenfolge, wie sie
gerechnet sind) aufgelistet werden. Bei der Eingabe (s. Tafel 6.122) muß hier nur die Karten-
art 006 angegeben werden, worauf ein Koordinatenverzeichnis nach Art der Tafel 6.123 ge-
druckt wird.
Tafel 6.122 Auflistung der Koordinaten

// XEa FAUSG
006 1
005 2 380/04 380/64 2
005 3 LOl L09 1
999

Tafel 6.123 Koordinatenverzeichnis nach Einspeicherfolge

FEST PUNKT NR RECHTSWERT Y HOCHWERT X

380/04 65514.74 31048.43


380/05 65502.02 31060.50
380/06 65472.42 31099.96
380/07 65384.75 31014.18
380/08 65441.99 30969.64
380/57 65410.01 30994.52
380/63 65484.21 31084.25
380/35 65455.56 30984.33
380/34 65469.12 30999.03
380/33 65482.69 31013.72
380/32 65499.65 31032.09
380/55 65424.03 31011.48
380/54 65438.05 31028.43
380/53 65452.07 31045.39
L04 65470.96 31049.40
L09 65496.16 31068.31
380/38 65430.44 31005.10
6.4.1. Allgemeines 295

Will man ein KoordinatenveIZeichnis erstellen, das nach steigenden Punktnummern sortiert ist
(Regelfall!), so besteht der Eingabesatz aus der Kartenart (005), der laufenden Nummer (z. B.
3), dem Anfangs- und dem Endpunkt der zu sortierenden Punktmenge (z. B. LOt und L09),
sowie einer Zahl (l), die angibt, aufwieviel (rechtsbündige) Stellen der Sortiervorgang sich zu
beziehen hat. Das sich ergebende KoordinatenveIZeichnis ist in Tafel 6.124 dargestellt.
Tafel 6.124 Koordinatenverzeichnis nach steigenden
Punktnummern

FEST PUNKT NR RECHTSWERT Y HOCHWERT X

L01 65429.96 30990.40


L02 65408.64 31006.99
L03 65463.72 31026.52
L04 65470.96 31049.40
L05 65484.52 31055.82
L06 65497.96 31065.91
L07 65490.16 31071.31
L08 65478.36 31062.45
L09 65496.16 31068.31

6.4. Netzplantechnik

6.4.1. Allgemeines. In diesem Abschnitt sollen die Grundgedanken der Netzplantechnik an


einem vereinfachten Beispiel dargestellt und die Möglichkeiten der Lösung dieser Aufgabe mit
Hilfe der Datenverarbeitung aufgezeigt werden.
Für die in Bild 6.125 skizzierte Brücke soll ein vereinfachter Terminplan aufgestellt werden.

6.125 Skizze eines BIÜckenbauwerks

Die in Tafel 6.126 aufgeführten Arbeiten sind hierin aufzunehmen. Hierbei können an drei
Hauptarbeitsstellen (Widerlager links - Widerlager rechts - Brückenplatte) z. T. gleichartige
Arbeiten ausgeführt werden.
Für die Ausfiihrung stehen folgende Kolonnen bzw. Geräte und Hilfsmittel zur Verfügung:
1 Bagger mit Erdkolonne 2 Schalungssätze für die Widerlager
1 Zimmererkolonne (+ Schalarbeiten) 1 Lehrgerüst
1 Betonkolonne (+ Eisenbiegearbeiten) 1 Schalungssatz für die Platte
In jeden Terminplan müssen zumindest die folgenden Bedingungen für die einzelnen Vorgänge
aufgenommen werden:
1. Technologische Abhängigkeit bzw. technisch bedingte Einordnung in das Projekt
2. Organisatorisch bedingte Abhängigkeit bzw. arbeitstechnisch bedingte Einordnung in das
296 6.4. Netzplantechnik

Projekt nach Zahl der zur Verfligung stehenden Kolonnen, Geräte und Hilfseinrichtungen
3. Erforderliche Zeitdauer flir den ordnungsgemäßen Ablauf der einzelnen Vorgänge und
Darstellung der Oberschneidungsmöglichkeiten
Der Einfluß dieser Grundbedingungen auf den Ablauf des Gesamtprojektes muß auch bei
grafischer Darstellung des Terminplans leicht erkennbar sein. Dies ist besonders bei Bauauf-
gaben wichtig, wo durch externe Einflüsse zeitliche Verschiebungen im Ablauf häufig vor-
kommen.

Tafel 6.126 Terminplan einer Brückenbaustelle (AufgabensteIlung)


Widerlager links (WO, Widerlager rechts (Wr), Platte (PL)

Nr. Kennbuchstabe Tätigkeit Dauer direkt Bemerkungen


Tage davor

A Baustelleneinrichtung 20
2 B Bodenaushub Wl 3 A
3 C Bodenaushub Wr 3 B
4 D Schalarbeiten Wl 14 B
5 E Schalarbeiten Wr 14 C,D
6 F Betonarbeiten WI 6 D
7 G Betonarbeiten Wr 6 E,F
8 H Abbindezeit WI 8 F
9 I Abbindezeit Wr 8 G
10 K Abbau der Schalung WI 3 H,M
11 L Abbau der Schalung Wr 3 I, K
12 M Aufbau Lehrgerüst
und Schalung PL 16 E
13 N Bewehrung PL 8 G,M
14 0 Betonarbeiten PL 3 N
15 P Abbindezeit PL 14 0
16 Q Hinterfüllen WI 4 C,K
17 R Hinterfüllen Wr 4 L,Q
18 S Abbau des Lehrgerüstes 8 L,P
19 T Räumen der Baustelle 6 R, S

Oblicherweise wird der zeitliche Ablauf eines Bauprojektes in Form eines Balkendiagramms
dargestellt. (Bild 6.127). Diese Form der Darstellung ist zwar übersichtlich, und die Kontrolle
des Ablaufs durch Eintragung der erreichten IST-Werte kann leicht durchgeflihrt werden. Es
ist jedoch schwer, den Einfluß von zeitlichen Verschiebungen im Ablauf einzelner Vorgänge
auf die Termine späterer Vorgänge zu erkennen.
6.4.2. Voraussetzungen und Verfahren der Netzplantechnik 297

Diese Schwierigkeiten treten bei den 1956/58


entwickelten Verfahren der Netzplantechnik

-
nicht auf. Durch Trennung von Abhängigkei-
ten und Zeitdauer ist der Netzplan in der
Lage, die während des Bauablaufs oft vari-
Bodenaushub
Kanalisation
••

--
ierenden Zeitwerte der einzelnen Vorgänge Fundamente
und ihren Einfluß auf das Gesamtprojekt Mauerwerk
besser zu überwachen und zu koordinieren. Betonboden
Schalung Decke

Bewehrung Decke

6.127 Skizze eines Balkendiagramms


Beton Decke

6.4.2. Voraussetzungen und Verfahren der Netzplantechnik. Zur Aufstellung eines Netzwerks
müssen alle fur die Durchführung des Projekts erforderlichen Teilarbeiten (Tätigkeiten, Vor-
gänge) selbst, ihre Zeitdauer und ihre Vorgänger (Teilarbeiten, die im Projekt direkt davor
liegen) bekannt sein. Sie werden in eine Liste übernommen (Tafel 6.126).
Ein Netz besteht aus Knoten und Kanten (Verbindungslinien zwischen den Knoten). Bei
k a n t e n 0 r i e n t i er t e n Ne tz pi ä n e n (V 0 r g a n g s p fe i In e tz e n)(Bild 6.128)
sind die einzelnen Tätigkeiten als gerichtete Kanten (Pfeile) dargestellt. Die dazwischenliegenden
Knoten bedeuten Zustände (Ereignisse, Situationen), die nach Abschluß der vorherliegenden
Tätigkeiten erreicht werden. Bei k not e n 0 r i e n t i e r t e n N e t z p I ä n e n (V 0 r -
g a n g s k not e n n e t z e) (Bild 6.129) werden die Tätigkeiten als Knoten dargestellt. Die
verbindenden Pfeile zwischen den Knoten symbolisieren die einzelnen Abhängigkeiten.

T 6.129 Vorgangsknotennetz (Ausschnitt)


a)
Kn-Knoten, T- Tätigkeit
Nummer des Knotens IEreignis,Zustand}
C Tätigkeit !Vorgang}
D .J E~
74
b}
früllest mögLZeitpunkt 6.128 Vorgangspfeilnetz (Ausschnitt und Legende)

Beide Verfahren werden in der Praxis verwendet. Das Vorgangsknotennetz (z. B. MPM =
Met r a - Pot e n t i a I - Met h 0 d e) gewinnt im Bauwesen neuerdings mehr Verbreitung
als das Vorgangspfeilnetz (z. B. CPM = C ri t ic al- P a th- M e th 0 d oderPERT =P r 0-
g r a mEv alu a t ion a n d R e v i e w T e c h n i q u e).
Bei komplexen Produktionsabläufen gibt es Teilarbeiten, bei denen die Einhaltung der
geplanten Zeit entscheidend fur die Einhaltung des Projektendtermins ist. Andere Teilarbeiten
298 6.4. Netzplantechnik

haben mehr Zeit im Plan zur Verfiigung, als fiir die eigentliche Ausfiihrung erforderlich ist.
Hier liegen sogenannte Pufferzeiten vor. Der Netzplan gibt an, welche frühesten und spätesten
Termine fiir die einzelnen Vorgänge möglich sind, wenn der Endtermin des Gesamtprojekts
nicht gefahrdet werden soll.
Verwendete Abkürzungen:
FA Frühest möglicher Start eines Vorgangs
SA Spätest erlaubter Start eines Vorgangs
FE Frühest mögliches Ende eines Vorgangs
SE Spätest erlaubtes Ende eines Vorgangs
GP Gesamte Pufferzeit = Zeit, um die ich einen Vorgang verschieben kann, ohne daß der
Endtermin des Gesamtprojektes geflihrdet wird
FP Freie Pufferzeit = Zeit, um die ich einen Vorgang verschieben kann, ohne daß der
frühest mögliche Beginn einer nachfolgenden Tätigkeit gefährdet wird
Es können beliebige Zeiteinheiten (z. B. Stunden, Tage, Wochen) zur Aufstellung des Netzes
gewählt werden. Diese gelten dann für das gesamte Projekt.

6.4.3. Aufstellung und Berechnung von Netzplänen. Für die Aufstellung eines Netzplans wird
folgender Weg empfohlen:
1. Aufstellen einer Tätigkeitsliste (Tafel 6.126). Festlegung der ungefähren Reihenfolge zu
empfehlen, Erläuterung mit Kennbuchstaben oder Kennzahlen, Beschreibung der Tätigkeit
2. Entwurf des Netzplans: Welcher Teilprozeß geht dem betrachteten unmittelbar voraus?
Welche zusätzlichen Voraussetzungen sind für die Durchfiihrung der Teilaufgabe erforderlich?
Welche Tätigkeiten können gleichzeitig mit der betrachteten ablaufen? Welche Vorgänge
liegen unmittelbar hinter der betrachteten Teilaufgabe?
3. Überprüfung von Tätigkeitsliste und Entwurf auf:
Vollständigkeit der Tätigkeitsliste.
Sachliche und funktionelle Zusammenhänge der Tätigkeiten,
Abgrenzung der Verantwortlichkeit einzelner Abteilungen und Festlegung der Nahtstellen,
Festlegung der Tätigkeitsdauer und Überprüfung durch die Sachbearbeiter
4. Abänderung bzw. Ergänzung des Netzplanes nach Abhängigkeiten und Zeitbedarf
5. Durchrechnung des Netzes von Beginn bis Ende und Eintragung der frühest möglichen
Zeiten fiir die einzelnen Vorgänge und bei Erfordernis fiir die dazwischen liegenden Ereignisse

Schalung Bewehrung Be/on Abbindezeit Abbau Schalg. Hin/erfüllen Räumen

Wr

Pi
\
'\
~~
6.130 Lösung im Vorgangspfeilnetz ~
6.4.3. Aufstellung und Berechnung von Netzplanen 299

6. Ermittlung des frühest möglichen Abschlußtermins für das Gesamtprojekt


7. Rückrechnung von Ende bis Beginn und Eintragung der spätest erlaubten Zeiten unter
Berücksichtigung des unter 6 ermittelten Abschlußtermins
8. Ermittlung und Eintragung des kritischen Weges, d. h. des Durchlaufs durch den Netzplan,
für den keinerlei Zeitreserven vorhanden sind. Hierfür wird die gesamte Pufferzeit gleich Null.
9. Berechnung und Eintragung der Pufferzeiten für alle Vorgänge
10. Tabellarische Auswertung durch die Vorgangs- und Terminliste, den Plan zur Termin-
überwachung und die Kalendervergleichsliste.
6.4.3.1. Das Vorgangspfellnetz (CPM). Im Vorgangspfeilnetz ergibt sich die Lösung der Aufgabe
wie in Bild 6.130 dargestellt.
Die für die Knoten geltenden frühesten Termine bestimmen sich aus dem frühest möglichen
Abschluß der spätesten Vorgängertätigkeit, die spätesten Termine aus dem spätest erlaubten
Beginn des frühesten Nachfolgers. Die Form der Knoten kann unterschiedlich gestaltet werden.
Zur Darstellung von Abhängigkeiten, denen kein echter Vorgang zugrundeliegt, müssen ver-
schiedentlich sogenannte Scheintätigkeiten (unterbrochene Tätigkeitspfeile ohne Zeitdauer)
eingefiihrt werden (Bild 6.131). Schleifen im Netz ergeben keine logische Aussage und müssen
bei der Aufstellung vermieden werden (Bild 6.132).

6.131 Darstellung einer


Scheintätigkeit

6.132 Unzulässige
Schleife im
Netz
6.4.3.2. Das Vorgangsknotennetz (MPM). Für ein Vorgangsknotennetz ist die Lösung der
Aufgabe in Bild 6.133 dargestellt.

Einricflfung Aushub Schalung Bewehrung Be/on Abbindezei/ AbbauSchalg. Hin/erfüllen Röumen


1
Nummer Nummer
Gruppe

Tätigkeit J
Frühester Frühestes
W/ Start Ende
Späteste Späteste
Start Ende

Wr

6.134 Einfache Knotendar-


steIlung im Vor-
Pi gangsknotennetz

6.133 Lösung im Vorgangsknotennetz


300 6.4. Netzplantechnik

Ist-Wert
Soll-Wert Masse
I
I wert
I
Stunden-I Erforrf~rI· Kolonne
Arb.-Kniffe Poliere !O.
Start
VorgangA J
Ende Start
VorgangB
Ende

....., Start-Start-Beziehuna
6P

~
Tätigkeit End-Start-
Bau/eil FP Beziehung
0::
Soll-Wert Dauer I FA I FE I SA SE
~
<::>
~ Start -End - Beziehung
Ist-Wert I I I End-End-
Beziehung
6.135 Ausführliche KnotendarsteIlung im
Vorgangsknotennetz 6.136 Möglichkeiten der Abhängigkeit zwischen
AundB
Die Form der Knoten kann unterschiedlich gestaltet werden (Bild 6.134 und 6.135). In das
Netz können wahlweise verschiedene zeitliche Abhängigkeiten zwischen den einzelnen Vor-
gängen eingetragen werden (Bild 6.136).
Beispiel: Vorgang B kann 6 Tage nach dem Start des Vorgangs A beginnen (Start-Start = 6)
oder Vorgang B muß 15 Tage nach dem Start des Vorgangs A abgeschlossen sein (Start-End
= 15).

Tafel 6.137 Vorgangs- und Terminliste einer Brückenbaustelle


Kenn- Tätigkeit Dauer direkt direkt FA FE SA SE max. GP FP Bem.
buchst. Tage davor dahinter Zeit

A Einrichtung BSt. 20 B 0 20 0 20 20 0 0
B Bodenaush. Wl 3 A C,D 20 23 20 23 3 0 0
C Bodenaush. Wr 3 B E 23 26 34 37 14 11 11
D Schalarb. Wl 14 B E,F 23 37 23 37 14 0 0
E Schalarb. Wr 14 C,D G,M 37 51 37 51 14 0 0
F Betonarbeiten Wl 6 D G,H 37 43 55 61 24 18 0
G Betonarbeiten Wr 6 E,F I,N 51 57 61 67 16 10 0
H Abbindezeit Wl 8 F K 43 51 78 86 43 35 16
I Abbindezeit Wr 8 G L 57 65 81 89 32 24 5
K Abbau Schalg. Wl 3 H,M L,Q 67 70 86 89 22 19 0
L Abbau Schalg. Wr 3 I,K R,S 70 73 89 92 22 19 1
M LG + Schalg. PL 16 E K,N 51 67 51 67 16 0 0
N Bewehrung PL 8 G,M 0 67 75 67 75 8 0 0
0 Betonarbeiten PL 3 N P 75 78 75 78 3 0 0
P Abbindezeit PL 14 0 S 78 92 78 92 14 0 0
Q Hinterfüllen Wl 4 C,K R 70 74 92 96 26 22 0
R Hinterfüllen Wr 4 L,Q T 74 78 96100 26 22 22
S Abbau LG 8 L,P T 92100 92100 8 0 0
T Räumen BSt. 6 R,S 100 106 100 106 6 0 0
6.4.4. Analyse und Optimierung des Programms 301

6.4.3.3. Tabellarische Auswertung. Zur übersicht Tafel 6.138 Plan zur Terminüberwachung
über die gesamten in einem Netz erfaßten Vor- einer Brückenbaustelle
gänge dient die in Tafel 6.137 dargestellte
Vor g a n g s - und T e r m i n 1 ist e. Hier- Am Ende FA FE SA SE
d. Tages
aus sind alle frühest möglichen und spätest er-
laubten Zeiten für die einzelnen Vorgänge sowie 0 A
~
die insgesamt zur Verfügung stehende Zeit und
20 !! ~ B A
die vorhandenen Pufferzeiten ersichtlich. Der
23 C,,Q !! D B
Projektleiter muß alle Tätigkeiten mit dem Ge-
samtpuffer gleich Null ständig genau überwachen, 26 C
wenn er den Endtermin des Projektes nicht ge- 34 C
fahrden will. In zweiter Linie sind dann die Vor- 37 ~,F ,Q E C,D
gänge mit dem Freien Puffer gleich Null zu kon- 43 H F
trollieren, während für Tätigkeiten mit hohen 51 G,M, M E
~,H
Freien Pufferzeiten eine weniger intensive
55 F
Terminkontrolle ausreicht.
57 G
Der Plan zur Terminüberwa-
61 G F
eh u n g (Tafel 6.138) ordnet die Angaben über
frühest mögliche und spätest erlaubte Zeitpunkte 65
nach fortschreitenden Arbeitstagen bzw. Kalen- 67 K,t:! M N G,M
dertagen. Hierdurch wird die überwachung für 70 Q,L K
den Projektleiter erheblich vereinfacht. 73 L
Eine Kalendervergleichsliste 74 R Q
(Tafel 6.139) fügt die Arbeitstage in den Kalender 75 Q t:! 0 N
des jeweiligen Jahres mit seinen Sonn- und Feier- 78 Q,R H,P 0
f
tagen sowie den evtl. arbeitsfreien Samstagen
81
ein, so daß für jedes Projekt der kalendermäßige
86 K H
Ablauf kontrolliert werden kann.
89 L I,K
92 §. f Q,S L,P
6.4.3.4. Darstellung als Balkendiagramm. Zum
besseren Verständnis durch das Baustellenperso- 96 R Q
nal wird das Ergebnis des Netzplans vielfach als 100 I §. T R,S
Balkendiagramm dargestellt, aus dem auch die 106 I T
Pufferzeiten zu ersehen sind (Bild 6.140). Soweit
sinnvoll können hierbei auch einzelne Abteilun-
gen bzw. Arbeitsgruppen jeweils in einer Zeile angeordnet werden, damit ihre Auslastung
durch das Projekt besser erkennbar wird.

6.4.4. Analyse und Optimierung des Programms. Die technologischen Abhängigkeiten eines
Programms sind in den meisten Fällen nicht zu verändern. Beeinflußbar sind dagegen die
arbeitstechnischen und organisatorischen Bedingungen, z. B. durch gleichzeitigen Einsatz
mehrerer Arbeitsgruppen und/oder Geräte, wenn gleiche Arbeiten an verschiedenen Orten
des Bauwerks anfallen. Wenn eine Arbeitsgruppe mit Arbeiten, die auf dem kritischen Weg
liegen, voll ausgelastet ist, wird der Einsatz einer zweiten Gruppe sicherlich zeitliche Ein-
sparungen bringen. Falls hierdurch zusätzliche Kosten entstehen (Auslösung, Mietgerät usw.),
muß die zeitliche Einsparung der Kostenerhöhung gegenübergestellt werden (Vertragsstrafe -
302 6.4. Netzplantechnik

Tafel 6.139 Kalendervergleichsliste

DT = Datum KT = Kalendertag AT = Arbeitstag

So Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa

März DT 5 678 9 10 11 12 13 14 15 16 17 18
KT / 2 3 4 567 8 9 10 11 12 13
AT / 2 3 4 5 / / 6 7 8 9 10
DT 19 20 21 22 23 24 25 26 27 28 29 30 31
KT 14 15 16 17 18 19 20 21 22 23 24 25 26 27
AT / 11 12 13 14 15 / / 16 17 18 19 F /
April DT 2 345 6 789 10 11 12 13 14 15
KT 28 29 30 31 32 33 34 35 36 37 38 39 40 41
AT / F 20 21 22 23 / / 24 25 26 27 28 /
DT 16 17 18 19 20 21 22 23 24 25 26 27 28 29
KT 42 43 44 45 46 47 48 49 50 51 52 53 54 55
AT / 29 30 31 32 33 / / 34 35 36 37 38 /
DT 30 2 3 4 5 6 7 8 9 10 11 12 13
KT 56 57 58 59 60 61 62 63 64 65 66 67 68 69
AT / F 39 40 41 42 / / 43 44 45 F 46 /
Mai DT 14 15 16 17 18 19 20 21 22 23 24 25 26 27
KT 70 71 72 73 74 75 76 77 78 79 80 81 82 83
AT / 47 48 49 50 51 / / F 52 53 54 55 /
DT 28 29 30 31 1 2 3 4 5 6 7 8 9 10
KT 84 85 86 87 88 89 90 91 92 93 94 95 96 97
AT / 56 57 58 F 59 / / 60 61 62 63 64 /
Juni DT 11 12 13 14 15 16 17 18 19 20 21 22 23 24
KT 98 99 100 101 102 103 104 105 106 107 108 109 110 111
AT / 65 66 67 68 69 / / 70 71 72 73 74 /
DT 25 26 27 28 29 30 2 3 4 5 6 7 8
KT 112 113 114 115 116 117 118 119 120 121 122 123 124 125
AT / 75 76 77 78 79 / / 80 81 82 83 84 /
Juli DT 9 10 11 12 13 14 15 16 17 18 19 20 21 22
KT 126 127 128 129 130 131 132 133 134 135 136 137 138 139
AT / 85 86 87 88 89 / / 90 91 92 93 94 /
DT 23 24 25 26 27 28 29 30 31 1 2 3 4 5
KT 140 141 142 143 144 145 146 147 148 149 150 151 152 153
AT / 95 96 97 98 99 / / 100 101 102 103 104 /
August DT 6 7 8 9 10 11 12 13 14 15 16 17 18 19
KT 154 155 156 157 158 159 160 161 162 163 164 165 166 167
AT / 105 106
6.4.4. Analyse und Optimierung des Programms 303

~
Tätigkeit
~
~
70 20 JO 40 50 60 70 80 90 Tage 70D 11o

A Einrichtung 8St. 20
0 Aushub WI 3 lIip-----,
L _____

C Aushub Wr 3
0 Schalung WI 74 %«9
E Schalung Wr 74 I••••• i
F Beton WI 6
~~~~~~
G Oeton Wr 6
p-----, L ____

H Abbindezeit WI 8
E_~~~-=--=-~-=~-=-_
~-=-~-=-===-
I Abbindezeit Wr 0
L ________
~-----,
K Abbau Schalg. WI 3

L Abbau Schalg. Wr 3
p-------l
L _______

f1 L6+Schalg. PL 76 ••iI••iI.1
N Bewehrung PL B ~
0 8eton PL 3
~
P Abbindeleit PL 74 ••••• '1
L _________
a Hinterfüllen W/ 4 ~ -,

~-=--=--=--=-=~
R Hinterfüllen Wr 4
5 Abbau LG PL 8
=iIi
T lIäumen 8St. 6 ~
EZZn frijhest mog/icher Termin _ spätest erlaubter Termin ["-=-_-_-~ gesamte lur Verfügung stehende Zeit
6.140 Balkendiagramm
Prämie). Wenn bei einzelnen Arbeiten große Freie Puffer auftreten, so kann ggf. durch Ver-
minderung der eingesetzten Kapazität eine bessere Einpassung in den Gesamtplan erreicht
werden.
Hierdurch ist es in einigen Fällen möglich, eine größere Zahl der Verbindungen als kritische
Wege auszubilden (überspanntes Netzwerk) und damit ein theoretisches Kostenoptimum anzu-
streben.
Im Baubetrieb muß vor solchen überspannten Netzwerken gewarnt werden, da bei den oft
auftretenden unvorhergesehenen Einflüssen (Wetter, Ueferschwierigkeiten o. ä.) der Projekt-
leiter mit einer solchen Aufgabe in den meisten Fällen überfordert ist. Es sollten bei größeren
Bauobjekten im allgemeinen nicht mehr als 15-25% der Arbeiten auf dem kritischen Weg
eingeplant werden.
Beim Einsatz der Arbeitsgruppen ist darauf zu achten, daß die teuersten Kolonnen möglichst
voll ausgelastet sind und mit ihren Arbeiten auf dem kritischen Wege liegen.
Eine weitere Optimierung des Programms ist nach Gesichtspunkten des Finanzbedarfs möglich.
Die infolge des Arbeitsfortschrittes notwendigen Lohnzahlungen sowie Ausgaben für Bau-
304 6.4. Netzplantechnik

Tafel 6.141 Vorgangs- und Terminliste

NETZWERK NR. 51 HERSTELLEN EINES BRUECKENBAUWERKS VOM 06 MAR 72 BIS 08 AUG 72

START START ENOE ENO


TÄTIGKEIT BESCHREIBUNG OAUER FROHEST SPÄTEST PUFFER FROHEST SPÄTEST PUFFER

1 BEGINN OES PROJEKTS 0.0 51 6MAR72 6MAR72 0.0 6MAR72 6MAR72 0.0
2 BAUSTELLENEINRICHTUNG 20.0 51 6MAR72 6MAR72 0.0 4APR72 4APR72 0.0
12 BOOENAUSHUB WIDERLAGER LINKS 3.0 51 5APR72 5APR72 0.0 7APR72 7APR72 0.0
13 SCHALUNG WIDERLAGER LINKS 14.0 51 10APR72 10APR72 0.0 27APR72 27APR72 0.0
22 BODENAUSHUB WIDERLAGER RECHTS 3.0 51 10APR72 25APR72 11.0 12APR72 27APR72 11.0
23 SCHALUNG WIDERLAGER RECHTS 14.0 51 2BAPR72 28APR72 0.0 19MAI72 19MAI72 00
33 LEHRGERUST UND SCHALUNG PLATTE 16.0 51 23MAI72 23MAI72 0.0 14JUN72 14JUN72 0.0
15 BETONARBEITEN WIDERLAGER LINKS 6.0 51 2BAPR72 29MAI72 lB.O BMAI72 6JUN72 lao
25 BETONARBEITEN WIDERLAGER RECHTS 6.0 51 23MAI72 7JUN72 10.0 30MAI72 14JUN72 10.0
34 BEWEHRUNG PLATTE 8.0 51 15JUN72 15JUN72 0.0 26JUN72 26JUN72 0.0
35 BETONARBEITEN PLATTE 3.0 51 27JUN72 27JUN72 0.0 29JUN72 29JUN72 0.0
16 ABBINDEZEIT WIDERLAGER LINKS 8.0 51 9MAI72 3OJUN72 35.0 19MAI72 l1JUL72 35.0
36 ABBINDEZEIT PLATTE 14.0 51 3OJUN72 3OJUN72 0.0 19JUL72 19JUL72 0.0
26 ABBINDEZEIT WIDERLAGER RECHTS 8.0 51 31MAI72 5JUL72 24.0 12JUN72 14JUL72 24.0
17 ABBAU SCHALUNG WIDERL. LINKS 3.0 51 15JUN72 12JUL72 19.0 19JUN72 14JUL72 19.0
27 ABBAU SCHALUNG WIDERL. RECHTS 3.0 51 2OJUN72 17JUL72 19.0 22JUN72 19JUL72 19.0
lB HINTERFUELLUNGWIDERL. LINKS 4.0 51 2OJUN72 2OJUL72 22.0 23JUN72 25JUL72 22.0
37 ABBAU SCHALUNG U. LEHRGERUST PLATTE 8.0 51 2OJUL72 2OJUL72 0.0 31JUL72 31JUL72 0.0
28 HINTERFUELLUNG WIDERL. RECHTS 4.0 51 26JUN72 26JUL72 22.0 29JUN72 31JUL72 22.0
49 RAEUMUNG DER BAUSTELLE 6.0 51 lAUG72 1AUG72 0.0 8AUG72 BAUG72 0.0

stoffe und sonstige Forderungen müssen mit den Zahlungseingängen abgestimmt werden, da-
mit die Liquidität der Firma erhalten bleibt. Dies ist vor allem über eine Ausnutzung der
Freien Pufferzeiten möglich.
6.4.5. Auswertung über Datenverarbeitungsanlagen
6.4.5.1. Allgemeines. Der Einsatz einer DVA für die Darstellung von Netzplanergebnissen ist
immer dann zweckmäßig, wenn viele Vorgänge mit zahlreichen Verknüpfungen dargestellt
und nach verschiedenen Gesichtspunkten ausgewertet werden sollen. Je nach Verknüpfungs-

Tafe16.142 Balkendiagramm
HERSTELLEN EINES BRUECKENBAUWERKS

• DAUER, X KRITISCHE DAUER, - PUFFER

MDMDFSS MDMDFSS MDUDFSS MDMDFSS


BESCHREIBUNG DER TATIGKEIT TÄTIGKEIT MDMDFSS MDMDFSS MDMDFSS MDMDFSS MDMDFSS
06MAR72 2OMAR72 Q3APR72 llAPR72 01MAI72

, ,
,.
BEGINN DES PROJEKTS

,,, ,, ,,xxxxx ,,xxxxx ,


BAUSTELLENEINRICHTUNG XXXXX XXXXX XX

,. ,,,
BODENAUSHUB WIDERLAGER LINKS 12 XXX

,, ,,, ,,
SCHALUNG WIDERLAGER LINKS xxxxx xxxxx XXXX

I.
BODENAUSHUB WIDERLAGER RECHTS 22

,,, , ,
BETONARBEITEN WIDERLAGER LINKS

,,, ,
SCHALUNG WIDERLAGER RECHTS 23 XXXXX
ABBINDEZEIT WIDERLAGER LINKS
BETONARBEITEN WIDERLAGER RECHTS ,. ,,
LEHRGERUST UND SCHALUNG PLATTE
ABBINOEZEIT WIDERLAGER RECHTS
33
26
, ,,
,. ,,, ,,
A8BAUSCHALUNG WIDERLAGER LINKS 17
BEWEHRUNG PLATTE 34
HINTERFUELLUNGWIDERLAGER LINKS
ABBAU SCHALUNG WIDERLAGER RECHTS
,.
27
,, ,,
HINTERFUELLUNG WIDERLAGER RECHTS

,, ,
.
BETONARBEITEN PLATTE 35
ABBINDEZEIT PLATTE 36
ABBAU SCHALUNG UND LEHRGERUST PLATTE .7
RAEUMUNG DER BAUSTELLE
6.4.5. Auswertung über Datenverarbeitungsanlagen 305

grad und Auswertungsgesichtspunkten ist der Einsatz von DVA etwa ab 100 Vorgängen zu
empfehlen.
Für diese Auswertung gibt es unterschiedliche Programme der verschiedenen Herstellerfirmen.
Die nachfolgenden Darstellungen basieren auf dem "Project Control System" der Firma IBM.
Der Durchlauf erfolgte auf einer IBM 1130.
Für die Bearbeitung unseres Beispiels, das die Nummer 51 erhält, werden folgende Listen
eingegeben:
A Ablaufkontrollkarte G Karten der einzelnen Vorgänge
B Netzplan-Titelkarte H Karten der jeweiligen Vorläufer
C Kalenderkarte I Plankarte
D Einsatzmittel-Beschreibungskarte J Fortschrittsmeldekarte
E Einsatzmittel-Gruppierungskarte K Einsatzmittelkarte
F Ausgabe-Anforderungskarte L Meilensteinkarte
Die Form und Ausfiillung der Eingabekarten kann der IBM-Schrift ,,1130 Project Control
System, Program Number I 130-CP-05X" entnommen werden. Aus der Fülle der möglichen
Ausgabelisten (s. IBM-Schrift) sollen nachfolgend dargestellt werden:

6.4.5.2. Vorgangs- und Tenninliste (Tafel 6.141). Hier sind die terminlichen Zusammenhänge
fiir jeden einzelnen Vorgang dargestellt. Die Liste dient als Grundlage fiir die Steuerung des
jeweiligen Projekts.
6.4.5.3. Balkendiagramm (Tafel 6.142). In dieser Darstellung ist die Dauer der einzelnen Vor-
gänge mit einem X angegeben, sofern es sich um kritische Vorgänge handelt. Die Länge der
Balken entspricht der Dauer des jeweiligen Vorgangs, wobei jedes Zeichen einem Tag ent-
spricht. Sind die Vorgänge nicht kritisch, d. h. treten Pufferzeiten auf, so erscheint als Zeichen
fiir die früheste Ausfiihrungsmöglichkeit ein *, während die vorhandenen Pufferzeiten durch
ein - ausgedrückt werden.
In der Datumszeile werden die mit ihren Anfangsbuchstaben abgekürzten Wochentage fort-
laufend angegeben, wobei der Montag jeder zweiten Woche als Datum ausgedruckt ist.

VOM 06 MAR 72 81S 08 AUG 72

.. DAUER, )( KRITISCHE DAUER, - PUFFER

MDMDFSS MDMDFSS MDMDFSS MDMDFSS MDMDFSS MDMOFSS MDMDFSS


MDMDFSS MDMDFSS MDMDfSS MDMDFSS MDMOFSS MDMDFSS MDMDFSS
15MAI72 29MAI72 12JUN72 28JUN72 1OJUL72 24JUL72 07AUG12

xxxxx XXXXX
I." ••
I ••••
IXXXX XXXXX XXXXX XXX
I I
I ••
I XX XXXXX
I ). ... .
I 1....-
I
I lXXX I I I
I I X xxxxx XXXXX XXX
I I I I I XX XXXXX
I I I I I I IXXXX xx
306 6.4. Netzplantechnik

Tafel 6.143 Kalendervergleichsliste

HERSTELLEN EINES BRUECKENBAUWERKS (51)

SONNTAG MONTAG DIENSTAG MITTWOCH DONNERSTAG FREITAG SAMSTAG

o 1 234 5 6
5MAR72 6MAR72 7MAR72 8MAR72 9MAR72 10MAR72 lIMAR72
7 8 9 10 11 12 13
12MAR72 13MAR72 14MAR72 15MAR72 16MAR72 17MAR72 18MAR72
14 15 16 17 18 19 20
19MAR72 2OMAR72 21MAR72 22MAR72 23MAR72 24MAR72 25MAR72
21 22 23 24 25 F 26 27
26MAR72 27MAR72 28MAR72 29MAR72 3OMAR72 31MAR72 lAPR72
28 29 30 31 32 33 34
2APR72 3APR72 4APR72 5APR72 6APR72 7APR72 8APR72
35 36 37 38 39 40 41
9APR72 10APR72 l1APR72 12APR72 13APR72 14APR72 15APR72
~ U M ~ ~ 47 48
16APR72 17APR72 18APR72 19APR72 20APR72 21APR72 22APR72
~ 00 ~ ~ ~ 54 55
23APR72 24APR72 25APR72 26APR72 27APR72 28APR72 29APR72
56 F 57 58 59 60 61 62
30APR72 lMAI72 2MAI72 3MAI72 4MAI72 5MAI72 6MAI72
63 64 65 66 F 67 68 69
7MAI72 8MAI72 9MAI72 10MAI72 lIMAI72 12MAI72 13MAI72
70 71 72 73 74 75 76
14MAI72 15MAI72 16MAI72 17MAI72 18MAI72 19MAI72 20MAI72
77 F 78 79 80 81 82 83
21MAI72 22MAI72 23MAI72 24MAI72 25MAI72 26MAI72 27MAI72
84 85 86 87 F 88 89 90
28MAI72 29MAI72 30MAI72 31MAI72 lJUN72 2JUN72 3JUN72
91 92 93 94 95 96 97
4JUN72 5JUN72 6JUN72 7JUN72 SJUN72 9JUN72 10JUN72
98 99 100 101 102 103 F 104
lIJUN72 12JUN72 13JUN72 14JUN72 15JUN72 16JUN72 17JUN72
105 106 107 108 109 110 111
18JUN72 19JUN72 20JUN72 21JUN72 22JUN72 23JUN72 24JUN72
112 113 114 115 116 117 118
25JUN72 26JUN72 27JUN72 28JUN72 29JUN72 3OJUN72 lJUL72
119 120 121 122 123 124 125
2JUL72 3JUL72 4JUL72 5JUL72 6JUL72 7JUL72 8JUL72
126 127 128 129 130 131 132
9JUL72 10JUL72 lIJUL72 12JUL72 13JUL72 14JUL72 15JUL72
133 134 135 136 137 138 139
16JUL72 17JUL72 18JUL72 19JUL72 20JUL72 21JUL72 22JUL72
1~ 1~ 1~ lU 1M 145 1~
23JUL72 24JUL72 25JUL72 26JUL72 27JUL72 28JUL72 29JUL72
147 148 149 150 151 152 153
30JUL72 31JUL72 lAUG72 2AUG72 3AUG72 4AUG72 5AUG72
164 1~ 1~ 1~ 1~ 159 160
6AUG72 7AUG72 8AUG72 9AUG72 10AUG72 lIAUG72 12AUG72
6.4.6. Zusammenfassung 307

6.4.5.4. KaIendervergleichsliste (Tafel 6.143). Hier werden die flir das Gesamtprojekt erforder·
lichen KaIendertage mit ihrem jeweiligen Datum ausgedruckt. In unserem Beispiel sind das 156
Kalendertage, die sich aus der Summe von 106 Arbeitstagen, 22 Samstagen, 22 Sonntagen und
6 Feiertagen, die nicht auf einen Samstag oder Sonntag fallen, ergeben.
6.4.5.5. Weitere Angaben. Von den sonstigen listen sind die Meilensteinberichte interessant,
die in Ergänzung der Vorgangs- und Terminlisten eine bessere Kontrolle des Ablaufs ermöglichen,
sowie die Einsatzmittelpläne, in denen die einzusetzende Kapazität an Arbeitskräften und
Betriebsmitteln erscheint. Weiterhin wichtig sind die Kostenberichte, die es erlauben, die
tatsächlich angefallenen Kosten den vorgeschätzten Kosten gegenüberzustellen und flir Ab-
schlagsrechnungen auszuwerten. Diese Auswertung kann monatlich oder auch in Zusammen-
fassung bis zu einem vorgegebenen Berichtstermin ausgedruckt werden.
6.4.6. Zusammenfassung. Die Netzplantechnik bietet eine gute Möglichkeit, auch komplizierte
Projekte bis ins Detail zu planen und ihre Ausflihrung zu überwachen. Detailprobleme können
hierbei in Teilnetzen gelöst und später zu einem Gesamtnetz zusammengefligt werden.
Je mehr Verknüpfungen in einem Netz vorhanden sind und je mehr Auswertungslisten gefordert
werden, um so eher ist der Einsatz von DV A zu empfehlen und auch von der Kostenseite her
zu vertreten.
Besonders bei großen Bauprojekten kann durch schnelle Berücksichtigung der Auswirkung von
evtl. eintretenden Zeitverschiebungen und vor allem durch beschleunigte Abrechnung insgesamt
ein besserer Ablauf ermöglicht werden, bei dem viele organisatorische Reibungen durch den
Einsatz von DVA vorab zu entschärfen sind.
Weiterführendes Schrifttum

Grundzüge der Datenverarbeitung


[1] Bau er, F. L.; He i n hol d, J.; Sam eIs 0 n, K.; Sau er, R.: Moderne Rechen-
anlagen: Stuttgart 1965
[2] Bau er, F. L.; Go 0 s, S.: Informatik I, 11. Eine einführende Übersicht. Berlin-
Heidelberg-New York 1971
[3] D 0 t z aue r, E.: Einführung in die Grundlagen der Datenverarbeitung. Bd. I. Informa-
tionsträger, Strukturen, Algorithmen und methodische Mittel. Bd. 11. Informations-
darstellung, maschinengebundene Abläufe, Formate und peripherer Datenverkehr.
München 1968/71
[ 4] D w 0 rat s ehe k, S.: Einführung in die Datenverarbeitung. 4. Auf}. Berlin 1971
[5] K lau s, G.: Wörterbuch der Kybernetik 1,2. Frankfurt 1969
[6] L ö bel, G.; Müll er, P.; Sc h mi d, H.: EDV-Taschenlexikon. 2. Aufl.
München 1970
[7] He n z e, E.; Ho mut h, H. H.: Einführung in die Informationstheorie. 3. Aufl.
Braunschweig 1970
[8] Ra i s b eck, G.: Informationstheorie. München 1970
[9] S t ein b u eh, K.: Taschenbuch der Nachrichtenverarbeitung. 2. Aufl. Berlin-Heidel-
berg-New York 1967

Rechnerautbau
[10] Be r n h a r d, J.-H.: Klein-Computer. I. Grundlagen. Würzburg 1972
[11] Dos se, J.: Der Transistor. 4. Aufl. München 1962
[12] D w 0 rat sc h e k, S.: Schaltalgebra und digitale Grundschaltungen. Berlin 1970
[13] F ö 11 i n ger, 0.; Web er, W.: Methoden der Schaltalgebra. 4. Aufl. München 1967
[14] F ri c k e, H.; La m b er t s, K.; Sc h u c hard t, W.: Elektrische Nachrichten-
technik. Bd. 1: 2. Aufl. 1971. Bd. 2: 1967. Stuttgart
[15] Glaser, W.; Kohl, G.:Mikroelektronik.WÜfZburgI970
[16] I se r n hag e n, R.: Logischer Entwurf von Digitalschaltungen. Hamburg 1968
[17] Ku n sem ü 11 er, H.: Digitale Rechenanlagen. Eine Einführung in Struktur, Aufbau
und Arbeitsweise. Stuttgart 1971
[18] M ars a 1, D.: Kleincomputer. München 1972
[19] Lu n der s t ä d t, R.: Technik und Anwendung von Datensichtgeräten, Automatik
(10, 11) 1969
[20] M ö 11 er, F.; Fr i c k e, H.: Grundlagen der Elektrotechnik. 14. Aufl. Stuttgart 1971
[21] M ö sI, G.: Elektronische Tischrechenautomaten. Berlin 1970
[22] Neu man n, H.: Steuerungslehre. Eine programmierte Unterweisung. Bd. 1 Schalt-
algebra. Boolesche Systeme. Bd. 2 Speicher. Optimierung. Bd. 3 Code und Baustein-
gruppen. Stuttgart 1970
[23] Pr e s s man n, A. 1.: Digitale Schaltungen mit Transistoren. Stuttgart 1964
[24] Rau sc h, F.: Magnetomotorische Speicher. In: Taschenbuch der Nachrichten-
verarbeitung, S. 573
WeiterfUhrendes Schrifttum 309

[25] Re c h e nb erg, P.: Grundziige digitaler Rechenautomaten. 2. Aufl. München 1968


[26] Sc h mit t, E.: Elektronische Schalter und Kippstufen. München 1967
[27] S p eis er, A. P.: Digitale Rechenanlagen. 2. Aufl. Berlin-Heidelberg-New York 1967
[28] W e y h, U.: Elemente der Schaltalgebra. 4. Aufl. München 1966
(29] W e y h, U.: Aufgaben zur Schaltalgebra. München 1970
[30] Wh i t e si t t, J. E.: Boolesche Algebra und ihre Anwendungen. Braunschweig 1965

Ma1hematische Methoden
[31] A b r a m 0 w i t z, M.; S t e gun, I. A.: Handbook of Mathematical Funktions. New
York 1965
[32] Fad d ej e w, D. K.; Fad d ej e w a, W. N.: Numerische Methoden der linearen
Algebra. 2. Aufl. München-Wien 1970
[33] Fad d e eva, V. N.: Computational Methods of Linear Algebra. New York 1959
[34] Ra Ist 0 n, A.; W i I f , H.: Mathematische Methoden für Digitalrechner 1,11.
München 1968/72
[35] Sau er, R.; S z abo, 1.: Mathematische Hilfsmittel des Ingenieurs, Bd. 3. Berlin-
Heidelberg-New York 1968
[36] S t i e fe I, E.: Einführung in die numerische Mathematik. 4. Aufl. Stuttgart 1970
[37] S tu m m el, F.; Hai n er, K.: Praktische Mathematik. Stuttgart 1971
[38] Wer n er, H.: Praktische Mathematik I. Berlin-Heidelberg-New York 1970
[39] W i I kin s 0 n, J. H.: Rundungsfehler. Berlin-Heidelberg-New York 1969
[40] W il kin so n, J. H.; Re ins eh, G.: Handbook for Automatie Computation
Vol. 11. Berlin-Heidelberg-New York 1971
[41) Zur m ü h I, R.: Praktische Mathematik für Ingenieure und Physiker. 5. Aufl. Berlin-
Heidelberg-New York 1965

Programmieren
[42] Bates, F.; Douglas, M.L.; Gritseh, P.: PL/I. 3. Aufl.München 1971
[43J Bau man n, F.: ALGOL-Manual der ALCOR-Gruppe. München 1965
[44] Ba y er, G.: Einflihrung in das Programmieren. I. Programmieren in ALGOL.
11. Programmieren in einer Assemblersprache. Berlin 1969/70
[45] Ba y er, G.: ProgrammiefÜbungen in ALGOL 60. Berlin 1970
[46] C h 0 r a f a s, D. N.: Programmiersysteme für Elektronisches Rechenanlagen. München
1967
[47] Ger mai n, C. G.: Das Programmierbuch der IBM/360. München 1969
[48] G roß e, D. W.: Programmieren mit ALGOL. Weinheim 1971
[49] He in r ich, W.; S tue k y, W.: Programmierung in ALGOL 60. Stuttgart 1971
[50] Her s ehe I, R.: Anleitung zum praktischen Gebrauch von ALGOL 60. 5. Aufl.
München 1971
[51] Her s ehe I, R.: ALGO L-tibungen. München 1968
[52] PROSA 300 für Prozeßautomatisierung.
I. H Ö p pi, H.: Einflihrung.
11. 0 t t 0, J. Ch.; 0 t t 0, V.; Hof f art, E.: Einfache Anwendungen.
III.Ernst, M.; Hensel, H.; Hoffart, E.; Otto, V.; Otto, J.Ch.;
Wie z 0 r k e, M.: Programmierung magnetischer Extemspeicher.
Betriebs- und Programmiersysteme.
Berlin-München 1969/71
[53] IBM-System/360 OS PL/I-Handbuch 1,11. IBM 1970
310 Anhang

[54] IBM-System/360 DOS/TOS PL/I Subset Reference Manual. 2. Auf!. IBM 1969
[55] K ern er, 1.0.; Z i e I k e, G.: Einführung in die algorithmische Sprache ALGOL.
4. Aufl. München-Berlin 1970
[56] Kom a r n i c k i, 0.: Programmiermethodik. Berlin-Heidelberg-New York 1971
[57] Kr eis, P.: COBOL-Praxis. München 1968
[58] Ku s si, V.: Datenverarbeitung mit PL/1. Düsseldorf 1971
[59] Mau r er, H.: Theoretische Grundlagen der Programmiersprachen. Mannheim 1969
[60] M c C r a c k e n, D. D.: FORTRAN in der Technischen Anwendung. München 1970
[61] Mrachacz, H.P.; Peetz, G.: Taschenbuch für Programmierer. München 1971
[62] 0 pie r, A.: Das IBM-System/360 und seine Programmiertechniken. 2. Aufl. München-
Wien 1972
[63] Pa y ne, W. H.: Machine, Assembly and Systems Programming for the IBM/360. New
York 1969
[64] Sax 0 n, J. A.: Einführung in COBOL. München 1969
[65] S pie ß, W. E.; Rh ein g ans, F. G.: Einführung in das Programmieren in FORT-
RAN. Berlin 1970
[66] S t r u b 1 e, G.: Assembler Language Programming: The System/360. Reading, Mass.
1969
[67] W e y h, U.; Sc h e c her, H.: Ziffernrechenautomaten. München 1968
[68] Wo 1 t e r s, M. F.: FORTRAN IV mit Anlagen zum Lehrprogramm. Siemens 1970

Operations Research
[69] B r a n den b erg, J.; K 0 n rad, R.: Netzplantechnik. Zürich 1965
[70] Co 11 atz. L.; W e t t e r 1 in, W.: Optimierungsaufgaben. 2. Auf!. Berlin-Heidel-
berg-New York 1971
[71] Dan t z i g, G. B.: Lineare Programmierung und Erweiterung. Berlin-Heidelberg-
NewYork 1966
[72] Fra n k. W.: Mathematische Grundlagen der Optimierung. München 1969
[73] He n n, R.; K ü n z i. H. P.: Einführung in die Unternehmensforschung I, 11.
Berlin 1968
[74] J ure c k a. W.: Netzwerkplanung im Baubetrieb. Wiesbaden 1967
[75] Kr e 11 e. W.; K ü n z i, H. P.: Lineare Programmierung. Zürich 1958
[76] K ü n z i, H. P.; Kr e 11 e, W.: Nichtlineare Programmierung. Berlin 1962
[77] K ü n z i. H. P.; Tz sc ha s c h, H. G.; Zeh n der, C. A.: Numerische
Methoden der mathematischen Optimierung. Stuttgart 1967
[78] Müll e r - M erb ach, H.: Operations Research. Berlin 1969
[79] Ne f, W.: Die Auflösung linearer Programme ohne Kenntnis einer zulässigen Aus-
gangslösung. Unternehmensforschung 8 (1964)
[80] Ne m hau se r, G. L.: Einführung in die Praxis der dynamischen Programmierung.
München 1969
[81] Nie m e y er, G.: Einführung in die lineare Planungsrechnung. Berlin 1968
[82] Pie h 1 er, J.: Einführung in die lineare Optimierung. Zürich und Frankfurt/Main
1964
[83] S t a h 1 k n e c h t, P.: Operations Research. 2. Auf!. Braunschweig 1971
[84] S u c h 0 w i t z k i, S.I.; A w d e je w a, L. 1.: Lineare und konvexe Programmierung.
München 1969
[85] V aj da, St.: Einführung in die Linearplanung und die Theorie der Spiele.
München 1966
Weiterführendes Schrifttum 311

[86] W a g n er, G.: Netzplantechnik in der Bauwirtschaft. 2. Aufl. Wiesbaden 1966


[87] Will e, H.; Ge wal d, K.; Web er, H. D.: Netzplantechnik I: Zeitplanung.
München 1966

Bauwesen
[88] C h wall a, E.: Die neuen Hilfstafeln zur Berechnung von Spannungsproblemen der
Theorie 11. Ordnung und von Knickproblemen, Sonderdruck aus Der Bauingenieur
34/1959, Hefte 4, 6, 8
[89] F I e ß ne r, H.; K n 0 p f, E.: Programmiersprachen und Dateneingabe mit
Anwendungen, Konstruktiver Ingenieurbau, Berichte. Heft 5, Essen 1969
[90] K lei n log el, A.; Ha sei b ach, A.: Mehrfeldrahmen, Bd. I, 7. Aufl.
Berlin 1959
[91] L e 0 n h a r d t, F.: Spannbeton für die Praxis. 2. Aufl., Berlin 1966
[92] Me h me 1, A.: Vorgespannter Beton. 2. Aufl. Berlin/Göttingen/Heidelberg 1963
[93] Ra m m, H.; W a g n er, W.: Praktische Baustatik, Teil 4. 3. Aufl. Stuttgart 1972
[94] R ü s eh, H.; Ku p f er, H.: Bemessung von Spannbetonbauteilen. In: Beton-
kalender 1971, Teil I. Berlin 1971
[95] Vorläufige Richtlinien für das Aufstellen und Prüfen elektronischer Standsicherheits-
berechnungen; z. B. Erlaß des Bayerischen Staatsministeriums des Inneren vom 4.1.1966
(abgedruckt im Min.-Amtsblatt S. 34/1966)
[96] Forschungsgesellschaft für das Straßenwesen: Sammlung REB. Richtlinien für die
elektronische Bauabrechnung. Verfahrensbeschreibung zur REB. Erlasse. Köln.
[97] Konstruktiver Ingenieurbau. Berichte. Hefte 3 u. 5. Essen 1969

ProgrammieranIeitungen im Bauwesen
[98] IBM 1130 - ALGOL (Programmieranleitung). IBM-Form 79 984
[99] IBM 1130 - Allgemeine statisch unbestimmte Rechnungen nach dem Kraftgrößen.
verfahren. IBM-Form 80 591
[100] IBM 1130 - Berechnung allgemeiner Stabwerke (STRESS), Programmbeschreibung.
IBM-Form H 20-0340 (englisch)
IBM-Form H 12-2000 (deutsch)
[IOI]IBM 1130 - FORTRAN System. IBM-Form 74 938
[102] IBM 1130 - Spannbetonträger (Vorspannung mit Verbund). IBM-Form 80700
(103] Student Language Compiler For IBM 1130 System. IBM-Form 113003.2.002
[104] Handbuch für OLIVETTI-Bürocomputer P 203

Nachtrag
(10S]Alefeld, G.; Herzberger, J.; Mayer, 0.: Einführung in dasProgram-
mierung in ALGOL 60. Mannheim 1972
(106] B rau eh, W.: Programmierung mit FORTRAN. Stuttgart 1972
[107] Cut t I e, G.; R 0 bin s 0 n, Ph.: Aufbau von Betriebssystemen. München 1972
[108] Dir lewa n ger, W. u. a.: Einführung in Teilgebiete der Informatik I. Berlin-New
York 1972
[109] G r i gor i e f f, R. D.: Numerik gewöhnlicher Differentialgleichungen. I Ein-
schrittverfahren. Stuttgart 1972
[110] Ha a c k e, W. u. a.: Datenverarbeitung für Ingenieure der Elektrotechnik und des
Maschinenbaus. Stuttgart 1973
312 Anhang

[111] H aas, P.; M a r k 0 w ski, H.: Übersetzer für elektronische Rechenautomaten.


München 1971
[112]H ac k I, C.: Schaltwerk- und Automatentheorie I. Berlin-New York 1972
[113] Ha h n, W.: Elektronik-Praktikum für Informatiker. Berlin-Heidelberg-New York
1971
[114] He i n r ich, W.; S t u c k y, W.: Programmierung mit ALGOL 60. Stuttgart 1971
[115] H i g man, B.: Programmiersprachen. München 1972
[116] Hot z, G.: Informatik: Rechenanlagen. Stuttgart 1972
[117] K a n d z i a, P.; La n g m a a c k, H.: Informatik: Programmierung. Stuttgart 1973
[118] K uns e müll er, H.: Betriebsprogramme in Rechenanlagen. Stuttgart 1973
[1l9]M er t e n s, P.: Angewandte Informatik. Berlin-New York 1972
[120] Müll er, B.-G.; Ha a s, V.: Elektronische Datenverarbeitung im Bau- und
Vermessungewesen I, 11. Düsseldorf 1971
[121] N 0 I t e m eie r, H.: Datenstrukturen und höhere Programmiertechniken. Berlin-New
York 1972
[122]W als h, D. A.: Anleitung zur Software-Dokumentation. München 1972
[123] Wer n er, H.; S c hab a c k, R.: Praktische Mathematik 11. Berlin-Heidelberg-
New York 1972
[124] Wir t h, N.: Systematisches Programmieren. Stuttgart 1972
Sachverzeichnis

Abbrechfehler 34 Ausgabe 200 Blattschreiber 25


Abbruchfehler 185 - feld 73 Block 107,175
Addierwerk 21 Ausgangsparameter 91 BLOCKDATA 92f.
Ablaufplan 197 AUTOMATIC 182 Block! diagramm 31
Absteckelement 283 automatische Kartierung 266 - struktur 122, 175
Abstecktabelle für Knoten- BOOL 174
punkte 270f. BACKSPACE-Anweisung 77 BOOLEAN 99
Achsberechnung 257f. Balkendiagramm 296, 301, boolesche Verknüpfung 10,
Adreßbuch 52 305 18
Adresse 15,22f. BASED 182 Bordsteinführung 272
-, absolute 52 BASIC FORTRAN 58 Biegemoment 191
-, relative 52 Basis 2, 141 Bruchsicherungsnachweis 229
-, symbolische 45f.,52 - register 52 BIÜckenbauwerk 295
Adressierung, globale 46 batch processing 56 Byte 5
-, lokale 46 Baubetrieb 193
Adreß! indizierung 51 Bedienungs! element 24 CALL 178
- rechnen 35 - feld 24 - -Anweisung 90
- rechnung 50 Bedingung 64 CEIL 153
- substitution 51 Bedingungspräflx 151 C-Formatelement 161, 163
- teil 36 Befehl 6 CHARACTER 152
A-Formatelement 160f., 163 -, indizierter 51 Code 2,4
ALGOL 98, 198 Befehls! code, mnemotechni- -, Dual- 5
-, Alphabet 98 scher 45 -, Exzeß-3- 5
-, Subset 98 - -, numerischer 45 COLUMN 160, 164
Algorithmus 1 - register 22f. COMMENT 104
Alphabet 2 - zähler 22f. COMMON-Bereich 87,92
Analogrechner 2 BEGIN 175, 18lf. - -Block 88, 92
Anweisung 6,58,140 - -Block 150 - -Vereinbarung 87f.
-, bedingte 112 Benutzer-Anweisung 188 Compiler (Kompilierer) 7,53,
-, leere 145 Bereich 62, 165ff. 58,200
-, unbedingte 112 - von Strukturen 171 COMPLEX 60ff., 72, 84, 141,
Arbeits! programme 56 Bereichs! ausdruck 167 143
- speicher 19 - element 62 compound statement 107
Arcustangens 279 - name 62, 165 CONTINUE-Anweisung 67
Argument 178 - operation 63 CONTROLLED 182
ARRAY 106 - vereinbarung 165 CONVERSION 162f.
Assemblierer 7,45,52 Betriebssystem 55 COPY 157
- code 45,48,52 Bezeichner 140 COUNT 175
- programm 45,51 B-Formatelement 161, 163 CPM 297,299
- sprache 48, 51 Biegelinie 81ff. Critical-Path-Method 297,299
- -Vereinbarung 46 - eines elastisch gebetteten
assignment statement 102 Trägers 132 DATA 157f.
Attribut 140ff., 165 - - Trägers 117, 175f. - -Anweisung 92
Auffang-Flipflop 16 Binärsignal 2 DATE 175
Auflistung der Berechnungs- BINARY 141, 143, 153f. Date 2
ergebnisse 243 bit 2, 12, 14 Dateiverarbeitung, direkte 77
Aufteilungsplan 284 BIT 152 -, sequentielle 77
Ausdruck, arithmetischer Bit 2 Daten, alphanumerische 60f.,
63ff., 99, 142 - kette 15lff., 163 72
-, logischer 63ff., 104 - kettenvergleich 155 -, arithmetische 60, 140f.
314 Sachverzeichnis

Datenl flußplan 186f. Entwurfstabelle für Knoten- Geradenschnitt 288


- formatelement 160f. punkte 270f. GET 157ff., 175
- liste 69ff., 157ff. EQUIVALENCE-Vereinbarung Gleitpunktform 5
-, logische 60f. 92 global 126
- sichtgerät 27f. Ergibtanweisung 59, 65, 143 -, extern 46
- spezüikation 157 152 ' -, intern 46
- station 28 EXTERNAL 181, 183 GO TO 112, 143, 178, 181f.
- übertragung 156ff. - -Anweisung 84f. - - -Anweisungen 65
- verarbeitung, Zielsetzung 1 Gradientenberechnung 263
DECIMAL 141, 153f. Grundverknüpfung 10
DECLARE 140f. Fehler, formaler 58, 187
- grenzformel 277 Gültigkeitsbereich 182f.
DEFINE FILE-Anweisung 77
D-Flipflop 16 -, logischer 58, 187
Feld, externes 74f. hardware 8f.
Dimension 166f. Hauptlprogramm 78
- vereinbarung 105f.
DIMENSION-Anweisung 62 - prozedur· 175
Dimensionsangabe, angepaßte Fest I element 257
83 - punkt I form 5 - speicher 19
- - koordinate 284 -.-Vermessungspunkt 284
Dienstprogramme 57 Hilfsprogramm 3
Display 27 - - speicher 285
- speicher 12 Hollerith-Konstante 61
DO-Anweisung 66ff., 147f. Horner-Schema 3, 81ff., 116
DO-gesteuerte Angabe 70 Festigkeitslehre 190f.
DO-Gruppe 145f. F-Formatelement 160ff.
FIXED 141ff., 153f. IF 143
DO-Schleüe 67,69 IF-Anweisung, arithmetische
DO-Schleüen, Schachtelung - OVERFLOW 151
Flipflop 14ff. 66
von 69 - -, einseitige 143ff.
DOUBLE PRECISION 61f., FLOAT 141, 143, 153f.
Flußdiagramm 31 - -, logische 66
72,74,84 - -, zweiseitige 144f.
Drucklbild 84,88, 186f. Folgepunkt 284
Formänderung 190f. Index 33f., 62, 165ff., 174
- datei 158f., 164, 175 - position 165
- steuerungszeichen 73 FORMAT 165
- -Anweisung 70ff., 75 - register 39
Dualsystem 2
Durchgangsparameter 91 Format Ielement 160ff. - - zelle 23
- liste 160, 165 indizierter Befehl 39
Durchlauf 33 Indizierung 23,37,50
Formatschlüssel A 71f., 75
- D 71f., 74 induktive Schleüe 33
EBCDI-CODE 151
EDIT 157, 159ff. - E 71f., 74 Information 2
E-Formatelement 161f. - F 7lf., 74 Informationsverarbeitung,
Einadreßmaschine 23, 36 - G 7lf., 74 Grundbegriffe 1
Ein-/Ausgabe I anweisung 59, - H 71,73,75 Inhibitdraht 20
69, 71, 75 - I 71,74 INREAL 102
- - -, formatfreie 77 - L 7lf., 74 INTEGER 60, 62, 71, 74, 84,
- - -Kontrollsystem 56 - X 73,75 99
- - -Werk 18f., 23f. Formelfunktion 78f. integriertes Programmsystem
Einflußgrößen 32 for-statement 107 274,284
Eingabedaten 190f. FORTRAN 58ff., 201, 209 INTERMEDIATE FORTRAN
Eingangs I daten 32,190 FORTRAN IV 58 58
- parameter 91 FUNCTION-Anweisung 81, INTERNAL 183
Einheitswerte 273 83f. Interncode 45
Elementlausdruck 167 - -Unterprogramm 78f. Invertor s. Negator
- variable 165 Funktion, eingebaute 78f. ISO-norm 58
END 146ff., 178, 181 -, eingefügte 165, 173ff. Iteration 34
- FILE 150 Funktions I aufruf 78, 173 Iterationsverfahren 186
- - -Anweisung 77 - prozedur 115, 175, 178 iterative Programmschleüe
- -Vereinbarung 69 - werttyp 83 33f.
Entfernung 283
ENTRY 178, 182 Gemarkung 284 JK-Flipflop 17f.
- -Vereinbarung 92 Genauigkeit 141ff. JK-Master-Slave-Flipflop 17f.
Sachverzeichnis 315

Kalendervergleichsliste 301, Maschinen I adresse 19f. NAND 1Off.


307 - befehl 36 Negation 9
Kanalnummer 69f. - code 23 negative Logik 10
Karteneinteilung 84,87, 186f. - - programm 187 Negator 10ff.
Kartierung, automatische 266 - sprache 36 Netzplan I ergebnisse auf DVA
Kartierungsprogramm 269 - wort 36 304
Kellerungsprinzip 54 Magnetbandgerät 28f. -, kantenorientierter 297
Kernspeicher 19 magnetische Informations- -, knotenorientierter 297
Ketten I daten 140, 151 speicherung 13 - technik 193,295ff.
- funktion, eingefügte 174 Magnet I kartenspeicher 29f. Newtonsches Iterationsver-
- konstante 15lf. - kern-Koinzidenz-Speicher fahren 33f.
- variable 152 19 Newton-Verfahren 172f.
- verknüpfung 152 - -Ringkern 14f., 19f. NOR 10
Klammerstufe 76 - schrift 13 Numerierungsbezirk 284
Kleinpunktberechnung 274, - trommelspeicher 29
285 Makrobefehl 48, 50 Oberstruktur 170
Klotoide 258f. Marke 112, 140 Objektprogramm 58
Knotenpunkte 270f. Markenvariable 165 ODER-Verknüpfung 9
Kommentar 104, 140 Markierungsleser 26 ON-Bedingung 150
- zeile 59 Massen Iberechnung aus Pris- ONCHAR 175
Kompilierer 7,53,58,200 men 250ff. Operand, arithmetischer 63
Konstante 60f. - - - Profilen 244f. Operandenteil 22f.
-, alphanumerische 61 - bilanz 255f. Operateur 24
-, arithmetische 141 - ermittlung 243 Operationsteil 22f., 36
-, ganzzahlige 60 Matrixinversion 167f. Operator-Anweisung 187f.
-, komplexe 61 Mehradreßmaschine 23 -, arithmetischer 63, 142
-, logische 61 Mehrfachzuweisung 102 -, Rangfolge 65, 156
-, reelle 60 Mehrprogrammbetrieb 56 -, Rangliste 105
Kontrollmaß 283 Mehrprozessorsystem 18 -, logischer 64, 143, 152
Koordinatograph 26f. Mehrrechnersystem 18 Optimierung 189
Koppel Ielement 258 Mehr-Speicher-Flipflop 16 OUTREAL 103
- gerät 28 memory dump 57 OUTSYMBOL 109
Kraftgrößenverfahren 209f. merge 57 OVERFLOW 150
Kriechen 228 Merker 39
Messungslinienberechnung
274 PAGE 157,164
label 112
Meßwertfehler 184 Parallel I addierwerk 21
Lasten, äußere 228 - betrieb 56
Metra-Potential-Methode 297,
Laufl anweisung 107 Parameter 32, 178
- variable 67,147 299
Mikrobefehl 24 -, aktueller 84,91, 115
Lebendspeicher 12 -, formaler 84, 91, 115
Mittelwert 143f.
Leit I punkt 284 - übergabe 91
-, Berechnung 110
- werk 20ff. PAUSE-Anweisung 69
Mnemotechnik 23
LENGTH 109, 174 PERT 297
mnemotechnischer Befehlscode
Lesedraht 15 P-Formatelement 161
45
LINE 157,164 MOD 165 PICTURE 150, 161
lineares Gleichungssystem Modus 141 Plattenspeicher 29
167ff. MPM 297,299 Plotter 26
LINENO 175 Multiplexbetrieb . 56 PL/I 137ff., 205ff.
LIST 157f. multiprogramming mode 56 PL/I-Kompilierer 137f.
Loch I karte 13 PL/I-Programm 140
- kartengerät 25 NAME 158 PL/I-Subset 137f.
- streifen 13 Name, gekennzeichneter 170 polnische Form 54
- - gerät 25 -, globaler 46 POLY 175
Logarithmusberechnung 47 -, lokaler 46 positive Logik 10
LOGICAL 62f., 72, 74, 84 Namen 99 postfix-Form 54
lokal 126 Namensaufruf 91 praefIx-Form 54
316 Sachverzeichnis

Problem I analyse 1, 3lf., 186 Rechen I ablauf 32 Sortierung einer Zahlenfolge


- daten 140 - werk 20ff. 67f.
PROCEDURE 175, 178, 182 Regression, lineare 89 Spaltendraht 15, 19f.
PROD 174 reihenweise Ein- und Ausgabe Spannbeton 192, 225ff.
Program Evaluation and Re- 156 - dachbinder 226ff.
view Technique 297 RETURN 143, 178 Spannkräfte 230
Programm 1,6,52, 103, 189f. - -Anweisung 84,91 Speicher I abzug 187
- ablaufplan 1, 3lff., 186f. REWIND-Anweisung 77 - adresse 35
- ablaufsteuerung 175 R-Formatelement 160, 165 - block 19
- abschnitt 46 Rieh tungswinkelberechnung - glied 9, 12, 14ff.
- beschreibung 187 279f. - matrix 15, 19
- bibliothek 184, 188, 190 Ringkern 14f. - medium 12, 28
- dokumentation 187 Rissesieherung 229 - platzzuordnung, dynamische
- -Kurzbeschreibung 187 Rücksprung 32 182
- schleifen 32ff. - adresse 52 - -, statische 182
- steuerdaten 140 Rundungsfehler 34, 185 - platzzuweisung 175
- steuerungsanweisungen 143 Runge-Kutta-Gill 93ff., 120, - zyklus 20
- system 189 178 Spezifikations I anweisung 59
- -, integriertes 274, 284 - teil 115
- verzweigun$ 32 Satz 46,77 Sprache, Maschinen- 7
Programmier I formular 58 - einteilung 73 -, maschinen orientierte 7
- sprachen 6,52 - name 46 -, problemorientierte 6,58ff.
Prozedur 78, 113, 140 satzweise Ein- und Ausgabe Sprunganweisung, bedingte 66
-, externe 175 156 -, berechnete 65f.
-, interne 175 Schachtelung 145, 148 -, gesetzte 66
- kopf 114 Schalt Iglied 9 -, unbedingte 65
-, rekursive 178 - netz 10, 21 Stahllbau 19lf.
- rumpf 114 - variable 9 - beton 19lf.
Prozeßrechner 2, 194 - werk 18,21 Standard I attribut 141
Prozessor 18, 20 scheduler 56 - funktion 99f.
Pseudovariable 174f. Schleife 107 - -Vereinbarung 62
Pseudozufallszahl 51 Schleifen I anweisung 66 Stapelbetrieb 56
- steuerung 107 Statement 59, 140
Puffer I element 257 Schlüsselwort 140
-, freier 301 Statik 189ff.
Schnelldrucker 26 statistische Auswertung 90
- zeiten 301 Schnittigröße 191,210,227
PUT 157ff., 175 statische Größen, Berechnung
- punktberechnung 286 128
Schrittweite 67 Stern I adre sse 5 1
quadratische Gleichung 146 Schubkurbelgetriebe 148ff.
Quadratwurzelberechnung - ersatzschaltung 79f.
Schub sicherung 230 Steuer I anweisung 59, 65
147 Schwenkelement 261
Quellenprogramm 58, 69 - formatelement 160, 164
Schwinden 228 - programme 56
Quellprogramm 46,187 Seitensteuerung 73
Querschnittswert 190, 195ff., - werk 20
Serienaddierwerk 21 Stiefel-Verfahren 167f.
227 Sichtgerät 27f. STOP-Anweisung 69
Signal 2 Strahlungsfluß 84ff.
Radix I punkt 3 - parameter 2 Straßenbau 189f., 192f., 242ff.
- schreibweise 2 Simpson-Regel 84f. Streckenfehler 279
Rahmenberechnung 207ff. Simultanbetrieb 56 STRESS 191,216
Ranglfolge 65,156 SIZE 151,162 Streuung 143f.
- ordnung 55 Skalierung 141 -, Berechnung 110
Raum I sonde, Flugbahn einer Skalierungsfaktor 161 Struktur 167,169ff.
93ff., 178ff. SKIP 157, 160, 164 -ausdruck 167,171
- sondenflug 122 software 8 - diagramm 31
READ-Anweisung 69ff., 77f. sort 57 - stufe 170
REAL 60, 62, 71f., 74, 84, Sortier- und Mischprogramme - vereinbarung 170
99, 141 57
Sachverzeichnis 317

SUBROUTINE-Anweisung 90 Umkehrstufe 10 Vorgangs! knotennetz 297


- -Aufruf 78 Umwandlungsfehler 184 - liste 301, 305
- -Unterprogramm 78f., 89 Umwandlung von Daten 153 - pfeilnetz 297
Substitution 50f. UND-Verknüpfung 9 Vorspannung 227
SUBSTR 165,174 Unter!bereich 167
sukzessive Programm schleife - programm 52, 78, 113, 188 Wahrheitswerte 99
33f. - - anweisung 59, 78ff. Wasserwirtschaft 194
SUM 174 - - -Prozedur 178 Weggrößenverfahren 209
supervisor 56 - struktur 170 Wert! aufruf 91
SWITCH 127 utilities 57 - zuweisung 32
synchrones Flipflop 16 utility 3 Wiederholungs! faktor 151,
161
Tabulatorposition 158f. - gruppe 75
Teilnehmerrechensysteme 56 - steuerung 107
Termin !liste 301,305 VALUE 115 WRITE-Anweisung 69ff., 77f.
- plan 295 Variable 60f.
- überwachung 301 VARYING 152 X-Formatelement 160f., 164
Test! daten 186 Verbundanweisung 107
- hilfen 57 Vereinbarung 99, 140 Zahlenfriedhof 35
- spiel 187 -, explizite 182f. Zeichen 2
Tetrade 4 -, implizite 182f. - kette 150ff., 161, 163
T-Flipflop 16 -, textabhängige 182f. - kettenvergleich 155
Theorie 11. Ordnung 222 Vereinbarungsteil 99 - tisch 243
Tilgungstabelle 58ff., 65 Verfahren, mathematisches 48-Zeichen-Satz 138ff.
TIME 175 31f. 60-Zeichen-Satz 138f.
time sharing 56 Vergleich, algebraischer 155 Zeichenvorrat 138
TRACE 187 Vergleichsoperator 64, 104, -, alphanumerischer 2
tracing 57 152, 155 Zeilen! draht 15,19f.
Trägheitsmoment 190, 196f. Verkettung 152f. - steuerung 73
Transistorschaltstufe 10 Verknüpfungen 9 Zentral! einheit 18f., 24f.
Trassierung 257ff. Verknüpfungs! glied 9ff. - speicher 18f., 22ff.
TTL-Technik 11f. - zeichen, logische 104 ZERODIVIDE 150
Typenvereinbarung 62, 92 Vermessungswesen 190, 193f., Ziffernsortierprogramm 43,
Typumwandlung 65 274ff. 46
Verschiebbarkeit 46 Zugkeildeckung 229
Übersetzer 7 Verschiebezahl 23 Zugriffszeit 15, 20, 28f.
Übersetzungstechnik, direkte Verteiler 127 Zuweisungsanweisung 102
Methode 54 Voll strom 15 Zweiadreßmaschine 23, 36
-, syntaxorientiert 53 Vorausberechnung 283 Zykluszeit 15
Weitere Teubner-Baufachbücher

Buchenau/Thiele: Stahlhochbau
Neubearbeitet von A. Thiele
Band 1: 18., erweiterte Auflage. VI, 192 Seiten
mit 257 Bildern und 28 Tafeln. Kart. DM 32,-. ISBN 3-519-15207-X
Band 2: 15., neubearbeitete und erweiterte Auflage.
VIII, 213 Seiten mit 374 Bildern und 11 Tafeln.
Kart. DM 34,-. ISBN 3-519-15208-8
Haacke/Hirle/Maas: Mathematik rur Bauingenieure
Band 1: Grundlagen. Lineare Algebra. Reelle Funktionen
VII, 293 Seiten mit 282 Bildern, 285 Beispielen und 241
Aufgaben. Kart. DM 32,-. ISBN 3-519-05227-X
Band 2: Differentialrechnung. Integralrechnung. Angewandte Mathematik
Unter Mitwirkung von W. Burghardt
VII, 295 Seiten mit 243 Bildern, 235 Beispielen und
168 Aufgaben. Kart. DM 36,-. ISBN 3-519-05228-8
Volquardts/Matthews: Vermessungskunde
für die Fachgebiete Hochbau, Bauingenieurwesen und Vermessungswesen
Von K. Matthews
Band 1: 23., überarbeitete Auflage. VI, 135 Seiten mit
209 Bildern und 16 Tafeln im Text und Anhang. Kart. DM 16,-
ISBN 3-519-15213-4
Band 2: 12., überarbeitete und erweiterte Auflage. VIII,
186 Seiten mit 275 Bildern und 29 Tafeln im Text und im
Anhang. Kart. DM 24,-. ISBN 3-519-15214-2
Wendehorst/Muth: Bautechnische Zahlentafeln
Von H.Muth
17., neubearbeitete und erweiterte Auflage. 347 Seiten mit
zahlreichen Bildern. Daumenregister. Geb. DM 29,-
ISBN 3-519-15219-3
Wetzell: Technische Mechanik rur Bauingenieure
Band 1: Statisch bestimmte Stabwerke
194 Seiten mit 196 Bildern. Kart. DM 7,80 (Teubner Studienskripten)
ISBN 3-5 19-00014-8
Band 2: Festigkeitslehre, Teil 1
210 Seiten mit 160 Bildern. Kart. DM 8,80 (Teubner Studienskripten)
ISBN 3-519-00015-6
Band 3: Festigkeitslehre, Teil 2
(Teubner Studienskripten) ISBN 3-519-00016-4
Band 4: Statisch unbestimmte Stabwerke
(Teubner Studienskripten) ISBN 3-519-00017-2

Preisänderungen vorbehalten.

B. G_ Teubner Stuttgart

Das könnte Ihnen auch gefallen