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:
Option Explicit
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
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
|