Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array sortieren (https://www.delphipraxis.net/126396-array-sortieren.html)

AlexanderBrade 23. Dez 2008 16:07


array sortieren
 
Ich hab ein riesengroßes Problem wie kann ich folgendes array Feldsortieren?
array[1..24]
Jedem z.B. A[1] ist der Wert eines edit-Feldes zugewiesen.
Ich möchte nun das Feld sortieren um anschließend die 8 höchsten Werte(1-15 sind möglich) zu erhalten um diese dann addieren zu können!
Wie müsste ein solcher BubbleSortAlgorithmus aussehen und wo schreibe ich den genau hin?

mkinzler 23. Dez 2008 16:09

Re: array sortieren
 
Array of was?

AlexanderBrade 23. Dez 2008 16:10

Re: array sortieren
 
array[1..24] of word
-->Ich will ja Zahlen sortieren!

Meflin 23. Dez 2008 16:12

Re: array sortieren
 
Unser Cheffe höchstpersönlich hat ein recht gutes Tutorial zu allerlei Sortieralgorithmen geschrieben ;)
http://www.delphipraxis.net/internal_redirect.php?t=344

DeddyH 23. Dez 2008 16:12

Re: array sortieren
 
Auf Wikipedia ist der Bubblesort schön beschrieben (mit pascal-ähnlichem Pseudocode).

mkinzler 23. Dez 2008 16:13

Re: array sortieren
 
Die Suchfunktion sollte auch Einiges zu Tage befördern :zwinker:

AlexanderBrade 23. Dez 2008 16:16

Re: array sortieren
 
Das hilft mir aber alles nicht weiter:
Selbst wenn ich folgenden Pseudocde habe:
Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= N downto 1 Do
    For j:= 1 To i Do
      If (Data[j-1] > Data[j]) Then SwapValues( j-1, j );
End;
Wo kommt diese Prozedur hin und wie verweise ich innerhalb einer Button1click prozedur darauf oder kann ich sie in selbige einbauen?
Und vor allem wie komme ich an die 8 "besten" Elemente?

DeddyH 23. Dez 2008 16:18

Re: array sortieren
 
Bei dem von Dir geposteten Code fehlt die Hälfte. Du musst das Array schon als Parameter übergeben. Schau Dir doch einfach mal Daniels Tut an und schmeiß Deinen zitierten Code in die Tonne.

Meflin 23. Dez 2008 16:20

Re: array sortieren
 
Zitat:

Zitat von AlexanderBrade
Wo kommt diese Prozedur hin und wie verweise ich innerhalb einer Button1click prozedur darauf oder kann ich sie in selbige einbauen?

Du könntest sie direkt in die ButtonClick Prozedur einbauen, oder du fügst die Prozedur im implementation-Teil ein und rufst sie dann schlicht und einfach aus deiner OnClick-Prozedur heraus auf.

Zitat:

Und vor allem wie komme ich an die 8 "besten" Elemente?
Nach dem Sortieren:
Delphi-Quellcode:
for i := 0 to 7 do
  MachWasMit(Array[i])

AlexanderBrade 23. Dez 2008 16:22

Re: array sortieren
 
Also so?
Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= 24 downto 1 Do
    For j:= 1 To i Do
      If (Array[j-1] > Array[j]) Then SwapValues( j-1, j );
End;

Noedel 23. Dez 2008 16:49

Re: array sortieren
 
Zitat:

Zitat von AlexanderBrade
Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= 24 downto 1 Do
    For j:= 1 To i Do
      If (Array[j-1] > Array[j]) Then SwapValues( j-1, j );
End;


Zitat:

Zitat von AlexanderBrade
Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= N downto 1 Do
    For j:= 1 To i Do
      If (Data[j-1] > Data[j]) Then SwapValues( j-1, j );
End;

du hast jetzt nicht NUR das "i" von "N" auf 24 geändert, oder?!?!

AlexanderBrade 23. Dez 2008 17:41

Re: array sortieren
 
Wenn ihr das alle so genau wisst, warum schreibt ihr immer so unkonkrete Antworten!
Natürlich muss ich selbst überlegen! Aber ich habe von Bubblesort etc. bis zum gestrigen Tage nichts gehört und da soll ich wissen wie ich ihn auf mein Problem anpassen kann?!?
Vielleciht hat jemand einen nützlichen Ratschlag!

DeddyH 23. Dez 2008 17:43

Re: array sortieren
 
Du hast Links zu einem Tutorial sowie zu Wikipedia bekommen. Das sollen unkonkrete Antworten sein?

mkinzler 23. Dez 2008 17:55

Re: array sortieren
 
Zitat:

Vielleciht hat jemand einen nützlichen Ratschlag!
-Antworten genau lesen ( Detlef rit dir z.B. zur Verwendung eines Parameters)
-Antworten/Tutorials versuchen zu verstehen
-Grundwissen ( Variablen muss man deklarieren)
...

Noedel 23. Dez 2008 17:56

Re: array sortieren
 
außerdem ist Bubblesort das einfachste Sortierverfahren, das es gibt!
Das Verfahren beruht darauf, dass man immer wieder die Liste durchgeht und sobald man einen Fehlstand entdeckt, diesen korrigiert.
Das macht man dann so lange, bis alle zahlen an der richtigen Stelle sind...

So schwer ist das doch nicht, oder?
Also wenn du uns mal deinen _ernstgemeinten_ Lösungsansatz zeigst, dann können wir dir auch helfen

AlexanderBrade 23. Dez 2008 18:18

Re: array sortieren
 
Wie übergebe ich das Feld(array) als Parameter?/Warum kennt mein Delphi die Prozedur "SwapValues" nicht?

Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= 24 downto 1 Do
    For j:= 1 To i Do
      If (B[j-1] > B[j]) Then SwapValues( j-1, j );
End;
Wenn mein array: B[1..24] ist müsste es doch so hinhauen?!?
P.S. Wie rufe ich die Prozedur aus meiner On-Click prozedur heraus auf?

mkinzler 23. Dez 2008 18:21

Re: array sortieren
 
Delphi-Quellcode:
Procedure BubbleSort( inArray: Array of Word);

Noedel 23. Dez 2008 18:28

Re: array sortieren
 
Die SwapValues procedure musst du wohl noch selber schreiben...
Also einfach in nem Dreieckstausch die beiden Werte vertauschen

h:=Wert1;
Wert1:=Wert2;
Wert2:=h;

AlexanderBrade 23. Dez 2008 18:29

Re: array sortieren
 
Das hat mir schon einmal geholfen, aber warum kennt mein Delphi die Prozedur "SwapValues" nicht?[So kann ich nicht compilieren!]

mkinzler 23. Dez 2008 18:30

Re: array sortieren
 
Zitat:

Die SwapValues procedure musst du wohl noch selber schreiben...

DeddyH 23. Dez 2008 18:31

Re: array sortieren
 
Wenn ich beim Gockel die Begriffe [google]Delphi + Bubblesort[/google] eingebe, habe ich als 3. Treffer diese Seite, wo der Algo gut erklärt und in verschiedenen Programmiersprachen implementiert wird.

mkinzler 23. Dez 2008 18:32

Re: array sortieren
 
Und eine Vertauschen 2 Werten macht man am Besten mit einem Dreieckstausch

Noedel 23. Dez 2008 18:32

Re: array sortieren
 
Weil SwapValues eine so genannte, selbst geschriebene Procedure von Wikipedia ist, und dies nicht in diesem Thema "Bubblesort" extra erklärt werden sollte/könnte/müsste/... ach such dir n wort aus :roll:

[EDIT] wohl mal wieder zu spät :shock: [/EDIT]

AlexanderBrade 23. Dez 2008 18:43

Re: array sortieren
 
Vielen Dank für die nützlichen Hinweise, aber eine FRage bleibt:
Wie rufe ich die Procedure Bubblesort innerhalb meiner Button1cclick prozedur auf?

DeddyH 23. Dez 2008 18:49

Re: array sortieren
 
Zitat:

Zitat von AlexanderBrade
Vielen Dank für die nützlichen Hinweise, aber eine FRage bleibt:
Wie rufe ich die Procedure Bubblesort innerhalb meiner Button1cclick prozedur auf?

Wie jede andere auch.
Delphi-Quellcode:
Bubblesort(MeinArray);

Noedel 23. Dez 2008 18:56

Re: array sortieren
 
weil die Frage schon vorprogrammiert (schöner Wortwitz =D ) ist, einer Procedure "SwapValues" übergibt man 2 parameter!

Delphi-Quellcode:
SwapValues(j-1,j)
demnach erwartet diese auch 2!

Delphi-Quellcode:
procedure TForm1.SwapValues(a,b:integer);

AlexanderBrade 23. Dez 2008 19:01

Re: array sortieren
 
inzwischen bin ich so weit gekommen:
(Kann jemand mal Korrektur lesen?!?)
Delphi-Quellcode:

procedure Button1Click(Sender: TObject);
    Procedure BubbleSort(var B: Array of byte);
  private
    { Private-Deklarationen }

              {usw.}
Procedure BubbleSort(var B: Array of byte);
   Procedure Swap(var xx,yy:integer);
     var
      Swp: integer;
      begin
        swp:=xx;
        xx:=yy;
        yy:=swp;
      end;

var i,j : Integer;
Begin
For i:= 1 to 24 Do
   For j:= 1 To 24-1 Do
       If (B[j] > B[j+1]) Then Swap( B[j], B[j+1] );

End;
Zunächst mekkert er immer im Deklarationsteil(oben) bei der Prodedure BubbleSort(...), desweiteren missfällt ihm die if Zeile der Prozedur!

DeddyH 23. Dez 2008 19:04

Re: array sortieren
 
Was soll denn A sein?

[edit] Und wenn Du es im interface-Teil als Methode Deines Formulars deklarierst, musst Du es im implementation-Teil auch als Methode schreiben:
Delphi-Quellcode:
procedure TDeineForm.Bubblesort(var B: Array of byte);
[/edit]

AlexanderBrade 23. Dez 2008 19:05

Re: array sortieren
 
Das ist eine wirklich gute Frage!

guidok 23. Dez 2008 19:10

Re: array sortieren
 
Dein Array ist vom Typ "Byte" und deine Swap Prozedure tauscht Werte vom Typ Integer und angeblich ist dein Array ja vom Typ Word. Du solltest dich mal entscheiden.

AlexanderBrade 23. Dez 2008 19:13

Re: array sortieren
 
Vielen Dank, da war ich wohl wieder etwas zu flink! Aber trotzdem mekkert er und bezeichnet die Prozedur innerhalb des "type"-Teiles, d.h. vor private als "Ungeügende Forward- oder External-Deklaration: TForm5.BubbleSort"

DeddyH 23. Dez 2008 19:14

Re: array sortieren
 
Schieb es mal unter private.

AlexanderBrade 23. Dez 2008 19:15

Re: array sortieren
 
Bringt leider auch nichts!

DeddyH 23. Dez 2008 19:16

Re: array sortieren
 
Du hast aber nicht im interface-Teil "TForm5" davorgeschrieben, oder? Das gehört nur in den implementation-Teil.

mkinzler 23. Dez 2008 19:18

Re: array sortieren
 
Zitat:

-Grundwissen
http://www.delphi-treff.de/tutorials/grundlagen/

AlexanderBrade 23. Dez 2008 19:43

Re: array sortieren
 
Nein das habe ich nicht so geschrieben: Mein Code lautet:
[delphi]

procedure Button1Click(Sender: TObject);
Procedure BubbleSort(var B: Array of byte); {hier meldet er den Fehler}
private
{ Private-Deklarationen }

{usw.}
Procedure BubbleSort(var B: Array of byte);
[delphi]

DeddyH 23. Dez 2008 19:45

Re: array sortieren
 
Und damit hast Du alles ignoriert, was ich vorher gepostet hab. :?

AlexanderBrade 23. Dez 2008 19:48

Re: array sortieren
 
Aber unter Private klappt es ja auch nicht, deshalb habe ich es wieder verworfen...

mkinzler 23. Dez 2008 19:52

Re: array sortieren
 
Delphi-Quellcode:

procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
...
Procedure BubbleSort(var B: Array of byte); {hier meldet er den Fehler}
{usw.}
Procedure TForm<x>.BubbleSort(var B: Array of byte);

DeddyH 23. Dez 2008 19:53

Re: array sortieren
 
Nochmal zum Mitschreiben:
Delphi-Quellcode:
type
  TForm5 = class(TForm)
  ...
  private
    Procedure BubbleSort(var B: Array of byte);
  ...
  end;
...

implementation
...

Procedure TForm5.BubbleSort(var B: Array of byte); //hier muss das TForm5 davor
Und nun lies Dir meine vorherigen Postings noch einmal durch.

[edit] *Grmpf* Markus :lol: [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 Uhr.
Seite 1 von 2  1 2      

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