Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "SetLength" im Dynamischen Array bestimmen (https://www.delphipraxis.net/35373-setlength-im-dynamischen-array-bestimmen.html)

SilverMoonGirl 6. Dez 2004 11:32


"SetLength" im Dynamischen Array bestimmen
 
Huhu@all :hi: ,

In meinem Programm kann ich Werte berechnen lassen, je nachdem wie lange der Benutzer das durchlaufen lässt, entstehen unterschiedliche Werte, die ich speichern wollte um danach ein Diagramm zu zeichnen.

Ich hab mal ein bisschen umhergelesen, und bin der Meinung, das man das mit einem dynamischen array machen kann.....

Mein Problem ist jetzt das „SetLength“. Da ich ja nich weiß wann der Benutzer die Berechnung abbricht, kann ich auch keine Größe angeben........Die Anzahl der errechneten Werte bekomm ich ja erst raus, wenn der Benutzer auf Stopp klickt, aber selbst in der Zeit bis zum Stopp- klicken muss ich ja die bereits errechneten Werte irgendwo speichern.

Hab ihr vielleicht einen Tipp für mich?

Schonmal vielen Dank im vorraus :)

sakura 6. Dez 2004 11:34

Re: "SetLength" im Dynamischen Array bestimmen
 
Mit Delphi-Referenz durchsuchenLength bekommst Du die Länge, mit Delphi-Referenz durchsuchenLow und Delphi-Referenz durchsuchenHigh die Grenzen eines dynamischen Arrays raus.

...:cat:...

alcaeus 6. Dez 2004 11:42

Re: "SetLength" im Dynamischen Array bestimmen
 
Hi Simone,

du musst auf jeden Fall den Speicher für das Array vor der Berechnung durchführen, ansonsten wird dein Programm ein richtiger Speicherfresser. Du könntest ja die Länge auf 1 Million Felder setzen, und die Berechnung da abbrechen.
Wenn du nämlich bei jedem Berechnungsschritt
Delphi-Quellcode:
SetLength(DeinArray, Length(DeinArray)+1)
ausführst, reserviert das Programm immer wieder neuen Speicher für das Array. Deshalb: Zuerst erstmal richtig viel Speicher reservieren, dann läuft die Berechnung auch viel schneller. Am Ende kannst du dann die Länge evtl. zurücksetzen.

Greetz
alcaeus

SilverMoonGirl 6. Dez 2004 11:51

Re: "SetLength" im Dynamischen Array bestimmen
 
Supi,

vielen Dank euch zwei :) :) :)

Jörn 6. Dez 2004 12:13

Re: "SetLength" im Dynamischen Array bestimmen
 
Oder evtl mit Hier im Forum suchenTList arbeiten.

Oxmyx 6. Dez 2004 12:39

Re: "SetLength" im Dynamischen Array bestimmen
 
Man kann auch einfach selber eine einfache verkettete Liste programmieren, indem man einfach einen Record schreibt, der jeweils einen Zeiger auf seinen Nachfolger (evtl. auch auf seinen Vorgänger) hat:

Delphi-Quellcode:
type
  PListEntry = ^TListEntry;
  TListEntry = record
    pNext: PListEntry;
    pData: Pointer; //oder irgendwas anderes
  end;
Nun kannst du die gesamte List durchlaufen und bei Bedarf mit "New" neue Einträge erzeugen.

sakura 6. Dez 2004 12:42

Re: "SetLength" im Dynamischen Array bestimmen
 
Zitat:

Zitat von Oxmyx
Man kann auch einfach selber eine einfache verkettete Liste programmieren

Aus OOP-Sicht, nenne mir einen guten Grund dafür anstatt auf TList zu setzen :gruebel: Ab ca. 5 Objekten verbraucht es sogar mehr Speicher :?

...:cat:...

Oxmyx 6. Dez 2004 12:52

Re: "SetLength" im Dynamischen Array bestimmen
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Oxmyx
Man kann auch einfach selber eine einfache verkettete Liste programmieren

Aus OOP-Sicht, nenne mir einen guten Grund dafür anstatt auf TList zu setzen :gruebel: Ab ca. 5 Objekten verbraucht es sogar mehr Speicher :?

...:cat:...

Naja, man lernt natürlich mehr, wenn man auch selber mal solche Dinge programmiert, anstatt immer nur vorgefertigte Komponenten zu benutzen.
Ich sehe ein, dass Delphi als RAD-Anwendung viele solcher Dinge bereitstellt, um dem Programmierer den Alltag zu erleichtern und die Programmiergeschwindigkeit zu erhöhen. Aber ich programmiere meinen Code eigentlich lieber selbst.
Ok, war jetzt nicht ganz aus OOP-Sicht, aber wenn man's unbedingt OOP haben will, kann man auch seine eigene TList programmieren.

sakura 6. Dez 2004 12:56

Re: "SetLength" im Dynamischen Array bestimmen
 
Zitat:

Zitat von Oxmyx
Naja, man lernt natürlich mehr, wenn man auch selber mal solche Dinge programmiert, anstatt immer nur vorgefertigte Komponenten zu benutzen.

Das stimmt.

Zitat:

Zitat von Oxmyx
Aber ich programmiere meinen Code eigentlich lieber selbst.

Ich auch, aber wenn ich mir anschaue, dass ich auch Geld verdienen will, dann nutze ich doch lieber vorhandenes :zwinker:

Zitat:

Zitat von Oxmyx
Ok, war jetzt nicht ganz aus OOP-Sicht, aber wenn man's unbedingt OOP haben will, kann man auch seine eigene TList programmieren.

Genau :roll: Okay, also gibt es in OOP Hinsicht keine Vorteile. Mehr wollte ich nicht wissen.

Einen Vorteil hat Dein Ansatz gegenüber TList. Muss man andauernd Objekte mitten aus der Liste entfernen, bzw einfügen, dann ist Dein Ansatz evtl. schneller. Je nach Sauberkeit und Umständen. Aber danke, ich bleibe bei TList :mrgreen:

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 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-2025 by Thomas Breitkreuz