![]() |
Re: Sortieren von zahlen-aber wie?
und wie kann ich den fehler beheben?
|
Re: Sortieren von zahlen-aber wie?
Gehirn einschalten, ausprobieren, in Zukunft Hausaufgaben rechtzeitig beginnen :roll:
|
Re: Sortieren von zahlen-aber wie?
Hallo inherited,
wenn du nicht helfen willst, ist das ok, aber solche Beiträge sind nicht zielführend. Beachte bitte, dass hier ein neues Mitglied eine Frage stellt und gibt diesem eine Chance. :zwinker: |
Re: Sortieren von zahlen-aber wie?
Mal eine Problemanalyse:
Ausgangssituation Du hast 3 Eingabefelder, in die Zahlen eingetragen werden sollen. Diese Zahlen sollen verglichen, sortiert und wieder ausgegeben werden (EVA-Prinzip). 1. Teilproblem: die eingegebenen Zahlen sind gar keine Zahlen, sondern Strings. Also brauchst Du 3 Zahlenvariablen (integer), in die die Eingaben erst umgewandelt werden müssen (StrToInt). 2. Teilproblem: diese (nun echten) Zahlen müssen miteinander verglichen und ggf. ausgetauscht werden. - Teilproblem zum Teilproblem: wenn Du Zahl1 Zahl2 zuweist und anschließend andersherum, haben beide denselben Wert. Du brauchst also eine Puffervariable. Das sähe dann so aus (Tausche a mit b): Puffer = a; a = b; b = Puffer; - Kernproblem des Teilproblems: - wenn 1. Zahl größer als 2. Zahl, dann tauschen - wenn 2. Zahl (evtl. vormals 1. Zahl) anschließend größer als 3. Zahl, dann tauschen - nun zur Kontrolle noch mal die aktuelle 1. Zahl mit der aktuellen 2. Zahl vergleichen und gff. tauschen Da es nur 3 Zahlen gibt, bist Du hier mit dem Vergleich schon am Ende. 3. Teilproblem: Ausgabe der sortierten Zahlen in den Eingabefeldern. Dies geschieht analog zum 1. Teilproblem andersherum mittels IntToStr. Wenn Du das nun noch in Quellcode umsetzt, ist die Hausaufgabe gelöst ;) |
Re: Sortieren von zahlen-aber wie?
Liste der Anhänge anzeigen (Anzahl: 1)
Das was DeddyH schreibt ist schon mal die Lösung für dein Problem!
Wenn du später mal eine Reihe von Zahlen, unbekannter Anzahl, oder generell irgendwelche Sachen Sortieren möchtest, dann kann man diesen oben genannten Lösungsansatz noch vertiefen! Dazu gibt es 2 Punkte die man im Hinterkopf haben sollte:
Damit hätte man schon sehr viel Speichermanagement weniger! Und ein weiterer Vorteil, es ist universel nutzbar! Universel nutzbar? Ja! Das ganze hört sich jetzt ev. bischen schwer an, im Grunde ist es aber ganz einfach! 1. Man nehme eine Liste von Werten und indiziere sie.
Delphi-Quellcode:
2. Man benötigt eine Funktion die die Werte untereinander vergleicht, sozusagen eine Relation aufbaut.
Var MyValues: Array Of Irgendwas; // Die Werte
MySortValues: Array Of Pointer; // Indizierung der Werte // ** Werte Indizieren SetLength( MySortValues, Length( MyValues ) ); For i := 0 To Length( MyValues ) - 1 Do Begin MySortValues[ i ] := @MyValues[ i ]; End; Diese Funktion definieren wir uns erstmal gleich als Typ.
Delphi-Quellcode:
eine Funktion um Integer zu vergleichen könnte passend zum definierten Typ so aussehen:
Type
TRelationFunction = Function( Const Value1, Value2: Pointer ): Integer; // <0 = Kleiner, 0 = Gleich, >0 = Größer
Delphi-Quellcode:
3. Man benötigt eine allgemeine Funktion zum sortieren, diese könnte so definiert sein:
Function IntegerRelation( Const Value1, Value2: Pointer ): Integer;
Begin // <0 = Kleiner, 0 = Gleich, >0 = Größer Result := Integer( Value1^ ) - Integer( Value2^ ); End;
Delphi-Quellcode:
Eine Implementation wäre dann so eine:
Type
TSortFunction = Procedure( Var ToSort: Array Of Pointer; Const RelationFunction: TRelationFunction );
Delphi-Quellcode:
Nun kann man viele verschiedene Sortierungen programmieren (TSortFunction's) und mithilfe neuer Relationsmodelle (TRelationFunction's) diese dann ohne wilde Programierung auf verschiedene Typen (Integer, Strings oder Eigene Objecte) verwenden lassen.
Procedure SimpleBubblesort( Var ToSort: Array Of Pointer; Const RelationFunction: TRelationFunction );
Var Len: Integer; i: Integer; aChange: Boolean; Temp: Pointer; Begin Len := Length( ToSort ); If Len > 1 Then Begin Repeat aChange := False; For i := 0 To Length( ToSort ) - 2 Do Begin If RelationFunction( ToSort[ i ], ToSort[ i + 1 ] ) > 0 Then Begin Temp := ToSort[ i ]; ToSort[ i ] := ToSort[ i + 1 ]; ToSort[ i + 1 ] := Temp; aChange := True; End; End; Until Not aChange; End; End; Natürlich muss man das Rad nicht neu erfinden, Delphi bietet schon verschiedene Sortierungsfunktionen an, es lohnt sich mal die Function Sort von der Klasse TList (Unit Classes) anzuschauen. Bye Christian Edit: Habe mal so eine kleine Konsolen-Anwendung als Beispiel dreingepackt... (nicht schimpfen, ich bin kein Konsolen-Programierer, geht sicher schöner, erfüllt aber seinen Zweck...) So, damit solltest du alles haben um deine Hausaufgaben meisten zu können... |
Re: Sortieren von zahlen-aber wie?
@Christian (Kedariodakon): Ich glaube, du verwirrst Maja eher, wenn du bei einem Anfänger direkt mit konstanten Pointer-Parametern, arrays, etc. anfängst.
@Maja: Um dir das sortieren mal anhand einen kleinen Beispiels zu zeigen, hier eine Sortierung von 2 Zahlen: Ziel: die Variable a soll später den kleineren der beiden Werte aus a und b enthalten.
Delphi-Quellcode:
Das nun auf drei Variablen zu übertragen sollte eigentlich für nich machbar sein.
...
var a, b, hilfsvar: Integer; begin //... // a und b irgendeinen Wert zuweisen //... if b < a then // Wenn b kleiner ist müssen die Variablen vertauscht werden begin hilfsvar := a; // Wert aus a in der Hilfsvariablen zwischenspeichern a := b; // Den Wert aus b in a schreiben b := hilfsvar; // Den zwischengespeicherten Wert, der ursprünglich in a stand in b schreiben end; Gruß Lars EDIT: Zitat:
|
Re: Sortieren von zahlen-aber wie?
@Kedariodakon: Es ist zwar richtig, was Du schreibst, trägt aber vermutlich eher zur Verwirrung bei. Sie sollte ihre Lösung IMHO zunächst so einfach wie möglich (und damit für sich selbst nachvollziehbar) gestalten, sonst haben wir bald einen 2. taktaky, der immer den 3. Schritt vor dem 1. machen will (das ist jetzt noch nicht einmal böse gegenüber taktaky gemeint).
[edit] Wieso habe ich den Beitrag von Hador nicht gesehen? :pale: [/edit] |
Re: Sortieren von zahlen-aber wie?
Die Lösung stand ja schon in dem Beitrag über mir, daher dachte ich mal, vertiefst die Sache ein wenig...
Sortieren muss man ja sehr oft, und meist möchte man noch eigene Objecte sortieren und damit hat man schon einen guten Einstigspunkt. Ich schau bei solchen Sachen gern ein wenig in die Zukunft, sprich, kann ich die Lösung des Problems später für andere Lösungen ebenfalls verwenden? Als "Anfänger" hat man immer das Problem, dass man nicht weiß wie man was umsetzen soll, weil man einfach gleich das Ziel erreichen möchte, ohne ev. einen kleinen Umweg zu nehmen. Für sowas empfehle ich ein leeres Blatt Papier und ein Bleistift, da kann man sich solche Sachen schon strukturiert aufmalen. Bye Christian |
Re: Sortieren von zahlen-aber wie?
Zitat:
Zitat:
|
Re: Sortieren von zahlen-aber wie?
Statt Papier und Bleistift kann man auch
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 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