![]() |
Quicksort Fehlermeldung
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:
allconst:
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.
Delphi-Quellcode:
allproc:
unit allconst;
interface const max = 10; implementation end.
Delphi-Quellcode:
alltype:
unit allproc;
interface uses allconst, alltype, allvar; implementation end.
Delphi-Quellcode:
allvar:
unit alltype;
interface uses allconst; type tdat = integer; trichtung = (vonrechts,vonlinks); tdaten = array[1..max] of tdat; implementation end.
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. |
Re: Quicksort Fehlermeldung
Delphi-Quellcode:
wird zu
procedure TForm1.qusort1 (var anfang, ende : integer);
Delphi-Quellcode:
und die Fehlermeldung ist weg.
procedure TForm1.qusort1 (var anfang, ende : tDat);
Gruß K-H |
Re: Quicksort Fehlermeldung
Auch, wenn ich das entsprechend ändere, besteht der gleiche Fehler an den gleichen Stellen weiterhin.
Woran könnte das liegen? |
Re: Quicksort Fehlermeldung
In welcher Zeile tritt der Fehler auf?
|
Re: Quicksort Fehlermeldung
Wie gesagt am Ende der Quicksort-Prozedur in den Zeilen
qusort1(anfang, m-1); und qusort1(m+1,ende); |
Re: Quicksort Fehlermeldung
qusort1 deklariert Var-Parameter! Damit sind Übergaben wie m-1 oder m+1 nicht erlaubt. Lass mal das var weg.
OT: Du scheinst ein Faible für globale Variablen zu haben (allvar?). Das könnte dir mittelfristig noch um die Ohren fliegen. |
Re: Quicksort Fehlermeldung
Getrennte Units für alle Konstanten, Typen und Variablen kann man eh nicht konsequent durchhalten ... spätestens, wenn du mal eine typisierte Konstante benötigst, war's das.
|
Re: Quicksort Fehlermeldung
Danke, das hat das Problem behoben.
Grüße jawo3 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz