Thema Datum  Von Nutzer Rating
Antwort
Rot Gauß Algorhytmus
27.11.2013 11:35:36 Matthias
NotSolved
27.11.2013 11:37:39 Gast12951
NotSolved

Ansicht des Beitrags:
Von:
Matthias
Datum:
27.11.2013 11:35:36
Views:
2222
Rating: Antwort:
  Ja
Thema:
Gauß Algorhytmus

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

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

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Gauß Algorhytmus
27.11.2013 11:35:36 Matthias
NotSolved
27.11.2013 11:37:39 Gast12951
NotSolved