![]() |
Re: Werte tauschen
Ich komm einfach nicht drauf. Was fehlt in meiner Prozedur, damit es funzt?
|
Re: Werte tauschen
Joo, so isses mit dem repeat-until!
Zudem sei angemerkt, dass dieser Sortieralgorithmus recht langsam ist (was natürlich nur bei größeren Datenmengen ins Gewicht fällt). Ich möchte an dieser Stelle eine allgemeine SwapProcedur beisteuern:
Delphi-Quellcode:
Hiermit können Variablen beliebigen Typs vertauscht werden (vielleicht findet sich an dieser Stelle ein hilfreicher Geist, der diese Prozedur etwas in der Geschwindigkeit verbessern kann)
procedure SwapVars(var a,b;nByte:Integer);
var Sou : Array[1..maxInt]of Byte absolute a; Des : Array[1..maxInt]of Byte absolute b; i : Integer; t : Byte; begin for i:=1 to nByte do begin t :=Sou[i]; Sou[i]:=Des[i]; Des[i]:=t; end; end; Gruß :hi: |
Re: Werte tauschen
Welche Sortierprozedur verwendest du denn jetzt?
|
Re: Werte tauschen
Nach wie vor die vom Anfang. Die Geschwindigkeit ist bei mir nicht so wichtig. Ich habe eh nur 6 Werte.
|
Re: Werte tauschen
Tja, das ist klar, dass die nicht immer funktioniert! Die repeat-until Schleife darf nicht durch einen Zähler gesteuert werden. Das KANN mal passen, ist aber vermutlich MEIST falsch. Cyberbob hat dir ein Beispiel gegeben: Die Schleife darf erst beendet werden, wenn nicht mehr getauscht wurde!
|
Re: Werte tauschen
Zitat:
Delphi-Quellcode:
Meintest Du das?
procedure SwapValues(var a,b: integer);
begin a := a xor b; b := b xor a; a := a xor b; end; |
Re: Werte tauschen
Ich habs jetzt wirklich GENAU so übernommen.
Delphi-Quellcode:
Es klappt trotzdem nicht immer. Warum??
procedure TForm1.Button1Click(Sender: TObject);
var zahl1:tzahl; var c,super1,speicher,d:integer; var changed:boolean; begin Lotto(zahl1,super1); //Ausgabe Repeat Changed := False; For d := 0 To Length(zahl1) - 6 do begin if zahl1[d] > zahl1[d+1] then begin Speicher := zahl1[d]; zahl1[d] := zahl1[d+1]; zahl1[d+1] := Speicher; Changed := True; end; end; Until Changed = False; for c:=1 to 7 do Stringgrid1.Cells[c,0]:=IntToStr(zahl1[c]); label1.Caption:=IntToStr(super1); end; Erst hab ich die Zahlen geordent, dann sogar noch in einer extra Schleife die Sache wieder ausgegeben. Trotzdem sind die Zahlen, zumindest nicht immer, geordnet |
Re: Werte tauschen
Warum wird denn von length(Zahl1) der Wert 6 subtrahiert? Es soll doch nur -2 sein ...
|
Re: Werte tauschen
:wall: :wall:
scheiß Tippfehler :wall: :wall: |
Re: Werte tauschen
Und, geht' s jetzt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 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