AGB  ·  Datenschutz  ·  Impressum  







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

Sortieren funktioniert nicht

Offene Frage von "jonsen2.0.0.9"
Ein Thema von jonsen2.0.0.9 · begonnen am 2. Feb 2010 · letzter Beitrag vom 3. Feb 2010
Antwort Antwort
jonsen2.0.0.9

Registriert seit: 5. Dez 2009
67 Beiträge
 
Delphi 7 Personal
 
#1

Sortieren funktioniert nicht

  Alt 2. Feb 2010, 20:38
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:
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.
Danke schonmal

MFG
Jonsen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

Re: Sortieren funktioniert nicht

  Alt 2. Feb 2010, 21:06
Ein richtiges BubbleSort ist das nicht
http://de.wikipedia.org/wiki/Bubblesort

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

Sicher, daß es nicht richtig sortiert?
Delphi-Quellcode:
listbox1.Items.Delete(i);
listbox1.Items.Add(inttostr(ar[i]))
Ich denk eher, daß deine Anzeige der Werte fehlerhaft ist.

Vergleiche mal den Arrayinhalt (laut Debugger) und den Inhalt der ListBox.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jonsen2.0.0.9

Registriert seit: 5. Dez 2009
67 Beiträge
 
Delphi 7 Personal
 
#3

Re: Sortieren funktioniert nicht

  Alt 2. Feb 2010, 21:16
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
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Sortieren funktioniert nicht

  Alt 3. Feb 2010, 01:50
Was die Lösung ist, ist klar? Erst Clear und dann in der For-Schleife alles adden. Das Delete ist hier fehl am Platz.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
jonsen2.0.0.9

Registriert seit: 5. Dez 2009
67 Beiträge
 
Delphi 7 Personal
 
#5

Re: Sortieren funktioniert nicht

  Alt 3. Feb 2010, 15:49
ok danke an alle...funtkioniert jetzt perfekt und schnell

MFG
Jonsen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: Sortieren funktioniert nicht

  Alt 3. Feb 2010, 16:10
Zitat von s.h.a.r.k:
Das Delete ist hier fehl am Platz.
Nicht unbedingt, man muß es nur "richtig" machen.
> 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:
for i := 1 to 100 do begin
  listbox1.Items.Delete(0);
  listbox1.Items.Add(IntToStr(ar[i]));
Abgesehn davon kannst du froh sein, daß keine Exception ausgelöst wurden, denn die Indize in der ListBox fangen bei 0 an.


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:
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
Der Stern steht für den Index 10, welchen es nicht gibt, und welcher hier versucht wurde zu löschen.

Du siehst jetzt, daß es so nicht stimmte, auch wenn einige Einträge schon den neuen Werten entspricht
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

Re: Sortieren funktioniert nicht

  Alt 3. Feb 2010, 16:46
Zitat von himitsu:
Zitat von s.h.a.r.k:
Das Delete ist hier fehl am Platz.
Nicht unbedingt, man muß es nur "richtig" machen.
> Wobei natürlich der Weg über .Clear optimaler ist.
Mir ist schon klar, dass es einige Wege nach Rom gibt, aber man kann auch noch eine zweite ListBox eröffnen Das mit dem Delete ist so, wie etwas von hinten durch die Brust und durch das Auge machen...
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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 05:31 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