Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Gauß-Elimination (https://www.delphipraxis.net/172393-gauss-elimination.html)

utd123 31. Dez 2012 15:33

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:
     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;
gsys ist ein eindimensionales array of real. Die Anzahl der Zahlen ist bekannt(Anzahl=size*size+size).
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:

Notxor 31. Dez 2012 16:30

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:

z += 1;V'
machen?)

utd123 31. Dez 2012 16:53

AW: Gauß-Elimination
 
danke, dass ist mir noch gar nicht aufgefallen. Werds gleich mal versuchen. z += 1 soll heißen z:=z+1

utd123 31. Dez 2012 17:08

AW: Gauß-Elimination
 
Funzt immer noch nicht. Selbe fehlermeldung.:cry:

Volker Z. 31. Dez 2012 17:16

AW: Gauß-Elimination
 
Hallo,

Delphi-Quellcode:
while (hilfsstring2[z] <> ' ') do
Wird wohl an dieser Prorammzeile liegen. Wann kommt den nach der letzten gelesenen Zahl noch ein Leerzeichen?

Gruß

utd123 31. Dez 2012 17:22

AW: Gauß-Elimination
 
Könnte sein, jedoch tritt auch ein fehler auf wenn ich beim Eingeben hinter jede Zahl ein Leerzeichen mache.

sx2008 31. Dez 2012 18:31

AW: Gauß-Elimination
 
Ich würde folgende Funktion verwenden, um die Zahlen zu trennen
Delphi-Quellcode:
// 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;
Und dann so anwenden:
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