Hi Leute!
Ich habe gestern ein Programm geschrieben, das aus einem Memofeld doppelte Zahlen herauslöschen soll, die restlichen sollen aufgerückt werden. Hierbei habe ich ein Problem nachdem ich auf den Start Button drücke, dann kommt eine Benachrichtigung über Debugger
Exception, so eine Art Zugriffsverletzung aus irgendeinem Grund, nur ich weiß nicht aus welchem
. Kommt sowohl beim Start über F9, als auch der exe. Datei. Ich geb euch hierzu mal den Quellcode, vielleicht stimmt daran etwas nicht, wobei es schonmal so ähnlich funktioniert hat?
Delphi-Quellcode:
unit fDoppelLoesch;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
mmEin: TMemo;
mmAus: TMemo;
btStart: TButton;
procedure btStartClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btStartClick(Sender: TObject);
//Konstantendeklaration
const
nMax = 30;
//Variablendeklaration
var
i, j, k, N: integer;
A:
array [1..nMax]
of integer;
begin
//Einlesen von N
N:= mmEin.Lines.Count;
//Einlesen der Zahlen
for i:= 0
to N-1
do
//Speichern der Zahlen im Feld
A[i]:= StrToInt(mmEin.Lines[i]);
//i auf 0 zuweisen
i:= 0;
//Wiederhole bis
repeat
//j ist zugewiesen i+1
j:=i+1;
//Wiederhole bis
repeat
//Wenn A[i] und A[i+1] oder j>=N, dann
if ((A[i]=A[j])
or (j>= N))
then
begin
//Von i+1 zu N+1
for k:= j
to N+1
do
begin
//Speichere bei i+1, den Wert von i+1+1
A[j]:= A[j+1];
//Vermindere N um 1
dec(N);
end;
end
//sonst
else
//Erhöhe j um 1
inc(j);
//j größer N-1
until j > N-1;
//Erhöhe i um 1
inc(i);
//i größer N-1
until i > N-1;
//Ausgeben der restlichen Zahlen
for i:= 0
to N-1
do
mmAus.Lines.Add(IntToStr(A[i]));
end;
end.