Thema: Delphi Quicksort Fehlermeldung

Einzelnen Beitrag anzeigen

jawo3

Registriert seit: 15. Sep 2009
Ort: Niedersachsen
41 Beiträge
 
#1

Quicksort Fehlermeldung

  Alt 22. Feb 2010, 16:25
Hallo,
ich arbeite gerade an einem Programm, dass zehn Zufallszahlen über den ersten Quicksort Algorythmus (also mit abwechselndem annähern von rechts und links) sortiert.

Hierbei stoße ich auf folgende Fehlermeldung (Error):
"Types of actual and formal var parameter must be identical"

Dieser Fehler wird bei:
qusort1(anfang, m-1);
und
qusort1(m+1,ende);
gefunden.


Hier mal das Programm (aus 5 Units, da so gefordert):

Quicksort1:
Delphi-Quellcode:
unit Quicksort1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, allconst, allproc, allvar, alltype;

type

  TForm1 = class(TForm)
    StringGridUnsort: TStringGrid;
    StringGridSortiert: TStringGrid;
    ButtonGenerieren: TButton;
    ButtonSortieren: TButton;
    ButtonBeenden: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure ButtonGenerierenClick(Sender: TObject);
    procedure ButtonSortierenClick(Sender: TObject);
    procedure ButtonBeendenClick(Sender: TObject);
    procedure qusort1 (var anfang, ende : integer);

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Tausch(var x,y: Integer);
var tauscharray: tdaten;
begin
  tauscharray[1]:= daten[x];
  daten[x] := daten[y];
  daten[y] := tauscharray[1];
end;

//Quicksort-Prozedur
procedure TForm1.qusort1 (var anfang, ende : integer);
var
    a, m, e: integer;
    richtung: tRichtung;
    i,j,x: integer;
begin
  if ende-anfang<=6 then
  begin
    //Start Bubblesort
      begin
      for i:=2 to max do
      for j:=max downto i do
        if Daten[j-1]>Daten[j] then
        begin
          x:=Daten[j-1];
          Daten[j-1]:=Daten[j];
          Daten[j]:=x;
        end;
      for i:=1 to max do
        StringGridSortiert.Cells[0,i-1]:=inttostr(Daten[i]);
      end;
    //Ende Bubblesort
  end
  else
  begin

    while e>a do
    begin
      if richtung=vonrechts then
      begin
        while (daten[e]>=daten[m]) and (e>m) do
        begin
          dec(e);
        end;
        if e>m then
        begin
          Tausch(e,m);
          m:=e;
        end;
        richtung:=vonlinks;
      end
      else
      begin
        while (daten[a]<=daten[m]) and (a<m) do
        begin
          inc(a);
        end;
        if a<m then
        begin
          Tausch(a,m);
          m:=a;
        end;
        richtung:=vonrechts;
      end;
        dec(m);
        qusort1(anfang, m-1);
        inc(m);
        qusort1(m+1,ende);
    end;
  end;
end;

//Button zum Generieren von Zufallszahlen
procedure TForm1.ButtonGenerierenClick(Sender: TObject);
var i: integer;
begin
randomize;
  for i:=1 to max do
  begin
    sortdaten[i]:=trunc(random*100);
    StringGridUnsort.Cells[0,i-1]:=inttostr(sortdaten[i]);
  end;
end;

//Aufruf der Quicksort Prozedur
procedure TForm1.ButtonSortierenClick(Sender: TObject);
var i: integer;
begin
  qusort1 (sortdaten[1],sortdaten[max]);
  for i:=1 to max do StringGridSortiert.Cells[0,i-1]:=inttostr(sortdaten[i]);
end;

//Button zum Beenden des Programms
procedure TForm1.ButtonBeendenClick(Sender: TObject);
begin
  close;
end;

end.
allconst:
Delphi-Quellcode:
unit allconst;

interface

const max = 10;

implementation

end.
allproc:
Delphi-Quellcode:
unit allproc;

interface

uses allconst, alltype, allvar;

implementation

end.
alltype:
Delphi-Quellcode:
unit alltype;

interface

uses allconst;

type tdat = integer;
      trichtung = (vonrechts,vonlinks);
      tdaten = array[1..max] of tdat;

implementation

end.
allvar:
Delphi-Quellcode:
unit allvar;

interface

uses allconst, alltype;

var sortdaten: tdaten;
      daten: tdaten;

implementation

end.

Wenn ihr mir erklären könntet, wie der Fehler entstanden ist und wie ich ihn beheben kann, wäre ich sehr dankbar.

Mit freundlichen Grüßen
jawo3

PS: Falls ihr sonstige kleine Verbesserungsvorschläge für den Code habt, wäre das auch toll, da ich noch Anfänger bin.
Jan
  Mit Zitat antworten Zitat