AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gauß-Elimination

Ein Thema von utd123 · begonnen am 31. Dez 2012 · letzter Beitrag vom 31. Dez 2012
Antwort Antwort
utd123

Registriert seit: 3. Nov 2011
Ort: Deutschland
29 Beiträge
 
Delphi 7 Personal
 
#1

Gauß-Elimination

  Alt 31. Dez 2012, 15:33
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!
  Mit Zitat antworten Zitat
Notxor

Registriert seit: 28. Okt 2009
41 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Gauß-Elimination

  Alt 31. Dez 2012, 16:30
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?)
  Mit Zitat antworten Zitat
utd123

Registriert seit: 3. Nov 2011
Ort: Deutschland
29 Beiträge
 
Delphi 7 Personal
 
#3

AW: Gauß-Elimination

  Alt 31. Dez 2012, 16:53
danke, dass ist mir noch gar nicht aufgefallen. Werds gleich mal versuchen. z += 1 soll heißen z:=z+1
  Mit Zitat antworten Zitat
utd123

Registriert seit: 3. Nov 2011
Ort: Deutschland
29 Beiträge
 
Delphi 7 Personal
 
#4

AW: Gauß-Elimination

  Alt 31. Dez 2012, 17:08
Funzt immer noch nicht. Selbe fehlermeldung.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#5

AW: Gauß-Elimination

  Alt 31. Dez 2012, 17:16
Hallo,

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

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
utd123

Registriert seit: 3. Nov 2011
Ort: Deutschland
29 Beiträge
 
Delphi 7 Personal
 
#6

AW: Gauß-Elimination

  Alt 31. Dez 2012, 17:22
Könnte sein, jedoch tritt auch ein fehler auf wenn ich beim Eingeben hinter jede Zahl ein Leerzeichen mache.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Gauß-Elimination

  Alt 31. Dez 2012, 18:31
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;
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz