![]() |
Sortieren von zahlen-aber wie?
Hey ihr lieben Dephi-interessierte!
ich hab ein riesenproblem. ich soll einen algorithmus erstellen, welcher drei einzugende Zahlen vergleicht und in der Reihenfolge ihrer Größe wieder ausgibt. Jetzt hab ich schon ein programm, aber er macht nicht das, was er soll. ich kopiers mal rein:
Delphi-Quellcode:
ich habe a=1, b=2,c=3 und dafür gibt es ja 6 varianten: 123,132,213,231,312 und 321. bitte bitte helft mir!!!!
procedure TForm1.Button2Click(Sender: TObject);
begin close; end; procedure TForm1.Button1Click(Sender: TObject); var a,b,c:Integer; begin //Eingabe a:=StrToInt(Edit1.Text); b:=StrToInt(Edit2.Text); c:=StrToInt(Edit3.Text); //Verarbeitung IF (a<b) AND (b<c) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE IF (a<c) AND (c>b) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE IF (b>a) AND (a<c) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE IF (b<c) AND (c>a) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE IF (c>a) AND (a<b) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE IF (c<b) AND (b<a) THEN begin Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end ELSE end; end. ich bin total am verzweifeln!!!!!!!!!!! [edit=MrSpock]Code Tags gesetzt. Mfg, MrSpock[/edit] |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Willkommen in der DP :dp:
Hier wird dir niemand deine Hausaufgaben machen, auch nicht, wenn du uns im Titel anschreist ;) Was dir allerdings helfen könnte wäre Daniels Tutorial zu ![]() |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Versuch es mal mit einem Sortieralgorithmus ( BubbleSort, QuickSort, ShellSort, ...)
|
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Hallo Maja,
1. willkommen in der DP :dp: 2. lösen wir hier keine Hausaufgaben, sondern geben höchstens Hilfestellungen. 3. Formatiere bitte Deinen Quelltext (Du kannst Deinen Beitrag editieren, vor den Quelltext klicken, dann oben auf den Button "Delphi-Code", dann an das Ende des Quelltextes Klicken und wieder o.a. Button betätigen). 4. ist das eine ganz einfache Sortierfunktion. [edit] Punkt 3 bereits durch den Vulkanier erledigt :zwinker: [/edit] |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Hallo Maja,
herzlich willkommen in der Delphi-PRAXiS. Wir haben in unseren Regeln festgelegt, dass der Titel einen Hinweis auf das Problem geben soll, zu dem du eine Lösung benötigst. Ändere doch bitte den Titel entsprechend. Außerdem solltest du nicht nur Großbuchstaben verwenden, dass wäre so als schreist du uns an, und das willst du sicher nicht. :zwinker: |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
ich bin total am verzweifeln!!!!!!!!!!! ... ich ebenfalls, wenn ich sowas lesen muss. (1) Du überlegst Dir mal konkrete Fragen. Schöne Ansatzpunkte wären: "Was macht das Programm?", "Was macht es nicht?" und "Was sollte das Programm machen?" (2) Du stellst Dir selber die Fragen, was die einzelnen Zeilen machen. Deine Lösung ist nicht gerade elegant, aber im Wesentlichen hast Du alle Befehle beisammen, um zur Lösung zu kommen. Du kannst die Eingaben in Zahlen wandeln, sie vergleichen und wieder zurückschreiben. Mehr musst Du nicht (zwingend) können. (3) Um das Problem zu verstehen, reduzierst Du die Anzahl an Zahlen auf 2. Die Technik klappt ja, offenbar hast Du Dich nur in der Logik verheddert. |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Ist dir schonmal aufgefallen, dass das Programm immer das gleiche macht?
Delphi-Quellcode:
Dein Programm führt nur diese Anweisung aus, egal, in welchem Verhältnis a,b und c stehen.
Edit5.Text:=IntToStr(a);
Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
ich möchte keinen ärgern oder anschreien, sorry! danke für eure antworten! ja, ich hab mich verheddert und hänge irgendwie fest:-(
wie kann ich das thema ändern? |
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Über den "Edit" Button.
|
Re: BRAUCHE GANZ DRINGEND HILFE FÜR HAUSAUFGABE!!!!!!!BITTE
Mit dem Edit-Knopf oben rechts über deinem Beitrag.
Und malo hat im Wesentlichen schon gesagt was du falsch machst. |
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
![]() |
Re: Sortieren von zahlen-aber wie?
Nunja, immerhin hat er/sie am Freitag Abend schon versucht die Hausaufgaben zu lösen, welche wohl für die kommende Woche gedacht waren, spricht doch schon mal dafür dass sie was lernen will :)
Nunja, mit Blatt uns Papier mein ich eigentlich nicht Struktugramme aufzumalen, mal ehrlich, wer macht das, wenn er es nicht muß? Ich mach das meist nach der guten Mathematischen Lösungsfindung, erstmal das Gegeben notieren, dann das Gesucht und daraus bastle ich ne schematische Lösung die meist nix mit einem Struktugram gemeinsam hat ;) Aber genug OT. Bye Christian |
Re: Sortieren von zahlen-aber wie?
Zitat:
|
Re: Sortieren von zahlen-aber wie?
:gruebel:
Zeiten haben sich wohl geändert... Zu meiner Zeit sind wir noch lächtsend den Lehrern hinterher um noch mehr zu erfahren :wink: |
Re: Sortieren von zahlen-aber wie?
[OT]
Natürlich und ihr habt immer eure Hausaufgaben rechtzeitig gemacht, und nie abgeschrieben ;) Wers glaubt :P [/OT] |
Re: Sortieren von zahlen-aber wie?
Ich denke, Christian meinte eher, um vom Lehrer noch mehr von der Lösung zu erfahren :lol:
|
Re: Sortieren von zahlen-aber wie?
Hallo,
so ein ähnliches Thema gab es hier schon mal mit 4 Zahlen ![]() |
Re: Sortieren von zahlen-aber wie?
hallo ihr lieben!
vielen dank für eure hilfe! ich hab jetzt folgenden algorithmus genommen:
Delphi-Quellcode:
glg und bis bald!
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label5: TLabel; Edit5: TEdit; Edit6: TEdit; Edit4: TEdit; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button2Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); var a,b,c,hilf:Integer; begin //Eingabe a:=StrToInt(Edit1.Text); b:=StrToInt(Edit2.Text); c:=StrToInt(Edit3.Text); //Verarbeitung IF a>b THEN begin hilf:=a; a:=b; b:=hilf; end; IF b>c THEN begin hilf:=b; b:=c; c:=hilf; end; IF a>b THEN begin hilf:=a; a:=b; b:=hilf; end; Edit5.Text:=IntToStr(a); Edit4.Text:=IntToStr(b); Edit6.Text:=IntToStr(c); end; end. [edit=MrSpock]Code Tags eingefügt. Mfg, MrSpock[/edit] |
Re: Sortieren von zahlen-aber wie?
Bravo, damit hast Du 1:1 umgesetzt, was ich
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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