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
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.
4. Problemorientierte Sprachen
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
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.
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.
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
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
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
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.
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.
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.
~
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].
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
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:
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.
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 ;
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.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
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
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.
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)
taklflankengesleuerfe FF taktluslandsgesleuer/e FF
(oder einflankengesleuerf) (oder zweiflankengesll!lletl)
JK-FF JK-Hasler-Slave-FF 2.13 Flipflop-Arten
~~----t:~ o L
L L
L
L r~---3=~ o
L L 0
L L
a) b) a) b)
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
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
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
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)
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)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
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.
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
"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.
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
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.
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
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-
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.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.
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
Sprungbefehl : ADT
05 11 15
Adresse OP ADT
Zählbefehl: sedezimal a b i AD1 AD m ADr
5 ll 15 2 04 o 05 03 09
Wir k u n g: Speicher 83
14-stellig
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
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
,-
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.
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.
EDSN Pos 15 Drucke den Inhalt von Speicher 3 auf Kommaposition 15.
Tafel3.9 Ziffernsortierprogramm
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
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
Stellennummer
Speicher 3 eingegebene Zahl
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
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.
Befehl Kommentar
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
Befehl Kommentar
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
Befehl Kommentar
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
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.
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).
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.
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.
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
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.
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
1 28039.99
2 23901.78
3 19577.35
4 15058.33
5 10335.95
6 5401.07
7 244.11
8 0.00
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
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.
oder die Konstante wird durch Apostrophs eingeschlossen. Hierbei werden Apostrophs inner-
halb der Konstante durch Doppelapostrophs repräsentiert
'GOETHE"SuFAUST'.
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.
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.
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.
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
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.
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.
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.
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)))
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
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.
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:
C HORNER-SCHEMA
FUNCTION HORN ER (N, PKOEFF, ARG)
82 4.1. Einführung in FORTRAN
Eingabe:
uuuuuuuuu2uuuuuul.E5uuuuuu1940uuuuuuu600uuuuuuuuuOuuuuuuu600uuuuuuuulO
Ausgabe:
BIEGELINIE EINES BEIDSEITIG AUFGELAGERTEN TRAEGERS MIT STRECKEN LAST
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
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:
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:
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
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
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
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
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
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.
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
Yl' = 1
Y2'=f(Yl'Y2'Y3) (4.2)
Y3' = g(Yl'Y2'Y3)
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
3. Schritt: Wiederholung des 1. Schrittes mit den neuen Werten Yj und qj' aber mit
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
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
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.
a lob a lO b
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
FRY/FRX
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);
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
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.
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
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'
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
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'
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)
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
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
STANDARDABWEICHUNG 3.192585
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
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;
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;
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
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
dy qoQ3 x X
-=_(4(_)3 -6(-i + I) (4.4)
dx 24EI Q Q
Tafel 4.24
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 :
EINGABEWERTE:
ao = 2.000000
E = 1.000000'0 005
I = 1.940000 10 003
L = 6.000000'0 002
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.
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
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)
Tafe14.27
'BEGIN'
'COMMENT' PROGRAMM ZUM LOESEN EINES DIFFERENTIALGLEICHUNGSSYSTEMS
MIT DEM VERFAHREN VON RUNGE·KUTTA·GILL;
'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;
Die Ausgabe von Texten geschieht mit Hilfe der Ausgabeprozedur. Ergebnisse zeigt Tafel 4.28.
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
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;
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
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
= -F ' falls FR * 0
Mo
h
R
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
°
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
Tafel 4.33
KRAEFTEREOUKTION
FRX FRY FR PHI
2.694450 5.328420 5.970939 6.317541 10 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
RECHNUNG BEENOET;
KRAEFTEREOUKTION
FRX FRY FR PHI
o 4.999999 10 002 5.000001 10 002 9.000000'0 001
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
RECHNUNG BEENDET;
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
RECHNUNG BEENDET;
KRAEFTEREDUKTION
FRX FRY FR PHI
4.999999'0 002 0 5.000001'0 002 o
ABSTAND H VON FR VOM KOORDINATENNULLPUNKT - 3.504000
MOMENT IM PUNKTE P
XP = 0 YP = 2.500000 MP = - 5.020000 10 002
RECHNUNG BEENDET;
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:
3, -1, 1,
5, 1,
3, -1;
6. der Kräftemittelpunkt:
MOl M02
~=-, falls FRy-:l=O Y=- falls F Rx -:1=0
F Ry S F '
RX
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
~§
·~·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:
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
Tafel 4.37
'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);
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;
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
DATENSTREIFEN :
15 1000 200 1830 100
o 100 10
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
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.
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.
Eingabe:
2 - 2.5
Ausgabe:
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.
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
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.
Konstante Attribute
Attribute Standard-
Genauigkeit
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.
Eingabe:
667 -155 -934 131 963 -363 755 128 707 144 825
255 167 -171 416 -156 -110
725 - 728 804 999
Ausgabe:
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
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
(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
Eingabe:
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
Eingabe:
50375 100 9
Ausgabe:
SCHUBKURBELGETRIEBE
R = 50.0 CM L = 375.0 CM N = 100.0/MIN
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;
'DASLJISTuEINEuZEICHENKETTEuDERuLAENGEu39'
'SHAKESPEARE"SLJ""HAMLET"'"
(gespeichert wird SHAKESPEARE'SLJ"HAMLET")
(2)'MA' (gespeichert wird MAMA)
152 4.3. Einführung in PLII
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
Beispiele:
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:
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
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
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.
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;
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);
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);
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);
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;
Beispiel:
DECLARE FORM LABEL;
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
'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
Eingabe:
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
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
243
24-3
I 5 - 0.0005
1 5 0.00005
222
9 ENDE-KARTE
4.3.6. Eingefügte Funktionen 173
Ausgabe:
EINGABEFEHLER
1 5 - 0.0005
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.
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.
Eingabe:
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
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:
Ausgabe:
HIMMELSKOERPER-RADIUS 6370 KM
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
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
°
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
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
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
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
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
(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
<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.
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
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
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
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
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
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
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
// 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
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.
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
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
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)
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
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
+N
+1 ~! Knoten 3
I
L ~._.-
/L x-
"'! Stobende
/
Stob(1)
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
STRUCTURE ZWEIFELDRAHMEN
LOADING 2 HORIZONTALLAST
==========================================================================
MEMBER FORCES
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-
LOADING 3 UEBERLAGERUNG
MEMBER FORCES
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
JOINT RELEASES
2 MOMENT Z
5 FORCE X MOMENT Z
LOADING STIEL-NORMALKRAEFTE
==========================================================================.\
MEMBER FORCES
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
2 2 0 0 0
2 4 390,94 6,68 397,62
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
lastfall p
6.32 Lastfälle für SchnittgIÖßenbestimmung
F j = Fb + (n - 1) (F u + F z2 )
J j = Jb + Fb (YbU - Y1ui
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
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
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
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 (+)
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)
Ux 1
und u = - - -vu2 + 47 2
2 2 x
j"-
Il
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
<::>
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 ~
lastbortnzlffe-rn 62 't A
~ i. ,__..._T_'
Laskennz .. Anzahl der
.I;.
1° ~
At: :l. ~ .• I
Kar1enar19
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
..
~
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!
""
~
~
:;~~: 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'
;:§ ;;,
<:>
'" ~
.~
~
~
: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
TRAEGERART 3
L = 25.00 M
HMIN = 125.0 CM HMAX = 150.0 CM
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.
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
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)
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)
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
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
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:
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
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
EINGABEWERTE
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
y----
6.52 Unregelmäßiges Polyeder als
,(~
6.53 Dreiecksmaschen
Begrenzung des Erdkörpers
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
P.NR. Y X Z
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
Längs zu Quer zu
Station Abtrag Auftrag fördernde Massenkote fördernde
Masse Masse
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
?/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
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
Nr. y x
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).
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
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
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
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
Nr. y x
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
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
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
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.
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
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
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
YR = Y AE + Ix R - xAE I.s
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
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).
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).
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
ZO -i"
70
o ___ Nullpunkt des KOOrdinatensystems
_____________
""~
It
®.L-~~=-~ ~~~
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
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
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
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