AGB  ·  Datenschutz  ·  Impressum  







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

zahlen sortieren

Ein Thema von ahnungsloser · begonnen am 7. Mai 2007 · letzter Beitrag vom 7. Mai 2007
Antwort Antwort
ahnungsloser

Registriert seit: 7. Mai 2007
4 Beiträge
 
#1

zahlen sortieren

  Alt 7. Mai 2007, 10:23
Guckt mal, ich hab dieses Programm geschrieben, es kommt aber immer eine Fehlermeldung, wenn ich den Sortierenbutton anklicke. Woran liegt das???

Delphi-Quellcode:
type
  tzz = array [1..100] of integer;
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
   zz: tzz;
implementation

{$R *.dfm}

procedure zufall(var zz:tzz);
var
i:integer;
begin
for i:= 1 to 100 do
begin
zz[i]:= random(150)+1;
Form1.ListBox1.Items.Add(IntToStr(zz[i]));
end;
end;
procedure sortieren (zz:tzz);
var i,j,hilf:integer;
begin
for i:= 100 downto 1 do
for j:= 1 to i do
begin
if
zz[j]<zz[j-1] then
begin
hilf:= zz[j-1];
zz[j-1]:= zz[j];
zz[j]:= hilf;
Form1.ListBox2.Items.Add(IntToStr(zz[j]));
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
zufall(zz);
end;

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


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

end.
Wäre toll, wenn mir jemand weiter helfen könnte.
Danke
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: zahlen sortieren

  Alt 7. Mai 2007, 10:28
Welche Fehlermeldung, zur Laufzeit oder wenn Du Compilierst?
Wo hast Du die Variable "hilf" deklariert/definiert?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#3

Re: zahlen sortieren

  Alt 7. Mai 2007, 10:30
Du hast deine Prozedur auch nicht Deklariert!

procedure Zufall(var zz:tzz); Das musst du in den Interface Teil schreiben!

Edit: Ach ja und Sortieren auch
Richard Mahr
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: zahlen sortieren

  Alt 7. Mai 2007, 10:30
zz[j]<zz[j-1] then Beim ersten Schleifendurchlauf ist j=1 und demnach j-1=0. Und es gibt kein zz[0]!

Btw: Ein bisschen Struktur tut deinem code auch ganz gut
Und demnächst könntest du den Sortierbutton auch so nennen, und nicht Button1!


Edit: @Tormentor: Nö, man muss nicht "deklarieren". Auch wenn die Struktur so, sagen wir, sehr anfängerlich aussieht, müssen tut man nicht
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
ahnungsloser

Registriert seit: 7. Mai 2007
4 Beiträge
 
#5

Re: zahlen sortieren

  Alt 7. Mai 2007, 15:46
Hallo, ich hab den Fehler (unglaublich aber wahr!) dann selber gefunden...trotzdem danke, für die tipps!!
Delphi-Quellcode:
procedure sortieren (zz:tzz);
var i,j,hilf:integer;
begin
  for i:= 20 downto 1 do
  for j:= 1 to i do
 begin
  if
   zz[j]<zz[j-1] then
    begin
      hilf:= zz[j-1];
      zz[j-1]:= zz[j];
      zz[j]:= hilf;
    end;
 end;
for i:= 1 to 20 do
 Form1.ListBox2.Items.Add(IntToStr(zz[i]));
end;
jetzt werden die zahlen sortiert....müsste ich denn anstatt zz[j]<[zz[j-1] eher schreiben zz[j]>zz[j+1], damit j nicht 0 werden kann...aber dann werden die Zahlen absteigend sortiert...also 20 10 5 1 und nicht 1 5 10 20....Ach so und das mit dem anfängerlich trifft voll und ganz zu *g*
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: zahlen sortieren

  Alt 7. Mai 2007, 15:52
Du könntest mit j = 2 in der Schleife anfangen,
dann wäre j-1 = 1;

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: zahlen sortieren

  Alt 7. Mai 2007, 15:58
Du bist Dir schon bewusst dass der Bubblesort nicht gerade prozessorschonend ist

Anstatt das Sortieren selbst zu schreiben, kannst du auch eine TList nutzen, anstatt eines arrays. Listen können beliebig viele Objekte aufnehmen. Und List implementiert bereits eine Sortier Methode, die als einzigen Parameter eine Funktion braucht, die einen Integer zurückliefert beim Vergleich von 2 Werten. (sozusagen das Pendant zu IComparable Interface in .NET). Hier einfach mal ein Beispiel, damits klarer wird. Zwar etwas aufgebauscht, aber damit wird dann schnell verständlich, dass das mit beliebigen Objekten in der List funktioniert, und nicht nur mit Integer:

Delphi-Quellcode:
type
  TMyClass = class
  public
     Value : integer ;
  end ;

  TForm1 = class (TForm)
  // ...
  public
    List : TList ;
      end ;

implementation

procedure Compare (Item1, Item2 : TPointer) ;
var
 V1, V2 : integer ;
begin
     V1 := Item1(TMyClass).Value ;
     V2 := Item2(TMyClass).Value ;
     if V1 < V2 then
        Result := 1
     else if V1 > V2 then
        Result := -1
     else
        Result := 0 ;
end ;

end.
Die Liste sortieren geht dann ganz leicht mit
List.Sort (Compare) ; Bei diesem Sortierverfahren ist der QuickSort Algorythmus implementiert, der wesentlich effektiver arbeitet als BubbleSort.

Ich find die Methode über TList sehr elegant.
  Mit Zitat antworten Zitat
ahnungsloser

Registriert seit: 7. Mai 2007
4 Beiträge
 
#8

Re: zahlen sortieren

  Alt 7. Mai 2007, 17:10
Okis vielen Dank nochmal und schönen Tag noch!!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:06 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