Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wörter alphabetisch Sortieren! (https://www.delphipraxis.net/14351-woerter-alphabetisch-sortieren.html)

Moin 7. Jan 2004 16:52


Wörter alphabetisch Sortieren!
 
Tach alle zusammen!

Ich soll für die Schule ein kleines Übungsprogramm schreiben, dass 30 Namen aus einer Memo alphabetisch sortiert. Das Programm startet auch, aber es hängt sich bei der Ausführung der entsprechenden Procedure auf.

Delphi-Quellcode:
Namen : array[0..29] of String;
Delphi-Quellcode:
procedure THF.Sortieren1Click(Sender: TObject);
   var i, k: Byte;
        Temp: string; // Temporäre Text Datei
begin

FOR i:=0 TO 29 DO
 Namen[i]:= Memo.Lines[i];

FOR i:=0 TO 28 DO
 BEGIN
   k:=0;
   Repeat
    If Namen[i,k]<> Namen[i+1,k] Then
     If Namen[i,k]> Namen[i+1,k]
     Then Begin
          temp:= Namen[i];
          Namen[i]:= Namen[i+1];
          Namen[i+1]:= temp;
          End;
   Until (Namen[i,k]<> Namen[i+1,k]);
   inc(k);
 END;

FOR i:=0 TO 29 DO
Memo.Lines[i]:= Namen[i];


end;
Ich nehme an dass es an "Namen[i,k]" hängt, ich möchte mit k den Buchstaben des Strings ansprechen!!

Danke für eure Mühen!

Hansa 7. Jan 2004 17:16

Re: Wörter alphabetisch Sortieren!
 
Dein Source benötigt einiges an Überarbeitung, zumindest von der Logik her. Du schreibst einmal
Delphi-Quellcode:
Namen [i]
und dann :
Delphi-Quellcode:
Namen [i,k]
Was denn nu ?

For und While Schleifen werden gemischt. Also auf den ersten Blick weiß ich gar nicht, was Du da machst. 8) Sortiere mal den Code und mache ihn einheitlich.

himitsu 7. Jan 2004 17:32

Re: Wörter alphabetisch Sortieren!
 
Wenn weniger als 30 Zeilen im Memo sind, dann wird irgendwie der Zähler durcheinander gebracht.
Und das Programm reagiert anders als es soll.

Bei mir ist zum Beispiel i = 29 im 1. Durchlauf, obwohl es ja bei diesem Code
Delphi-Quellcode:
For i := 0 to 28 do Begin
i = 0 sein sollte. Demnach gibt es auch einen netten Zugriffsfehler.
Code:
If Namen[i, k] <> Namen[[color=red]i + 1[/color], k] Then
Namen[30] existiert ja nicht.

Davon abgeseh'n funktioniert deine Sortierfunktion nicht.

Delphi-Quellcode:
Uses Math;

Var Namen: Array[0..29] of String;

Procedure TForm1.Button1Click(Sender: TObject);
  Var i, k: Integer;
    Temp: String; // Temporäre Variable

  Begin
    {Namen einlesen}
    For i := 0 to 29 do Namen[i] := '';
    For i := 0 to Min(29, Memo1.Lines.Count - 1) do
      Namen[i] := Memo1.Lines[i];
    {Sortieren}
    For i := 0 to 28 do Begin
      k := 1;
      Repeat
        If Namen[i, k] <> Namen[i + 1, k] Then
        If Namen[i, k] > Namen[i + 1, k] Then Begin
          temp := Namen[i];
          Namen[i] := Namen[i + 1];
          Namen[i + 1] := temp;
        End;
      Until (Namen[i, k] <> Namen[i + 1, k]);
      Inc(k);
    End;
    {Namen ausgeben}
    Memo1.Lines.Clear;
    For i := 0 to 29 do
      If Namen[i] > '' Then Memo1.Lines.Add(Namen[i]);
  End;
Ach ja, ich hab nur das Ein- und Auslesen der Namen überarbeitet, das funktioniert jetzt ohne Probleme.
An der Sortierfunktion wurde nichts geändert, da ich einfach nicht kapiere, was du da machen willst.

DennyC 7. Jan 2004 17:36

Re: Wörter alphabetisch Sortieren!
 
Hallo!

Wenn Du schon ein Memo hast, nutze doch die Methode Sort von TStringList (also der Lines-Eigenschaft des Memos). Aber wahrscheinlich ist das Deiner Schule zu simpel...

Denny

Moin 7. Jan 2004 17:40

Re: Wörter alphabetisch Sortieren!
 
@Hansa:
Zitat:

For und While Schleifen werden gemischt
Ich habe nich eine while-schleife dabei.
und wie ich schon geschrieben habe, wollte ich mit Name[i,k] auf einen String des Array zugreifen [i] von dem ich dann die einzelnen Buchstaben anspreche [k].
Damit ich herrausfinden kann welcher buchstabe im alphabet höher steht!

Mikko 7. Jan 2004 17:41

Re: Wörter alphabetisch Sortieren!
 
Kann da DennyC nur zustimmen. Mit 'ner Stringlist hast du die Namen im Nu sortiert.

himitsu 7. Jan 2004 17:42

Re: Wörter alphabetisch Sortieren!
 
@DennyC:
Ich denke mal, die sollen lernen wie sortiert wird.

Und das ist mit Autosort ja nicht möglich.

Moin 7. Jan 2004 17:54

Re: Wörter alphabetisch Sortieren!
 
@ DennyC : hast recht, das is meiner Lehrerin zu billig.

@ alle:
Da anscheinen keiner kapiert wie die procedure funktioniert (bzw. soll) :roll:, möchte ich eine einfache Frage formulieren:

Wie spreche ich den Buchstaben "k" von einem String "i" aus einem Array of String an?
Ich habe einfach nur spekuliert dass es über "Namen[i,k] " funzt, da keine Fehlermeldung kam dachte ich, dass es stimmt.

@ himitsu & Mikko:

Zitat:

Ich denke mal, die sollen lernen wie sortiert wird.
dass kann schon sein, aber vorallem soll dadurch unser logisches Verständnis getestet werden, wir kriegen nähmlich ne note drauf. Ich bezweifle ernst haft, dass es auf eine Wert änderung im OI 15 Punkte gibt!

Jens Schumann 7. Jan 2004 17:55

Re: Wörter alphabetisch Sortieren!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich glaube mit dem Teil
Delphi-Quellcode:
    If Namen[i,k]<> Namen[i+1,k] Then
     If Namen[i,k]> Namen[i+1,k]
soll erreicht werden, dass Schmidt vor Schmitt einsortiert wird.

Das ist aber gar nicht nötig weil:
'Schmidt' > 'Schmitt' False ergibt.

Da Moin lernen soll wie sortiert wird ist es sicherlich nicht angebracht die Sort-Methode
oder direkt Quicksort vorzuschlagen. Deshalb gebe ich hier die einfachsten Sortieralgortihmus
an den ich kenne.
Delphi-Quellcode:
var
   iCnt  : Integer;
   jCnt  : Integer;
   Temp  : String;
begin
  For iCnt:=0 to memSource.Lines.Count-1 do
    For jCnt:=iCnt to memSource.Lines.Count-1 do
      begin
      If memSource.Lines[iCnt]>memSource.Lines[jCnt] then
        begin
        Temp:=memSource.Lines[iCnt];
        memSource.Lines[iCnt]:=memSource.Lines[jCnt];
        memSource.Lines[jCnt]:=Temp;
        end;
      end;
end;
Da es sich hier um Hausaufgaben handelt. Und Hausaufgaben hier eigentlich nicht gemacht werden
sollte uns MOIN doch mal aufmalen, wie die Reihe hklssdfkfxa sortiert wird. So Schritt für Schritt
mit jedem Schleifendurchlauf meine ich.

Moin 7. Jan 2004 18:31

Re: Wörter alphabetisch Sortieren!
 
Zitat:

Zitat von Jens Schumann
Da es sich hier um Hausaufgaben handelt. Und Hausaufgaben hier eigentlich nicht gemacht werden
sollte uns MOIN doch mal aufmalen, wie die Reihe hklssdfkfxa sortiert wird. So Schritt für Schritt
mit jedem Schleifendurchlauf meine ich.

Lade es runter!!!

Moin 7. Jan 2004 18:37

Re: Wörter alphabetisch Sortieren!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Dat!!

Michael Leyhe 7. Jan 2004 19:34

Re: Wörter alphabetisch Sortieren!
 
Wenn du Strings aus einem Memo sortieren willst dann füg sie als erstes in eine Array ein und dann sortier dies doch mit einem einfachen Sortieralgorithmus wie zum Beispiel direkte Auswahl.
Du findest diese übrigens hier im DP-Forum
Link : Sortieralgorithmen :dp:

PS. Zum Schluss fügst du dann das sortierte Array wieder in das Memo ein. :-D

Niels 7. Jan 2004 20:53

Re: Wörter alphabetisch Sortieren!
 
Hoi!

Zitat:

Zitat von Moin
Wie spreche ich den Buchstaben "k" von einem String "i" aus einem Array of String an?

Da dir ja bis jetzt trotzdem niemand die Frage beantwortet hat:

Delphi-Quellcode:
var
  x: array of string;

// x ist das array
// x[n] ist das n-te Element des Arrays
// x[n][k] ist der k-te Buchstabe des n-ten Elementes
Beachte, dass (k >= 1) und (n >= 0) ist

MfG Niels

himitsu 7. Jan 2004 22:25

Re: Wörter alphabetisch Sortieren!
 
@Niels:

Delphi-Quellcode:
x[n][k] = x[n, k]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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 by Thomas Breitkreuz