Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler mit eigener Procedure (https://www.delphipraxis.net/32089-fehler-mit-eigener-procedure.html)

ferby 18. Okt 2004 15:25


Fehler mit eigener Procedure
 
Hi,

Mir ist leider kein besserer Titel eingefallen...

Also zu meinen Problem, ich habe eine eigene procedure geschrieben:

Delphi-Quellcode:
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;
die ich jetzt mit

Delphi-Quellcode:
quicksort(1,10);
aufzurufen.

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???

Alex_ITA01 18. Okt 2004 15:28

Re: Fehler mit eigener Procedure
 
das kann nicht gehen, da du direkt zwei zahlen übergibst

versuche es so:

Delphi-Quellcode:
var
  a, b : integer;
begin
  a := 1;
  b := 10;
  quicksort(a,b);
Wenn du VAR in der Procedure verwendest, kannst du nicht zwei Zahlen übergeben

MFG Alex

ferby 18. Okt 2004 15:29

Re: Fehler mit eigener Procedure
 
Hi,

Danke, aber ich versteh nicht warum das so ist, müsste nicht beides gehen????

bttb930 18. Okt 2004 15:30

Re: Fehler mit eigener Procedure
 
nimm das var aus der prozedur-deklaration raus:

Delphi-Quellcode:
procedure quicksort (l,r:integer);

Shaman 18. Okt 2004 15:30

Re: Fehler mit eigener Procedure
 
Hoi

Mach aus dem var vor den Parametern ein const.

Gruss
Shaman

Alex_ITA01 18. Okt 2004 15:31

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

ferby 18. Okt 2004 15:37

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?

Matze 18. Okt 2004 16:43

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:
//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;
Ich hoffe, du verstehst das.

Wichtig ist hier, dass du einen Typ TArray hast:

Delphi-Quellcode:
type
  TArray = array[1..20] of integer;
und natürlich die Deklaration der Variablen:

Delphi-Quellcode:
var
  Tab: TArray;

ferby 18. Okt 2004 17:01

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???

Matze 18. Okt 2004 17:35

Re: Fehler mit eigener Procedure
 
Hi!

Zitat:

Zitat von ferby
Weißt du eigentlich was ein: Heapsort ist???

Schau mal inDaniel's Tutorial da wird das schön erklärt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz