Autor Beitrag
Hemisch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 19



BeitragVerfasst: Do 24.11.05 10:36 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 24.11.05 10:45 
www.sortieralgorithmen.de/

Bei drei Zahlen ist die Wahl egal. Für den Anfang würde ich Bubblesort vorschlagen. Probier dich daran die dargestellten Algos in Delphi zu portieren. Lösungen findest du auf www.dsdt.info
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:
ausblenden 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.

_________________
We are, we were and will not be.
Hemisch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 19



BeitragVerfasst: 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):

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 24.11.05 14:04 
Achsooooo ja natürlich kann man bei 3 Werten mit Ausschluss arbeiten. Hab gedacht das war variabel :(
Hemisch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 19



BeitragVerfasst: Do 24.11.05 18:17 
Titel: It's Done!
Endlich habe ich es geschafft...

Hier der Quelltext:

ausblenden 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 -2do 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 24.11.05 20:35 
Hier würde ich dir noch ein Array und Suche in der Entwickler-Ecke FINDCOMPONENT empfehlen für die Edits.


PS: Denke das ist normal. Ich brauch manchmal für vergleichbares auch so lang ^^

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
bole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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.

ausblenden 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...

_________________
ein programm macht nicht das was du willst sondern was du schreibst!