![]() |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
ahh!Danke!
naja wir hatten bisher im unterricht immer nur a[i]verwendet aber eben in schleifen und sowas... :wall: :wall: :wall: Auf jeden Fall Danke! |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
In Deiner Prozedur "tausch" steckt ebenfalls ein Fehler:
Delphi-Quellcode:
muss heissen:procedure tausch(var x,y:integer); var z:integer; begin x:=y; Y:=z; z:=x; end;
Delphi-Quellcode:
procedure tausch(var x,y:integer); var z:integer; begin z:=x; x:=y; y:=z; end; |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Geht übrigens auch anders:
Delphi-Quellcode:
procedure tausch(var x,y:integer);
begin x := x xor y; y := y xor x; x := x xor y; end; |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Was ist denn performanter? Die XOR-Lösung, oder der klassische Tausch über Hilfsvariable?
Sherlock |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Keine Ahnung, hab ich nie gemessen.
|
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Die "xor" Variante mochte ich früher auch lieber, weil sie so nett aussieht und ohne zusätzlichen Hilfsspeicher auskommt.
Bis sie dann mal in einem meiner Codes mit derselben Variable für x und y aufgerufen wurde. Das führt dann im Gegensatz zur anderen Version zur Katastrophe. Tausch(a, a) löscht nämlich a schon in der ersten Zeile, denn dann passiert ja nichts anderes als a := a xor a, und das gibt 0. Also aufpassen, wo und wie man das einsetzt ;) Gruß Michael |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Wobei es ja eigentlich egal ist, welche Katastrophe denn nun eintritt: gar nicht tauschen oder nullen ;)
|
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
[OT]
Nu ja, wenn ich sowas schreibe, sollte das für mein "a" nicht böse ausgehen:
Delphi-Quellcode:
Das heißt aber, daß man theoretisch diese Tausch-Funktion wie folgt ändern müßte:
a := 5;
Tausche(a, a); IF a = 0 then ShowMessage('Das war ja wohl nix');
Delphi-Quellcode:
Entschuldigung für das OT, aber der Bug hat mich mal ganz schön Nerven gekostet.... :oops:
procedure tausch(var x,y:integer);
begin if x <> y then begin x := x xor y; y := y xor x; x := x xor y; end; end; Gruß Michael [/OT] |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Ich habe mir das noch einmal durch den Kopf gehen lassen: das Problem besteht bei gleichen Werten überhaupt nicht (sofern ich keinen Denkfehler mache). Mal ein Schreibtischtest mit der Zahl 5 für beide Werte:
Delphi-Quellcode:
[edit] Wenn man allerdings 2 mal die selbe Variable (Referenz) übergibt, sieht das anders aus. [/edit]
a := a xor b;
00000101 //a=5 00000101 //b=5 ________ 00000000 //a=0 b := b xor a; 00000101 //b=5 00000000 //a=0 ________ 00000101 //b=5 a := a xor b; 00000000 //a=0 00000101 //b=5 ________ 00000101 //a=5 |
Re: Die Typen der tatsächlichen und formalen Var-Parameter m
Zitat:
Gruß Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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