Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Hilfe für ein Delphi Sortierprogramm!!!!!! (https://www.delphipraxis.net/79542-hilfe-fuer-ein-delphi-sortierprogramm.html)

Scraffy 24. Okt 2006 14:06


Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Hallo,

Wir sollen in der Schule ein Delphi Programm erstellen. Hier soll ein edit Feld sein, wo der Benutzer Namen eingibt und nach jedem Namen auf einen Button "einlesen" klickt. Diese Namen werden dann gespeichert und nach einem Klick auf einen "ausgeben" Button
in einem Memo oder Feld oder einer ListBox ausgegeben werden. Allerdings sollen sie auch Sortiert sein( vielleicht Bubblesort oder so ein Algorythmus).Für Antowrten wär ich echt dankbar da ich kein Plan hab wie das gehen soll....
Entweder posten oder sonst an Scraffy@gmx.net schicken THX!!!

ich habe mir eigtl schon folgende Überlegungen gemacht:
du braucht einen zähler für die namen: var n:integer;
- ich brauche zb ein array für die namen: var namen : array [1..20] of string;
- ich muß die namen abspeichern: inc(n); namen[n]:=edit1.text;
- ich muß die namen sortieren: bubblesort kennst du ja schon
- ich muß die namen ausgeben: zB listbox1.items.add(namen[n]);

Ich nur noch ein Problem(mal von ein paar Details abgesehen) Ich habe es mir so gedacht, dass ich einen Namen eintrage auf einlesen klicke und dann den nächsten eintrage meinetewegen u.sq. und dann irgendwann auf ausgeben klicke und dann werden !Alle! zusammen ausgegeben, im Moment wird dann leider immer nur der letzte den ich eingegebn habe angezeigt :?

HalloDu 24. Okt 2006 14:08

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Du müsstest mal deinen bissherigen Quellcode posten damit wir sehen, was evtl. falsch ist.

haentschman 24. Okt 2006 14:20

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
... flexibler denke ich ist eine Speicherung der Namen in einer Datenbanktabelle.

...dann kannst du über eine SQL Abfrage die Daten sortieren, filtern, gruppieren und dann das Ergebnis beliebig weiterverwerten.

DocE 24. Okt 2006 14:22

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Moin,

warum benutzt Du nicht einfach eine TStringList. Hier kannst Du Sorted := true setzen und mit Add(const S: string) die Namen hinzufügen.

Nachher mit ner Schleife bis Count - 1 durchlaufen und ausgeben.


Grüsse
...Doc

Namenloser 24. Okt 2006 14:30

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
@Haentschman: Also ich glaube nicht, dass das die Lösung ist, an die der Informatik-Lehrer gedacht hat :wink:

Delphi-Quellcode:
procedure QuickSort_author(var alist: tUserlevels; L, R: Integer);
var
  I, J, P: Integer;
begin
  repeat
    I := L;
    J := R;
    P := (L + R) shr 1;
    repeat
      while ansicomparetext(alist[I].author, alist[P].author) < 0 do Inc(I);
      while ansicomparetext(alist[J].author, alist[P].author) > 0 do Dec(J);
      if I <= J then
      begin
        alist.Exchange(I, J);
        if P = I then
          P := J
        else if P = J then
          P := I;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then QuickSort_author(alist, L, J);
    L := I;
  until I >= R;
end;
Diesen Code habe ich neulich geschrieben um eine Liste von Levels nach dem Autor zu sortieren. Lässt sich, denk ich, recht einfach anpassen.

(Das ist der Code von Tstringlist, den ich etwas angepasst habe^^)

edit: fehlendes wort eingesetzt :roll:

RavenIV 24. Okt 2006 15:11

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Zitat:

Zitat von NamenLozer
@Haentschman: Also ich glaube nicht, dass das die Lösung ist, an die der Informatik-Lehrer gedacht hat :wink:

Wenn der Lehrer die Aufgabenstellung nicht ausführlich genug beschrieben hat => selber schuld. ;-)

Scraffy 26. Okt 2006 14:26

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Hallo also zunächst anke für die vielen Antworten. Mit dem Sortieralgorithmus möchte ich zunächst erst mit Bubblesort anfangen aber Danke für Quicksort :). So nun habe ich Bubblesort programmiert allerdings, sortiert er die Namen nicht, sie werden lediglich in der Reihenfolge in der ich sie eingegeben habe auch wieder ausgegeben :?: Also ich poste mal meinen bisherigen Quellcode:
Delphi-Quellcode:
unit pNamenslist02;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edEingabe: TEdit;
    btEinlesen: TButton;
    listAusgabe: TListBox;
    Label1: TLabel;
    btAusgabe: TButton;
    Button1: TButton;
    procedure btEinlesenClick(Sender: TObject);
    procedure btAusgabeClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var n: Integer;
var namen : array [1..20] of string;

implementation

{$R *.dfm}

procedure TForm1.btEinlesenClick(Sender: TObject);

begin
inc(n); namen[n]:=edEingabe.text;
edEingabe.Text:= ''
end;

procedure BubbleSort(var Items: TStrings);
var
 done: boolean;
 i, n: integer;
 Dummy: string;
begin
 n := Items.Count;

 repeat
   done := true;
   for i := 0 to n - 2 do
     if Items[i] > Items[i + 1] then
     begin
       Dummy := Items[i];
       Items[i] := Items[i + 1];
       Items[i + 1] := Dummy;

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

procedure TForm1.btAusgabeClick(Sender: TObject);
begin
  BubbleSort(listAusgabe.Items);
  listAusgabe.items.add(namen[n]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

end.
so mein erstes Problem besteht weiterhin, Also vielen Dank für eure Hilfe!

hoika 26. Okt 2006 14:44

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Hallo,

was ist das denn für ein BubbleSort ??
*wunder*

Delphi-Quellcode:

  for i:= 0 to List.Count-1 do
  begin
    for j:= i+1 to List.Count-1 do
    begin
      Item_i:= List.Items[i];
      Item_j:= List.Items[j];

     // jetzt vergleichen und  notfalls umsortieren
    end;
  end;
Heiko

Scraffy 26. Okt 2006 16:18

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Also ich habe den Quelltext zu diesem Algorithmus von dsdt.info dort gibt es bereits fertige Quellcodes für Sortierverfahren und ich bin desshalb mal davon ausgegangen, das er stimmt :shock:. Allerdings funktionert es auch nicht mit deinem Quellcode Heiko :?:

DocE 26. Okt 2006 19:18

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
N'Abend!

So wie es aussieht, liegt das daran, dass Du die Strings in "Namen" einliest:

Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
  inc(n); namen[n]:=edEingabe.text;
  edEingabe.Text:= ''
end;
aber später die leere (?) Listbox sortieren lässt:

Delphi-Quellcode:
BubbleSort(listAusgabe.Items);
und anschließend das letzte item von "Namen" in die Listbox schreibst:

Delphi-Quellcode:
listAusgabe.items.add(namen[n]);

Das ganze kann also gar nicht funktionieren. Es ist verwunderlich, dass überhaupt alle Namen wieder ausgegeben werden. Klickst Du nach jedem Einlesen auf den "Ausgabe-Button"? Oder hast Du uns einen wichtigen Teil des Quelltextes vorenthalten?


Da Dein BubbleSort ein TStrings erwartet, kannst Du aber auch nicht "Namen" übergeben. Eine Möglichkeit wäre:

Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
var i: integer;
begin

  listAusgabe.Items.Clear;

  // wir müssen bei 1 beginnen, da Du das erste Element in 1 schreibst
  for i:=1 to High(Namen) do
    listAusgabe.Items.Add(Namen[i]);

  BubbleSort(listAusgabe.Items);

end;

- UNGETESTET -



Allerdings wäre dann die bessere Lösung, die eingegebenen Namen gleich in die Listbox zu schreiben (ohne Array "dazwischen"), also:

Delphi-Quellcode:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
 
  listAusgabe.Items.Add(edEingabe.Text);

end;

und bei der Ausgabe dann nur noch:

Delphi-Quellcode:
procedure TForm1.btAusgabeClick(Sender: TObject);
begin

  BubbleSort(listAusgabe.Items);

end;

- Letzte Variante inzwischen ERFOLGREICH GETESTET -

Das var beim BubbleSort noch entfernen und gut. Einziges Problem ist noch der > (Größer als)-Operator. Der vergleicht auch Groß- und Kleinschreibung usw. Bessere Lösung wäre evtl. StrComp und/oder die Strings beim Vergleich AnsiUpperCase-en, also z.B.:

Delphi-Quellcode:
if AnsiUpperCase(Items[i]) > AnsiUpperCase(Items[i + 1]) then

Grüsse
...Doc


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Seite 1 von 3  1 23      

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