Thema: Delphi Problem mit Pointern

Einzelnen Beitrag anzeigen

Sascha

Registriert seit: 4. Jul 2003
Ort: Lübeck
58 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Problem mit Pointern

  Alt 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
  Mit Zitat antworten Zitat