Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
FreePascal / Lazarus
|
Re: LZW Komprimierung für texte - zugriffsverletzung
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
|
|
Zitat
|