Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Werte tauschen (https://www.delphipraxis.net/100051-werte-tauschen.html)

P4CM4N 21. Sep 2007 16:33

Re: Werte tauschen
 
Ich komm einfach nicht drauf. Was fehlt in meiner Prozedur, damit es funzt?

pstruh 21. Sep 2007 16:42

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

Gruß :hi:

pstruh 21. Sep 2007 16:43

Re: Werte tauschen
 
Welche Sortierprozedur verwendest du denn jetzt?

P4CM4N 21. Sep 2007 16:45

Re: Werte tauschen
 
Nach wie vor die vom Anfang. Die Geschwindigkeit ist bei mir nicht so wichtig. Ich habe eh nur 6 Werte.

pstruh 21. Sep 2007 16:51

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!

DeddyH 21. Sep 2007 17:01

Re: Werte tauschen
 
Zitat:

Zitat von s-off
Hallo,

tauscht man Werte nicht mit XOR?

Bei ganzzahligen Variablen mach ich das auch so:
Delphi-Quellcode:
procedure SwapValues(var a,b: integer);
begin
  a := a xor b;
  b := b xor a;
  a := a xor b;
end;
Meintest Du das?

P4CM4N 21. Sep 2007 17:07

Re: Werte tauschen
 
Ich habs jetzt wirklich GENAU so übernommen.
Delphi-Quellcode:
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;
Es klappt trotzdem nicht immer. Warum??
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

pstruh 21. Sep 2007 17:23

Re: Werte tauschen
 
Warum wird denn von length(Zahl1) der Wert 6 subtrahiert? Es soll doch nur -2 sein ...

P4CM4N 21. Sep 2007 20:14

Re: Werte tauschen
 
:wall: :wall:
scheiß Tippfehler
:wall: :wall:

DeddyH 21. Sep 2007 20:16

Re: Werte tauschen
 
Und, geht' s jetzt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz