Imports System Imports System.Collections 'Fuer Listen- und Array-Strukturen Imports System.Windows.Forms 'wird fuer Java-Script nicht benoetigt! Imports System.IO 'Ein-/Ausgabe, als Alternative fuer den langen, spitzen Bleistift ... 'Globale Variablen fuer die UP's: Dim a1, a2a As ArrayList 'a1 ist Original-Matrix, a2a ist zuerst Kopie von a1, dann mit Gauss 'zur Dreiecks-Matrix umgearbeitet Dim Spmax As Integer = 0 : Dim ZeMax As Integer = 0 'Zeilen/Spalten der a1-Matrix werden beim Einlesen der Original-Matrix, 'z.B. von csv-Datei, ermittelt. '-----Ende Globale Variabl. Def.--------- 'Programm fuer Windows-Form (leeres Fenster mit 2Menue -Punkten) Public Class Form2 'Globale Variable Dim TempFile() As String = {"c:\inetpub\LGLsystem.txt", "", ""} Dim a1, a2a As ArrayList 'Matrix im Original u. in Dreiecksform Dim Spmax As Integer = 0 : Dim ZeMax As Integer = 0 '(n,m) -Matrix 'Voreinstellungen befor Fenster "aufpoppt". Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load a1 = New ArrayList 'Voreinstellung leere Matrix, damit die Menue-Punkte: '"Dreiecksform" und "Array-Listen" nicht ins Leere laufen, bei a1=Nothing End Sub ' '-------Haupt menu--------- Private Sub Txtladen_Menu_Click(sender As Object, e As EventArgs) Handles Txtladen_Menu.Click TxtFile_laden("") End Sub ' Private Sub DreiecksForm_Menu_Click(sender As Object, e As EventArgs) Handles DreiecksForm_Menu.Click 'a1 ->a1a umformen Dim i, Ze1, Sp1 As Integer Dim ob, ob1 As Object : a2a = New ArrayList For Each ob In a1 : i = a2a.Add(New ArrayList) For Each ob1 In ob : a2a(i).add(ob1) Next Next 'Form1.struct_Listen(a2a) 'MsgBox(ZeMax & " " & Spmax) ' a1(0)={"1-Ze", 1, ..... Spmax,"=",Spmax+2 } 'Form1.struct_Listen(a1) '1. Zykl. Sp. von lks nach rts For i = 0 To ZeMax - 1 : Ze1 = i : Sp1 = i up1(Ze1, Sp1) 'Pruefen, Zeile an Schluss schieben up3(Ze1, Sp1) 'Ab Index mit Fak.mult +aufAdd Next '----Rueckwaerts------- For i = ZeMax - 1 To 0 Step -1 : Ze1 = i : Sp1 = i + 1 'unten rts. ->lks.oben up4(Ze1, Sp1) 'Rueckwaerts Next End Sub ' Private Sub LGLGenerator_Menu_Click(sender As Object, e As EventArgs) Handles LGLGenerator_Menu.Click Dim cFile As String : cFile = Path.GetDirectoryName(Form1.conf(49)) & "\LGLsys_Out.txt" Dim sw As StreamWriter = New StreamWriter(cFile) sw.WriteLine("dieses File: " & cFile) Dim i, j, k As Integer : Dim Sd, sn1, sn2 As Single : Dim d1 As Decimal Dim ob1, ob2 As ArrayList : ob1 = Nothing : ob2 = Nothing a1 = New ArrayList Spmax = 0 : ZeMax = 0 Randomize() : sn1 = -1000000 : sn2 = +1000000 For i = 1 To 19 : k = a1.Add(New ArrayList) 'Zeilen 12 ob1 = a1(k) : ob1.Add("----" & i & ". Zeile ---") ZeMax = ZeMax + 1 'ZeilenIndex ab 1,.. For j = 1 To 23 'Spalten 16 Sd = CInt(Math.Floor((sn2 - sn1 + 1) * Rnd())) + sn1 d1 = Sd * 0.0001 If Math.Abs(Rnd()) > 0.85 Then : d1 = 0D End If ob1.Add(d1) Next ob1(ob1.Count - 2) = "=" Next Spmax = a1(0).count - 3 'Sp. 'Form1.struct_Listen(a1) '---------------------------- sw.Flush() : sw.Close() '--------------- Me.StatusBar1.Text = "Fertig, siehe TextFile.txt -Wordpad" 'Shell(Form1.conf(30) & " " & cFile) '("""" & conf(30) & """" & Form1.conf(49)) End Sub ' Private Sub A2_Menu_Click(sender As Object, e As EventArgs) Handles A2_Menu.Click 'Listen structuren Dim cFile As String : cFile = Path.GetDirectoryName(Form1.conf(49)) & "\LGLsys_Out.txt" 'Dim cFile As String : cFile = "c:\disk\raspberry2\LGLsys_Out.txt" Dim sw As StreamWriter = New StreamWriter(cFile) ' sw.WriteLine("dieses File: " & cFile) sw.WriteLine("{a1} Original-LGL_system: ") A_Listen(sw, cFile, a1, "nein") sw.WriteLine("{a2a} Fortschritt: (nach Gauss-Eliminierungs-Algorithmus)") If Not IsNothing(a2a) Then : A_Listen(sw, cFile, a2a, "ja") End If ' sw.Flush() : sw.Close() '--------------- Me.StatusBar1.Text = "Fertig, siehe TextFile.txt -Wordpad" Shell(Form1.conf(30) & " " & cFile) '("""" & conf(30) & """" & Form1.conf(49)) End Sub 'a1/a2a listen 'Hauptprogamm: 'Es gibt (noch) kein Hauptprogramm, die einzelnen Schritte werden ueber 'Button's Click-Ereignisse in einem Windows-Fenster aufgerufen. 'Layout: leeres Fenster mit oben liegendem Menu in 2-Spalten: "Arbeiten" ,"Listen" 'Untermenue's: '"Arbeiten"-"Txt-laden" ' -"DreiecksForm" ' -"LSLGenerator" '"Listen" -"A2" 'Zu den Untermenue-Punkten gehoeren die obigen Ereignisse, in denen dann die UP's aufgerufen werden. 'In den nachf. UP's werden die Zahlen jedesmal local neu def. im Decimal-Format. 'meist handelt es sich um d,d1,d2,d3,d4.. '------Unterprogramme --------- 'sie stehen fuer sich und brauchen nur globale Variablen: a1, a2a, Spmax, Zemax. 'Die UP's basieren auf endl.Zykl. For..next Schleifen, die Schleifen koennten auch 'durch rekursive Aufrufe ersetzt werden, aber in wie weit das ein Vorteil bringt, 'ist fraglich, da die Matrix in ihrer Struktur durch n,m ja eindeutig vorbestimmt ist. 'z.B. beim Durchforsten von Dictionary's waeren rekursive UP-Aufrufe sinnvoll. ' Private Sub TxtFile_laden(cPar) 'cPar ist ein Text-File-Name, bei leer, File-Dialog aufrufen Dim i, j As Integer : Dim z As String Dim o1 As String = "FileName.txt" If cPar = Nothing Then Dim oD As New OpenFileDialog 'oD.InitialDirectory = Path.GetDirectoryName(Form1.conf(49)) 'allg.AusgabePfad oD.InitialDirectory = "c:\disk\raspberry2" oD.Filter = "txt -Files (*.txt)|*.txt|All files (*.*)|*.*" oD.FilterIndex = 1 oD.RestoreDirectory = True oD.Title = " .txt File suchen" oD.FileName = Path.GetFileName(TempFile(0)) If oD.ShowDialog() = Windows.Forms.DialogResult.OK Then : o1 = oD.FileName.Trim Else : o1 = "?" End If If Not o1.Contains("?") Then End If Else : o1 = "" & cPar End If '-----(Matrix) Typischer Aufbau einer csv-Datei:--------- ' a(1,1); a(1,2); ... a(1,m); Enter ' a(2,1); a(2,2); ... a(2,m); Enter ' . . . . . . ' a(n,1); a(n,2); ... a(n,m); Enter 'Ende Enter 'Formales Kennzeichen, dass Matrix-Einlesen zu Ende geht '-------------- o1 = IIf(File.Exists(o1), o1, " txt-File ?") If Not o1.Contains("?") Then '------------StringReader fuer csv/txt-File einstellen Me.StatusBar1.Text = o1 & " laden, Warte . . ." Dim sr As StreamReader = New StreamReader(o1, System.Text.Encoding.GetEncoding(1252), False) Dim line, sa() As String Dim ob1, ob2 As ArrayList : ob1 = Nothing : ob2 = Nothing Dim k As Integer : Dim d As Decimal 'Double i = -1 : j = 0 : Spmax = 0 : ZeMax = 0 a1 = New ArrayList 'Hier ist Matrix noch leer Do : z = "" line = sr.ReadLine() : z = (line & " ").Replace(Chr(9), "") sa = (z & "; = 0").Split(";") sa(0) = sa(0).Trim If (Not sa(1).Contains("= 0")) And _ (Not z.ToLower.Contains("ende")) And _ (Not sa(0).StartsWith("#")) Then : j = j + 1 '# sind Kommentar-Zeilen k = a1.Add(New ArrayList) 'Aufbau leer-Zeilen ob1 = a1(k) : ob1.Add("----" & j & ". Zeile ---") 'bevor in jeder neuen Zeile die Spalten anfangen, wird im 'Spalten-Kopf, Index0), die j.Zeile als Text eingetragen, n.z.Info. 'Die Koeff. a(i,j) mit j=1 beginnen also auch tatsaechlich in der Liste 'mit Index(1) 'Die Zeilen haben keinen Kopf-Eintrag, sie beginnen also gleich 'mit Index 0 ZeMax = ZeMax + 1 'ZeilenIndex ab 1,.. For i = 0 To sa.Length - 1 'i=1,... Sp.Index If IsNumeric(sa(i)) Then If i > Spmax Then : Spmax = i : End If d = Val(sa(i)) : ob1.Add(d) 'a(i,j)-Zahl speichern (in der hoechsten Precision!) 'Bemerkung: 'Rechentechnisch ist bei 64bit-CPU und 64-bit BS, die hoechste 'Precision und Schnelligkeit fuer reelle Zahlen die 64-Bit(8Byte) Gleit- 'komma-Zahl (mit 15-signifikanten Stellen). Die zugehoerigen und zulaessigen 'Rechnen-Operationen (Add,Mult,..) sind hardware-seitig in der CPU verdrahtet, '(numerischer Co-Prozessor). Hat also die Betriebssystem-Software, einschliesslich 'Interpreter, nichts mit zu tun. Nachteil: bei einer langen Folge von Operationen 'bauen sich Fehler auf, die nicht korr. sind. 'Loesung: Man verwendet keine long,singl,float -Formate, sondern Software-emulierte 'Zahlen, die nach dem altbekannten-Schul-Algorithmus fuer rat.Zahlen arbeiten, und 'nicht mit der Gleitkomma-Arithmetik der CPU. 'Hier im Windows- C#/VB/C++/JavaScript/Python.IntelliSense sind das die sogenannten 'Decimal-Formate in verschieden Precisionen, bei mir 30-Stellen*(10^-27 bis 10^+28). 'Nachteil: Sie sind wesentlich langsamer!, aber dafuer wesentlich genauer! Else If sa(i).Trim.StartsWith("=") Then sa(i) = sa(i).Trim : sa(i) = sa(i).Substring(1) If IsNumeric(sa(i)) Then : d = Val(sa(i)) : Else : d = 0.0R : End If ob1.Add("= ") : ob1.Add(d) Exit For End If End If Next End If '----------------------- Loop Until line Is Nothing Spmax = IIf(Spmax = 0, 0, Spmax + 1) sr.Close() : sr.Dispose() Me.StatusBar1.Text = o1 & " fertig" '----------Zykl1.Ende----------- 'Spalten: {"i-Ze",1,.....Spmax-3,"=",Spmax-1} , Spmax=count(Sp.) For i = 0 To ZeMax - 1 'Zeilen ob1 = a1(i) : k = ob1.Count 'Form1.struct_Listen(ob1) 'Dieser Zykl. dient der Matrix-Normalisierung, d.h. wenn die Zeilen im 'Original csv-Text unterschiedliche Anzahl Semikolon's beinhalten, entsteht 'beim Einlesen, (String-reader) zuvor, unterschiedliche Listen-Laengen. 'Mit folg.Algorithmus werden alle Zeilen auf gleiche Spalten-Anz. gebracht, 'naemlich die des Maximum's. For j = 0 To k - 1 'Spalten z = " " & ob1(j) If z.Contains("=") Then 'muss an j=Spmax stehen If j <= Spmax Then 'Anz.Insert: Spmax - j + 1 'MsgBox("Ze=" & i & " Sp=" & j & Chr(13) & ob1(j) & " " & Spmax - j + 1) For k = 1 To Spmax - j + 1 : ob1.Insert(j, 0.0R) '0.0R ist eine Decimal-Null Next End If End If Next Next 'Form1.struct_Listen(a1) 'MsgBox("Ze= " & ZeMax & " Sp= " & Spmax) '-------------- Else : MsgBox("cPar=" & cPar & " , " & o1 & " KOP") End If End Sub 'Txt-Laden UP ' Private Sub up1(i1, j1) 'Ze vertauschen 'i1=Ze ,j1=Sp 0-Index akt. a(i,j) Dim i As Integer : Dim d As Double 'fuer d wird hier kein Decimal-Format benoetigt, da nur der Wert 0 abgefragt wird 'keine Speicherung in Matrix a2a! Dim ob1, A As ArrayList : A = a2a For i = i1 To ZeMax - 1 d = a2a(i)(j1 + 1) 'Sp.fest If d = 0 Then ob1 = A(i) A.RemoveAt(i) A.Add(ob1.Clone) End If Next End Sub 'Ze vertauschen (Zeilen mit 0 am Anf. werden nach hinten verschoben!) ' 'UP3/UP3_a Dreiecks-Matrix vorwaerts, lks.Oben->rts.Unten, =Nullen unterhalb Haupt-Achse herstellen Private Sub up3(i1, j1) 'Ab Index(Ze, Sp) mit Fak.mult +aufAdd Dim Index1 As ArrayList = New ArrayList Dim i, j, k As Integer : Dim d As Double 'fuer d wird hier kein Decimal-Format benoetigt, da der Wert a(i,j) nur in Hilfsliste 'gespeichert wird und keine Speicherung in Matrix a2a erfolgt! ' For i = i1 To ZeMax - 1 d = a2a(i)(j1 + 1) 'Sp.fest If d <> 0 Then k = Index1.Add(New ArrayList) Index1(k).Add(i) : Index1(k).Add(d) End If Next 'Form1.struct_Listen(Index1) If Index1.Count > 1 Then : up3_a(i1, j1, Index1) 'tatsaechlich mit Fak.mult +aufAdd End If End Sub 'Ab Index(Ze, Sp) mit Fak.mult +aufAdd ' Private Sub up3_a(i1 As Integer, j1 As Integer, Index1 As ArrayList) 'Index1(..) len>1 Dim ob1, ob2, A As ArrayList : A = a2a Dim k, n As Integer : Dim d As Decimal 'Double ob1 = A(Index1(0)(0)) 'Zeile die Mult. wird '... 3xj +.... = b(Zeile:Index1(0)) ,Index1(1,1) =Wert zu xj '....5xj + ... =b(Zeile:Index1(1)) '....7xj + ... =b(Zeile:Index1(2)) '....... ' For k = 1 To Index1.Count - 1 : ob2 = A(Index1(k)(0)) 'Zeilen die aufAdd. werden 'j1= akt.Sp.Index If 1 = 1 Then 'Form1.struct_Listen(Index1) 'Form1.struct_Listen(ob1) 'Form1.struct_Listen(ob2) d = -ob2(j1 + 1) / ob1(j1 + 1) For n = j1 + 1 To Spmax 'MsgBox(-ob2(j) & " / " & ob1(j) & " = " & d * ob1(j)) ob2(n) = ob2(n) + d * ob1(n) Next ob2(Spmax + 2) = ob2(Spmax + 2) + d * ob1(Spmax + 2) End If Next 'Form1.struct_Listen(A) End Sub 'Ab Index mit Fak.mult +aufAdd ' 'UP34UP4_a Dreiecks-Matrix rueckwaerts, rts.Unten->lks.Oben, =Nullen oberhalb Haupt-Achse herstellen Private Sub up4(i1, j1) 'Rueckwaerts Ab Index(Ze, Sp) z.B. (5,5 )mit Fak.mult +aufAdd Dim Index1 As ArrayList = New ArrayList Dim i, j, k As Integer : Dim d As Double 'fuer d wird hier kein Decimal-Format benoetigt, da der Wert a(i,j) nur in Hilfsliste 'gespeichert wird und keine Speicherung in Matrix a2a erfolgt! 'Ze Index ->0, Sp_Index ->0 For i = i1 To 0 Step -1 d = a2a(i)(j1) 'Sp.fest If d <> 0 Then k = Index1.Add(New ArrayList) Index1(k).Add(i) : Index1(k).Add(d) End If Next 'Form1.struct_Listen(Index1) If Index1.Count > 1 Then If 1 = 1 Then up4_a(i1, j1, Index1) 'tatsaechlich mit Fak.mult +aufAdd End If End If End Sub 'Rueckwaerts, Ab Index(Ze, Sp) mit Fak.mult +aufAdd ' Private Sub up4_a(i1 As Integer, j1 As Integer, Index1 As ArrayList) 'Index1(..) len>1 Rueckwaerts Dim ob1, ob2, A As ArrayList : A = a2a Dim k, n As Integer : Dim d As Decimal 'Double ob1 = A(Index1(0)(0)) 'Zeile die Mult. wird '... 3xj +.... = b(Zeile:Index1(0)) ,Index1(1,1) =Wert zu xj '....5xj + ... =b(Zeile:Index1(1)) '....7xj + ... =b(Zeile:Index1(2)) '....... 'Form1.struct_Listen(Index1) For k = 1 To Index1.Count - 1 : ob2 = A(Index1(k)(0)) 'Zeilen die aufAdd. werden 'j1= akt.Sp.Index If 1 = 1 Then 'Form1.struct_Listen(ob1) 'Form1.struct_Listen(ob2) d = -ob2(j1) / ob1(j1) For n = Spmax To 1 Step -1 'Rueckwaerts 'MsgBox(-ob2(j1) & " / " & ob1(j1) & " = " & d * ob1(j1) & Chr(13) & ob2(n)) 'MsgBox(ob2(n) & " + " & d & " * " & ob1(n) & " =" & (ob2(n) + d * ob1(n))) ob2(n) = ob2(n) + d * ob1(n) Next ob2(Spmax + 2) = ob2(Spmax + 2) + d * ob1(Spmax + 2) End If Next 'Form1.struct_Listen(A) End Sub 'Rueckwaerts Ab Index mit Fak.mult +aufAdd ' 'Matrix a1 und zugehoerige Dreiecks-Matrix a2a Listen Private Sub A_Listen(sw, cfile, arr1, cSel) Dim i, j, k, Sel As Integer : Dim z, z1, z2 As String Dim d, d1, d2, d3, d4 As Decimal : Dim s3 As Single 'Die Zahlen a(i,j) und x(i) werden in Decimal-Format gehaendelt, damit 'sie, wenn noetig, in voller Precision (30-Stellen) "gezeigt/erkannt" werden koennen, '(siehe Problematik "langer, spitzer Bleistift"). 'tatsaechlich ist die Anzeige hier auf 15-Stellen mit Exponenten festgelegt: 'Variable k=19, z2="###############" 'Wenn Matrix-Elemente kleinere Varianzen haben, werden kuerzere Ausgabe-Formate 'gewaehlt, hier z.B. k=10 Dim ob1, ob2 As ArrayList : ob1 = Nothing : ob2 = Nothing ' '--- ermitteln Betrag(a(ij)) k, z fuer Druck-Format z1 = "########.########" : z2 = "###############.###############" d1 = 9999999999 : d2 = 1 / d1 : d3 = 999999999999999 : d4 = 1 / d3 k = 10 : z = z1 For i = 0 To ZeMax - 1 'Zeilen ob1 = arr1(i) For j = 1 To ob1.Count - 1 'Spalten If IsNumeric(ob1(j)) Then d = Math.Abs(ob1(j)) If Not (d2 < d And d < d1) Then : k = 19 End If End If Next Next '--------k, z von zuvor---------- 'Matrix listen, hier Parameter arr1(), der beim Aufruf einmal a1, dann a2a ist 'k = 10 sw.WriteLine("Matrix: (k=" & k & "), Ze=" & ZeMax & ", Sp=" & Spmax) sw.write(" ") For i = 1 To Spmax If (i Mod 6 = 0) Then : sw.Write(" (0)") End If sw.Write(("---x" & i & "---").PadRight(k)) Next sw.WriteLine() For i = 0 To ZeMax - 1 'Zeilen ob1 = arr1(i) sw.Write("(" & i + 1 & ") ") For j = 1 To ob1.Count - 1 'Spalten If IsNumeric(ob1(j)) Then d = Math.Abs(ob1(j)) If d = 0 Then : z = "0" Else If Not (d4 < d And d < d3) Then : z = "E" Else : z = IIf(k = 19, z2, z1) End If End If Else : z = "" End If If j Mod 6 = 0 Then : sw.Write("(" & i + 1 & ") ") End If If z = "" Then : sw.Write(Format(ob1(j), z).PadRight(3)) Else If k <= 11 Then : s3 = ob1(j) sw.Write(Format(s3, z).PadRight(k)) Else : sw.Write(Format(ob1(j), z).PadRight(k)) End If End If Next sw.WriteLine() Next sw.WriteLine("Ende DL") ' '----Ergebnis x(i)------- 'Ergebnis-Vektor x°=(x1,...x(Spmax)) wird in Liste Erg() aufgebaut=abgespeichert 'Erg()-Liste waere inhomog.Loeung 'Dies geschieht durch Zuordnung Haupt-Achse-x(i) = Wert in Zeile(i) rts. vom "=" Zeichen 'gleichzeitig wird x(i) Zeilenweise ausgedruckt. 'Fehlen x(i) Werte, dann wird Sel+1 gesetzt 'Ist Sel>0, wird in weiterem Zykl. die x*(i) =homogener Loesungs-Vektor ermittl. 'dazu wird Loes()-Liste aufgebaut. 'das Ganze wird dann ausgedruckt, das ist Alles! sw.WriteLine("Ergebnis (x°):") 'inhomogen Dim Erg As ArrayList = New ArrayList Sel = 0 If cSel = "ja" Then For j = 1 To Spmax : Erg.Add(0D) '0 im Format double Next For i = 0 To ZeMax - 1 'Zeilen d = a2a(i)(Spmax + 2) d1 = a2a(i)(i + 1) 'a(i,j) If d1 = 0 Then Else : Erg(i) = d / d1 sw.WriteLine(" x" & i + 1 & "= " & Format(Erg(i), z2).PadRight(19)) End If Next For i = ZeMax To Spmax - 1 sw.WriteLine(" x" & i + 1 & "= " & Format(Erg(i), z2).PadRight(19)) Sel = Sel + 1 Next '------------- If Sel > 0 Then '------- mehrdeutig arr1() akt.Matrix sw.WriteLine("" & Sel & "-dim Loesungsraum (homogene Loesung x*):") Dim Loes As ArrayList = New ArrayList : Dim n1, n2, n3, n4 As Integer k = Spmax - Sel 'Sp.Index ab Loes.Raum For i = 1 To k : Loes.Add(New ArrayList) 'fuer x1...x(k) Next '---Zykl. pro Loes.Index-----begin mit Loes(0) und Sp.k 'ob1() ab lez.Zeile rueckwaerts , k in ob1(k) ist 1.Koeff.<>0 n1 = arr1.count - 1 'Lez.Zeile rueckwaerts n2 = k 'Sp.Index rueckwaerts n3 = 0 'Index in Loes, aufsteigend n4 = 0 'Zykl. Zaehler For n3 = 0 To Loes.Count - 1 'Loes.Raum aufbauen ob1 = arr1(n1 - n3) d = ob1(n2) : d = IIf(d = 0, 1 * 10 ^ -27, d) 'd<>0 n4 = 0 For i = n2 To Spmax 'k rueckwaerts ob2 = Loes(n3) If i = n2 Then : j = ob2.Add("x" & i & "= ") sw.write(" " & ob2(j) & "(") Else 'wenn n3>0, dann n3 mal warten If n4 = n3 Then j = ob2.Add(-ob1(i) / d) sw.write(Format(ob2(j), "N") & IIf(i = Spmax, ")", " ; ")) Else : n4 = n4 + 1 End If End If Next : n2 = n2 - 1 'Sp. rueckwaerts sw.writeline() Next sw.writeline("Gesamt x° +x* :") For i = 0 To Erg.Count - 1 sw.write(" x" & i + 1 & "= " & Format(Erg(i), "N")) If i <= Loes.Count - 1 Then k = Loes.Count - 1 - i For n4 = 1 To Loes(k).count - 1 d = Loes(k)(n4) sw.write(" " & IIf(d > 0, "+", "") & Format(d, "N") & "y" & n4) Next Else : sw.write(" +y" & i - Loes.Count + 1) End If sw.writeline() Next sw.writeline("(y(i)=reell, frei waehlbar") sw.writeline("(Genauigkeit der Matrix-Elemente und Loesungs-Vektor: 30-Stellen*E27 )") 'Form1.struct_Listen(Loes) 'Form1.struct_Listen(Erg) End If '---------Ende inhomogen und Loes.raum----- sw.WriteLine() ' '----Ergebnis Probe------- sw.WriteLine() : sw.WriteLine("Probe:") For i = 0 To ZeMax - 1 d1 = 0 For j = 1 To Spmax d1 = d1 + a1(i)(j) * Erg(j - 1) Next 'Die Probe wird in jedem Fall in max.Precision, k=19, ausgedruckt sw.WriteLine(" Zeile_" & i + 1 & "= " & Format(d1, z2).PadRight(19)) Next End If End Sub 'Listen UP '---------Ende der UP's------------- End Class 'Ende des Windows-Programmes