AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortierung;

Ein Thema von Mokus · begonnen am 24. Sep 2013 · letzter Beitrag vom 26. Sep 2013
Antwort Antwort
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Sortierung;

  Alt 24. Sep 2013, 15:48
Delphi-Version: XE2
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
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !

Geändert von MrSpock (26. Sep 2013 um 07:54 Uhr) Grund: Schreibfehler korrigiert.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#2

AW: Sortierung;

  Alt 24. Sep 2013, 16:17
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:
stringList[sortArray[ii]]
bzw.
anzahlArray[sortArray[ii]]
Dabei ist ii eine passende Laufvariable.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Sorterung;

  Alt 24. Sep 2013, 16:20
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Sorterung;

  Alt 24. Sep 2013, 16:56
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;
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Sorterung;

  Alt 26. Sep 2013, 07:31
Danke für die netten Hilfen;

meine sortierungsklasse ist nun so aufgebaut worden.

Delphi-Quellcode:
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.
Ich weiß, ist nicht der schnellste Algorithmus, aber für das kleine Programm reicht das vollkommen aus.
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz