![]() |
Gauß-Elimination
Hallo Leute,
ich programmiere grade einen Rechner für lineare Gleichungssysteme basierend auf dem Gaußschen Eliminationsverfahren. Dazu soll der User eine Matrix eingeben die dann gelöst wird. ich dachte nun, das der User seine Matrix in der folgenden Form in ein Memo-Feld eingibt: -2,1 4 12 3 -5,1 -23 Meine Umsetzung für die Eingabe sieht dann so aus:
Code:
gsys ist ein eindimensionales array of real. Die Anzahl der Zahlen ist bekannt(Anzahl=size*size+size).
for i:=1 to size do
begin stringarray[i]:=MemoM.lines[i]; end; for i:=0 to size do begin hilfsstring2 := stringarray[i]; z:=0; for y:=0 to size+1 do begin while (hilfsstring2[z] <> ' ') do begin hilfsstring := hilfsstring + hilfsstring2[z]; z += 1; end; gsys[getIndex(i,y,size)]:=strtofloat(hilfsstring); hilfsstring:=''; z += 1;V' end; end; Allerdings funktioniert das ganze nicht. Error: Project raised exeption class 'External:SIGSEGV'. Hat jemand eine Idee wie das funktionieren könnte? Danke für eure Antworten!:thumb: |
AW: Gauß-Elimination
Sicher dass die Grenzen stimmen? Die 0-te Zeile vom Memo-Feld lässt du aus, greifst jedoch später darauf zu (arrays gehen normalerweise von 0..size-1, strings von 1..size)
Außerdem kennt Delphi kein += (was soll Zitat:
|
AW: Gauß-Elimination
danke, dass ist mir noch gar nicht aufgefallen. Werds gleich mal versuchen. z += 1 soll heißen z:=z+1
|
AW: Gauß-Elimination
Funzt immer noch nicht. Selbe fehlermeldung.:cry:
|
AW: Gauß-Elimination
Hallo,
Delphi-Quellcode:
Wird wohl an dieser Prorammzeile liegen. Wann kommt den nach der letzten gelesenen Zahl noch ein Leerzeichen?
while (hilfsstring2[z] <> ' ') do
Gruß |
AW: Gauß-Elimination
Könnte sein, jedoch tritt auch ein fehler auf wenn ich beim Eingeben hinter jede Zahl ein Leerzeichen mache.
|
AW: Gauß-Elimination
Ich würde folgende Funktion verwenden, um die Zahlen zu trennen
Delphi-Quellcode:
Und dann so anwenden:
// kopiert aus der JCL
// Zerlegt den String "S" in seine Einzelteile die durch das "Separator"-Zeichen getrennt werden // und liefert bei jedem Aufruf ein Teil zurück function StrToken(var S: AnsiString; Separator: AnsiChar): AnsiString; var I: Integer; begin I := Pos(Separator, S); if I <> 0 then begin Result := Copy(S, 1, I - 1); Delete(S, 1, I); end else begin Result := S; S := ''; end; end;
Delphi-Quellcode:
for i:=0 to size do
begin hilfsstring2 := stringarray[i]; for y:=0 to size+1 do begin hilfsstring := StrToken(hilfsstring2, {Trennzeichen=}' '); gsys[getIndex(i,y,size)]:=strtofloat(hilfsstring); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz