Einzelnen Beitrag anzeigen

SilverSunlight

Registriert seit: 3. Nov 2011
2 Beiträge
 
#1

Fehlermeldungen aller Art ~

  Alt 8. Nov 2011, 17:29
Hallö zusammen Ich mal wieder.
Ich bastel immernoch an meinem Sortier-Programm herum und bekomme es einfach nicht auf die Reihe. Morgen ist Abgabe .. Ogott.
Für ein paar meiner Fragen hab ich hier im Forum durch rumsuchen und durchlesen schon so meine Antworten gefunden, aber da gibt es noch Sachen, die ich nicht schaffe.
Aaaaalso.
Ich soll eine Datenmenge (Unsortierte Nachnamen) mit Hilfe von 3 Sortieralgorithmen sortieren. Meine Wahl fiel auf Bubblesort, Mergesort, sowie Quicksort. Der Bubble funktioniert auch( YUHU! ), aber bei den anderen beiden hängt es ein bisschen ...
Beim Merge kommt (beim Ausführen des Programms -> Ausführen des Mergesorts) eine Fehlermeldung "Zugriffsverweigerung". Und ich komme einfach nicht dahinter wieso. o_O

Der Quicksort sagt mir ständig eine Meldung nach der anderen, noch bevor ich das Programm überhaupt öffnen kann. Diesmal ist es "Nicht genügend wirkliche Parameter".

Könntet ihr bitte einmal drüber schauen? Vielleicht wisst ihr ja, wo meine Fehler liegen :s

Hier mein Code :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Heading: TLabel;
    BubbleButton: TButton;
    QuickButton: TButton;
    MergeButton: TButton;
    OpenButton: TButton;
    Eingabe: TEdit;
    OpenDialog1: TOpenDialog;
    Label2: TLabel;
    Ausgabe: TListBox;
    SaveDialog1: TSaveDialog;
    Speichern: TEdit;
    SaveButton: TButton;
    RadioGroup1: TRadioGroup;
    Aufsteigend: TRadioButton;
    Abfallend: TRadioButton;
    procedure OpenButtonClick(Sender: TObject);
    procedure BubbleButtonClick(Sender: TObject);
    procedure MergeButtonClick(Sender: TObject);
    procedure MergeSort(var L,R: Integer);
    procedure QuickButtonClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  txtfile: Textfile;
  save: string;
  Feld, Merken: Array of string;
  Z: Integer;

implementation

{$R *.DFM}

procedure Quicksort(l,r: Integer;var a : array of integer);

var i, j, Merke, Mitte: Integer;

begin
i := l;
j := r;
Mitte := a[(l+r) div 2];
repeat
while a[i] < Mitte do Inc(i);
while Mitte < a[j] do dec(j);
if i <= j then
begin
Merke := a[i];
a[i] := a[j];
a[j] := Merke;
inc(i);
dec(j);
end;
until i > j;
if l < j then Quicksort(l,j,a);
if i < r then Quicksort(i,r,a);
end;

procedure TForm1.MergeSort(var L, R : integer );
var
  i, j, k, m, m2 : Integer;
begin
if R>L then
begin
m:= (R+L) div 2;
m2:= m+1;
MergeSort( L, m);
MergeSort( m2, R);
for i:= L to m do Merken[i]:= Feld[i];
i:= L;
for j:= m+1 to R do Merken[R+m+1-j]:= Feld[j];
j:= R;
for k:= L to R do
begin
if (Merken[i] < Merken[j]) then
begin
Feld[k]:= Merken[i];
inc(i);
end
else
begin
Feld[k]:= Merken[j];
dec(j);
end;
end;
end;
end;

procedure TForm1.OpenButtonClick(Sender: TObject);
var
A: Integer;
begin
Z:=0;
OpenDialog1.Execute;
Eingabe.Text:=OpenDialog1.Filename;
AssignFile(txtfile, Eingabe.text);
reset (txtfile);
while not eof (txtfile) do
begin
Z:= Z+1;
readln (txtfile, save);
Ausgabe.items.add(save);
end;
Setlength(Feld, Z);
reset(txtfile);
for A:= 0 to Z-1 do
begin
readln (txtfile, Feld[A]);
end;
end;

procedure TForm1.BubbleButtonClick(Sender: TObject);
var
x: Integer;
Temp: String;
Done: Boolean;

begin
Ausgabe.clear;
repeat
done:= True;
for x := Low(Feld) to High(Feld) -1 do
begin
if Feld[x] > Feld[x+1] then
begin
Temp := Feld[x];
Feld[x] := Feld[x+1];
Feld[x+1] := Temp;
Done := False;
end;
end;
until done;

if Aufsteigend.checked=True then
begin
for x:= Low(Feld) to High(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end

else if Abfallend.checked=True then
begin
for x:= High(Feld) downto Low(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;

procedure TForm1.MergeButtonClick(Sender: TObject);
var
g,c,x: Integer;
begin
c:= Low(Feld);
g:= High(Feld);
Ausgabe.clear;
begin
MergeSort (c,g);

if Aufsteigend.checked=True then
begin
for x:= Low(Feld) to High(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end

else if Abfallend.checked=True then
begin
for x:= High(Feld) downto Low(Feld) do
begin
Ausgabe.Items.add(Feld[x]);
end;
end;
end;
end;

procedure TForm1.QuickButtonClick(Sender: TObject);
var
i,j: Integer;
begin
i:= Low(Feld);
j:= High(Feld);
Ausgabe.clear;
begin
QuickSort (i,j);
end;
end;
end.
  Mit Zitat antworten Zitat