Einzelnen Beitrag anzeigen

Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#1

Löschen doppelter Zahlen

  Alt 21. Aug 2003, 10:03
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.
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat