![]() |
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:
Ich nehme an dass es an "Namen[i,k]" hängt, ich möchte mit k den Buchstaben des Strings ansprechen!!
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; Danke für eure Mühen! |
Re: Wörter alphabetisch Sortieren!
Dein Source benötigt einiges an Überarbeitung, zumindest von der Logik her. Du schreibst einmal
Delphi-Quellcode:
und dann :
Namen [i]
Delphi-Quellcode:
Was denn nu ?
Namen [i,k]
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. |
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:
i = 0 sein sollte. Demnach gibt es auch einen netten Zugriffsfehler.
For i := 0 to 28 do Begin
Code:
Namen[30] existiert ja nicht.
If Namen[i, k] <> Namen[[color=red]i + 1[/color], k] Then
Davon abgeseh'n funktioniert deine Sortierfunktion nicht.
Delphi-Quellcode:
Ach ja, ich hab nur das Ein- und Auslesen der Namen überarbeitet, das funktioniert jetzt ohne Probleme.
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; An der Sortierfunktion wurde nichts geändert, da ich einfach nicht kapiere, was du da machen willst. |
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 |
Re: Wörter alphabetisch Sortieren!
@Hansa:
Zitat:
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! |
Re: Wörter alphabetisch Sortieren!
Kann da DennyC nur zustimmen. Mit 'ner Stringlist hast du die Namen im Nu sortiert.
|
Re: Wörter alphabetisch Sortieren!
@DennyC:
Ich denke mal, die sollen lernen wie sortiert wird. Und das ist mit Autosort ja nicht möglich. |
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:
|
Re: Wörter alphabetisch Sortieren!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich glaube mit dem Teil
Delphi-Quellcode:
soll erreicht werden, dass Schmidt vor Schmitt einsortiert wird.
If Namen[i,k]<> Namen[i+1,k] Then
If Namen[i,k]> Namen[i+1,k] 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:
Da es sich hier um Hausaufgaben handelt. Und Hausaufgaben hier eigentlich nicht gemacht werden
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; sollte uns MOIN doch mal aufmalen, wie die Reihe hklssdfkfxa sortiert wird. So Schritt für Schritt mit jedem Schleifendurchlauf meine ich. |
Re: Wörter alphabetisch Sortieren!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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