Delphi-PRAXiS
Seite 1 von 3  1 23      

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 14:33


Werte tauschen
 
Also bis jetzt hab ich folgendes:
Delphi-Quellcode:
procedure Swapvalues(var x,y: integer);
var
dummy: integer;
begin
dummy:=x;
x:=y;
y:= dummy;
end;
und das
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var zahl1:tzahl;
var c,super1:integer;
begin
Lotto(zahl1,super1);                                      //Ausgabe
c:=1;
repeat
if zahl1[c]>zahl1[c+1] then SwapValues(zahl1[c],zahl1[c+1]);
Stringgrid1.Cells[c,0]:=IntToStr(zahl1[c]);
c:=c+1;
until c=7;
Nur irgendwie werden die Werte nur beim ersten mal auf Button1 sortiert. danach sind sie nich mehr sortiert. Woran liegt das?

[edit=SirThornberry]Titel geändert - Mfg, SirThornberry[/edit]

sirius 21. Sep 2007 15:06

Re: Und noch einmal... Werte tauschen
 
Der Sortieralgo ist unvollständig (wahrscheinlich hattest du beim ersten Mal Glück).
Da solltest du nochmal drüberschauen!

Cyberbob 21. Sep 2007 15:18

Re: Und noch einmal... Werte tauschen
 
Meine sieht so aus:

Delphi-Quellcode:
var
  Changed : Boolean;
  i : Integer;
  Speicher : Integer;

Repeat
  Changed := False;
  For i := 0 To Length(a) - 2 do
  begin
    if a[i] > a[i+1] then
    begin
      Speicher := a[i];
      a[i] := a[i+1];
      a[i+1] := Speicher;
      Changed := True;
    end;
  end;
Until Changed = False;

P4CM4N 21. Sep 2007 15:38

Re: Und noch einmal... Werte tauschen
 
Eine Sache verstehe ich an deinem Code nicht, und zwar diese Zeile:
Delphi-Quellcode:
  For i := 0 To Length(a) - 2 do
was bewirkt die genau?

pstruh 21. Sep 2007 15:57

Re: Und noch einmal... Werte tauschen
 
Hallo!
Das Array hat den Namen "a", der höchste Index des Arrays ist Length(a)-1 (Basis 0, erstes Element hat den Index 0). Da innerhalb der Schleife auf a[i+1] zugegriffen wird, darf die Schleife eben nur bis zum vorletzten Element "hochzählen"
Gruß

s-off 21. Sep 2007 15:59

Re: Und noch einmal... Werte tauschen
 
Hallo,

tauscht man Werte nicht mit XOR?

sirius 21. Sep 2007 16:00

Re: Und noch einmal... Werte tauschen
 
Zitat:

Zitat von s-off
Hallo,

tauscht man Werte nicht mit XOR?

:gruebel: Bits kannst du damit tasuchen, oder an was hast du gedacht?

s-off 21. Sep 2007 16:03

Re: Und noch einmal... Werte tauschen
 
Zitat:

Zitat von sirius
Zitat:

Zitat von s-off
Hallo,

tauscht man Werte nicht mit XOR?

:gruebel: Bits kannst du damit tasuchen, oder an was hast du gedacht?

Ja, daran dachte ich.
Habe mir nicht den gesamten Thread durchgelesen, sondern nur nach Titel geantwortet; sorry.

Sidorion 21. Sep 2007 16:04

Re: Werte tauschen
 
Hä? XOr ist der Ausdruck für 'entweder a oder b' da wird nix getauscht. Das einzige, was an 'tauschen' auch nur im Ansatz rankommt wäre:
Delphi-Quellcode:
var
  a: Byte;
begin
  a:=134;
  a:=a XOR 11111111b;
end;
Damit kippst Du alle Bits von a (Du 'tauschst' quasi alle 1er mit 0ern und umgekehrt).

Cyberbob 21. Sep 2007 16:09

Re: Werte tauschen
 
Achso, die äußere Repaet-Shleife ist dafür da, weil immer nur 2 Einträge miteniander vertauscht werden. Wenn un ein element am ende der Liste ganz nach vorne muss, muss die Tauschfunktion auch entsprechend oft durchlaufen werden, damit das funktioniert. Wenn nichts mehr getauscht wurde, ist alles an seinem Platz und bei Until wird die Schleife verlassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 1 von 3  1 23      

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