Autor Beitrag
d0md03l
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 25.10.06 17:59 
Hallo zusammen.

ich will mit delphi eine Liste mit Namen Alphabetisch sortieren.
Ich hab es mit dem Bubbelsort Algorithmus versucht, doch irgendwie schaffe ich es nicht den richtig einzusetzen.

Ich habe eine Selbsterstellte Liste: "TNamensliste" welche aus Arrays besteht. wie kann ich diese Liste jetzt vor dem Ausgeben noch alphabetisch sortieren?


Kann mir da jemand weiterhelfen?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
 
type TNamen = string;      //Deklaration von eigenen Datentypen
     TNamensliste = array[1..10] of TNamen;
var
  Form1: TForm1;
  aktListe : TNamensliste;
  zaehler : integer;

implementation

{$R *.DFM}

// Methode zum Sortieren im Bubble- Sort style
procedure sortieren(Liste: TNamensliste);
var
  done: boolean;
  i: integer;
  Dummy: string;
begin

  repeat
    done := true;
    for i := 1 to 9 do
      if Liste[i] > Liste[i + 1] then
      begin
        Dummy := Liste[i];
        Liste[i] := Liste[i + 1];
        Liste[i + 1] := Dummy;

        done := false;
      end;
  until done;
end;
end;

//Methode zum Ausgeben der Namen in einem Editfeld
procedure TForm1.btAusgabeClick(Sender: TObject);
VAR text1:string;
begin
    sortieren(aktListe);
    namen_in_zeile(aktListe,text1);// Liste in string umwandeln
    edAusgabe.text:=text1;
end;


Das ist nur ein ausschnitt des Quelltextes.
Das Programm läuft, nur wird die Liste unsortiert wieder ausgegeben.


Moderiert von user profile iconGausi: Topic aus Algorithmen, Optimierung und Assembler verschoben am Mi 25.10.2006 um 19:41
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 25.10.06 18:31 
Dein Fehler ist ganz einfach: Die Deklaration der Prozedur Sortieren enthält einen 'Call by Value' Parameter, nämlich die Liste. 'Call by Value' bedeutet, das der gesamte Wert übergeben wird, quasi eine Kopie. Diese Kopie wird sortiert, und ... weggeworfen.

Du benötigst ein 'Call by Reference', denn Du willst die Liste im Original übergeben. Diese Liste ist ja irgendwo im Speicher (wo, ist egal). Du übergibst also die Referenz an die Sortierfunktion. Pascal / Delphi ist hier sehr freundlich. Alles, was Du tun musst, ist die Deklaration so zu ändern:
ausblenden Delphi-Quelltext
1:
procedure sortieren(Var Liste: TNamensliste);					

Das 'Var' deklariert den formalen Parameter als Referenz. Wenn du nun die Routine aufrufst, z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Var
  a : TNamensListe;
...
  Sortieren (a);
...

dann ist 'a' identisch mit der 'Liste' innerhalb der Prozedur.

_________________
Na denn, dann. Bis dann, denn.
d0md03l Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 26.10.06 12:29 
Vielen Dank, Du hast mir sehr geholfen