Delphi-PRAXiS

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

Scraffy 26. Okt 2006 19:38

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Danke. Ich habe es geändert und es funzt: Danke . Es wäre allerdings echt toll,wenn die Nmaen nicht sofort in der ListBox erscheinen würden sondern erst wenn ich dann auf einen Button klicke. Wüsstet ihr auch, wie ich das mache?!

hoika 27. Okt 2006 08:14

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Packe die in eine TStringList (unsortiert).
Auf Knopfdruck sortierst du die und schreibst dann

ListBox.Items.Assign(StringList);


Heiko

Scraffy 27. Okt 2006 12:45

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Ja Danke aber ich habe noch nie mit TSring Lists gearbeitet soweit ich mich erinnere also kannst du vielleicht auch hier einen Quellcode angeben...wäre echt nett!!!

hoika 27. Okt 2006 15:06

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Vielleicht mal in der Hilfe gucken ?
Mensch ! :wall:

Naja, weil heut Freitag ist :cheers:

Delphi-Quellcode:
var
  sl: TStringList;
  aString: String;
begin
  sl:= TStringList.Create;
  try
    sl.Add('Jipppi');  // add
   
    sString:= sl[0]; // Zugriff auf den ersten Eintrag

  usw.

  finally
    sl.Free;
  end;
end;

Scraffy 27. Okt 2006 15:10

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Ja Danke LOL...ja gut damit kann ih leider noch weniger arbeiten^^ Aber ich habe mal geguggt (will euch ja nicht zu sher nerven)
und wie es aussieht bin ich soweit, dass ich eine Liste habe und in die aus dem Edit Feld liest. Jetzt soll der Inhalt dieser TStringList nur noch in die ListBox übertragen werden und dafür brächte ich jetzt noch nen Quellcode^^ Vielen Dank!!!

Phoenix 27. Okt 2006 15:24

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

Zitat von Scraffy
und dafür brächte ich jetzt noch nen Quellcode^^

:warn:
Wir sind nicht Deine Lakeien!

Deine Lösung ist folgende:
Im Umfeld der Listbox gibt es eine Methode namens Add. Die findest Du in der Delphi-Hilfe. Mit der fügt man Elemente in die Liste ein. Wie Du auf das jeweilige Element der Stringlist zugreifst steht hier auch schon.

Wir sind nicht dafür da, Deine Hausaufgaben zu machen. Und wir sind auch nicht dafür da, Dir elementare Dinge die sich in maximal 5 Minuten durch Lesen der Hilfe lösen lassen vorzukauen.

Edit Nachtrag: Das da oben mag hart klingen, aber werf bitte auch mal einen Blick in unseren Verhaltenskodex hier.

Hador 27. Okt 2006 15:40

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Warum alles so kompliziert?

Einfach die automatische Sortierfunktion der ListBox aktivieren (Sorted := True).
Dann brauchst du dich vorher um nichts mehr kümmern.

Phoenix 27. Okt 2006 15:42

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

Zitat von Hador
Dann brauchst du dich vorher um nichts mehr kümmern.

Hador: Er bekommt die Elemente nicht in die Listbox. Was hilft ihm eine leere, sortierte Listbox?

malo 27. Okt 2006 16:12

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Wie wärs damit? :gruebel:
Delphi-Quellcode:
Listbox1.Items := Stringlist1.Strings;

Scraffy 27. Okt 2006 18:28

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

Also ich will ja gar nicht das ihr mir den gesamten Quelltext gebt ich meine ja nur das ihr mir z.B. nicht sagt mach das in einem array oder so....weil ich damit immer nicht soviel anfangen kann^^. Also so etwas wie den letzten Beitrag....
Aber auch mit dem funt es bei mir noch nciht :?: ich will doch einfach nur Namen aus einem Edit Feld speichern und dann in einer ListBox ausgeben....?!

Klaus01 27. Okt 2006 19:46

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Aus der Delphi Hilfe:

Delphi-Quellcode:
ListBox1.Items.Add(Edit1.Text);
Machmal hilft lesen...

Grüße
Klaus

Scraffy 27. Okt 2006 20:06

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Okay dank euch habe ich es jetzt! Ich bin fertig es gibt nur ein problem und zwar sind ungefähr die ersten 10 zeilen meiner ListBox frei und wurden somit übersprungen :?: wisst ihr woran dass liegen könnte?:
Delphi-Quellcode:
var
  Form1: TForm1;
  n: Integer;                     //Hier deklarieren wir Variablen, die
  namen : array [1..20] of string; //wir im späteren Verlauf benötigen

implementation

{$R *.dfm}

//-------------------------------------------------------------------------
procedure TForm1.btEinlesenClick(Sender: TObject);
begin
  inc(n); namen[n]:=edEingabe.text;
  edEingabe.Text:= ''
end;

//----------------------------------------------------------------------

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

//----------------------------------------------------------------------

procedure TForm1.btAusgabeClick(Sender: TObject);
var i: integer;
begin
    listAusgabe.Items.Clear;
    for i:=1 to High(Namen) do
    listAusgabe.Items.Add(Namen[i]);
    ListAusgabe.Sorted := not ListAusgabe.Sorted;

end;
//----------------------------------------------------------------------


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

end.
Danke!

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

Klaus01 27. Okt 2006 20:20

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Hast Du "n" mal irgendwo einen Startwert zugeordnet?

Grüße
Klaus

Scraffy 27. Okt 2006 20:30

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
ja habe ich schon aber es hat nihchts gebracht :?:
Ich weiss jetzt wpran es liegt, wenn man oben bei den var arry 1..2 eingitb, ist es in der ersten zeile allerdings kann ich dann zu wnige Nmaen eingeben hat jemand hierfür eine Lösung?!

malo 27. Okt 2006 21:33

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
Ich empfehle dir mit einer Stringlist zu arbeiten. Siehe dazu Hier im Forum suchenStringList und Delphi-Referenz durchsuchenStringList ;)

Klaus01 28. Okt 2006 14:31

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

Zitat von Scraffy
ja habe ich schon aber es hat nihchts gebracht :?:
Ich weiss jetzt wpran es liegt, wenn man oben bei den var arry 1..2 eingitb, ist es in der ersten zeile allerdings kann ich dann zu wnige Nmaen eingeben hat jemand hierfür eine Lösung?!

Wo hast den Du n initialisiert?

In form.create?

Gibst Du denn immer 20 Namen ein?
Wenn dem nicht so ist solltest Du auch nur die Felder
in die Listbox übertragen die einen Namen enthalten und
nicht das komplette Array.

Leerstrings werden bei der Sortierung nach vorne gestellt.

Grüße
Klaus

Grüße
Klaus

hoika 30. Okt 2006 09:19

Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
 
wer lesen kann..

ListBox.Items.Assign(StringList);


siehe mein vorvoriges Posting


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 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