+ All Categories
Home > Documents > Bauinformatik Teil 1...

Bauinformatik Teil 1...

Date post: 06-Sep-2019
Category:
Upload: others
View: 5 times
Download: 0 times
Share this document with a friend
117
Bauinformatik Teil 1 ¨ Ubungsskript 2011 Universit¨ at Duisburg-Essen Fakult¨ at f¨ ur Ingenieurwissenschaften Abteilung Bauwissenschaften Institut f¨ ur Baustatik Dr. E. Baeck 19.10.2011
Transcript
  • 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


Recommended