![]() |
Werte tauschen
Also bis jetzt hab ich folgendes:
Delphi-Quellcode:
und das
procedure Swapvalues(var x,y: integer);
var dummy: integer; begin dummy:=x; x:=y; y:= dummy; end;
Delphi-Quellcode:
Nur irgendwie werden die Werte nur beim ersten mal auf Button1 sortiert. danach sind sie nich mehr sortiert. Woran liegt das?
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; [edit=SirThornberry]Titel geändert - Mfg, SirThornberry[/edit] |
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! |
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; |
Re: Und noch einmal... Werte tauschen
Eine Sache verstehe ich an deinem Code nicht, und zwar diese Zeile:
Delphi-Quellcode:
was bewirkt die genau?
For i := 0 To Length(a) - 2 do
|
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ß |
Re: Und noch einmal... Werte tauschen
Hallo,
tauscht man Werte nicht mit XOR? |
Re: Und noch einmal... Werte tauschen
Zitat:
|
Re: Und noch einmal... Werte tauschen
Zitat:
Habe mir nicht den gesamten Thread durchgelesen, sondern nur nach Titel geantwortet; sorry. |
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:
Damit kippst Du alle Bits von a (Du 'tauschst' quasi alle 1er mit 0ern und umgekehrt).
var
a: Byte; begin a:=134; a:=a XOR 11111111b; end; |
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 12:39 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 by Thomas Breitkreuz