![]() |
Delphi-Version: XE2
Sortierung;
N´abend;
hab mal ne frage. wollt mir ein Algyruthmus schreiben mit dem ich sortieren kann. Sortierungsobjekt wäre ein array. Die Größe des Arrays variert. Nun möchte ich diese nach der Größte sortieren und verlagert. der größte Wert soll auf eine stringlist verlegt werden. (st_list3); Der Index, den der Wert hatte, soll erhalten bleiben und auf eine zweite stringlist zugreifen (st_list2); Mit dem gleichen Index ist auf den ist auf st_list2 ein Wort hinterlegt, dies würde ich auch gern auf st_list3 auf den Index haben. Dies soll solange durchlaufen, bis alle elemte vom array auf 0 gesetzt werden. VOrher sind garatiert alle werte >0. Also muss, anchdem der Wert in st_list3 hinterlegt worden ist, im Array auf 0 gesetzt werden.... Hoffe es war etwas verständlich; wenn wer wissen möchte wie der Quellcode aussieht. Es gibt noch keine Ansätze für diesen Algorythmus - diesen werden ich morgen schreiben, wolt mir aber von euch schoneinmal ein paar Ideen holen Programm; Wörterzählen. Momemtaner stand; Wörter werden auf ener tstringliste gespeichert; Wie oft dieses Wort vorkommt auf eine Array. Wort und wert haben den gleichen Index, deshlab leg ich soviel wert drauf, das die indexe nicht gelöscht werden sondern nur auf 0 gesetztn werden. Hoffe ihr könnt ein paar Tipps, anregungen etc hinterlassen. Dank im Vorraus MfG |
AW: Sortierung;
Ich würde so etwas immer mit Klassen machen, die String und Anzahl enthalten.
Die packst Du in ein Array, das Du dann problemlos sortieren kannst. Wenn Du unbedingt bei dem bisherigen Ansatz bleiben willst, erzeugst Du ein weiteres Array, in dem die Indices auf deine Stringlist und Array sortiert werden. Der Zugriff geht dann per
Delphi-Quellcode:
Dabei ist ii eine passende Laufvariable.
stringList[sortArray[ii]]
bzw. anzahlArray[sortArray[ii]] |
AW: Sorterung;
Wenn 2 Listen mit identischen Indizes verwendet werden sollen, riecht das für mich nach fehlerträchtigem Code. Daher sollte man das Konzept ggf. noch einmal überdenken.
|
AW: Sorterung;
Wenn du nicht die Objects der Stringlist nutzen willst (der Thread von vorhin, das warst du doch oder?) kannst du dir auch eine eigene Liste schreiben.
Zu Übungszwecken kann man das schön mit dyn. Arrays machen.
Delphi-Quellcode:
TWord = record
Value: string; KommtWieOftVor: integer; UndSonstNochWas: integer; end; TWordList = class private FItems: array of TWord; private function Get(Index: integer): TWord; procedure Put(Index: integer; const Value: TWord); public function Add(const Value: TWord): integer; procedure Insert(const Index: integer; const Value: TWord); procedure Delete(const Index: integer); function IndexOf(const Value: TWord): integer; procedure Assign(Value: TWordList); procedure Sort; property Items[Index: integer]: TWord read Get write Put; default; end; |
AW: Sorterung;
Danke für die netten Hilfen;
meine sortierungsklasse ist nun so aufgebaut worden.
Delphi-Quellcode:
Ich weiß, ist nicht der schnellste Algorithmus, aber für das kleine Programm reicht das vollkommen aus.
unit sortieren;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, hauefigkeit_zaehlen; Type TForm3 = class procedure sortieren(a_zaehlen: array of integer; st_list2: TStringlist); end; var s_ausgabe: string; implementation procedure TForm3.sortieren(a_zaehlen: Array of integer; st_list2: TStringlist); var i: integer; x: integer; a: integer; i_hwert: integer; st_list3: TStringlist; i_hidx: integer; b_abbruch: boolean; st_list4: TStringlist; begin // Listen erzeugen, wo ergibnisse abgespeichert werden st_list4 := TStringlist.Create; st_list3 := TStringlist.Create; // nach dem hösten wert im arra a_zaehlen suchen for x := 0 to length(a_zaehlen) do begin i_hidx := 0; i_hwert := 0; for a := 0 to length(a_zaehlen) - 1 do begin if i_hwert < a_zaehlen[a] then begin i_hwert := a_zaehlen[a]; i_hidx := a; end; end; // Hösten wert + dazugehörige wort in listen übergeben st_list3.add(st_list2[i_hidx]); st_list4.add(inttostr(i_hwert)); a_zaehlen[i_hidx] := 0; // momentan höhsten wert zurücksetzen end; // ausgabe für memofeld for i := 0 to st_list2.Count - 1 do begin s_ausgabe := s_ausgabe + #10#13 + 'Ihr Wort : "' + st_list3[i] + '" kam ' + st_list4[i] + ' mal vor.' + slinebreak; end; st_list3.free; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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-2025 by Thomas Breitkreuz