Hey leute, mein erster Beitrag hier und bräuchte glaub ich ein wenig Nachhilfe in VBA :)
Bin Bauing Student und soll zur Zeit um für die Mathe/Info Prüfung zugelassen zu werden einen Gauß-Algorhytmus Programmieren.
Mein Problem ist das ich sehr sinnlose Ergebnisse bekomme wie "48ta2229art"
(Bin noch neu in dem Thema, also falls ich hier gerade irgendwas falsches geschrieben hab, habt nachsicht ;-) )
Mein script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | Sub Gleichung()
Dim zeile As Integer , spalte As Integer , grad As Integer , A(15, 16) As Double , x(15) As Double , i As Integer , j As Integer , b As Double
zeile = 2
spalte = 2
While Cells(zeile, spalte).Text <> Empty
spalte = spalte + 1
Wend
spalte = spalte - 1
While Cells(zeile, spalte).Text <> Empty
zeile = zeile + 1
Wend
zeile = zeile - 1
If zeile <> spalte - 1 Then
MsgBox "FALSCHE VARIABLE"
Exit Sub
End If
grad = zeile - 1
For i = 1 To grad
For j = 1 To grad + 1
A(i, j) = Cells(1 + i, 1 + j)
Next
Next
gauss grad, A, x
For i = 1 To grad
Cells(1 + grad + 1, 1 + i) = Format(x(i), "Standart" )
Next
For i = 1 To grad
b = 0
For j = 1 To grad
b = b + Cells(1 + i, 1 + j).Value * x(j)
Next
Cells(1 + i, 1 + grad + 2) = Format(b, "Standart" )
Next
End Sub
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | Sub gauss(n%, A() As Double , x() As Double )
Dim i%, j%, k%, jmax%, kmax%, imax, merk() As Integer
Dim s As Double , max As Double , skal() As Double
ReDim merk(n), skal(n)
For i = 1 To n
merk(i) = 1
Next
For i = 1 To n
s = 0
For j = 1 To n
s = s + Abs(A(i, j))
Next
skal(i) = 1 / s
Next
For k = 1 To n - 1
max = skal(k) * Abs(A(k, k))
kmax = k
jmax = k
For j = k To n
For i = k To n
If skal(j) * Abs(A(j, i)) > max Then
jmax = j
kmax = i
max = skal(j) * Abs(A(j, i))
End If
Next
Next
If jmax <> k Then
For j = k To n + 1
s = A(k, j)
A(k, j) = A(jmax, j)
A(jmax, j) = s
Next
s = skal(k)
skal(k) = skal(jmax)
skal(jmax) = s
End If
If kmax <> k Then
For i = 1 To n
s = A(i, k)
A(i, k) = A(i, kmax)
A(i, kmax) = s
Next
j = merk(k)
merk(k) = merk(kmax)
merk(kmax) = j
End If
For i = k + 1 To n
s = A(i, k) / A(k, k)
A(i, k) = 0#
For j = k + 1 To n + 1
A(i, j) = A(i, j) - s * A(k, j)
Next
Next
Next
x(merk(n)) = A(n, n + 1) / A(n, n)
For i = n - 1 To 1 Step -1
s = A(i, n + 1)
For j = i + 1 To n
s = s - A(i, j) * x(merk(j))
Next
x(merk(i)) = s / A(i, i)
Next
End Sub
|
|