AGB  ·  Datenschutz  ·  Impressum  







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

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

Offene Frage von "Scraffy"
Ein Thema von Scraffy · begonnen am 24. Okt 2006 · letzter Beitrag vom 30. Okt 2006
Antwort Antwort
Seite 1 von 3  1 23      
Scraffy

Registriert seit: 24. Okt 2006
9 Beiträge
 
#1

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

  Alt 24. Okt 2006, 15:06
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
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#2

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

  Alt 24. Okt 2006, 15:08
Du müsstest mal deinen bissherigen Quellcode posten damit wir sehen, was evtl. falsch ist.
Frederic H.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 24. Okt 2006, 15:20
... 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.
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#4

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

  Alt 24. Okt 2006, 15:22
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 24. Okt 2006, 15:30
@Haentschman: Also ich glaube nicht, dass das die Lösung ist, an die der Informatik-Lehrer gedacht hat

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
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

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

  Alt 24. Okt 2006, 16:11
Zitat von NamenLozer:
@Haentschman: Also ich glaube nicht, dass das die Lösung ist, an die der Informatik-Lehrer gedacht hat
Wenn der Lehrer die Aufgabenstellung nicht ausführlich genug beschrieben hat => selber schuld.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Scraffy

Registriert seit: 24. Okt 2006
9 Beiträge
 
#7

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

  Alt 26. Okt 2006, 15:26
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!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 26. Okt 2006, 15:44
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
Heiko
  Mit Zitat antworten Zitat
Scraffy

Registriert seit: 24. Okt 2006
9 Beiträge
 
#9

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

  Alt 26. Okt 2006, 17:18
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 . Allerdings funktionert es auch nicht mit deinem Quellcode Heiko
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#10

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

  Alt 26. Okt 2006, 20:18
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:

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

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.:

if AnsiUpperCase(Items[i]) > AnsiUpperCase(Items[i + 1]) then
Grüsse
...Doc
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:43 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