AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit dynamischen array

Ein Thema von Schwabe · begonnen am 25. Jan 2004 · letzter Beitrag vom 25. Jan 2004
Antwort Antwort
Schwabe

Registriert seit: 4. Jan 2004
15 Beiträge
 
#1

Problem mit dynamischen array

  Alt 25. Jan 2004, 14:25
Hi,

Ich hab einen dynamischen array:
var eingabe: array of array of extended; Den ich mit dieser procedure fülle:
Delphi-Quellcode:
procedure TFunktionsgraph.ZeichnenClick(Sender: TObject);
begin
  try k:= k+1;

    if LBGezeichneteFunktionen.Items.Count = 0 then
      laenge:= 1
      else
      laenge:= LBGezeichneteFunktionen.Items.Count;

    SetLength(eingabe,4,laenge);

    eingabe[0,k]:= StrToFloat(Ea0.Text);
    eingabe[1,k]:= StrToFloat(Ea1.Text);
    eingabe[2,k]:= StrToFloat(Ea2.Text);
    eingabe[3,k]:= StrToFloat(Ea3.Text);

  Schaubild_Zeichnen;
  except
  end;
end;
(k wird bei OnFormCreate der Wert -1 zugewießen)

Ich habe eine Listbox angelegt wo er mir alle Gezeichneten Schaubilder auflistet. Jetzt möchte ich einzelen Funktionen aus der Listbox und somit aus dem array löschen.

Das mach ich mit dieser procedure:

Delphi-Quellcode:
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject);
var g,c: integer;
begin
  for c:= LBGezeichneteFunktionen.Items.Count-1 downto 0 do
  begin
    if LBGezeichneteFunktionen.Selected[c] then
    begin
      LBGezeichneteFunktionen.Items.Delete[c];
      for g:= c to k do
      begin
        eingabe[0,g]:= eingabe[0,g+1];
        eingabe[1,g]:= eingabe[1,g+1];
        eingabe[2,g]:= eingabe[2,g+1];
        eingabe[3,g]:= eingabe[3,g+1];
      end;
    SetLength(eingabe,4,laenge-1);

    Schaubild_Zeichnen;
    end;
  end;
end;
Ich bekomm aber jedesmal wenn ich einen Eintrag löschen will einen Application.Run error oder es kommt eine Fehlermeldung die mir sagt das der Listindex das Maximum überschreitet.

Weiß jemand wo da der Fehler liegt?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 14:38
Spontan kann ich z.B. nicht feststellen, wie du die Beziehung zwischen k und laenge herstellst, wenn aus irgendeinem Grund (k >= laenge) werden würde, dann könnte das eine Ursache für den Fehler sein.
  Mit Zitat antworten Zitat
Schwabe

Registriert seit: 4. Jan 2004
15 Beiträge
 
#3

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 14:53
Und wie sollte ich es dann machen? Könntest du mir einen Ansatzt geben?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 15:07
Ich weis ja nicht, warum du da zwei Variablen hast. Wenn ich mir nur diesen Code betrachte, könnte ich sagen, das du statt die Länge aus dem LB zu holen, entweder
laenge := k+1; oder
laenge := length(eingabe[0]) + 1; verwendest.

Wird eigentlich immer, wenn ZeichnenClick ausgelöst wurde auch an anderer Stelle ein Eintrag zu LBGezeichneteFunktionen hinzugefügt?
Am besten gibst du mir noch ein paar relevante Code-Schnipsel, wenn die obigen Vorschläge nicht passen sollten.
  Mit Zitat antworten Zitat
Schwabe

Registriert seit: 4. Jan 2004
15 Beiträge
 
#5

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 15:22
Delphi-Quellcode:
procedure TFunktionsgraph.Schaubild_Zeichnen;
var c: integer;
begin
  for c:= 0 to k do
  begin
    a0:= eingabe[0,c];
    a1:= eingabe[1,c];
    a2:= eingabe[2,c];
    a3:= eingabe[3,c];

    Kurve_Zeichnen;
  end;
end;
Delphi-Quellcode:
function f(x:extended) :extended;
begin
  f:= a3*Power(x,3)+a2*Power(x,2)+a1*x+a0;
end;
In Kurve_Zeichnen wird dann das Schaubild über die Funktion f(x) gezeichnet und der Listbox der jeweilige Eintrag hinzugefügt.

LBGezeichneteFunktionen.Items.AddObject('f´(x)='+ausgabe);
Hoffe das hilft dir weiter.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 17:04
OK, dann ist das in Ordnung:
Delphi-Quellcode:
procedure TFunktionsgraph.ZeichnenClick(Sender: TObject);
begin
  try
    k:= k+1;

    laenge := k+1;

    SetLength(eingabe,4,laenge);
//...
Dann musst du aber bei
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject); auch das hier machen:
Delphi-Quellcode:
SetLength(eingabe,4,laenge-1);
k := k - 1;
laenge := laenge - 1;
  Mit Zitat antworten Zitat
Schwabe

Registriert seit: 4. Jan 2004
15 Beiträge
 
#7

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 17:16
Also jetzt klappts scho ziemlich gut. Es kommt jetzt nur noch manchmal beim Löschen zu einem "Fehler der Bereichsprüfung".Manchmal wird der Eintrag auch nicht aus der Listbox gelöscht. Manchmal gehts manchmal aber auch nicht. Was stimmt denn da noch net?

Edit:

Es klappt jetzt alles außer das es manchmal vorkommt, dass eine IEntrag nicht aus der Listbox gelöscht wird. Dadurch kommt es vor, dass er nen Fehler bringt weil er noch nen Eintrag in der Listox hat aber keinen im array. Da gibts noch irgendein Problem.

Delphi-Quellcode:
procedure TFunktionsgraph.BBEintragLoeschenClick(Sender: TObject);
var g,c: integer;
begin
  for c:= LBGezeichneteFunktionen.Items.Count-1 downto 0 do
  begin
    if LBGezeichneteFunktionen.Selected[c] then
    begin
      
      for g:= 0 to k do
      begin
        eingabe[0,g]:= eingabe[0,g+1];
        eingabe[1,g]:= eingabe[1,g+1];
        eingabe[2,g]:= eingabe[2,g+1];
        eingabe[3,g]:= eingabe[3,g+1];
      end;

      LBGezeichneteFunktionen.Items.Delete(c);

      SetLength(eingabe,4,laenge-1);
      k:= k - 1;
      laenge:= laenge - 1;

      Schaubild_Zeichnen;
    end;
  end;
end;
Wäre super wenn du mir noch wieterhelfen könntest.
  Mit Zitat antworten Zitat
Schwabe

Registriert seit: 4. Jan 2004
15 Beiträge
 
#8

Re: Problem mit dynamischen array

  Alt 25. Jan 2004, 19:43
So jetzt klappt alles. Vielen Dank für deine Hilfe .
  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 22:45 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