![]() |
Sortieren funktioniert nicht
Hallo,
so in der Schule arbeiten wir jetzt mit arrays...deshalb hab ich mal Bubble Sort versucht. Ich finde aber den fehler nicht....das funktioniert bei mir irgendwie nicht :( Außerdem fände ich es toll wenn ihr mir verbesserungen z.B. bei meiner repeat-until schlife geben würdet. Mein Programm is halt noch nich so gut :(
Delphi-Quellcode:
Danke schonmal
var
Form1: TForm1; ar:array[1..100] of integer; temp:integer; //in temp sicher ich einen wert implementation {$R *.dfm} procedure sortieren(); Var i,i2:integer; a,a2,sicher:integer; //sicher ist damit keine entlosschleife entsteht...is bis jetzt immer so gewesen :( begin sicher:=0; repeat sicher:=sicher+1; a2:=100; //a2 gibt an wie oft die for i to do schleife laufen soll a:=0; for i:=1 to 100 do if ar[i]>ar[i+1] then //wenn ar[i] kleiner ist als ar[i+1] dann soll begin temp:=ar[i]; //temp su ar[i] werden ar[i]:=ar[i+1]; //ar[i] kann ich dann mit ar[i+1] überschreiben ar[i+1]:=temp; //und ar[i+1] mit dem ursprünglichen wert von ar[i] ersetzen end; for i2:=1 to a2 do if ar[i]<=ar[i+1] then a:=a+1 //hier gucke ich ob ALLE passen....wenn nicht wird noch einmal sortiert else a2:=100; until (a>=100) or (sicher>=10000000) //wenn entweder 10.000.000 mal sortiert wurde oder alles passt wird beendet end; procedure fuellen(); Var i:integer; begin for i:=1 to 100 do ar[i]:=random(999)+1; //hier wird mein array gefüllt end; procedure TForm1.Button1Click(Sender: TObject); Var i:integer; begin fuellen; for i:=1 to 100 do begin listbox1.Items.Delete(i); listbox1.Items.Add(inttostr(ar[i])); //hier wird die listbox in der die zahlen stehen sollen gefüllt. end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; procedure TForm1.Button2Click(Sender: TObject); Var i:integer; begin sortieren; for i:=1 to 100 do begin listbox1.Items.Delete(i); listbox1.Items.Add(inttostr(ar[i])); end; end; end. MFG Jonsen |
Re: Sortieren funktioniert nicht
Ein richtiges BubbleSort ist das nicht
![]() zumindestens ist deine Abbruchbedingung etwas suboptimal - richtig = nochmal sortieren, wenn was getauscht wurde - du = alles angucken, ob richtig sortiert ist und wenn, dann abbrechen (das Fette ist eine Bremse) Und was bitte heißt "das funktioniert bei mir irgendwie nicht" Was passiert oder passiert nicht oder läuft falsch? > FEHLERBESCHREIBUNG :warn: Sicher, daß es nicht richtig sortiert?
Delphi-Quellcode:
Ich denk eher, daß deine Anzeige der Werte fehlerhaft ist.
listbox1.Items.Delete(i);
listbox1.Items.Add(inttostr(ar[i])) Vergleiche mal den Arrayinhalt (laut Debugger) und den Inhalt der ListBox. |
Re: Sortieren funktioniert nicht
ok...danke für den tipp mit der bremse...werde ich änder.
und ja...du hast recht...er sortiert richtig -.- aber in der listbox steht was falsches....ok dann suche ich dafür eine lösung. DER FEHLER: in der listbox stehen zahlen, wild durcheinander gewürfelt. nicht das was eigentlich im array steht. MFG Jonsen |
Re: Sortieren funktioniert nicht
Was die Lösung ist, ist klar? Erst Clear und dann in der For-Schleife alles adden. Das Delete ist hier fehl am Platz.
|
Re: Sortieren funktioniert nicht
ok danke an alle...funtkioniert jetzt perfekt und schnell :)
MFG Jonsen |
Re: Sortieren funktioniert nicht
Zitat:
> Wobei natürlich der Weg über .Clear optimaler ist.
Delphi-Quellcode:
for i := 100 to 1 do begin
listbox1.Items.Delete(99); listbox1.Items.Insert(0, IntToStr(ar[i]));
Delphi-Quellcode:
Abgesehn davon kannst du froh sein, daß keine Exception ausgelöst wurden, denn die Indize in der ListBox fangen bei 0 an.
for i := 1 to 100 do begin
listbox1.Items.Delete(0); listbox1.Items.Add(IntToStr(ar[i])); Das Problem war einfach das: (angenommen es wären jetzt nur 10, statt 100 Einträge) in der Box stehen diese Buchstaben untereinander > abcdefghij und diese Ziffern sollen eingefügt werden > 1234567890
Code:
Der Stern steht für den Index 10, welchen es nicht gibt, und welcher hier versucht wurde zu löschen.
1 eingefügt = acdefghij1
2 eingefügt = acefghij12 3 eingefügt = aceghij123 4 eingefügt = acegij1234 5 eingefügt = acegi12345 6 eingefügt = acegi13456 7 eingefügt = acegi13567 8 eingefügt = acegi13578 9 eingefügt = acegi13579 0 eingefügt = acegi13579*0 Du siehst jetzt, daß es so nicht stimmte, auch wenn einige Einträge schon den neuen Werten entspricht :angel2: |
Re: Sortieren funktioniert nicht
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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