9 im Bauwesen Markus Uhlmann 1
Zusammenfassung der 8. Vorlesung Variablendeklarationen: Gültigkeitsbereiche Variablentypen: Typenbestimmung Typenumwandlung Eingabe/Ausgabe von Daten: Textdateien, Binärdateien Dateiauswahl über Dialogfenster 2
Inhalt / Planung der Vorlesung 1. Informationsdarstellung & -verarbeitung Grundlagen 2. Betriebssysteme, Programmiersprachen * 3. Einführung in Excel/VBA VBA 4. Struktur von (VBA) Programmen * 5. Logische Elemente I * 6. Logische Elemente II * 7. Beispielprogramm (Dynamik starrer Körper) * 8. Datentypen, Eingabe/Ausgabe * 9. Datenfelder * 10. Benutzerdefinierte Datentypen * 11. Objektorientierte Programmiertechniken I * 12. Objektorientierte Programmiertechniken II * 13. Matlab I Matlab 14. Matlab II * 3
Inhalt der heutigen Vorlesung Datenfelder () Statische Felder Felder Bestimmung der Grenzen Felder als Parameter für Prozeduren/Funktionen : Matrix-Vektor Multiplikation Sortieren Dynamik multipler Kreiskörper Formulare in VBA 4
Notwendigkeit von Feldern Wiederholte Daten gleichen Typs: Lineare Algebra (Matrix/Vektoroperationen) Zeitreihen Bilddaten Ungeordnete Listen Notwendigkeit der Indizierung einzelner Elemente Bestimmung der Anzahl der Elemente Datenfelder 5
(Felder) Definition und Eigenschaften: sind ein- oder mehrdimensionale Felder (Vektoren, Matrizen, ) gleicher Datentypen. liefern eine Speicherstruktur, die eine bestimmte Anzahl von Elementen aufnehmen kann. Zugriff auf einzelne Elemente: Angabe von Indizes der jeweiligen Dimensionen, durch Komma getrennt. erfolgt wie bei skalaren Variablen (Dim Private Public Static) Zuweisung eines beliebigen Datentyps können in VBA nicht als Konstante vereinbart werden. Anzahl der Dimensionen kann maximal 60 betragen 6
Statische und Eigenschaften: Statische : Dimensionen und Grenzen sind festgelegt. Beispiel: Dim a(1 To 5, 1 To 2) as Integer vereinbart: 2-dimensionales Feld, Grenzen 1-5 und 1-2, also 10 Elemente Dimensionen können während des Programmablaufs nicht modifiziert werden. Die Angabe der Untergrenze ist optional. Voreinstellung: Untergrenze 0. Standardwert der Untergrenze kann auf 1 gesetzt werden: Option Base 1 Syntax: Dim Name(OG1,[OG2,...]) [As Typ] Dim Name(UG1 To OG1,[UG2 To OG2,...]) [As Typ] 7
Darstellung von im VBE Beispiel: 3-dimensionales Array Dim Matrix(1, 2, 4) As Integer [0, 1] [0, 1, 2] [0, 1, 2, 3, 4] 8
und Eigenschaften: Dimension dynamischer wird im Laufe des Programms bestimmt und ggf. modifiziert. Möglichkeit zur Bearbeitung von Daten dynamischen Umfangs. ohne Vereinbarung von Arraygrenzen Syntax: Dim Name() [As Typ] Größenfestlegung erfolgt im Programmtext mittels einer ReDim Anweisung Syntax: ReDim Name(UG1 To OG1, [UG2 To OG2...]) 9
: ReDim ReDim Anweisung: ReDim kann beliebig oft angewendet werden ReDim reinitialisiert das Feld (Inhalt geht verloren) ReDim kann Anzahl der Dimensionen und Grenzen ändern ReDim Preserve Anweisung: Mit ReDim Preserve bleiben die bisherigen Feldeinträge erhalten (bis auf verringerte Grenzen) ReDim Preserve kann nur die obere Grenze modifizieren Mehrdimensionale : ReDim Preserve kann nur bei Änderung der letzten Dimension angewendet werden. Anzahl der Dimensionen kann nicht geändert werden Syntax: ReDim Preserve Name(UG1 To OG1, [...]) 10
Bsp. Sub test() Dim a() As Integer ' ReDim a(1 To 2) a(1) = 1 a(2) = 2 Debug.Print "a(1)=" & a(1) ' ' ReDim a(1 To 4) ReDim Preserve a(1 To 4) a(3) = 3 a(4) = 4 Debug.Print "a(1)=" & a(1) End Sub 11
Bsp. : von a.) Definition eines Vektors mit drei Komponenten (0 bis 2) Dim Vektor(2) As Integer b.) Definition einer 11 x 11 Matrix Dim Matrix(0 To 10, 0 To 10) As Single c.) Definition eines Schachbretts mit 64 Feldern (dynamisch) Dim Schachmuster() As Integer ReDim Schachmuster(1 To 8, 1 To 8) 12
Grenzen: LBound & UBound LBound & UBound: Mit den Funktionen LBound und UBound können die unteren bzw. oberen Grenzen von Feldern abgefragt werden. Das Resultat bezieht sich auf die angegebene Dimension (falls nicht angegeben: Dimension 1) Syntax: LBound(arrayname [,dimension]) UBound(arrayname [,dimension]) Bsp: For j = LBound(Matrix, 2) To UBound(Matrix, 2) 13
Bsp. Grenzen von Feldern / ReDim Const dn As Integer = 2 Sub test() Dim icontinue As Integer, icount As Integer Dim ub As Integer Dim s_array() As String ReDim s_array(1 To dn) icontinue = 1 icount = 1 Do While icontinue = 1 s_array(icount) = InputBox("Geben Sie _ einen Namen ein:") icount = icount + 1 ub = UBound(s_array) If icount > ub Then ReDim Preserve s_array(1 To ub + dn) End If icontinue = InputBox("Fortfahren [1]?") Loop End Sub 14
Löschen von mit Erase Erase Anweisung: Löscht den Inhalt von statischen. Gibt den Speicherplatz von dynamischen frei. Syntax: Erase ArrayName [,ArrayName2, ] 15
Parameter Array Parameter-Array: 1-dimensionales Feld geeignet für die Übergabe von einer unbestimmten Anzahl von Parametern. Letztes Argument einer Parameterliste kann nur Datentyp Variant annehmen. Syntax: Function Name([,] Name() As Variant) oder Sub Name([,] Name() As Variant) 16
Bsp. Parameter Array Sub test() Dim a As Integer, b As Double, s As String a = 4 b = 5.4444 s = "hello!" Call test2(a, b, s) End Sub Sub test2( args() As Variant) Dim i As Integer For i = LBound(args) To UBound(args) Debug.Print i & "ter Parameter:" & args(i) Next i End Sub 17
Bsp. Sortieralgorithmus Sortieren eines Vektors mittels bubble-sort (Quelltext: VBA) 18
Bsp. Bewegung mehrerer Kreise Modifikation des früheren Beispiels: Anzahl ncirc Kreisobjekte Position, Geschwindigkeitskomponenten, und Grafikobjekte sind Vektoren Stöße zwischen Partikeln (Quelltext: VBA) 19
Formulare in VBA Erzeugung von Formularobjekten: Formulare werden durch eigene Objekte repräsentiert (Einfügen -> Userform) Eigene Gestaltung durch Steuerelemente ( drag & drop ) Attribute setzen im Eigenschaftsfenster Formulare 20
Formulare in VBA Werteübergabe aus Formularen: Wert (Inhalt) von Steuerelementen liegt als Eigenschaft des entsprechenden Objektes vor Eintrag in Textfelder, Auswahl von Kontrollkästchen, usw. kann ausgelesen & im Programm verwendet werden Bsp.: feld_text=userform2.textbox1.text Formulare 21
Formulare in VBA Formulare & Ereignisse: Steuerelemente sind mit Ereignissen verbunden (z.b. Click ) Programmtext kann an Eintreten eines Ereignisses gebunden werden Liste der definierten Ereignisse ist in Menü des Codefensters des Formulars verzeichnet Formulare 22
Bsp. zu Formularen in VBA Wiederholte Eingabe von Zeichenketten: (Quelltext: VBA) Formulare 23
Speicherlayout von Arrayelementen Formulare In VBA werden Arrayelemente entlang der ersten Dimension an benachbarten Speicherplätzen abgelegt [Vergleich: ebenso in FORTRAN; umgekehrt in C/C++] Bei mehrfachen Schleifen über mehrdimensionale sollte daher die innerste Schleife über die erste Dimension laufen schnellere Ausführung des Programms (wichtig bei großen mit tausenden Elementen) Speicherlayout 24
Speicherlayout von Arrayelementen Beispiel: Messung der Rechengeschwindigkeit in Abhängigkeit von der Schleifenreihenfolge Formulare Speicherlayout (Quelltext: VBA) 25