Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Zahlen Sortieren...
Hemisch - Do 24.11.05 10:36
Titel: Zahlen Sortieren...
Guten Tag
Ich hätte da mal eine Frage.
Ich bin im Moment noch der absolute Neuling in Delphi und bin in meinem Übungsbuch auf eine Aufgabe gestossen, wo ich einfach nicht weiterkomme.
Hier die Frage:
Erzeugen Sie ein Projekt, welches drei von Ihnen eingegebene Zahlen sortiert und in der sortierten Reihenfolge ausgibt. Die Zahlen sollen vom Datentyp integer sein.
Wie mache ich das?
Danke für eure Hilfe im vorraus
Gruss Hemisch
Christian S. - Do 24.11.05 10:44
Hallo und :welcome: !
Es ist immer schöner, als Antwortender auf der Arbeit des Fragenden aufbauen zu können. Wie sieht denn Dein bisheriger Ansatz aus? Wenn er nicht funktioniert, werden wir den schon hinbiegen. :-)
Grüße
Christian
Gausi - Do 24.11.05 11:21
Na, da direkt mit Sortieralgorithmen zu kommen, halte ich für übertrieben. Da merkt man doch sofort, dass da von irgendwoher eine dicke Hilfe gekommen ist.
Man kommt mit 3 Abfragen aus:
Nennen wir die drei Zahlen a,b,c. Sortieren tun wir das dann so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Wenn a grösser b, dann vertausche a und b. (a ist ja vorne auf keinen Fall richtig, weil ja b kleiner ist)
Wenn jetzt b größer c, dann vertausche b und c. (Dann steht ja das b auch nicht an der richtigen Stelle (das könnte auch das alte a sein..), also vertauschen wir das um eins nach hinten. Jetzt steht die größte Zahl schonmal ganz hinten.)
(Jetzt noch einmal überprüfen, ob vorne alles stimmt:) Wenn jetzt a größer b, dann vertausche a und b. |
(An die Profis: Das entspricht dem Bubblesort-Verfahren)
Und das muss man jetzt nur noch in Delphi-Code umschreiben...
Hilfreich dabei dürfte
StrToInt und
IntToStr sein.
Hemisch - Do 24.11.05 12:44
So... danke euch allen, ich habe es jetzt geschafft!:D
Ich habe es wie folgt gemacht (falls es jemand interessiert):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); var tmpWert:string; begin if (strtoint(edit1.text))>(strtoint(edit2.text)) then begin tmpWert:=edit1.text; edit1.text:=edit2.text; Edit2.text:=tmpWert; end; if (strtoint(edit2.text))>(strtoint(edit3.text)) then begin tmpWert:=edit2.text; edit2.text:=edit3.text; Edit3.text:=tmpWert; end; if (strtoint(edit1.text))>(strtoint(edit2.text)) then begin tmpWert:=edit1.text; edit1.text:=edit2.text; Edit2.text:=tmpWert; end; end; end. |
Aber ich habe mir überlegt das dies nur mit 3 Edits funktioniert... wie ginge das wohl mit 4 oder gar 10 Edits die man anordnen muss?
mfg Hemisch
digi_c - Do 24.11.05 14:04
Achsooooo ja natürlich kann man bei 3 Werten mit Ausschluss arbeiten. Hab gedacht das war variabel :(
Hemisch - Do 24.11.05 18:17
Titel: It's Done!
Endlich habe ich es geschafft...
Hier der Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.Button1Click(Sender: TObject); var i,a:integer; edt1,edt2,edt3,edt4,edt5:string; tmpWert:String; begin edt1:=edit1.text; edt2:=edit2.text; edt3:=edit3.text; edt4:=edit4.text; edt5:=edit5.text; Listbox1.Items.Add(edt1); Listbox1.Items.Add(edt2); Listbox1.Items.Add(edt3); Listbox1.Items.Add(edt4); Listbox1.Items.Add(edt5); for a:=0 to 100 do begin for i:=0 to (Listbox1.Items.Count -2) do begin IF (StrToInt(Listbox1.Items.Strings[i]))>(StrToInt(Listbox1.Items.Strings[i+1])) then begin tmpWert:=Listbox1.Items.Strings[i]; Listbox1.Items.Strings[i]:=Listbox1.Items.Strings[i+1]; Listbox1.Items.Strings[i+1]:=tmpWert; end; end; end; end; |
PS:Is das normal das man als Anfänger daran über 3.5 Stunden braucht?
mfg Hemisch
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
GTA-Place - Do 24.11.05 20:35
Hier würde ich dir noch ein
Array und
FINDCOMPONENT empfehlen für die
Edits.
PS: Denke das ist normal. Ich brauch manchmal für vergleichbares auch so lang ^^
bole - Fr 25.11.05 22:56
Dein Sortieralgorithmus funktioniert zwar, aber du machst etwas viel... sich bei 5 Zahlen ist der Unterschied im millisekunden Bereich aber wenn es etwas mehr sind kann das schon was ausmachen.
Für die Profis: Mir ist schon bewusst, dass Bubblesort für nicht wirklich optimal, weil langsam ist...
In deinem Programm durchläufst Du die aussere Schleife konstant 100 mal. nötig ist aber nur ein durchlauf weniger als es Elemente zu sortieren gibt.
Eine weitere Optimierung ergibt sich eine Eigenschaft von Bubblesort. Da nach jedem Durchlauf das höchste Element an richtigen Ort ist muss es nicht mehr geprüft werden. Somit kann die innere Schleife immer kleiner werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| BEGIN FOR i := minsort+1 TO maxSort DO BEGIN FOR j := maxSort DOWNTO i DO BEGIN IF sortar[j-1] > sortar[j] THEN tauschen(j,j-1); END; end; end; |
Ich find super das Du nicht gleich die Flinte ins Korn geworfen hast! :D Ich habe sicher schon an einfacheren Problemen länger gehabt und als Programmier-Anfänger würde ich mich nicht bezeichnen...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!