Autor Beitrag
phat1
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 16.05.06 12:24 
hallo,
ich benötige für eine anwendung eine sehr komplexe pointerstruktur. Jeder kennt das beispiel wo man mit einem pointer über einen record immer den nächsten bzw. den vorherigen datensatz eines pointers referenzieren kann... also sozusagen eine pointerkette. Ähnlich soll das auch mit meinem benötigten pointer machbar sein jedoch soll nach und nach jedem pointer beliebig viele nachgelagerte und vorgelagerte elemente zugewiesen werden. Die frage ist nun wie kann ich das realisieren???
Die variante, in einem pointer record einen großen array bereitzuhalten ist nicht ausreichend, da dies ja statisch wäre und nicht beliebig erweitert werden könnte. ausserem speichertechnisch sehr uneffizient.
Die frage ist also gibt es eine möglichkeit in delphi die pointer records (für jeden pointer einzelnd) dynamisch zu erweitern? oder gibt es eine andere möglichkeit solch eine struktur zu erhalten.

Die einzige idee, die ich noch hätte wäre einen pointerbaum nach unten größer werden zu lassen also neue ebenen hinzuzufügen. aber bei vielen zugewiesenen "nachfolgern" wird diese struktur auch riesig und sicherlich nicht sehr effizient... oder sollte man da keine bedenken haben?

ich weiss.. wahrscheinlich will ich zu viel aber evtl. gibts da ja doch ne intelligente lösung...;-)
vielen dank schonmal!
gruß jakob
PS: Hoffe das was die richtige rubrik dafür;-)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 16.05.06 12:33 
1. Wozu gibt's dynamische Arrays? Der Overhead ist dabei nur 16+n*4Bytes je Array ...

2. Wozu brauchst Du ds?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
phat1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 16.05.06 12:39 
sorry meine programmierskills sind schon ein wenig eingerostet ;-) was bedeutet denn 16+n*4 bytes im klartext? hast du n link wo ich was über dynamische arrays rausfinde - hört sich sehr interessant an.

grob gesagt soll damit eine KI programmiert werden. eine art chatbot. ist aber zunächst nur ne testvariante...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 16.05.06 13:01 
16+n*4Byte heißt nur, dass ein dynamisches Array mit n Einträgen die besagte Größe besitzt ... (zzgl. der Speicherblockgrößenrundung des MM, die aber zu vernachlässigen geht ...

Informationen zu dynamischen Arrays findest Du in der DOH im Abschnitt Object Pascal Syntax.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
phat1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 16.05.06 13:10 
so wie ich das gerade verstanden habe muss man aber bei dynamischen arrays auch in vorraus den speicherplatz reservieren. D.h. das ich wenn ich einen array mit bspsw. n=10 habe und dann einen hinzufügen möchte geht das nur, indem ich einen neuen array mit neuer speicherplatzreservierung (n=11) erzeuge und die einträge des "alten" arrays übertrage... ist zwar machbar aber n bisschen umständlich finde ich.. oder geht das auch einfacher?
thx.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 16.05.06 13:22 
Siehe SetLength, damit kannst Du die Größe nachträglich anpassen ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
phat1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 16.05.06 13:31 
alles klar damit sollte es gehen... thx

ein anderes problem denke ich is das sicherlich die array größe im record des pointers generell (also für alle pointer elemente) geändert wird. d.h. das alle immer die größe des längesten arrays reservieren. kann sein das ich mich mit meiner vermutung irre aber befürchte das das wohl so sein könnte.

Wie benutzt man dabei Setlegth überhaupt in z.B. folgender struktur?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  PMyElement = ^TMyElement;
  TMyArray : array of PMyElement;
  TMyElement = record 
                 wert : integer;
                 nach : TMyArray;
             end;
var
  a : TMyElement;
begin
  SetLength(???, 100);

end;
phat1 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 16.05.06 14:00 
ich habs!!!:-)
ich mach einfach anstatt des arrays eine zweite lineare pointerliste und dann kann ich ja beliebig anfügen entfernen etc... das ich da nicht früher drauf gekommen bin...

auf jeden fall vielen dank BenBE für die idee mit dem array... hat mich dann am ende ja doch zur lösung geführt ;-)