Bauinformatik Teil 1
Übungsskript
2011
Universität Duisburg-Essen
Fakultät für Ingenieurwissenschaften
Abteilung Bauwissenschaften
Institut für Baustatik
Dr. E. Baeck
19.10.2011
INHALTSVERZEICHNIS Seite iii
Inhaltsverzeichnis
1 Arbeiten mit EXCEL 2
1.1 Bezüge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Fehlermeldungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 EXCEL-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 SUMME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2 ABS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.3 MAX, MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.4 WENN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.5 SVERWEIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Aufgabe 1: Summe, Extremwerte und Absolutbetrag . . . . . . . . . . . . . . . 4
1.5 Aufgabe 2: Nachweis eines statisch unbestimmten Trägers . . . . . . . . . . . . 5
2 Zahlensysteme 7
2.1 Motivation und Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Beispiele zur Konvertierung zwischen Zahlensystemen . . . . . . . . . . . . . . . 8
2.3 Darstellung negativer Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Die VBA-IDE 11
3.1 Oberfläche und Projektbrowser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Testen eines Programms, Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 VBA-Interface 14
4.1 Beispiel 1 in 6 Schritten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.1.1 Schritt 1: Gestaltung der Oberfläche . . . . . . . . . . . . . . . . . . . . . 14
4.1.2 Schritt 2: Gestaltung der Steuerelemente . . . . . . . . . . . . . . . . . . . 15
4.1.3 Schritt 3: Generieren eines Moduls für Funktion Summe . . . . . . . . . . 16
4.1.4 Schritt 4: Das Programm Summe . . . . . . . . . . . . . . . . . . . . . . . 16
4.1.5 Schritt 5: Programmtests . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.6 Schritt 6: Das Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5 Elementare Algorithmen 19
5.1 Fakultät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 Binomialkoeffizient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 Winkel zwischen 2 Vektoren des Rn . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.3.1 Pseudocode für Hauptprogramm . . . . . . . . . . . . . . . . . . . . . . . 20
5.3.2 Pseudocode für Funktion SProd . . . . . . . . . . . . . . . . . . . . . . . 20
5.4 Reihenentwicklungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4.1 Entwicklung der Funktion sinus . . . . . . . . . . . . . . . . . . . . . . . 21
5.4.2 Reihenentwicklung weiterer Funktionen . . . . . . . . . . . . . . . . . . . 22
5.5 Newton-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.5.1 Der Algorithmus des 1-dimensionalen Falls . . . . . . . . . . . . . . . . . 22
5.5.2 Pseudo-Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
19.10.2011
Seite iv Bauinformatik - Teil 1 - Übungsskript / 2011
5.5.3 Programmablaufplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.5.4 Nassi-Schneidermann-Diagramm . . . . . . . . . . . . . . . . . . . . . . . 24
5.5.5 Die Oberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.5.6 Animation des Verfahrens . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6 Elementare Sortiert-Algorithmen 26
6.1 Select-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.2 Bubble-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7 Arbeiten mit Dateien 28
7.1 Dateioperationen für sequentiellen Zugriff . . . . . . . . . . . . . . . . . . . . . . 28
7.2 Torsionsträgeheitsmoments nach 2. Brendt’scher Formel . . . . . . . . . . . . . . 29
8 Das Clapeyron-Problem 30
8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8.2 Oberflächenlayout und Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8.2.1 Feldbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.2.2 Lastbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.3 ER-Modell der Datenstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.3.1 ER-Modell der Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.3.2 ER-Modell der Belastung . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
8.4 Aufbau der Datenstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8.4.1 Die Datenstruktur des Systems . . . . . . . . . . . . . . . . . . . . . . . . 34
8.4.2 Die Datenstruktur der Belastungen . . . . . . . . . . . . . . . . . . . . . . 35
8.5 Aufbau des Linearen Gleichungssystems . . . . . . . . . . . . . . . . . . . . . . . 37
8.5.1 Aufbau der Koeffizientenmatrix . . . . . . . . . . . . . . . . . . . . . . . . 37
8.5.2 Aufbau der Lastvektoren . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9 VBA-Objekte 40
9.1 Konstruktor und Destruktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
9.2 Vektoren und Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.2.1 Methoden des Klassenmoduls Vektor . . . . . . . . . . . . . . . . . . . . . 41
9.2.2 Methoden des Klassenmoduls Matrix . . . . . . . . . . . . . . . . . . . . . 41
9.3 Die Containerklasse Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.4 Datenstruktur eines Stabwerks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
9.4.1 Die Oberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9.4.2 Methoden des Punktes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9.4.3 Methoden des Stabes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9.5 2-fach verkettete lineare Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9.5.1 Beispiel einer 2-fach verketten Liste . . . . . . . . . . . . . . . . . . . . . 47
9.5.2 Einfügen eines Datenknotens . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.5.3 Entfernen eines Datenknotens . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.5.4 Iteratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
10 Rekursive Algorithmen 49
10.1 Quick-Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
E. Baeck
INHALTSVERZEICHNIS Seite v
A Dreimomentengleichung, Clapeyron 51
A.1 Das Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
A.2 Herleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
B Das ER-Modell 54
C UML-Aspekte 55
D Gauß’scher Algorithmus und Cholesky-Zerlegung 56
D.1 Der Gauß’sche Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
D.2 Interpretation des Gauß’schen Algorithmuses als Dreieckszerlegung . . . . . . . . 58
D.3 Die Cholesky-Zerlegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
D.4 Pseudocode für Cholesky-Zerlegung . . . . . . . . . . . . . . . . . . . . . . . . . . 62
D.4.1 Pseudocode der Zerlegung . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
D.4.2 Pseudocode des Vorwärtseinsetzens . . . . . . . . . . . . . . . . . . . . . . 62
D.4.3 Pseudocode des Rückwärtseinsetzens . . . . . . . . . . . . . . . . . . . . . 62
D.5 VBA-Code des Gleichungslösers nach Cholesky . . . . . . . . . . . . . . . . . . . 63
D.5.1 VBA-Code der Cholesky-Zerlegung . . . . . . . . . . . . . . . . . . . . . . 63
D.5.2 VBA-Code des Vorwärtseinsetzens . . . . . . . . . . . . . . . . . . . . . . 64
D.5.3 VBA-Code des Rückwärtseinsetzens . . . . . . . . . . . . . . . . . . . . . 64
E Lösungen zum Abschnitt Elementare Algorithmen 65
E.1 Summe aller Zahlen aus vorgegebenem Intervall . . . . . . . . . . . . . . . . . . . 65
E.2 Berechnung der Fakultät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
E.3 Berechnung des Binomialkoeffizienten . . . . . . . . . . . . . . . . . . . . . . . . 67
E.4 Beispiel 4: Winkel zwischen 2 Vektoren im Rn . . . . . . . . . . . . . . . . . . . . 68
E.5 Lösung der sinus-Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
E.6 Implementierung des Newton-Verfahrens . . . . . . . . . . . . . . . . . . . . . . . 72
F Lösungen zum Clapeyron-Problem 74
F.1 Aufgabe 8.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
F.2 Aufgabe 8.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
F.3 Einlesen der Systemdaten und Aufbau des Datenmodell . . . . . . . . . . . . . . 76
F.4 Einlesen der Belastungsdaten und Aufbau des Datenmodell . . . . . . . . . . . . 77
F.4.1 Aufbau des Lastfall-Indexvektors . . . . . . . . . . . . . . . . . . . . . . . 77
F.4.2 Aufbau des Lastfall-Containers . . . . . . . . . . . . . . . . . . . . . . . . 79
F.4.3 Aufbau der Koeffizientenmatrix . . . . . . . . . . . . . . . . . . . . . . . . 81
F.4.4 Lesen einer kompakt gespeicherten Bandmatrix . . . . . . . . . . . . . . . 82
F.4.5 Das Hauptprogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
G Lösungen zum Abschnitt Vektor- und Matrixobjekte 84
G.1 Deklaration eines Vektor-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . 84
G.2 Deklaration eines Matrix-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . 86
G.3 Programm Vektor 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
G.4 Programm Vektor Drehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
H Lösungen zum Abschnitt Rahmen und Collection 90
19.10.2011
INHALTSVERZEICHNIS Seite 1
H.1 Deklaration des Stab-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . . . 90
H.2 Deklaration des Knoten-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . 90
H.3 Implementierung des Anwendungsprogramms . . . . . . . . . . . . . . . . . . . . 91
H.3.1 Die Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
H.3.2 Die Funktion Einlesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
H.3.3 Die Funktion Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
H.3.4 Die Funktion Verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
H.3.5 Die Funktion StabAnzahl . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
H.3.6 Die Ereignisfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
I Lösungen zum Abschnitt 2-fach verkettete Listen 96
I.1 Deklaration des VNode-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . . 96
I.2 Deklaration des VListe-Klassenmoduls . . . . . . . . . . . . . . . . . . . . . . . . 96
I.2.1 Daten am Listenkopf einfügen . . . . . . . . . . . . . . . . . . . . . . . . . 97
I.2.2 Daten am Listenende einfügen . . . . . . . . . . . . . . . . . . . . . . . . 97
I.2.3 Vorwärtsiterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
I.2.4 Einfügen eines Knotens . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
J Lösungen zu Sortieralgorithmen 100
J.1 Die Ereignisfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
J.2 Generierung der Zufallszahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
J.3 Sortieralgorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
J.3.1 Implementierung von SelectSort . . . . . . . . . . . . . . . . . . . . . . . 103
J.3.2 Implementierung von BubbleSort . . . . . . . . . . . . . . . . . . . . . . . 104
J.3.3 Implementierung von QuickSort . . . . . . . . . . . . . . . . . . . . . . . 105
K Lösung zur Brendt’schen Formel 107
K.1 Die Ereignisfunktion zur Festlegung des Dateinamens . . . . . . . . . . . . . . . . 107
K.2 Die Ereignisfunktion zu Datenimport und Berechnung . . . . . . . . . . . . . . . 107
K.3 Die Datenstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
K.4 Einlesen der Daten aus der Profil-Textdatei . . . . . . . . . . . . . . . . . . . . . 108
K.5 Hilfsfunktionen der Berechnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
K.5.1 Berechnung der mittlerern Blechdicke . . . . . . . . . . . . . . . . . . . . 110
K.5.2 Berechnung des Knotenabstandes . . . . . . . . . . . . . . . . . . . . . . . 110
K.5.3 Berechnung der Polygonfläche . . . . . . . . . . . . . . . . . . . . . . . . . 111
19.10.2011
Seite 2 Bauinformatik - Teil 1 - Übungsskript / 2011
1 Arbeiten mit EXCEL
1.1 Bezüge
Die Adressierung der EXCEL-Tabellenfelder (Bezüge) erfolgt über relative und absolute Bezüge
bzw. über Namen (Bezeichnung eines Bezuges).
• Indizierung
B3 Standardindizierung von Spalte und Zeile
B:⇒ Spalte 23:⇒ Zeile 3
Z3S2 Z1S1 -Indizierung von Spalte und Zeile
S2:⇒ Spalte 2Z3:⇒ Zeile 3
• Relative BezügeBeim Kopieren wird auf relative Bezüge die Verschiebung aufaddiert.
Verschiebung 4 Spalten und 3 Zeilen: B3 ⇒ F6Z3S2 ⇒ Z(-3)S(-4)
• Absolute Bezüge
$B3 Beim Kopieren wird der Spaltenbezug erhalten.
$B$3 Beim Kopieren wird der Spalten- und Zeilenbezug erhalten.
• NamenEin Name ist gleichbedeutende mit einem absoluten Bezug auf ein oder mehrere Tabel-
lenfelder.
1.2 Fehlermeldungen
Fehler Beispiel Beschreibung
### Die Zelle ist für die vorgegebene Ausgabe zu schmal.
#WERT! =Abs(A3:A5) Unzulässiger Funktionswert.
#DIV! =A2/A3, bei A3=0 Nulldivision.
#NAME? =NoName Bezeichnung eines Bezugs oder einer Funktion ist unbekannt.
#ZAHL! =Exp(1000) Zahlendarstellung nicht möglich. Überlauf.
#NV! =SVerweis(...) Gesuchter Wert nicht verfügbar. Verweisfehler.
#BEZUG! =Z(-3)S(-4) Der Bezug liegt außerhalb des zulässigen Bereichs, d.h. außerhalb der
Tabelle.
E. Baeck
1. ARBEITEN MIT EXCEL Seite 3
1.3 EXCEL-Funktionen
Nachfolgend werden die EXCEL-Funktionen zusammengestellt, die zur Bearbeitung der Übungs-
beispiele herangezogen werden sollten.
1.3.1 SUMME
Summe berechnet die Summe der Zellenwerte eines Bezugs.
Beispiel: =Summe(A3:G3)
1.3.2 ABS
ABS berechnet den Absolutbetrag eines Zellenwerts.
Beispiel: =Abs(A3)
1.3.3 MAX, MIN
MAX bzw. MIN ermittelt den maximalen bzw. minimalen Wert innerhalb eines Bezugs.
Beispiel: =Max(A3:G3)
=Min(A3:G3)
1.3.4 WENN
Abbildung 1: WENN-Funktion
Mit der Funktion WENN wird in
Abhängigkeit eines boolschen Aus-
drucks ein DANN -Wert oder ein
SONST -Wert zugewiesen.
Beispiel:
=WENN(D13
Seite 4 Bauinformatik - Teil 1 - Übungsskript / 2011
1.3.5 SVERWEIS
Abbildung 2: SVERWEIS-Funktion
Mit der Matrix-Suchfunktion SVER-
WEIS lassen sich Daten aus Daten-
banken, d.h. aus Bezügen in beliebigen
Tabellen, unter Vorgabe eines Suchbe-
griffs extrahieren.
Beispiel:
=SVerweis(E3;A3:C5;2;FALSCH)
Parameter Beschreibung
ST Suchwert: Text, Zahl oder Wahrheitswert.
MD Datenmatrix. Ein Bezug in einer beliebigen Tabelle.
NS Spaltenindex der gewünschten Datenspalte.
(Spalte 1 ist Suchspalte).
KS Sortierkenner: Wahr ⇒ sortiert, Falsch ⇒ unsortiert.
1.4 Aufgabe 1: Summe, Extremwerte und Absolutbetrag
In einem Bezug A1:D5 werden beliebige Zahlen eingetragen. Es sind die folgenden Größen zu
ermitteln (siehe Abbildung 3):
• Die Spalten- und Zeilensummen sowie die Gesamtsumme.
• Maximaler und Minimaler Wert.
• Maximaler Absolutwert.
• Mit einer WENN-Funktion soll ausgegeben werden ob nur negative, nur positive odernegative und positive Werte gefunden wurden.
Abbildung 3: Auswertung eines Bereichs
E. Baeck
1. ARBEITEN MIT EXCEL Seite 5
1.5 Aufgabe 2: Nachweis eines statisch unbestimmten Trägers
Die Datenfelder sind in Formeln jeweils mit Namen anzusprechen1
Ein statisch unbestimmter Träger (siehe Abbildung 4) ist für vorgegebene Trägerlänge l und
Steckenlast q für vorgegebenes Material (Stahltabelle) und Profil (Profiltabelle) nachzuweisen.
Der E-Modul E der Stahlsorte sowie das Widerstandsmoment W sind aus einer Tabelle mittels
der Suchfunktion SVERWEIS zu ermitteln (siehe Abbildung 5).
Es ist zunächst zu berechnen, die Gesamtlast P , die beidseitigen Auflagerkräfte A = 3/8 ∗ Pbzw. B = 5/8 ∗P , das Einspannmoment MB = −1/8 ∗P ∗ l und die Biegespannung am Lager Bσ = MB/W . Die Eingabefelder der Tabelle sind als solche entsprechend zu kennzeichnen (siehe
Abbildung 4).
Achten Sie auch auf die Anpassung der unterschiedlichen Dimensionen.
Abbildung 4: Nachweis eines statisch unbestimmten Trägers
1Namen können im Untermenü Einfügen/Namen eingefügt und bearbeitet werden.
19.10.2011
Seite 6 Bauinformatik - Teil 1 - Übungsskript / 2011
Die Datenbanken für Material und Profile sollten in einer zweiten EXCEL-Tabelle der Mappe
angelegt werden.
Abbildung 5: Material- und Querschnittswerte in einer Datenbank
In einem weiteren Schritt ist die Durchbiegung des Trägers y = P∗x∗(l3−3∗l∗x2+2∗x3)48∗E∗I∗l in Abhängig-
keit der Längskoordinate x zu ermitteln und mit dem Diagrammassistenten darzustellen. Als
Diagrammtyp ist der Typ Punkt(XY) auszuwählen. Die Balkenlängsrichtung liegt in X-Richtung,
die Durchbiegung in negative Y-Richtung (Faktor -1).
E. Baeck
2. ZAHLENSYSTEME Seite 7
2 Zahlensysteme
Ein Zahlensystem wird zur Darstellung von Zahlen verwendet. Eine Zahl wird dabei nach den
Regeln des jeweiligen Zahlensystems als Folge von Ziffern beziehungsweise Zahlzeichen darge-
stellt.
In einem Stellenwertsystem (auch polyadisches Zahlensystem) bestimmt die Stelle (Position)
den Wert der jeweiligen Ziffer. Die niederwertigste Position steht dabei im Allgemeinen rechts.
Ein Stellenwertsystem hat eine Basis b (man spricht auch von einem b-adischen Zahlensystem).
Jede Zifferposition hat einen Wert, der einer Potenz der Basis entspricht. Für die n-te Position
hat man einen Wert von bn−1 (wenn die niederwertigste Position mit 1 nummeriert ist).
Die Berechnung des Zahlenwertes erfolgt durch Multiplikation der einzelnen Ziffernwerte zi mit
den zugehörigen Stellenwerten bi und der Addition dieser Produkte:
Zahlenwert = zn · bn + . . .+ zi · bi + . . .+ z0 · b0. (1)
2.1 Motivation und Anwendung
Im Allgemeinen wird das Zahlensystem zur Basis 10 eingesetzt. Es gibt jedoch Anwendungsfälle,
in denen das Zahlensystem zur Basis 10 ungeeignet ist. Aufgrund des digitalen Aufbaus eines
Computers eignet sich das Zahlensystem zur Basis 10 zur Darstellung der Bit-Information in
keinster Weise. Es verschleiert die Zusammenhänge, die mit Anwendung eines Zahlensystems
zur Basis 2 oder zur Basis einer 2er Potenz einfach und klar in Erscheinung treten würden.
Abbildung 6: Rechteckfläche
Vergleichbar ist dieser Zusammenhang der Anwendung
verschiedener Koordinatensysteme. So ist z.B. die Be-
schreibung einer rechteckigen Fläche im 2 dimensiona-
len karthesischen Koordinatensystem sehr einfach. Hier-
bei entkoppeln die Unterdimensionen Länge und Breite
(siehe Abb. 6). Eine Fläche ist allein durch Vorgabe die-
ser Werte möglich. Soll demgegenüber eine Kreisfläche
im 2 dimensionalen karthesischen Koordinatensystem be-
schrieben werden, so sind die Unterdimensionen Länge
und Breite offensichtlich gekoppelt. Eine Vorgabe dieser Werte allein reicht nicht mehr aus, um
die Fläche zu beschreiben (siehe Abb. 7). Wählt man hingegen ein polares Koordinatensystem
mit den Unterdimensionen Radius und Winkel, so ist es wieder möglich durch Vorgabe zweier
Werte, in diesem Fall Radius und Winkelbereich, eine Kreisfläche zu beschreiben.
Da der Computer aufbauend auf der logischen Elementareinheit Bit (0 und 1 / aus und ein) in
Paketen von zumeist 8 Bits (1 Byte) strukturiert ist, empfiehlt es sich aufgrund der Unübersicht-
lichkeit des dualen Zahlensystems Bits zur gruppieren. Werden 3 Bits gruppiert erhält man als
natürliches Zahlensystem das Zahlensystem zur Basis 8 (Oktalsystem). Werden 4 Bits gruppiert
erhält man als natürliches Zahlensystem das Zahlensystem zur Basis 16 (Hexadezimalsystem).
19.10.2011
Seite 8 Bauinformatik - Teil 1 - Übungsskript / 2011
Abbildung 7: Kreisfläche in karthesischen und polaren Koordinaten
2.2 Beispiele zur Konvertierung zwischen Zahlensystemen
Beispiel 1:
Konvertierung von 1425 in das Zahlensystem zur Basis b = 3.
• Schritt 1:Konvertierung in das 10-System
1425 = 1 · 52 + 4 · 51 + 2 · 50
= 2510 + 2010 + 210
= 4710
• Schritt 2a:Konvertierung in das 3-System vollständig über 10-System
4710 = 1 · 33 + 2 · 32 + 0 · 31 + 2 · 30
= 4510 + 010 + 210
= 12023
• Schritt 2b:Ziffernweise Konvertierung in das 3-System
1425 = 1 · 52 + 4 · 51 + 2 · 50
= 2510 + 2010 + 210
= 2213 + 2023 + 23
= 12023
E. Baeck
2. ZAHLENSYSTEME Seite 9
Beispiel 2:
Konvertierung von 14210 in das Zahlensystem zur Basis b = 6.
Der Algorithmus zur Konvertierung einer Zahl in das Zahlensystem zur Basis b erfolgt durch
b-Division und aufsammeln der Divisionsreste nach dem folgenden Prinzip (siehe Abb. 8).
Abbildung 8: Rechteckfläche
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
Die erhaltenen Reste 4, 5 und 3 werden in die Rei-
henfolge von unten nach oben gebracht und von
links nach rechts hin geschrieben. Damit erhalten
wir die Zahl 3546.
In Abbildung 8 wird die Umrechnung in einer EXCEL-Tabelle implementiert (siehe dazu auch
Abschnitt 1). In A2 wird die zu konvertierende Zahl eingetragen. Der Divisor ist stets b, also
6. Das Ergebnis der ganzzahligen Division erhalten wir mit der Formel =GANZZAHL(A2/B2). Der
Divisionsrest in der grünen Spalte ergibt sich mit der Formel =REST(A2;B2). Das Ergebnis der
ganzzahligen Division orange Felder werden in der folgenden Zeile in die Spalte des Dividenden
eingetragen. Die Formel der ersten Zeile kann in die zweite Zeile eingetragen kopiert werden.
Die Bezüge werden dabei, da relative Adressen verwendet werden, automatisch angepasst. In der
Spalte E werden zur Kontrolle alle Anteile der Ziffern berechnet und in E6 zum Kontrollwert
aufaddiert.
Ein Übungsbeispiel:
In nachfolgendem Übungsbeispiel ist in der Tabelle die in Spalte Zahl gegebene Zahl in die
verschiedenen Zahlensysteme zur Basis b umzurechnen.
Zahl b = 2 b = 5 b = 7 b = 8 b = 10 b = 16
20213
4536
2467
2468
3310
2F16
Tabelle 1: Zahlensysteme
19.10.2011
Seite 10 Bauinformatik - Teil 1 - Übungsskript / 2011
2.3 Darstellung negativer Zahlen
Negative Zahlen können bei einer endlichen Ziffernbreite so konstruiert werden, dass die Summe
aus positiver und negative Zahl gerade die Zahl ergibt, die im Bereich der Ziffernbreite alle Ziffern
zu Null setzt und einen Übertrag von 1 erzeugt, der aufgrund der beschränkten Ziffernbreite und
eines Überlaufs nicht mehr darstellbar ist. So verbleiben also die ausgenullten Ziffern und die
führende 1 verschwindet. Im Rahmen der vorliegenden Ziffernbreite ist das aber gerade die
Darstellung des Null-Wertes.
Die Konstruktion der negativen Zahl beginnt mit dem sogenannten Stellenkomplement. Das
Stellenkomplement ist die Zahl, deren Ziffern sich ergeben zu b − z − 1, d.h. wir subtrahie-ren von der Basis b die gegebenen Ziffer und die 1. Eine Summe aus Stellenkomplement und
gegebener Zahl ergibt demnach eine Ziffernfolge, die nur die größte Ziffer, also b − 1 enthält.Wenn wir auf diese Ziffernfolge eins aufaddieren wird ein Übertrag erzeugt, der aufgrund der
Begrenzung der Ziffernbreite verschwindet und alle Ziffern werden auf Null gesetzt. Damit ist die
Darstellung der negativen Zahl, das b-Komplement, gegeben durch das um eins inkrementierte
Stellenkomplement.
In der Tabelle 2 sind die Darstellungen der negativen Zahlen im angegebenen b-Komplement
(Zahlensystemkomplement) bei vorgegebener Ziffernbreite einzutragen.
Beispiel:
b-Komplement der Zahl 3467 bei einer Ziffernbreite von 4.
Anmerkungen
03467 zu komplementierende Zahl mit 4 Ziffer
63207 Stellenkomplement: Komplementziffer = 6 -Ziffer
+ 1 b-Komplement = Stellenkomplement +1
63217 b-Komplement der Zahl
Addition von Zahl und b-Komplement
03467 zu komplementierende Zahl
+ 63217 b-Komplement
100007 Wird der Überlauf abgeschnitten ist das Ergebnis der Addition Null.
Zahl Breite b−Komplement
−20213 6
−4536 6
−2467 5
−2468 5
−3310 4
−2F16 4
Tabelle 2: b-Komplement
E. Baeck
3. DIE VBA-IDE Seite 11
3 Die VBA-IDE
Die VBA-IDE, (integrierte Entwicklungsumgebung) ist in allen Applikationen verfügbar, die
VBA zur Automation einsetzten (z.B. MS-Office-Programm, AutoCAD, RStab, etc.).
3.1 Oberfläche und Projektbrowser
Abbildung 9: VBA-IDE
Die VBA-IDE wird stan-
dardmäßig über Alt-F11 oder
Extras/Makro/Visual-Basic-
Editor gestartet. Sie besteht
aus einem Editor, einem
Code-Generator für Rah-
menprogramme ausgewählter
Eventfunktionen und einem
Programmtestmodul (Debugger)
(siehe Abbildung 9).
Im Projektbrowser werden die folgenden Ordner angezeigt.
• MS-EXCEL-ObjekteDer Ordner enthält alle Tabellen der EXCEL-Datei (Workbook).
• Modul -ObjekteDer Ordner enthält Modul-Objekte, die ihrerseits die Quellen sequentieller (konventionel-
ler) Programme enthalten. Module sind optional.
• Userform-ObjekteDer Ordner enthält Userform-Objekte, d.h. Layouts und Event-Quellen der Dialoge. Mo-
dule sind optional.
• Klassenmodul -ObjekteDer Ordner enthält Klassenmodule. Ein Klassenmodul ist ein Objekt (mit Abstrichen) im
Sinne der OOP. Module sind optional.
Optionale Ordner werden beim Einfügen (Menü Einfügen oder Rechtsklick in Browserfenster)
der entsprechenden Objekte (Module, Userform und Klassenmodul) angelegt.
19.10.2011
Seite 12 Bauinformatik - Teil 1 - Übungsskript / 2011
3.2 Testen eines Programms, Debugger
Abbildung 10: VBA-IDE-Debugger
Programme können in der IDE
mit dem integrierten Debugger
getestet werden. Dazu geht man
wie folgt vor. Das Programm
wird nach setzen eines Halte-
punktes unterbrochen und kann
im Einzelschrittmodus, d.h. es
wird Programmzeile um Pro-
grammzeile ausgeführt durchlau-
fen werden. Die Belegung der lo-
kalen Variablen oder der Zustand
gewählter Testausdrucke können
ausgegeben werden.
Der Debugger bietet die folgenden Ausführungsoptionen.
• HaltepunktAn einem Haltepunkt wird das Programm unterbrochen. Der Haltepunkt kann mit F9
oder im Menü Debuggen ein- oder ausgeschaltet werden.
• EinzelschrittMit dem Einzelschritt (F8) wird nur eine Programmanweisung ausgeführt. Mit dem Ein-
zelschritt läuft der Debugger in Unterprogramme.
• ProzedurschrittMit dem Prozedurschritt (Shift+F8) wird nur eine Programmanweisung ausgeführt. Mit
dem Prozedurschritt überspringt der Debugger Unterprogramme, d.h. die Unterprogramme
werden ausgeführt ohne dass der Debugger das Programm anhält.
• CursorpositionMit der Ausführung bis zur Cursorposition (Strg+F8) kann das Programm bis zur aktu-
ellen Cursorposition ausgeführt werden, sofern die Cursorposition in einem Programmteil
liegt, der bei Ausführung durchlaufen wird.
Abbildung 10 zeigt den Debugger im Testbetrieb. Haltepunkte werden als braune Punkte am
linken Fensterrand des Editors angezeigt. Die aktuelle Programmposition wird in den Quellen
gelb hinterlegt und zudem am linken Fensterrand durch einen gelben Pfeil markiert.
E. Baeck
3. DIE VBA-IDE Seite 13
Um den Zustand eines Programms prüfen zu können bietet die IDE die folgenden Einblicke.
• DirektbereichDer Direktbereich ist ein Fenster, in das vom Programm aus mit der Objektfunktion
—debug.print— direkt geschrieben werden kann. In dieses Fenster können Testausdrucke
geschrieben werden, wenn z.B. ein Einzelschritt-Debuggen zu aufwendig wäre (z.B. Test
bei zahlreichem Schleifendurchlauf).
• LokalUm die Transparenz mit wenig Aufwand zu gewährleisten, werden im Lokal -Fenster alle
lokalen Variabelen und eventuelle Programmrückgabewerte ausgegeben.
• ÜberwachungsausdrückeEin Überwachungsausdruck ist eine Variabel oder ein Ausdruck mit mehreren Variablen.
Überwachungsausdrücke können zum bedingten Anhalten eines Programmlaufes eingesetzt
werden.
19.10.2011
Seite 14 Bauinformatik - Teil 1 - Übungsskript / 2011
4 VBA-Interface
Der Codegenerator der IDE verbindet Ereignisse (Klicken, Maus schieben, etc.) mit den
gewünschten Programmen. Dazu ist zunächst ein Steuerelement (hier eine Schaltfläche) zu er-
zeugen. Die Eigenschaften des Steuerelements sind im Eigenschaftsfenster zu bearbeiten.
Abbildung 11: VBA-IDE
Nach Doppelklick auf das Steue-
relement wird ein Rahmen einer
Klick-Ereignisfunktion im ent-
sprechenden Tabellenordner der
Tabelle, in der das Steuerelement
erzeugt wurde, geschrieben.
Ereignisfunktionen verknüpfen
Ereignisse eines Steuerelements
mit dem zu implementierenden
Programmcode.
4.1 Beispiel 1 in 6 Schritten
Im folgenden Beispiel2 wird ein Programm implementiert, dass über eine Schaltfläche gestartet
alle ganzen Zahlen aus einem vorgegebenen Intervall aufsummiert.
4.1.1 Schritt 1: Gestaltung der Oberfläche
Abbildung 12: Beispiel: Schritt 1
In einem ersten Schritt wird die Pro-
grammoberfläche in einer Tabelle zu-
sammengestellt. Es sind die Felder VON
und BIS anzulegen, die die Intervall-
grenzen enthalten werden. Zudem ist
ein Feld SUM anzulegen, in das das
zu schreibende Programm den Ergeb-
niswert eintragen wird. Auf die Vergabe
der Namen (hier: VON, BIS und SUM )
sollte nicht verzichtet werden, da das
Programm Felder in einfacher Weise über Namen ansprechen kann und zudem eine Kopplung
2Das Programm ist als Beispiel1 in der Beispiel-Sammlung zur Veranstaltung enthalten.
E. Baeck
4. VBA-INTERFACE Seite 15
an das Oberflächenlayout ausgeschlossen wird. Die Schaltfläche ist mit der Werkzeugleiste Steu-
erelemente zu generieren.
4.1.2 Schritt 2: Gestaltung der Steuerelemente
Abbildung 13: Beispiel: Schritt 2
Nach dem Erzeugen der Schaltfläche (ei-
nes Steuerelements) ist diese zunächst
im Entwurfsmodus, d.h. die Eigenschaf-
ten sind zu bearbeiten, Ereignisfunk-
tionen werden automatisch durch einen
Doppelklick generiert.
Die Standardbezeichnung einer Schalt-
fläche ist CommandButton1. Dies ist
der Objektname unter dem ein Objekt
(hier die Schaltfläche) im Programmco-
de angesprochen werden kann.
Die Schaltfläche soll nun ein Ereignis
auslösen. Der Klick auf die Schaltfläche
soll das Programm starten. Dazu ist der
schon automatisch angelegte Rahmen der Ereignisfunktion CommandButton1_Click() mit dem
entsprechenden Programmcode zu füllen.
Die Syntax eines Ereignisfunktionsnamens wird in VBA wie folgt aufgebaut. Der erste Teil
des Namens (der Text vor dem _) ist der Name des Objekts (hier: CommandButton1). Der
zweite Teil des Namens ist der Bezeichner für das Ereignis (hier: Click()). Rahmen für weitere
Ereignisfunktionen werden automatisch nach Auswahl eines Ereignisses aus der Ereignisliste
(siehe Abbildung 13) erzeugt.
Wird z.B. das Ereignis LostFocus ausgewählt, d.h. Verlust des Eingabefokus, dann wird der
Rahmen der Ereignisfunktion CommandButton1_LostFocus() erzeugt. Um die Wirkungswei-
se einer Ereignisfunktion zu studieren, kann in diese einfach der Aufruf einer Meldungsbox
MsgBox "Meldungstext" eingetragen werden. Damit wird immer bei Auftreten des Ereignisses
eine Meldungsbox in EXCEL ausgegeben.
19.10.2011
Seite 16 Bauinformatik - Teil 1 - Übungsskript / 2011
4.1.3 Schritt 3: Generieren eines Moduls für Funktion Summe
Abbildung 14: Beispiel: Schritt 3
Mit einem Rechtsklick auf den Objekt-
browser öffnet sich ein Menü mit der
Funktion Einfügen/Modul. In den ein-
gefügten Modul ist der Programmcode
einzutragen. Der Name des Moduls wird
in den Eigenschaften auf Beispiel1 ab-
geändert.
Das noch zu implementierende Pro-
gramm Summe wird nun aus der
Ereignisfunktion für das Klickereignis
CommandButton1_Click() aufgerufen. Dazu ist die Zeile Beispiel1.Summe in die Ereignisfunk-
tion einzutragen.
Damit ergibt sich für die Ereignisfunktion folgender Code.
Private Sub CommandButton1_Click()
Beispiel1.Summe
End Sub
4.1.4 Schritt 4: Das Programm Summe
Um das Programm Summe zu implementieren, ist der Modulordner Beispiel1 zu öffnen und der
Programmcode im Editor wie folgt einzugeben.
’ Summation aller ganzer Zahlen aus einem Zahlenintervall
Public Sub Summe() ’ Öffentliches Programm "Public Sub"
Dim ivon As Integer ’ Deklarationen mit Dim
Dim ibis As Integer
Dim isum As Integer
Dim i As Integer
’ Initialisierung
isum = 0
ivon = Range("VON")
ibis = Range("BIS")
’ Schleife über das Intervall
For i = ivon To ibis
isum = isum + i
Next
’ Rückgabe des Summenwerts nach EXCEL-Tabelle
Range("SUM") = isum
End Sub
E. Baeck
4. VBA-INTERFACE Seite 17
In nachfolgender Tabelle werden die Anweisungen des Summe-Programms erläutert.
Schlüssel Bemerkung
Public gibt ein Unterprogramm, eine Funktion oder eine Variable frei für Zugriffe aus an-
deren Modulen.
Sub leitet ein Unterprogramm ein.
Dim explizite Deklaration der Variablen.
Integer Ganzzahlige Variable, Länge 2 Byte.
Range Das Range-Objekt liefert einen Zugriff auf EXCEL-Tabellenfelder. Als Argument ist
die EXCEL-Adresse, z.B. "VON" oder auch "C1", anzugeben. Mit Range wird sowohl
aus einem Tabellenfeld gelesen als auch geschrieben (z.B. a = Range("TEST") und
Range("TEST") = a).
For Mit For · · · Next wird eine Schleife implementiert. Die Laufvariable i durchläufthierbei den Wertebereich von ivon bis ibis in Schritten von eins.
End Sub schließt das Unterprogramm ab.
Tabelle 3: Anmerkungen zum Programm Summe
4.1.5 Schritt 5: Programmtests
Abbildung 15: Beispiel: Schritt 5
Bei einem ersten Programmtest könn-
te die in Abbildung 15 dargestellte
Fehlersituation auftreten: Die Methode
Range für das Object _Global ist fehl-
geschlagen, d.h. der Zugriff auf ein Ta-
bellefeld (Lesen oder Schreiben) konn-
te nicht durchgeführt werden. Grund
dafür ist oft die Angabe einer falschen
oder unbekannten Range-Adresse. In
diesem Fall wurde vergessen, die EX-
CEL-Tabellenfelder, auf die zugegriffen
werden soll, mit einem entsprechenden
Namen zu bezeichnen.
19.10.2011
Seite 18 Bauinformatik - Teil 1 - Übungsskript / 2011
Abbildung 16: Beispiel: Schritt 6
Wenn in der Absturzmeldung die Funk-
tion Debuggen aufgerufen wird, springt
der Programmzeiger in die Zeile des
Quellcodes, in der der Fehler aufgetre-
ten ist: Gelbe Zeile mit dem Schlüssel-
wort Range. Hier führt der Aufruf zum
Programmabsturz. Der Grund kann nur
eine unzulässige EXCEL-Adresse sein.
Lösung: Vergabe der noch fehlenden Be-
zeichner in der Tabelle.
4.1.6 Schritt 6: Das Ziel
Abbildung 17: Beispiel: Schritt 6
Um ein Programm zu testen, sind Auf-
gabenstellungen mit bekanntem Ergeb-
nis zu suchen. Ein Programmtest ist
dann erfolgreich, wenn eine hinreichen-
de Anzahl von Testergebnissen repro-
duziert werden kann. Ein absturzfrei-
er Durchlauf des Programms alleine ist
natürlich als Test nicht ausreichend.
Das Programm Summe berechnet die
Summe der ganzen Zahlen von 1 bis 7
zu 28. Auf der rechten Seite der Tabelle
(siehe Abbildung 17) erfolgt zur Kontrolle eine Berechnung mit der Standard-EXCEL-Funktion
Summe. Die Ergebnisse sind identisch.
E. Baeck
5. ELEMENTARE ALGORITHMEN Seite 19
5 Elementare Algorithmen
Die Implementierung einfacher Algorithmen in VBA erfolgt in einer EXCEL-Tabelle. Die Ein-
gabefelder (gelb hinterlegt) werden mit einem Namen versehen. Über diesen Namen werden die
Eingabedaten aus den Feldern in den VBA-Code eingelesen (Funktion Range). Die Ergebnis-
werte werden ebenfalls mit der Funktion Range oder im Fall der Ausgabe einer Tabelle mit der
Funktion Cells in die Tabelle geschrieben.
Das Programm wird mit einer Schaltfläche gestartet. Es ist darauf zu achten, dass der Programm-
Code in einem Modul und nicht im Tabellenobjekt abgelegt wird.
5.1 Fakultät
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln. Die Benutzeroberfläche
ist nach Abbildung 18 zu implementieren. Die Zwischenwerte der Produktbildung sind in ei-
ner Tabelle auszugeben. Die Abhängigkeit des realisierbaren Definitionsbereichs vom gewählten
Datentyp (integer, long, etc.) ist zu untersuchen.
n! = 1 · 2 · · · · · (n− 1) · n =n∏
i=1
i (2)
Abbildung 18: Oberfläche zur Fakultät und zu Binomialkoeffizienten
5.2 Binomialkoeffizient
Es ist der Binomialkoeffizient für zwei beliebige natürliche Zahlen n und m zu ermitteln. Die
Benutzeroberfläche ist nach Abbildung 18 zu implementieren. Die Zwischenwerte der Produkt-
bildung sind in einer Tabelle auszugeben. Die Abhängigkeit des realisierbaren Definitionsbereichs
vom gewählten Datentyp (integer, long, etc.) ist zu untersuchen. nm
= n · n− 1 · · · · · n−m+ 1m!
=n!
m! · (n−m)!(3)
19.10.2011
Seite 20 Bauinformatik - Teil 1 - Übungsskript / 2011
5.3 Winkel zwischen 2 Vektoren des Rn
Der Winkel α zwischen 2 Vektoren ~a und ~b aus dem Rn kann mit Hilfe des Skalarprodukts wie
folgt berechnet werden.
α = arccos
(~a ·~b
||~a|| · ||~b||
)(4)
Das Skalarprodukt zwischen den Vektoren ~a und ~b berechnet sich wie folgt.
~a ·~b =n∑
i=1
ai · bi (5)
Die Beträge im Nenner können wie folgt mit dem Skalarprodukt berechnet werde.
||~a|| =√~a · ~a (6)
5.3.1 Pseudocode für Hauptprogramm
Der Pseudocode für das Programm könnte wie folgt lauten.
(1) Einlesen der Vektoren aus Tabelle und Prüfung der Dimensionen.
(2) Berechnung des Betrages von ~a mit der Funktion a = SProd(~a,~a).
(3) Berechnung des Betrages von ~b mit der Funktion b = SProd(~b,~b).
(4) Berechnung des Skalarprodukts von ~a mit ~b mit der Funktion x = SProd(~a,~b).
(5) Winkelberechnung α = arccos(x
a · b)
5.3.2 Pseudocode für Funktion SProd
Der Pseudocode für die Funktion des Skalarproduktes könnte wie folgt lauten.
(1) Bestimme die Dimension der Vektoren (Muß identisch sein!).
(2) Initialisiere die Summenvariable (s = 0).
(3) Setze Vektorindex auf Startposition (i = 1)
(4) Berechne für die Position i das Produkt p = a(i) ∗ b(i)
(5) Summiere das Produkt auf die Summenvariable s = s+ p
(6) Inkrementiere den Vektorindex um 1
(7) Falls i ≤ n gehe zu (4).
(8) Beende die Routine mit der Übergabe des Summenwertes s.
E. Baeck
5. ELEMENTARE ALGORITHMEN Seite 21
5.4 Reihenentwicklungen
Im folgenden wird die Entwicklung der Funktionen sinus, cosinus und der e-Funktion diskutiert.
5.4.1 Entwicklung der Funktion sinus
Es ist ein Programm zu implementieren, das die Funktion sinus mit Hilfe der Potenzreiehen-
entwicklung (siehe unten) berechnet. Die Eingabensgrößen sind aus der Tabelle abzugreifen, die
Ergebnisgrößen sind in den Ausgabebereich der Tabelle zu schreiben.
Beachten Sie bei der Umsetzung der Gleichung 7, dass die Fakultäten im Nenner der Terme zu
numerischen Problemen führen können, wenn sie unabhängig vom Zähler berechnet werden.
Zu beachten ist ferner (siehe Tabelle in Abbildung 19):
• Der X-Wert ist aus der Tabelle in[0]
zu übernehmen.
• Die Genauigkeit der Approximation ist aus der Tabelle zu übernehmen.
• Es ist berücksichtigen, dass das Argument der Reihenentwicklung (siehe Gleichung 7)gegebenenfalls in rad umzurechnen ist.
• In den Ausgabebereich der Tabelle ist der Index des Terms, der Wert des Terms und dieaktuelle Summe zu schreiben.
• Bevor die Ergebniswerte in die Tabelle ausgegeben werden, sind die Zeilen des Ergebenis-bereichs zu löschen.
sin(x) = x− x3
3!+x5
5!− · · ·+ (−1)n x
2n+1
(2n+ 1)!± . . . (7)
Abbildung 19: EXCEL-Tabelle zur Reihenentwicklung
19.10.2011
Seite 22 Bauinformatik - Teil 1 - Übungsskript / 2011
5.4.2 Reihenentwicklung weiterer Funktionen
Analog zur Entwicklung der sinus-Funktion kann für die Funktion cosinus(x) eine Reihenent-
wicklung programmiert werden (siehe Gleichung 8).
cos(x) = 1− x2
2!+x4
4!− · · ·+ (−1)n/2 x
2n
(2n)!± . . . (8)
Analog zur Entwicklung der sinus-Funktion kann für die Funktion f(x) = ex eine Reihenent-
wicklung programmiert werden (siehe Gleichung 9).
ex = 1 +x
1!+x2
2!+ · · ·+ x
n
(n)!. . . (9)
5.5 Newton-Verfahren
5.5.1 Der Algorithmus des 1-dimensionalen Falls
Abbildung 20: Graphische Darstellung des
Newton-Verfahrens
Mit dem Newton-Verfahren kann iterativ eine Null-
stelle einer Funktion f(x) bestimmt werden. Hierfür
sind ein Startwert x0, eine Genauigkeit � und eine
maximale Iterationsanzahl nx vorzugeben.
Durch Nullsetzen einer Taylor-Reihenentwicklung
um den Punkt xn kann die Iterationsformel des
Newton-Verfahrens abgeleitet werden.
f(xn+1) = f(xn) + (xn+1 − xn) · f ′(xn) = 0 ⇒ (10)
xn+1 = xn −f(xn)
f ′(xn)(n = 0, 1, 2, . . . ; x0 gegeben)
Die Ableitung der Funktion f(x) kann durch den Differenzenquotienten angenähert werden.
f ′(x) =f(x+ h/2)− f(x− h/2)
hz.B. mit h = 0.001 (11)
E. Baeck
5. ELEMENTARE ALGORITHMEN Seite 23
5.5.2 Pseudo-Code
Das Problem kann wie folgt in einem Pseudo-Code (umgangsprachliche Beschreibung) formuliert
werden.
1. Wähle einen Startwert x.
2. Berechne f(x)
3. Falls |f(x)| < �, dann Nullstelle gefunden.
4. Falls maximale Anzahl Iterationen erreicht, Ausgabe Fehlermeldung.
5. Berechne f ′(x).
6. Falls |f ′(x)| < �, Ausgabe einer Fehlermeldung.
7. Nächsten x-Wert berechnen: x⇐ x− f(x)f ′(x)
8. Nächster Iterationsschritt mit Punkt 2.
Anmerkung:
Ein Problem tritt auf, wenn die Ableitung der Funktion verschwindet. Geometrisch: es gibt
keinen Schnittpunkt zwischen Tangente und x-Achse.
5.5.3 Programmablaufplan
Abbildung 21: Programmablaufplan des
Newton-Verfahrens
Das Newtonverfahren geht aus von einem Startwert
x. Dieser wird zunächst eingelesen. Die Iterations-
schleife beginnt mit der Berechnung des Funktions-
wertes f(x). Darauf folgt die Nullabfrage. Falls der
Absolutbetrag des Funktionswertes kleiner als die
Genauigkeit � ist, wird die Iterationsschleife abge-
brochen und die Lösung ausgegeben.
Es folgt die Prüfung der zulässigen Iterations-
durchläufe.
Nach der Berechnung der Tangentensteigung f ′(x)
wird, falls diese nicht verschwindet, ein neuer x-
Wert berechnet und ein neuer Schleifendurchlauf ge-
startet.
19.10.2011
Seite 24 Bauinformatik - Teil 1 - Übungsskript / 2011
5.5.4 Nassi-Schneidermann-Diagramm
Abbildung 22: NS-Diagramm des Newton-Verfahrens
Das Nassi-Shneiderman-
Diagramm zeigt den linearen
Fluß des Programms. Es werden
keine Sprünge (Goto) durch
Verbinder nahe gelegt.
Im Fall des Erreichens der ma-
ximal vorgegebenen Iterationsan-
zahl und im Fall verschwindender
Tangentensteigung wird das Pro-
gramm direkt mit einer entspre-
chenden Meldung abgebrochen.
5.5.5 Die Oberfläche
Abbildung 23: EXCEL-Tabelle zum Programm
In den gelb hinterlegten Tabel-
lenfeldern C3-C5 werden die Ein-
gangsgröße, der Startwert x, die
maximal zulässige Anzahl der
Iterationen und die gewünsch-
te Genauigkeit eingegeben. Mit
der Schaltfläche wird das Pro-
gramm gestartet. In den Ausga-
befeldern C8-C10 werden die Er-
gebnisgrößen, die eventuell gefun-
dene Nullstelle, der durchlaufenen
Iterationen und eine Kommentie-
rung des Iterationsverlaufs ausge-
geben.
Im unteren Teil der Tabelle werden die Ergebnisse der einzelnen Interationsschritte ausgegeben.
E. Baeck
5. ELEMENTARE ALGORITHMEN Seite 25
5.5.6 Animation des Verfahrens
Start der Animation durch Anklicken
Abbildung 24: Animation des Newton-Verfahrens.
Die animierte Darstellung des Newton-
verfahrens zeigt die Annäherung an die
Nullstelle durch konsequentes Verfol-
gen der Funktione (blaue Linie) entlang
ihrer Tangente (rote Kurve).
19.10.2011
NewtonIteration_Ani.gifMedia File (image/gif)
Seite 26 Bauinformatik - Teil 1 - Übungsskript / 2011
6 Elementare Sortiert-Algorithmen
Einfache Sortieralgorithmen können problemlos zum Sortieren kleiner Datenmengen eingesetz
werden. Da der Sortieraufwand zumeist in quadratischer Ordnung O(n2) der zu sortierendenDatensätze anwächst, sind große Datenmengen i.A. mit diesen Algorithmen nicht mehr wirt-
schaftlich zu sortieren.
Im folgenden werden zwei der einfachen Sortieralgorithmen dargestellt,
• Select-Sort oder Auswahlsortierung und
• Bubble-Sort
6.1 Select-Sort
Abbildung 25: SelectSort: SORTIERANGS
Select-Sort wählt aus einer zu sortie-
renden Menge das größte Element aus
und tauscht es mit dem Element der
ersten Position. Aus den verbleiben-
den Elementen wählt er wiederum das
größte Element aus und tauscht es mit
dem Element der zweiten Position. Die-
ses Verfahren wird solange fortgesetzt,
bis die zu durchsuchende Menge auf
ein Element zusammen geschrumpft ist.
Der so implementierte Algorithmus ist
offensicht von quadratischer Ordnung,
d.h. O(n2), da in einer Schleife alle Po-sitionen neu besetzt werden müssen und
in dieser in einer inneren Schleife der
Datenbestand - zwar nicht zur Gänze -
durchlaufen wird, um das aktuell größte
Element zu bestimmen.
In Abbildung 25 wird das Wort SORTIERANGS alphabetisch sortiert. In jedem Schritt wird aus
der aktuellen Sortiermenge der kleinste Buchstabe im Sinne des Alphabets gesucht. Im ersten
Schritt wird das A gefunden und mit dem Buchstaben der ersten Position S getauscht. Der erste
Buchstabe der aktuellen zu durchsuchenden Menge wird fett berandet dargestellt. Der kleinste
Buchstabe wird farbig markiert. In nachfolgenden Zeile wird zum einen der Buchstabentausch
dargestellt, zum anderen wird die neue Suchmenge und ihr kleinster Buchstabe dargestellt. Um
die einzelnen Suchschritte visuell abzusetzen wird für jeden Such- und dazugehörigen Tausch-
schritt eine eigene Hintergrund-Farbe gewählt.
E. Baeck
6. ELEMENTARE SORTIERT-ALGORITHMEN Seite 27
6.2 Bubble-Sort
Die Idee des Bubble-Sort-Algorithmuses folgt der Vorstellung von aufsteigenden Luftblasen in
einer Flüssigkeit. Vom letzten Element an wird in einer inneren Schleife vom ersten Element an
bis zum betrachteten dann eine Vetauschung ausgeführt wenn das Element der inneren Schleife
größer (bzw. kleiner)3 ist als das betrachtete. So steigen die größeren (bzw. kleineren) Element
nach vorne auf wie Luftblasen in einer Flüssigkeit (Bubble-Sort).
Im Vergleich zu SelectSort benötigt BubbleSort einen unnötig hohen Aufwand des Vertauschens.
3Abhängig von der Sortierrichtung steigt entweder das kleinere oder größere Element auf Richtung Platz 1.
19.10.2011
Seite 28 Bauinformatik - Teil 1 - Übungsskript / 2011
7 Arbeiten mit Dateien
7.1 Dateioperationen für sequentiellen Zugriff
Die Datei wird geöffnet unter Vorgabe des Dateinamens und des Verarbeitungskenners (Input,
Output, Append). Die Zugriffe auf die Datei erfolgen unter Vorgabe der Kanalnummer.
In nachfolgender Tabelle werden wesentliche Dateifunktionen zusammengefaßt.
Funktion Beschreibung Beispiel
Open Öffnen einer Datei. Open "bsp.txt" For Input As #1
Input Einlesen aus einer Datei. Input #1, x, y
Write Schreiben ı́n eine Datei. Write #1, x, y
Close Schließen der Daten. Close #1
Input Line Einlesen einer Datenzeile aus Textdatei. Input Line #1, s
EOF Dateiende erkennen. Do While Not EOF(1)
Die EXCEL-Anwendung liefert einen Standarddialog zur Suche einer Datei. Der Aufruf dieses
Dialogs wird in nachfolgendem Code dargestellt.
Die im nachfolgenden Beispiel dargestellte Funktion wird als Steuerprogramm zur Berechnung
des Torsionsträgheitsmomentes nach der Brendt’schen Formel eingesetzt (siehe Gleichung 12).
Im 2. Schritt wird die Methode GetOpenFilename des Application-Objekts4 aufgerufen. Die
Methode startet den allgemeinen Windows-Datei-Öffnen-Dialog. Als Rückgabewert liefert die
Methode den Namen der gewählten Datei. Wird der Dialog vom Anwender abgebrochen, so
wird der String Falsch zurückgegeben.5
’ Dateinamen ermitteln
Private Sub CommandButton1_Click()
’ 1: Initialisierung
Call Brendt.Init
’ 2: Dateinamen festlegen
datei$ = Application.GetOpenFilename( _
fileFilter:="Textdateien (*.txt),*.txt")
’ 3: Starten der Berechnung
If Not datei$ = "Falsch" Then
Range("Datei") = datei$
’ Einlese der Datei und Berechnung
Call Brendt.ProfilLesen(datei$)
4Das Objekt Application, siehe auch OOP, stellt alle Objekte der EXCEL-Anwendung zur Verfügung. Objekt
der EXCEL-Anwendung sind z.B. die Listen der Tabellen und Diagramme, sind auch die Range-Objekte, die die
Kommunikation mit den Tabellenfeldern ermöglicht.5Mit der Rückgabe Falsch im Fall des Abbruchs ist es unzulässig eine Datei mit dem Namen Falsch anzuspre-
chen, was i.A. kein Problem sein dürfte.
E. Baeck
7. ARBEITEN MIT DATEIEN Seite 29
Call Brendt.ProfilBerechnen
End If
End Sub
7.2 Torsionsträgeheitsmoments nach 2. Brendt’scher Formel
In einer Datei wird eine beliebige, konvexe Kontur eines Profils durch Punkte auf der Mit-
telfläche im üblichen y-z-Koordinatensystem beschrieben (x-Achse ist Profillängsrichtung). Zu
jedem Punkt wird als dritter Wert die Dicke des Profils am Ort des Punktes angegeben.
Das Programm zur Berechnung des Torsionsträgheitsmomentes nach der 2. Brendt’schen Formel
erhält die folgenden Optionen.
• Einlesen und Speichern der Datei in dynamisch angelegten Feldern (Arrays), wobei dieInformation eines Punktes in einer benutzerdefinierten Strukur (TYPE/END TYPE) ge-
halten werden soll. Um eine zyklische Profilbeschreibung zu erleichtern, sind die Daten des
ersten Punktes als zusätzlicher der Punktliste anzuhängen.
• Ausgabe der Daten des Feldes in einer Tabelle. Die Altdaten werden zunächst mit derFunktion Löschen aus der Tabelle entfernt.
• Ausgabe der Profilkontur in einem Diagramm in Form eines X-Y-Plots.
• Berechnung des Torsionsträgheitsmoments mit Hilfe der 2. Brendt’schen Formel.
IT =(2 ·Am)2∮ ds
t
(12)
Im Fall dünnwandiger Profile kann die Gleichung 12 wie folgt vereinfacht werden.
1. Zunächst ist das Linienintegral durch die Summe∑N
i=1
Liti
zu berechnen, wobei
Li =√
(yi − yi+1)2 + (zi − zi+1)2 und ti = 0.5 · (ti + ti+1).
2. Die Fläche der Kontur kann mit der folgenden Formel zur Bestimmung einer Polgon-
fläche ermittelt werden.
Am =
N∑i=1
yi · zi+1 − zi · yi+12
(13)
mit: yN+1 = y1, und zN+1 = z1
19.10.2011
Seite 30 Bauinformatik - Teil 1 - Übungsskript / 2011
8 Das Clapeyron-Problem
Mit der Gleichung nach Clapeyron können die Stützmomente eines n-Feldträgers (Durchlauf-
träger) berechnet werden. Die Herleitung der Gleichung6 aus dem Kraftgrößenverfahren wird in
Abschnitt A dargestellt.
Der Abschnitt zeigt exemplarisch die wesentlichen Schritte der Entwicklung eines Berechnungs-
programms mit moderner Eingabeoberfläche und entsprechender Datenhaltung.
8.1 Motivation
In diesem Abschnitt wird die Entwicklung eines Programms zur Berechnung der Stützmomente
eines n-Feld-Durchlaufträgers dargestellt. Es werden als Belastungen Streckenlasten, Punktla-
sten und Punktmomente vorgesehen, die beliebig auf den Feldern des Trägers positioniert werden
können.
Die Entwicklung erfolgt den Schritten:
1. Gestaltung der Eingabe in einer Benuzteroberfläche.
2. Modellierung der Datenstrukturen und Visualisierung im ER-Modell.
3. Algorithmus zur Generierung der Modell-Datenstrukturen.
4. Algorithmus zum Aufbau des linearen Gleichungssystems (A · x = b).
5. Cholesky-Algorithmus zur Zerlegung der Matrix A = L · LT .
6. Berechnung der Stützmomente durch Vorwärts- Rückwärtseinsetzen.
7. Ausgabe der Ergebnisgrößen in der Benutzeroberfläche.
8.2 Oberflächenlayout und Eingabe
Als Eingabeoberfläche wird eine EXCEL-Tabelle eingesetzt, in der die Felder bzw. die Belastun-
gen der Felder in Listenform eingetragen werden. Die Eingabetabelle orientiert sich ausschließlich
an den Bedürfnissen des Anwenders und enthält keinerlei Daten, die nur durch die Organisation
der Daten im Programm (Datenstrukturen) betreffen.
Generell sollte sich die Eingabeoberfläche eines Programms nur an der Sicht des Anwenders
orientieren. So sollten keine für die Gestaltung der Datenstruktur wichtigen Parameter als Ein-
gabeparameter vorgesehen werden, da deren Notwendigkeit dem Anwender kaum vermittelbar
ist.
Die Anzahl der Felder z.B. ergibt sich aus ihrer Beschreibung. Die Vorgabe der Anzahl der
gewünschten Felder wäre somit für den Anwender eine redundante Eingabe. Die Anzahl der
Felder ist für die Dimensionierung der Feldvariabeln erforderlich und ist vom Programm aus
den Eingaben des Anwenders abzuleiten.
6Die Gleichung von Clapeyron wird auch 3-Momentengleichung genannt.
E. Baeck
8. DAS CLAPEYRON-PROBLEM Seite 31
Abbildung 26: Eingabe Oberfläche des Programms
Im Vorschlag der
Eingabe werden
die Felder von
links nach rechts
eingegeben. Die
Feldnummerierung
ergibt sich auto-
matisch aus der
Reihenfolge.
8.2.1 Feldbeschreibung
Die Felddaten können in Form einer Liste eingegeben werden. Die Reihenfolge entspricht der
Feldreihenfolge vom Festlager (links) hin zum Gleitlager (rechts), siehe z.B. Abbildung 43. Pro
Feld werden
• die Feldlänge in [cm] und
• das Verhältnis der Flächenträgheit zur Referenzträgheit Ic
eingegeben. Das Import-Programm liest die Datensätze von oben nach unten aus der Tabelle
und schreibt die erfassten Daten in ein Feld aus entsprechenden Datenstrukturen. Die Dimen-
sionierung ergibt sich aus der Anzahl der Datensätze.
8.2.2 Lastbeschreibung
Die Lastdaten können beliebig in Form einer Liste eingegeben werden. Ein Lastdatensatz enthält
die folgenden Daten.
• Die Lastfallnummer, Wahl der rechten Seite (siehe Abschnitt D).
• Die Feldnummer beschreibt den Ort der zu erfassenden Last.
• Der Belastungstyp:
– Typ 1, die Streckenlast
Parameter: Lastordinate q, Abszisse des Lastschwerpunktes a und Lasteinlei-
tungslänge c.
– Typ 2, die Punktlast
Parameter: Lastordinate P , Abszisse der Lasteinleitung a.
– Typ 3, das Punktmoment
Parameter: Lastordinate M , Abszisse der Lasteinleitung a.
• Lastordinate für Typ 1, q, in [kN/cm], für Typ 2, P , in [kN] und für Type 3 M in [kNcm].Dieses Eingabefeld und alle weiteren beschreiben die Details der gewünschten Last.
19.10.2011
Seite 32 Bauinformatik - Teil 1 - Übungsskript / 2011
• Der Parameter a beschreibt den Abstand des Lastschwerpunktes vom linken Lager in [cm](für alle Typen relevant).
• Der Parameter c beschreibt die Länge der Lasteinleitung in [cm] (nur für Typ 1 relevant).
8.3 ER-Modell der Datenstruktur
Das ER-Modell (nach Chen siehe Abschnitt B) der Datenstruktur des Clapeyron-Problems be-
steht aus zwei Teilen, dem Datenmodell der Struktur und dem Datenmodell der Belastung.
In den Diagrammen zum Struktur- und Lastdantenmodell des Clapeyron-Problems werden Con-
tainer -Objekte kursiv geschrieben. Container -Objekte sind Objekte, die eine beliebige Anzahl
von Objekten aufnehmen können. In diesem Beispiel werden einfache Datenfelder eingesetzt. In
VBA werden diese durch die Vorgabe des Index-Bereiches vereinbart.
Beispiele 1: Statische Deklaration eines Containers für 20 Felder
Dim FA(1 to 20) As Feld
Beispiele 2: Dynamische Deklaration eines Containers für n Felder
Dim FA() As Feld
...
n = ...
Redim FA(1 to n)
8.3.1 ER-Modell der Struktur
Abbildung 27: ER-Modell der Struktur
Das System des Durchlauf-
trägers besteht aus mehreren
Feldern. Diese werden in dem
Objekt Felder zusammen ge-
faßt. Die Anzahl der Felder ist
theoretisch Unbeschränkt, somit
eine 1-n-Beziehung. Ein Feld
hat die Attribute Länge und
Trägheit (siehe Abbildung 27).
Aufgabe 8.3.1:
Es sind dem ER-Modell entsprechende Datenstrukturen (Schlüsselwort Type ... End Type) in
VBA zu entwickeln.
E. Baeck
8. DAS CLAPEYRON-PROBLEM Seite 33
8.3.2 ER-Modell der Belastung
Abbildung 28: ER-Modell der Belastung
Das Datenmodell der Bela-
stung geht aus von einem
Container (Liste oder Feld)
der Lastfälle. Der Container
kann beliebig viele Lastfälle auf-
nehmen (1-n-Beziehung). Jeder
Lastfall enthält wiederum drei
Container. Der erste Contai-
ner enthält die Streckenlasten,
der zweite die Punktbelastun-
gen und der dritte die Punktmo-
mente. Jeder dieser drei Bezie-
hungen ist eine 1-n-Beziehung,
da jeder Container beliebig viele
Lasten aufnehmen kann.
Ein Lastfall hat das Attribut Nr,
er weiß sozusagen, wie er heißt.
Die Lastarten haben als At-
tribute ihre Parameter, Lastor-
dinate, Lastabszisse und die
Streckenbelastung hat zudem
das Attribut der Lasteinlei-
tungslänge.
Aufgabe 8.3.2:
Es sind dem ER-Modell entsprechende Datenstrukturen (Schlüsselwort Type ... End Type) in
VBA zu entwickeln.
19.10.2011
Seite 34 Bauinformatik - Teil 1 - Übungsskript / 2011
8.4 Aufbau der Datenstruktur
In diesem Abschnitt wird ein Algorithmus zum Aufbau der Datenstrukturen für System und
Belastung entwickelt.
8.4.1 Die Datenstruktur des Systems
Abbildung 29: Aufbau der Strukturdaten
Die Daten eines Feldes werden in der Struk-
tur (Type) Feld abgespeichert. Als Contai-
ner wird zunächst ein Datenfeld eingesetzt.
Dieses wird dynamisch an die zu speichernde
Datenmenge angepaßt (dynamisches Allokie-
ren). Da die Anzahl der Felder nicht explizit
festgelegt wird, ist diese zunächst aus den Ein-
tragungen der Tabelle zu ermitteln. Die aus-
gefüllten Tabellenfelder der Spalte Feldlänge
(siehe Abbildung 26) werden im ersten Durch-
lauf gezählt, um den Container dimensionie-
ren zu können.
Wenn die Feldanzahl feststeht, wird der Con-
tainer entsprechend dimensioniert. In einem
zweiten Durchlauf über die Tabelle wird die
Feldlänge und das Trägheitsverhältnis eines
Feldes ausgelesen und in die Feldstruktur ein-
getragen. Die Feldstruktur wird in den Container aufgenommen.
Aufgabe:
Es ist ein Programm zu implementieren, dass aus der Tabelle der Abbildung 26 die Daten der
Felder ausliest und diese in einem Container passender Größe abspeichert.
Hinweis:
Der Container wird mit dem Schlüsselwort Dim [Bezeichnung]() As [Type] und
ReDim [Bezeichnung](1 to nFeld) angelegt. Der Zugriff auf die Tabellenfelder erfolgt
mit dem Objekt Cells (i,j), wobei Cells (1,1) der Tabellenadresse A1 entspricht.
E. Baeck
8. DAS CLAPEYRON-PROBLEM Seite 35
8.4.2 Die Datenstruktur der Belastungen
Abbildung 30: Ermitteln extremaler Lastfallnum-
mern
Der Aufbau der Datenstrukturen für die Bela-
stungen erfolgt in drei Durchläufen. In jedem
Durchlauf werden die Datenfelder neu Einge-
lesen und nach anderen Kriterien ausgewertet.
Im ersten Durchlauf werden die extremalen
Lastfallnummern ermittelt (siehe Abbildung
30). Im Intervall zwischen den extremalen
Lastfallnummern wird ein Indexvektor aufge-
stellt, der mit der Lastfallnummer indiziert
wird.
Abbildung 31: Ermitteln der Lastdatenanzahlen
Aufbau des Lastfall-Indexvektors
In den Lastfall-Indexvektor ist in einem zwei-
ten Durchlauf
• die gefundene Lastfallnummer,
• die Anzahl der Streckenlasten zu die-sem Lastfall,
• die Anzahl der Punktlasten zu diesemLastfall und
• die Anzahl der Punktmomente zu die-sem Lastfall
einzutragen. Das Eintragen erfolgt durch
schrittweises Hochzählen der gefundenen
Lastdaten (siehe Abbildung 31).
19.10.2011
Seite 36 Bauinformatik - Teil 1 - Übungsskript / 2011
Abbildung 32: Aufbau der Last-Datenstruktur
Aufbau der Datenstruktur
Der Lastfall-Container wird im Bereich der
gefundenen Lastfallnummern angelegt, d.h.
ein Lastfall wird direkt über seine Nummer
angesprochen, auf eine kompakte Speicherung
wird hier verzichtet, da die Datenstruktur der
Belastung abgesehen von der Lastfallnummer
zunächst nur leere Container für die Lastda-
ten enthält.
In einer Schleife über den Lastfall-Indexvektor ILF wird für jeden vorhandenen Lastfall
• die Lastfallnummer aus ILF übertragen,
• falls Streckenlasten vorhanden, ein Container ausreichender Größe für diese dimensioniert,
• falls Punktlasten vorhanden, ein Container ausreichender Größe für diese dimensioniertund
• falls Punktmomente vorhanden, ein Container ausreichender Größe für diese dimensioniert.
Wie viele Streckenlasten, Punktlasten und Punktmomente vorhanden sind, ist dem entsprechen-
den Zähler des Lastfall-Indexvektors zu entnehmen (ILF(lf).sl, ILF(lf).pl und ILF(lf).pm).
Abbildung 33: Einlesen der Lastdaten
Einlesen der Lastdaten
Bevor die Lastdatensätze eingelesen wer-
den können, werden die Lastdatenzähler im
Lastfall-Indexvektor zurück gesetzt (d.h. auf
0 gesetzt). Die Einleseschleife läuft sodann
über alle Lastdatensätze. Es werden zunächst
Lastfallnummer und Lasttyp eingelesen. Der
Zähler des vorliegenden Lastfalls bzw. des
vorliegenden Lasttyps wird inkrementiert, um
ein fortlaufendes Einspeichern der Lastdaten
in den Container zu ermöglichen. Mit die-
sem inkrementierten Zähler wird sodann der
Lastdaten-Container (Streckenlast, Punktlast
oder Punktmoment) indiziert. Die Lastdaten
werde aus der Tabelle mit der Funktion Cells
gelesen und in den entsprechenden Container
übertagen (siehe Abbildung 33).
E. Baeck
8. DAS CLAPEYRON-PROBLEM Seite 37
8.5 Aufbau des Linearen Gleichungssystems
In diesem Abschnitt wird aus den Daten der Datenstrukturen der Felder und Lasten (siehe
Abschnitt 8.4) das lineare Gleichungssystem entwickelt.
8.5.1 Aufbau der Koeffizientenmatrix
Die Koeffizienten-Matrix A eines n-Feldträgers (siehe Gleichung 33) hat die Dimension (n−1)⊗(n− 1) und ist zudem (siehe Gleichung 28)
• symmetrisch mit
• Bandstruktur der Bandweite 17.
Für einen 5-Feldträger der Feldlängen l1 bis l5 ergibt sich die folgende Koeffizienten-Matrix.
A =
2 · (l1 + l2) l2 0 0
l2 2 · (l2 + l3) l3 0
0 l3 2 · (l3 + l4) l40 0 l4 2 · (l4 + l5)
(14)
Da die Symmetrie der Matrix A während der Zerlegung erhalten bleibt (siehe Abschnitt D.3),
kann auf das Abspeichern der oberen Hälfte der Matrix A verzichtet werden.
Im Fall der Clapeyron’schen Gleichung ist zudem nur die erste Nebendiagonale besetzt, d.h.
es ist nur erforderlich, die Diagonale und die erste Nebendiagonale von A zu speichern. Eine
kompakte Speicherung einer symmetrischen Bandmatrix mit Bandbreite m erfordert die folgende
Indexsubstitution.
ai,k → ai,k−i+m+1 (k ≤ i) (15)
Mit der Indexsubstitution (15) folgt für die Matrix (14)
A =
0 2 · (l1 + l2)
l2 2 · (l2 + l3)
l3 2 · (l3 + l4)
l4 2 · (l4 + l5)
(16)
7Die Bandweite einer Matrix ist gegeben durch die Anzahl der besetzten Nebendiagonalen.
19.10.2011
Seite 38 Bauinformatik - Teil 1 - Übungsskript / 2011
Abbildung 34: Aufbau der Koeffizientenmatrix
Der erforderliche Speicher für die Koeffizien-
tenmatrix eines n-Feldträger ergibt sich somit
zu (n− 1) · 2 (siehe (16)).
Die Besetzung der Matrix folgt aus (16). In die
erste Spalte werden die Feldlängen geschrie-
ben, wobei die erste Feldlänge durch 0 erstetzt
wird. In der zweiten Spalte steht die zweifache
Summe aufeinander folgender Felder. Der Al-
gorithmus des Aufbaus wird in Abbildung 34
dargestellt. Die Länge des i-ten Feldes li, wird
aus dem Feld-Container abgegriffen und mit dem Trägheitsverhältnis skaliert FA(i).L/FA(i).dI
(siehe Abschnitt A)
Durch die kompakte Speicherung der Matrix reduziert sich der erforderliche Speicher wie folgt.
Akompakt
Akomplett
=2 · (n− 1)(n− 1)2
=2
n− 1(17)
Im betrachteten Beispiel des 5-Feldträgers reduziert sich der erforderliche Speicherplatz auf2
5−1 =12 = 50%. Im Fall eines 101-Feldträgers beträgt der erforderliche Speicherplatz bereits
2101−1 =
150 = 2% der Gesamtmatrix.
8.5.2 Aufbau der Lastvektoren
Die Lastvektoren werden der Einfachheit halber nicht dicht sondern im Intervall [lfmin, lfmax]
angelegt. Ob ein Lastvektor Lasten enthält oder nicht ergibt sich aus der Summe der Last-
datensätze eines Lastfalls (siehe Lastfall-Indexvektor Abschnitt 8.4.2). Für die drei Lastarten
werden Lastgeneratoren implementiert. Die generierten Lastdaten werden in den Lastvektor
aufsummiert.
Nach [1] ergibt sich für den i-ten Eintrag in den Lastvektor, d.h. für das rechte Stützmoment
des i-ten Feldes8.
• für eine Streckenlast aus linksseitigem Feld
bi,l = −Ri−1 · li−1 = −q · a · c(
1− α2 − 14· γ2)· li−1 (18)
• für eine Streckenlast aus rechsseitigem Feld
bi,r = −Li · li = −q · b · c(
1− β2 − 14· γ2)· li (19)
8Es werden die folgenden Abkürzungen verwendet: α =a
l, β =
b
l=l − al
und γ =c
l
E. Baeck
8. DAS CLAPEYRON-PROBLEM Seite 39
• für eine Punktlast aus linksseitigem Feld9
bi,l = −Ri−1 · li−1 = −P · a · b (1− α) (20)
• für eine Punktlast aus rechtsseitigem Feld
bi,r = −Li · li = −P · a · b (1− β) (21)
• für ein Punktmoment aus linksseitigem Feld10
bi,l = −Ri−1 · li−1 = ML ·(1− 3 · α2
)· li−1 (22)
• für ein Punktmoment aus rechtsseitigem Feld
bi,r = −Li · li = −ML ·(1− 3 · β2
)· li (23)
9Die Feldlängen kürzen sich aus den Termen für Punktlasten.10ML ist ein linksdrehendes (mathematisch positives) Moment. Der Vorzeichenwechsel folgt aus der Symmetrie.
19.10.2011
Seite 40 Bauinformatik - Teil 1 - Übungsskript / 2011
9 VBA-Objekte
Objekte oder Klassen im Sinne der OOP (objektorientierten Programmierung) werden in VBA
mit Klassenmodul bezeichnet. Die Klassenbestandteile (siehe UML in Abschnitt C) bestehen
aus den folgenden Komponenten.
• Die Bezeichnung des Klassenmoduls ist die Klassenbezeichnung.
• Globale Variablen eines Klassenmoduls sind die Klassenattribute.
• Die Funktionen und Programme in einem Klassenmodul sind die Methoden der Klasse.
Auf alle Mechanismen der Vererbung von Klassen (Generalisierung, Polymorphismus), die in
den meisten Programmiersprachen der OOP implementiert werden, wird in VBA aus Sicher-
heitsgründen verzichtet.
9.1 Konstruktor und Destruktor
Jeder Klassenmodul hat die folgenden Methoden.11
• Der Konstruktor Class InitializeDiese Methode wird aufgerufen, wenn eine Instanz des Klassenmoduls mit dem new -
Operator (set s = new Stab) erzeugt wird. Im Beispiel wird das Objekt Stab initiali-
siert. Es werden Fläche und E-Modul vorbelegt. Es werden die Instanzen der Knoten-
Klassenmodul für die Stabenden erzeugt.
Private Sub Class_Initialize()
Set Ka = new Knoten
Set Kb = new Knoten
Fl = 0#
Em = 210000#
End Sub
• Der Destruktor Class TerminateWenn eine Instanz eines Klassenmoduls zerstört wird, d.h. aus dem Speicher entfernt
wird, wird zunächst diese Methode aufgerufen, um dem Programm die automatisierte
Möglichkeit zu bieten, Aufräumarbeiten auszuführen. Das Zerstören einer Instanz erfolgt
mit dem nothing-Operator (set s = nothing).
Im nachfolgenden Beispiel werden vor dem Entfernen eines Stab-Objekts dessen beide
Knoten-Instanzen entfernt.12
Private Sub Class_Terminate()
Set Ka = nothing
Set Kb = nothing
End Sub
11Die Beispiele dieses Abschnitts beziehen sich auf die Objekte Knoten und Stab des Abschnitts 9.4).12Da in VBA nur dann ein Objekt vernichtet wird, wenn alle Verweise auf nothing gesetzt werden, können alle
Knoten-Instanzen durch den dargestellten Destruktor vernichtet werden.
E. Baeck
9. VBA-OBJEKTE Seite 41
9.2 Vektoren und Matrizen
Abbildung 35: Vektor- und Matrix-Objekte
Vektoren- und Matrizen können im Sinne der OOP
als Klassenmodule implementiert werden. Abbil-
dung 35 zeigt hierfür ein UML-Klassendiagramm.
Im Konstruktor (Class Initialize) werden Standard-
Dimensionen gesetzt. Im Beispiel des Anhangs wird
mit n = 3 das Feld des Vektors bzw. das Feld der
Matrix x dimensioniert. Der Vektor wird als Ein-
heitsvektor in x-Richtung initialisiert (1, 0, 0).
9.2.1 Methoden des Klassenmoduls Vektor
Methode Anmerkung
Laenge Berechnung und Rückgabe der Vektorlänge
Norm Normierung der Vektor-Instanz
Rot Multiplikation des Vektors mit einer Matrix-Instanz
SProd Skalare Multiplikation mit anderer Vektor-Instanz
SetX Belegen der Vektor-Elemente (Übergabe mit Feld)
GetX Lesen der Vektor-Elemente (Übergabe mit Feld)
Xi Lesen einer Vektor-Komponente
List Kontrolausgabe der Vektor-Attribute
9.2.2 Methoden des Klassenmoduls Matrix
Methode Anmerkung
SetX Belegen der Matrix-Elemente (Übergabe mit Feld)
GetX Lesen der Matrix-Elemente (Übergabe mit Feld)
GetK Lesen eines Matrixelements
List Kontrolausgabe der Matrix-Attribute
19.10.2011
Seite 42 Bauinformatik - Teil 1 - Übungsskript / 2011
9.3 Die Containerklasse Collection
Mit dem in VBA implementierten Klassenmodul Collection wird die Möglichkeit geschaffen, auf
einfache Weise Instanzen von Klassenmodulen in Listen-Form abzuspeichern.13 Die gespeicherte
Instanz kann optional über den Index oder über einen freiwählbaren Schlüssel angesprochen
werden. Die Collection bietet hierbei ein automatisches Speichermanagement, das jederzeit für
ausreichenden Speicher sorgt.
Die Collection bietet die foldenden Methoden.14
• AddMit Add kann eine Instanz einer Klasse in die Liste übernommen werden.
Parameter Anmerkung
Item Zeiger auf Instanz eines Objekts
Key Objektbezeichnung der Instanz
Before Objektbezeichnung für Einfügen vor
After Objektbezeichnung für Einfügen nach
Beispiel:
Das folgende Beispiel zeigt das Erzeugen zweier Instanzen des Klassenmoduls Knoten. Die
Adressen der Instanzen werden in der Collection unter den Bezeichnungen Knoten 1 und
Knoten 2 abgespeichert.
dim Kn as Knoten
set Kn = new Knoten
Liste.Add item:= Kn key:="Knoten 1"
set Kn = new Knoten
Liste.Add item:= Kn key:="Knoten 2"
• ItemMit der Methode Item wird die Adresse einer Instanz eines Klassenmoduls aus der Col-
lection gelesen. Die Methode hat die folgenden Parameter.
Parameter Anmerkung
Index Index der zu lesenden Instanz oder
dessen Bezeichnung (d.h. key), siehe Add -Methode.
Beispiel:
In nachfolgendem Beispiel wird aus der Collection der Bezeichnung Liste die Adresse der 2.
Instanz gelesen. Hierfür kann optional auf das explizite Notieren der Methodenbezeichnung
Item verzichtet werden (Variante 2). In der 3. Variante wird die Adresse der Instanz
über deren Bezeichnung gelesen. In allen Varianten wird die gelesene Adresse der Objekt-
Variablen Kn mit dem Operator Set zugewiesen.15
13Die Beispiele dieses Abschnitts beziehen sich auf die Objekte Knoten und Stab des Abschnitts 9.4).14Bedauerlich an der Implementierung der Collection ist, dass auf alle Fehlerprüfungen verzichtet wurde, d.h.
es gibt keine Fehlerkenner in der Rückgabe. Wird z.B. auf ein nicht vorhandenes Element zugegriffen, stürzt das
Programm ab, wenn nicht durch einen Fehlerhandler der Fehler abgefangen wird, was eine für diese Situation
recht aufwendige Mimik erfordert.15Kurioserweise wurde bei der Implementierung der Collection auf eine Inquire-Methode verzichtet, mit deren
Hilfe die Existenz einer Instanz in der Collection ermittelt werden könnte.
E. Baeck
9. VBA-OBJEKTE Seite 43
dim Kn as Knoten
set Kn = Liste.Item(2)
set Kn = Liste(2)
set Kn = Liste.Item("Knoten 2")
• RemoveMit der Methode Remove wird eine in der Collection gespeicherte Instanz-Adresse
gelöscht. Es wird nur der Eintrag der Adresse gelöscht, nicht die Instanz selbst.16
Parameter Anmerkung
Index Index der zu löschenden Instanz oder
dessen Bezeichnung (d.h. key), siehe Add -Methode.
Beispiel:
In nachfolgendem Beispiel wird zunächst der 1. Eintrag aus der Collection entfern. An-
schließend wird eine Instanz mit der Bezeichnung Knoten 2 entfernt.
Liste.Remove(1)
Liste.Remove("Knoten 2")
• CountMit der Methode Count wird die Anzahl der in der Collection gespeicherten Instanz-
Adressen zurückgegeben.
Beispiel:
In nachfolgendem Beispiel werden in einer Schleife alle Einträge aus einer Collection ent-
fernt. Dies erfolgt durch n-faches Löschen des ersten Eintrages, da nach Löschen eines
Eintrages die Indizierung lückenlos aktualisiert wird, d.h. der vormals 2. Eintrag der Li-
ste rückt auf die 1. Stelle vor, nachdem der 1. Eintrag entfernt wurde. Die Anzahl der
gespeicherten Einträge n liefert die Methode Count.
n = Liste.Count
for i=1 to n
Liste.Remove(1)
next
16Eine Instanz wird dann gelöscht, wenn allen Objektvariablen, die auf diese Instanz verweisen, der Wert
nothing zugewiesen wird.
19.10.2011
Seite 44 Bauinformatik - Teil 1 - Übungsskript / 2011
9.4 Datenstruktur eines Stabwerks
Abbildung 36: Datenstruktur eines
Stabwerks
Ein Stabwerk besteht aus n-Stäben. Ein Stab hat die At-
tribute E-Modul und Querschnittsfläche (beide double).
Die Geometrie eines Stabes wird beschrieben durch den
Start- und den Endknoten. Als Attribut erhält eine Stab-
Instanz den Verweis (Objektvariable) auf zwei Knoten-
Instanzen, d.h. eine Knoten-Instanz wird i.A. von mehre-
ren Stab-Instanzen referenziert.
Abbildung 37: Rahmenbeispiel
Der in Abbildung 37 dargestellte
Rahmen ist auf der Grundlage des
in Abbilung 36 dargestellten UML-
Diagrammes zu implementieren. Die
Daten des Rahmens sind aus der in Ab-
bildung 38 dargestellten Tabelle auszu-
lesen. Nach Aufbau der Datenstruktur
sind die Rahmendaten mit der Funkti-
on List im Ausgabebereich der Tabelle
anzulisten.
Die Knotendaten sind in der Collection
KListe, die Stäbe in der Collection SLi-
ste abzuspeichern.
E. Baeck
9. VBA-OBJEKTE Seite 45
9.4.1 Die Oberfläche
Abbildung 38: Eingabetabelle
Mit der Klassen-Methode Verschieben
ist der Rahmen mit einer zweiten Ereig-
nisfunktion um den vorgegebenen Ver-
schiebungsvektor zu verschieben. Das
Ergebnis der Verschiebung ist erneut in
der Tabelle auszugeben.
Zudem ist mit der Stab-Methode Laen-
ge die Stablänge zu ermitteln und die-
se in der entsprechenden Tabellenspalte
einzutragen.
9.4.2 Methoden des Punktes
Für das Punkt-Objekt sind die folgenden Methoden zu implementieren.
• VerschiebenAuf die Koordinaten des Knotens wird der Verschiebungsvektor v aufaddiert. x
y
⇐ x
y
+ vx
vy
(24)• Drehen
Auf den Ortsvektor des Knotens wird die Drehmatrix zum Winkel ϕ aufmultipliziert.17 xy
⇐ + cos(ϕ) − sin(ϕ)
+ sin(ϕ) + cos(ϕ)
· x
y
(25)• Listen
Die Ausgabe der Knotenattribute x und y in ein Tabellenfeld erfolgt zweckmäßig un-
ter Vorgabe des Tabellenadressenursprungs (Spalten- und Zeilennummer für die Funktion
Cells).
9.4.3 Methoden des Stabes
Für den Stab sind die folgenden Methoden zu implementieren.
• Länge
l =√
(xa − xb)2 + (ya − yb)2 (26)
• VerschiebenEs sind nach (24) beide Knoten des Stabes zu verschieben.
17Generell sind die Winkel in Winkelfunktionen der Programmiersprachen in rad einzusetzen. Die Umrechnung
von ◦ in rad erfolgt unter Ausnutzung der Rechengenauigkeit mit der Skalierung atan(1)/45◦.
19.10.2011
Seite 46 Bauinformatik - Teil 1 - Übungsskript / 2011
• DrehenEs sind nach (25) beide Knoten des Stabes zu drehen.
• ListenDie Ausgabe der Stab- und Knotenattribute in eine Tabelle erfolgt zweckmäßig unter Vor-
gabe des Tabellenadressenursprungs (Spalten- und Zeilennummer für die Funktion Cells).
9.5 2-fach verkettete lineare Listen
Abbildung 39:
Objekte einer verketteten Liste
Lineare Listen können als rekursive Datenstrukturen
implementiert werden. Ein Listen-Objekt (hier VNode)
enthält bei 2-facher Verkettung (als Attribute) einen Zei-
ger auf das vorhergehende (hier prv)und einen Zeiger auf
das nachfolgende Listen-Objekt (hier nxt). Mit dieser Ver-
kettung ist es bei vorgegebenem Listen-Objekt möglich,
über die Verkettung einerseits bis zum ersten Listen-
Objekt zurück, andererseits zum letzten Listen-Objekt
vorwärts zu laufen.
Üblicherweise wird die verkettete Liste durch ein spezielles
Objekt eröffnet bzw. abgeschlossen. Diese beiden Objekte
können in einer Listen-Klasse als Attribute geführt werden
(hier VListe), um sowohl über das erste als auch über das
letzte Listen-Objekt in eine Listen-Iteration einzusteigen.
Ferner kann über diese Attribute ein neues Objekt sowohl als erstes als auch als letztes Objekt
in die Liste eingefügt werden.
Mit Ausnahme der Start- und Abschluss-Objekte der Liste können Listen-Objekten über einen
Datenzeiger (hier dat) Datenobjekte referenzieren, d.h. sie zeigen auf die Instanzen (beliebiger
Objekte), die in der Liste gespeichert werden sollen.
Die zu implementierende Liste VListe erhält die folgenden für Listen üblichen Methoden.18
Methode Anmerkung
AddFirst Fügt ein Objekt an erster Stelle in die Liste ein.
AddLast Fügt ein Objekt an letzter Stelle in die Liste ein.
GetF irst Liefert einen Zeiger auf das erste Listen-Objekt.
GetNext Liefert einen Zeiger auf das nächste Listen-Objekt.
GetLast Liefert einen Zeiger auf das letzte Listen-Objekt.
GetPrev Liefert einen Zeiger auf das vorhergehende Listen-Objekt.
Insert Fügt ein Objekt in die Liste vor einem vorgegebenem ein.
Remove Entfernt ein vorgegebenes Objekt aus der Liste.
RemoveAll Entfernt alle Objekte aus der Liste.
18Da es z.Z. in VBA nicht möglich ist einen Null-Zeiger abzufragen (nothing), erhält der VKnoten das Attribut
Ken, das die folgenden Werte annehmen kann. Ken=0: Datenknoten, Ken=1: Startknoten und Ken=2: Endknoten.
E. Baeck
9. VBA-OBJEKTE Seite 47
9.5.1 Beispiel einer 2-fach verketten Liste
Abbildung 40: Verkettete Liste mit 3 Stab-Instanzen
In Abbildung 40 zeigt die Implementie-
rung einer 2-fach verketteten Liste, die 3
Zeiger auf Instanzen des Klassenmoduls
Stab enthält. Der 1. Knoten dient als
Einstiegsknoten am Listenanfang (ken
= 1 ), der letzte Knoten dient als Ein-
stiegsknoten am Listenende (ken=2 ).
Der Objektzeiger nxt enthält die Adresse des jeweils nächsten Knotens der Liste. Der Objekt-
zeiger prv enthält die Adresse des jeweils vorhergehenden Knoten der Liste. Der Objektzeiger
dat enthält für Datenknoten Zeiger auf die gespeicherten Datenobjekte (hier Stab-Instanzen).
9.5.2 Einfügen eines Datenknotens
Das Einfügen eines Datenknotens in eine 2-fach verkettete Liste erfordert die Umordnung der
Knotenzeiger in zwei Schritten. Zum einen sind die Knotenzeiger des neuen Knotens zu belegen.
Zum andere sind die Knotenzeiger der bereits gespeicherten Knoten im Umfeld des Einfügens
an D anzupassen.
Abbildung 41: Einfügen bzw. Entfernen eines Knotens
Abbildung 41 zeigt das Einfügen eines
Knotens in eine 2-fach verkettete Liste.
Die Liste enthält bereits die Knoten mit
den Instanzen Stab1 und Stab3. Es soll
die Instanz Stab2 zwischen die beiden
genannen Instanzen eingefügt werden.
In der Ausgangssituation sind Stab1
und Stab3 mit den blauen Pfeilen ver-
kettet. Der nxt-Zeiger von Stab1 wird
auf auf Stab2 gesetzt. In gleicher Weise wird der prv -Zeiger von Stab3 auf Stab2 gerichtet.
Zusätzlich wird der nxt-Zeiger von Stab2 auf Stab3 und der prv -Zeiger von Stab2 auf Stab1
erzeugt. Nach Einfügen von Stab2 werden die Knoten im Umfeld von Stab2 durch die roten
Pfeile verkettet.
9.5.3 Entfernen eines Datenknotens
Das Entfernen eines Datenknotens aus einer 2-fach verkettete Liste erfordert die Umordnung der
Knotenzeiger in zwei Schritten. Zum einen sind die Knotenzeiger des zu löschenden Knotens zu
entfernen. Zum andere sind die Knoten vor und nach dem zu entfernenden Knoten mit einander
zu verketten.
Abbildung 41 zeigt das Löschen des Datenknotens von Stab2. Zunächst ist Stab2 noch eingebun-
den (blaue Pfeile). Es ist der nxt-Zeiger von Stab1 auf Stab3 zu setzen. Der prv -Zeiger von Stab3
ist auf Stab1 zu setzen. Beim Entfernen eines Knotens ist darauf zu achten, dass gelöscht wird,
bevor die Zeiger auf ihn entfernt werden, da eine Instanz ohne Zeiger nicht mehr ansprechbar
ist.
19.10.2011
Seite 48 Bauinformatik - Teil 1 - Übungsskript / 2011
9.5.4 Iteratoren
Der Iterator ist ein Zeiger mit dessen Hilfe eine Liste durchlaufen wird. Startpunkt einer Iteration
ist bei einfach verketteten Listen der Kopf der Liste. Bei zweifach verketteten Listen kann zudem
der das Ende der Liste als Startpunkt der Iteration gewählt werden. Die Iteration erfolgt in
diesem Fall rückwärts über die Rückwärtsverkettung.
Gängigerweise wird eine Iteration durch das Holen des Startzeigers initiiert. Darauf folgend wird
in einer Schleife durch Holen des jeweils nächsten Zeigers die Iteration ausgeführt.
Eine Listeniteration kann somit wie fo
Top Related