![]() |
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 :? |
Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
Du müsstest mal deinen bissherigen Quellcode posten damit wir sehen, was evtl. falsch ist.
|
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. |
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 |
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:
Diesen Code habe ich neulich geschrieben um eine Liste von Levels nach dem Autor zu sortieren. Lässt sich, denk ich, recht einfach anpassen.
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; (Das ist der Code von Tstringlist, den ich etwas angepasst habe^^) edit: fehlendes wort eingesetzt :roll: |
Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
Zitat:
|
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:
so mein erstes Problem besteht weiterhin, Also vielen Dank für eure Hilfe!
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. |
Re: Hilfe für ein Delphi Sortierprogramm!!!!!!
Hallo,
was ist das denn für ein BubbleSort ?? *wunder*
Delphi-Quellcode:
Heikofor 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; |
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 :?:
|
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:
aber später die leere (?) Listbox sortieren lässt:
procedure TForm1.btEinlesenClick(Sender: TObject);
begin inc(n); namen[n]:=edEingabe.text; edEingabe.Text:= '' end;
Delphi-Quellcode:
und anschließend das letzte item von "Namen" in die Listbox schreibst:
BubbleSort(listAusgabe.Items);
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 19:40 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