![]() |
Fehler mit eigener Procedure
Hi,
Mir ist leider kein besserer Titel eingefallen... Also zu meinen Problem, ich habe eine eigene procedure geschrieben:
Delphi-Quellcode:
die ich jetzt mit
procedure quicksort (var l,r:integer);
var i,j,p:integer; begin i:=l; j:=r; if j>i then begin p:=eingabe[(j+1) div 2]; repeat while eingabe[i]<p do inc(i); while eingabe[j]>p do dec(j); if i<=j then begin tausche (eingabe[i],eingabe[j]); inc(i); dec(j); end; until i>j; end; if j>l then quicksort(l,j); if i<r then quicksort(l,r); end;
Delphi-Quellcode:
aufzurufen.
quicksort(1,10);
eingabe ist global mit eingabe:array [1..10] of integer; definiert. Also wenn ich jetzt das programm starte springt delphi zu quicksort(1,10); und die Fehlermeldung kommt: [Fehler] Unit1.pas(135): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen ich weiß leider nicht was ich mit dieser Fehlermeldung machen soll. Kann mir wer helfen??? |
Re: Fehler mit eigener Procedure
das kann nicht gehen, da du direkt zwei zahlen übergibst
versuche es so:
Delphi-Quellcode:
Wenn du VAR in der Procedure verwendest, kannst du nicht zwei Zahlen übergeben
var
a, b : integer; begin a := 1; b := 10; quicksort(a,b); MFG Alex |
Re: Fehler mit eigener Procedure
Hi,
Danke, aber ich versteh nicht warum das so ist, müsste nicht beides gehen???? |
Re: Fehler mit eigener Procedure
nimm das var aus der prozedur-deklaration raus:
Delphi-Quellcode:
procedure quicksort (l,r:integer);
|
Re: Fehler mit eigener Procedure
Hoi
Mach aus dem var vor den Parametern ein const. Gruss Shaman |
Re: Fehler mit eigener Procedure
das var bedeutet doch, dass du direkt in die Variable "zurückschreibst"
1 und 10 sind keine Variablen, daher geht das nicht!!! MFG Alex |
Re: Fehler mit eigener Procedure
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
O.k jetzt gehts aber jetzt hab ich ein grösseres Problemm. Im Anhang ist das Programm. Zuerst müssen im Programm 10 Zahlen eingegeben werden. Dann kann man im Menü auswählen wie sotiert werden soll. Buublesort funktioniert, aber Quicksort geht nicht: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EStackOverflow aufgetreten. Meldung: 'Stack-Überlauf'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- Könnts ihr euch mal anschauen wie der Fehler zustande kommt? |
Re: Fehler mit eigener Procedure
Hier mal die grundelegende Quicksort-Funktion, diese kannst du sehr leicht in deinen Code einbauen, ich denke, das schaffst du dann schon. ;)
Delphi-Quellcode:
Ich hoffe, du verstehst das.
//2 Zahlen tauschen
procedure TForm1.Swap(var Zahl1, Zahl2: integer); var h: integer; begin h := Zahl1; Zahl1 := Zahl2; Zahl2 := h; end; //Quicksort procedure TForm1.QuickSort(var Tab: TArray; HighIndex: integer); //Tab: Array mit den unsortierten Zahlen //HighIndex: Anzahl der Zahlen/Datensätze, die sortiert werden sollen procedure Sort(links, rechts: integer); var i, j, x: integer; begin i := links; j := rechts; x := Tab[(links + rechts) div 2]; repeat while Tab[i] < x do inc(i); while Tab[j] > x do dec(j); if i <= j then begin Swap(Tab[i], Tab[j]); inc(i); dec(j); end; until i > j; if links < j then Sort(links, j); if i < rechts then Sort(i, rechts); end; begin Sort(1, HighIndex); end; Wichtig ist hier, dass du einen Typ TArray hast:
Delphi-Quellcode:
und natürlich die Deklaration der Variablen:
type
TArray = array[1..20] of integer;
Delphi-Quellcode:
var
Tab: TArray; |
Re: Fehler mit eigener Procedure
Hallo,
Danke jetzt gehts, versteh nur noch nicht ganz was bei mir der Fehler war..... Weißt du eigentlich was ein: Heapsort ist??? |
Re: Fehler mit eigener Procedure
Hi!
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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