Registriert seit: 4. Jul 2003
Ort: Lübeck
58 Beiträge
Delphi 2005 Personal
|
Re: Problem mit Pointern
7. Jun 2009, 10:33
Delphi-Quellcode:
var
Form1: TForm1;
aKnoten: array of TKnoten;
const
cBuchs: array[0..3] of char = ('c', 'a', 'b', 'd');
iBuchs: array[0..3] of int64 = (6, 5, 2, 3);
implementation
{$R *.dfm}
{$O-}
procedure TForm1.Button1Click(Sender: TObject);
var
i, x: int64; // x = Length aKnoten
Mi0, Mi1: TMinInd;
Point: PKnoten;
bitcode: string;
begin
// anderweitige Initialisierung
x := length(iBuchs);
SetLength(aKnoten, x);
// anderweitige Initialisierung -> Complete
// Komplettinitialisierung des verwendeten Arrays
i := 0;
repeat
aKnoten[i].cBuchstabe := cbuchs[i];
aKnoten[i].iHaeufigkeit := ibuchs[i];
aKnoten[i].pSuper := nil;
aKnoten[i].pBit0 := nil;
aKnoten[i].pBit1 := nil;
inc(i);
until (i = x);
// Komplettinitialisierung des verwendeten Arrays -> Complete
// Damit Schleife nicht gleich abbricht
// Danach Baumerstellung
mi1.haeuf := high(int64) - 1;
while mi1.haeuf <> high(int64) do
begin
mi1.index := -1;
mi1.haeuf := high(int64);
mi0.index := -1;
mi0.haeuf := high(int64);
i := -1;
repeat
inc(i);
if (aKnoten[i].iHaeufigkeit < mi1.haeuf) and
(aKnoten[i].pSuper = nil) then
begin
mi1.index := mi0.index;
mi1.haeuf := mi0.haeuf;
mi0.index := i;
mi0.haeuf := aKnoten[i].iHaeufigkeit;
end;
until (i = x - 1);
Memo1.Lines.Add('indexi: ' + IntToStr(i));
Memo1.Lines.Add('index0: ' + IntToStr(mi0.index));
Memo1.Lines.Add('haeuf0: ' + IntToStr(mi0.haeuf));
Memo1.Lines.Add('index1: ' + IntToStr(mi1.index));
Memo1.Lines.Add('haeuf1: ' + IntToStr(mi1.haeuf));
Memo1.Lines.Add('------------');
// neuen Knoten hinzufügen
if mi1.index <> -1 then
begin
inc(x);
SetLength(aKnoten, x);
aKnoten[x - 1].pSuper := nil;
aKnoten[x - 1].iHaeufigkeit := mi1.haeuf
+ mi0.haeuf;
aKnoten[x - 1].pBit0 := @aKnoten[mi0.index];
aKnoten[x - 1].pBit1 := @aKnoten[mi1.index];
aKnoten[x - 1].cBuchstabe := #0;
aKnoten[mi0.index].pSuper := @aKnoten[x - 1];
aKnoten[mi0.index].bSuper := false;
aKnoten[mi1.index].pSuper := @aKnoten[x - 1];
aKnoten[mi1.index].bSuper := true;
end;
// neuen Knoten hinzufügen -> Complete
end;
// BitCode auslesen!
i := 0;
{
repeat
if (aKnoten[i].pBit0 = nil) and (aKnoten[i].pBit1 = nil) then
begin
// Hier Code zum BitCode auslesen schreiben!
bitcode := '';
if aKnoten[i].bSuper then bitcode := '1' + bitcode
else bitcode := '0' + bitcode;
Point := aKnoten[i].pSuper;
while (Point^.pSuper <> nil) do
begin
Point := Point^.pSuper;
if Point.bSuper then bitcode := '1' + bitcode
else bitcode := '0' + bitcode;
end;
Memo1.Lines.Add('BitCode für *' +
aKnoten[i].cBuchstabe + '* =' + bitcode);
end;
inc(i);
until i = length(aKnoten);
}
Point := aKnoten[4].pBit0;
ShowMessage(IntToStr(aKnoten[4].pBit0^.iHaeufigkeit));
ShowMessage(IntToStr(aKnoten[4].pBit0^.iHaeufigkeit));
{
point := aKnoten[3].pSuper;
while (point^.pSuper <> nil) do
begin
ShowMessage(IntToStr(point^.iHaeufigkeit));
point := point^.pSuper;
end;
}
// BitCode auslesen! -> Complete
end;
end.
Gruß Sascha.
Man liest sich
|
|
Zitat
|