Hallo,
Ich hab ein kleines Problem.. da ich z.T. faul bin mache ich meine Mahte Hausaufgaben per Autoit und deshalb habe ich mir mal den Gauss Algorithmus vorgenommen
ich wollte den Code optimieren und hoffe nun auf eure Vorschläge (optimal wäre eine Funktion in die man alles einsetzen könnte)
dies folgt gleich zu meinem "echten" Problem:
Wie kann ich den Algorithmus für X Unbekannte machen?
(bei einem SEHR unübersichtlichen Versuch kamen FALSCHE Ergebnisse raus)
hier ist meine (noch sehr unübersichtliche, jedoch funktionierende funktion mit 3 unbekannten):
Spoiler anzeigen
#include <array.au3>
$x = "Error!"
$y = "Error!"
$z = "Error!"
Dim $original[12]
Dim $temporary[12]
Dim $hilfsarray[3]
For $i = 0 To 11
$original[$i] = InputBox("Wert: " & $i + 1, "Gib den Wert an..", "Array Nummer:"&$i)
$original[$i] = Execute($original[$i])
Next
$temporary = ursprungswert($temporary, 0, 11, $original)
[/autoit] [autoit][/autoit] [autoit]$w1 = isnegativ($temporary[0])
If $w1 = 1 Then
$temporary = malminus1($temporary, 0, 3)
EndIf
$w2 = isnegativ($temporary[4])
If $w2 = 0 Then
$temporary = malminus1($temporary, 4, 7)
EndIf
$1 = $temporary[0]
$2 = $temporary[4] * (-1)
$temporary = multiplizieren($temporary, 0, 3, $2)
$temporary = multiplizieren($temporary, 4, 7, $1)
$temporary = sumaddieren($temporary, 0, 3, 4, 7)
[/autoit] [autoit][/autoit] [autoit]$temporary = ursprungswert($temporary, 0, 3, $original)
_ArrayDisplay($temporary)
If $w1 = 1 Then
$temporary = malminus1($temporary, 0, 3)
EndIf
$w3 = isnegativ($temporary[8])
If $w3 = 0 Then
$temporary = malminus1($temporary, 8, 11)
EndIf
$3 = $temporary[0]
$4 = $temporary[8] * (-1)
$temporary = multiplizieren($temporary, 0, 3, $4)
$temporary = multiplizieren($temporary, 8, 11, $3)
$temporary = sumaddieren($temporary, 0, 3, 8, 11)
$temporary = ursprungswert($temporary, 0, 3, $original)
For $i = 0 To 2
$hilfsarray[$i] = $temporary[$i + 5]
Next
$w1 = isnegativ($temporary[5])
If $w1 = 1 Then
malminus1($temporary, 5, 7)
EndIf
$w2 = isnegativ($temporary[9])
If $w2 = 0 Then
malminus1($temporary, 9, 11)
EndIf
$5 = $temporary[5]
$6 = $temporary[9] * (-1)
$temporary = multiplizieren($temporary, 5, 7, $6)
$temporary = multiplizieren($temporary, 9, 11, $5)
$temporary = sumaddieren($temporary, 5, 7, 9, 11)
For $i = 0 To 2
$temporary[$i + 5] = $hilfsarray[$i]
Next
If $temporary[10] <> 0 Then
$z = $temporary[11] / $temporary[10]
EndIf
If $temporary[5] <> 0 Then
$y1 = $temporary[7] - ($temporary[6] * $z)
$y = $y1 / $temporary[5]
EndIf
If $temporary[0] <> 0 Then
$x1 = $temporary[3] - ($temporary[2] * $z) - ($temporary[1] * $y)
$x = $x1 / $temporary[0]
EndIf
$x = Execute($x)
$y = Execute($y)
$z = Execute($z)
MsgBox(0, "Die Unbekannten lauten:", "P( " & $x & " | " & $y & " | " & $z & " )")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func ursprungswert($array1, $anfang, $ende, $array2)
For $i = $anfang To $ende Step 1
$array1[$i] = $array2[$i]
Next
Return $array1
EndFunc ;==>ursprungswert
Func sumaddieren($array, $anfang1, $ende1, $anfang2, $ende2)
For $i = 0 To $ende1 - $anfang1 Step 1
$array[$anfang2 + $i] = $array[$anfang1 + $i] + $array[$anfang2 + $i]
Next
Return $array
EndFunc ;==>sumaddieren
Func multiplizieren($array, $anfang, $ende, $faktor)
For $i = $anfang To $ende Step 1
$array[$i] = $array[$i] * $faktor
Next
Return $array
EndFunc ;==>multiplizieren
Func malminus1($array, $anfang, $ende)
For $i = $anfang To $ende Step 1
$array[$i] = $array[$i] * (-1)
Next
Return $array
EndFunc ;==>malminus1
Func isnegativ($wert)
If $wert < 0 Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>isnegativ
Vielen Dank für jede Unterstützung