Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

Re: LZW Komprimierung für texte - zugriffsverletzung

  Alt 24. Aug 2009, 19:05
Hallo QWERTZ543221,

als Denkanstoß:

(das Original:)

Delphi-Quellcode:
function tform1.BinSearch(a: array of longint; x: longint): longint;
var
  anfang,ende,pivot:longint;
  fund:Boolean;
begin
if x>a[length(a)-1]
  then
  begin
  result:=-1;
  exit;
  end
  else
  begin
  anfang:= 0;
  ende:= length(a);
  fund:= False;
  Result := -1;

  while anfang<= ende) and (found=false) do
  begin
    Pivot := ((anfang + ende) div 2)mod length(a);
    if a[Pivot] = x then
    begin
      Found := True;
      Result := Pivot+1;
    end
    else if a[Pivot] > x then
      ende := Pivot - 1
    else
      anfang := Pivot + 1;
  end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i,j,x,max:longint;
begin
memo1.Clear;
max:=strtoint(edit1.text);
i:=strtoint(edit2.Text);
setlength(ar,i);
randomize;
j:=0;
while j<i do
begin
x:=random(max)+1;
ar[j]:=x;
memo1.Lines.Add(inttostr(ar[j]));
j:=j+1;
end;
end;
(und etwas hübscher:)
Delphi-Quellcode:
function tform1.BinSearch(a: array of longint; x: longint): longint;
var
  anfang,ende,pivot:longint;
  fund:Boolean;
begin
  if x>a[length(a)-1] then
  begin
    result:=-1;
    exit;
  end
  else
  begin
    anfang:= 0;
    ende:= length(a);
    fund:= False;
    Result := -1;
    while anfang<= ende) and (found=false) do
    begin
      Pivot := ((anfang + ende) div 2)mod length(a);
      if a[Pivot] = x then
      begin
        [b]Found [/b] := True;
        Result := Pivot+1;
      end
      else
        if a[Pivot] > x then
          ende := Pivot - 1
        else
          anfang := Pivot + 1;
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,x,max:longint;
begin
  memo1.Clear;
  max:=strtoint(edit1.text); // Was ist wenn hier Buchstaben drin sind??
  i:=strtoint(edit2.Text); // Was ist wenn hier Buchstaben drin sind??
  setlength(ar,i);
  randomize;
  j:=0;
  while j<i do
  begin
    x:=random(max)+1;
    ar[j]:=x; // ar ist globale var in dieser Unit
    memo1.Lines.Add(inttostr(ar[j]));
    j:=j+1;
  end;
end;
Wo kommt, dieses Found her? Definiert hast Du Fund !!
Da gibt es keine Fehlermeldung????

Gruß
K-H
  Mit Zitat antworten Zitat