Name: Vorname: Matr.-Nr: Punkte: 1 2 3 4 : / 40 Aufgabe 1: (10 Punkte) Das unten angegebene VBA-Programm enthält einige syntaktische und programmiertechnische Fehler. Gesucht: a) markieren Sie alle Fehler (mit einem Buntstift) b) korrigieren Sie die Fehler syntaxgerecht bzw. programmiergerecht Sub CalcDet() Dim i%, j% Dim A(1 To 3, 1 To 5) As Double Dim DetA As Double 'Einlesen der Matrix und Kontrolle For i = 1 To 3 For j = 1 To 5 'Abbruch, wenn ein eingelesenes Element nicht numerisch ist If IsNumeric(Tabelle1.Cells(4 + i, 1 + j)) = True Then MsgBox "Das Element A(" & i & j & ") ist keine Zahl" & Chr(13) & _ "Bitte ändern Sie die Eingabe." Tabelle1.Cells(4 + i, 1 + j).select Exit Function End If A(i, j) = Tabelle1.Cells(4 + i, 1 + j) 'Determinante berechnen DetA = Determinante(A) 'Ausgabe Tabelle1.Cells(11, 2) = DeA End Sub Function Determinante(A() As Double) As Integer 'Deklarieren Dim i%, j% Dim nzeile%, nspalte% Dim A1(1 To 3, 1 To 5) As Double 'Kontrolle, ob es sich um eine 3x3 Matrix handelt nzeile = UBound(A, 1) nspalte = UBound(A, 2) If Not nzeile = 3 And nspalte = 3 Then MsgBox "Es handelt sich nicht um eine 3x3 Matrix" Determinante = 0 Exit Funktion End If 'Weiter auf der nachfolgenden Seite
'Matrix künstlich auf eine 3x5 Matrix vergrößern For j = 1 To 3 For i = 1 To 5 Select Case Case Is > 3 A1(j, i) = A(j, i - 3) Case Else A1(j, i) = A(j) End Select Next i 'Berechnung der Determinate mit der 3x5 Matrix A1 For i = 1 To 3 Determinante = Determinante _ + A1(1, i) * A1(2, i + 1) * A1(3, i + 2) _ - A1(3, i) * A(2, i + 1) * A1(1, i + 2) Next i End Sub
Aufgabe 2: (10 Punkte) a) Geben Sie an wie viele Elemente bei der nachfolgenden Dim-Anweisung jeweils reserviert werden. Option Explicit Option Base 1 Public Sub Test() Dim X(12,12) As Double Dim Y(5 To 6, 100) As Variant Dim S(-1 To 4) As String Dim X() As Double b) Was muss man bei der Verwendung des Datentyps Integer besonders beachten. c) Was ist bei dem folgenden Code unvollständig. Option Explicit Public Function Resultierende(Fx As Double, Fz As Double) As Double Dim R As Double R = Sqr(Fx * Fx + Fz * Fz) End Function d) Was bewirken die Anweisungen Option Explicit und Option Base 1? e) Wie kann man Zellenwerte aus dem Tabellenblatt Tabelle2 lesen bzw. schreiben wenn das Tabellenblatt Tabelle1 aktiv ist. Geben Sie jeweils ein Beispiel an.
Aufgabe 3: (10 Punkte) Hinweis: Für die volle Punktzahl muss der Lösungsweg gut nachvollziehbar sein! Dies gelingt am besten in einer Tabelle, die alle Variablen enthält und die die Änderung der Variablen während des Programmablaufes wiedergibt. 'EDV - Anwendungen im Bauwesen 'Klausur SoSe 2014 ' 'Das untenstehende Programm führt eine Matrizenmultiplikation durch. 'Berechnen Sie die Lösung der auf dem Beiblatt dargestellten 'Aufgabe [A] * {x} = {b} mit allen Nachkommastellen. ' '- Verfolgen Sie den Quelltext anhand des Beiblattes und ' berechnen Sie die Lösung. '- Für die Schrittweise Abarbeitung verwenden Sie das Beiblatt. '- Markieren Sie in den zugehörigen Bereichen die Feldgrößen ' soweit das Aufgrund der Variablendeklaration sinnvoll möglich ist. '- Es wird empfohlen das Beiblatt zu verwenden Option Explicit Option Base 1 Sub FalknerSchema() 'Deklarationsteil Dim A As Range Dim x As Range Dim RS As Range Dim v As Variant Dim b() As Double End Sub Dim i%, j% 'Einlesen Set A = Range("B4", Cells(6, 4)) Set x = Range(Cells(4, 6), Cells(6, 6)) Set RS = Range("H4", "H6") ReDim b(a.rows.count, x.columns.count) 'Verarbeitung => Matrizenmultiplikation For i = 1 To A.Rows.Count For j = 1 To A.Columns.Count b(i, x.columns.count)=b(i, x.columns.count) + A(i, j) * x(j, 1) Next i 'Ausgabe des Ergebnisvektors i = 1 For Each v In b RS(i, 1).Value = b(i, 1) i = i + 1 Next
Hochschule Darmstadt University of applied sciences 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Klausur SS 2014 A B C D E F G H I J Aufgabe 3 [A] > [A] {x} 4,00 3,00 5,00 8,75 4,00 3,00 1,00 x 18,00 = 0,00 5,00 6,00 17,00 {b} Matrikel Nr. 17 {x} > 18 19 20 21 22 23 24 25 i > j > {b} > 26 27 28 29 30 31 32 33 i > v > RS > 34 35 36
Aufgabe 4: (10 Punkte) Die nebenstehende Exceltabelle zeigt das Ergebnis eines Wettbewerbs im Kugelstoßen der Herren. Lösen Sie hierzu folgende Aufgaben: a) Legen Sie eine benutzerdefinierte Variable mit dem Namen Kugelstosser an. Die Variable soll als Eigenschaften den Namen, Vornamen, die beste Weite und die Anzahl der Fehlversuche beinhalten. Lösen Sie Aufgabenteil b) bis e) in einer von Ihnen angelegten Prozedur: b) Deklarieren Sie ein dynamisches Datenfeld vom Typ Kugelstosser. c) Ermitteln Sie die Anzahl der Teilnehmer und legen Sie hiermit die Größe des unter b) angelegten Datenfeldes fest. d) Füllen Sie das unter b) angelegte Datenfeld, für jeden Teilnehmer. Hierbei sind die beste Weite und die Anzahl der Fehlversuche sinnvoll zu ermitteln. Zusätzlich soll die beste Weite (Spalte F) und die Anzahl der Fehlversuche (Spalte G) in die Tabelle1 geschrieben werden. Drei Fehlversuche ist gleichbedeutend mit der Weite 0 Meter. e) Geben Sie in einer Messenger Box den Sieger des Wettbewerbes und dessen erzielte größte Weite aus. Lösung: