Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Sortieren in Listbox (https://www.delphipraxis.net/47317-sortieren-listbox.html)

Yader22 9. Jun 2005 10:23


Sortieren in Listbox
 
Hallo,
muss in einer listbox eine sortierte Artikelliste ausgeben,aber es werden nicht alle werte sortiert!!!
Was könnte ich als anweisung nehmen???? :gruebel:

ibp 9. Jun 2005 10:25

Re: Sortieren in Listbox
 
was hast du bisher genommen?

alcaeus 9. Jun 2005 10:26

Re: Sortieren in Listbox
 
Hallo Yader22,

Zitat:

Zitat von Yader22
muss in einer listbox eine sortierte Artikelliste ausgeben,aber es werden nicht alle werte sortiert!!!
Was könnte ich als anweisung nehmen???? :gruebel:

ich gehe mal davon aus, dass du bereits einen Algorithmus eingebaut hast, da du sagst, es wuerden nicht alle Werte sortiert werden. Ohne Code zu sehn koennen wir eigentlich nur raten was falsch ist ;) Guck dir mal Daniels Sortieralgorithmen-Tutorial an. Dort solltest du was finden.

Greetz
alcaeus

DP-Maintenance 9. Jun 2005 10:32

DP-Maintenance
 
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist immer noch eine Frage zu Delphi

Yader22 9. Jun 2005 10:45

Re: Sortieren in Listbox
 
Ich habe es über eine if anweisung geschreiben,falls der ein wert größer als ein wert der schon vorher bezogen worde,wird dieser über eine andere Variable ausgetauscht!Gibt es vielleicht eine sort anweisungung welche besser geeignet wäre?

Sharky 9. Jun 2005 10:48

Re: Sortieren in Listbox
 
Warum nicht einfach:

Delphi-Quellcode:
ListBox1.Sorted := True;

Luckie 9. Jun 2005 10:48

Re: Sortieren in Listbox
 
Ja, nun zeigt doch mal Code, ist doch wohl offensichtlich, dass da ein Fehler in deiner Implementation ist.

Yader22 9. Jun 2005 10:55

Re: Sortieren in Listbox
 
Delphi-Quellcode:
for j:=i+1 to Anzahl do
   begin
   if((Artikelliste[i].Bestand*Artikelliste[i].Preis)
    <((Artikelliste[j].Preis*Artikelliste[j].Preis)))
      then
      begin
      tauschen:=Artikelliste[i];
      Artikelliste[i]:=Artikelliste[j];
      Artikelliste[j]:=tauschen;
[edit=Luckie]Delphi-tags ergänzt. Bitte beim nächsten Mal selber machen. Mfg, Luckie[/edit]

Totti 9. Jun 2005 11:04

Re: Sortieren in Listbox
 
Ist das net grzndsätzlich nen Bubbler?
Müsste halt noch ne 2. Schleife drüber dann ... weil so wird ja nur einmal drchlaufen - wenn ich nicht grad wieder nen Knick in meiner Optik hab :)

Yader22 9. Jun 2005 11:06

Re: Sortieren in Listbox
 
die zweite schleife ist drüber,aber der fehler bleibt bin nicht unbedingt die leuchte beim programmieren sondern brach das wegen meiner belegarbeit

Luckie 9. Jun 2005 11:08

Re: Sortieren in Listbox
 
Dann zeig doch mal den kompletten Code. :wall:

Yader22 9. Jun 2005 11:12

Re: Sortieren in Listbox
 
Delphi-Quellcode:
Type
  TArtikel=record
    Artikelnummer: string[8];
    Artikelbezeichnung: string[30];
    Mengeneinheit: string[2];
    Bestand: smallint;
    Maximalbestand: smallint;
    minimalbestand: smallint;
    Hersteller: string[41];
    Preis: single;
    Maximalpreis: single;
    Minimalpreis: single;
    Lieferzeit: byte;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Sortieren(Artikelliste: Array of TArtikel;Anzahl: integer);
    procedure Ausgeben(Artikelliste: Array of TArtikel;Anzahl: integer);
    procedure Button2Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.Button2Click(Sender: TObject);
var
  f: file of Tartikel;
  i:integer;
  Artikelliste: array[1..100] of TArtikel;
  begin
  AssignFile(f, 'f:\Artikel.dat');
  Reset(f);
  i:=0;
  while not Eof(f) do
  begin
  i:=i+1;
  Read(f,Artikelliste[i]);
  end;
  CloseFile(f);
  Sortieren(Artikelliste,i);
end;

procedure TForm1.Sortieren(Artikelliste:Array of TArtikel;Anzahl: integer);
  var i,j: integer;
      tauschen: TArtikel;
  begin
   for i:=1 to Anzahl-1 do
   begin
   for j:=i+1 to Anzahl do
   begin
   if((Artikelliste[i].Bestand*Artikelliste[i].Preis)
    <((Artikelliste[j].Preis*Artikelliste[j].Preis)))
      then
      begin
      tauschen:=Artikelliste[i];
      Artikelliste[i]:=Artikelliste[j];
      Artikelliste[j]:=tauschen;
      end;
    end;
    end;
    Ausgeben(Artikelliste,Anzahl);
    end;

procedure TForm1.Ausgeben(Artikelliste:Array of TArtikel;Anzahl: integer);
  var i:integer;

   begin
    for i:=1 to Anzahl do
    begin
     Listbox1.Items.Add(Artikelliste[i].Artikelnummer + ' '+Artikelliste[i].Artikelbezeichnung+'  ' +
     FloatToStr(((Artikelliste[i].Bestand * Artikelliste[i].Preis))));
      if Artikelliste[i].Artikelnummer[7]='1' Then
      Listbox2.Items.Add(Artikelliste[i].Artikelnummer + ' '+Artikelliste[i].Artikelbezeichnung+'  ' +
      FloatToStr(((Artikelliste[i].Bestand * Artikelliste[i].Preis))));
      end;

      end;

end.
Wie gesagt hab keine Ahnung ob das alles richtig ist hatten wir im zweiten semester und seit dem nicht wieder!!!Danke

[edit=alcaeus]Delphi-Tags eingefuegt. Bitte in Zukunft selbst machen! Mfg, alcaeus[/edit]

TeronG 6. Jul 2005 16:17

Re: Sortieren in Listbox
 
Hat sich das schon erledigt???

Ich hab schon mal ein Record sortiert ... such aber jetzt nich extra den Code raus, wenn's nimmer nötig ist. :mrgreen:

shmia 6. Jul 2005 16:39

Re: Sortieren in Listbox
 
Fehler:
Delphi-Quellcode:
   if((Artikelliste[i].Bestand*Artikelliste[i].Preis)
    <((Artikelliste[j].Preis*Artikelliste[j].Preis)))
Du schreibst einmal Bestand*Preis und dann Preis*Preis.


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