Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Die Typen der tatsächlichen und formalen Var-Parameter müsse (https://www.delphipraxis.net/114676-die-typen-der-tatsaechlichen-und-formalen-var-parameter-muesse.html)

Arathok 30. Mai 2008 06:53

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!

exilant 30. Mai 2008 10:01

Re: Die Typen der tatsächlichen und formalen Var-Parameter m
 
In Deiner Prozedur "tausch" steckt ebenfalls ein Fehler:

Delphi-Quellcode:

procedure tausch(var x,y:integer);
var z:integer;
begin
   x:=y;
   Y:=z;
   z:=x;
end;
muss heissen:


Delphi-Quellcode:

procedure tausch(var x,y:integer);
var z:integer;
begin
   z:=x;
   x:=y;
   y:=z;
end;

DeddyH 30. Mai 2008 10:05

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;

Sherlock 30. Mai 2008 10:18

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

DeddyH 30. Mai 2008 10:20

Re: Die Typen der tatsächlichen und formalen Var-Parameter m
 
Keine Ahnung, hab ich nie gemessen.

grizzly 30. Mai 2008 10:59

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

DeddyH 30. Mai 2008 11:04

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

grizzly 30. Mai 2008 11:57

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:
a := 5;
Tausche(a, a);
IF a = 0 then
  ShowMessage('Das war ja wohl nix');
Das heißt aber, daß man theoretisch diese Tausch-Funktion wie folgt ändern müßte:
Delphi-Quellcode:
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;
Entschuldigung für das OT, aber der Bug hat mich mal ganz schön Nerven gekostet.... :oops:

Gruß
Michael
[/OT]

DeddyH 2. Jun 2008 07:58

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:
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
[edit] Wenn man allerdings 2 mal die selbe Variable (Referenz) übergibt, sieht das anders aus. [/edit]

grizzly 2. Jun 2008 11:20

Re: Die Typen der tatsächlichen und formalen Var-Parameter m
 
Zitat:

Wenn man allerdings 2 mal die selbe Variable (Referenz) übergibt, sieht das anders aus.
Nur darum ging es mir. :-D

Gruß
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 2 von 2     12   

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