![]() |
Funktion deklarieren oder nicht?
Hallo.
Es geht um eine Variable, die für eine Grafik wichtig ist und durch eine Funktion deklariert wird. Es scheint, als ob die Funktion nicht ausgeführt werden würde. In der Grafik erscheint dann nur eine vollfarbige Fläche, obwohl man mindestens eine Struktur erkennen müsste
Code:
function zaehler(za:integer; x,y,x2,a,b:real):integer;
begin x2:=x*x-y*y+a; y:=2*x*y+b; x:=x2; If (za<100) and (sqrt(x*x+y*y)<2) then za:=zaehler(za+1,x,y,x2,a,b) else za:=1; end; . . . za:=0; //Initialisierung zaehler(za,x,y,x2,a,b); //Aufruf if za>=100 then paintbox1.canvas.Pixels[s+50,z+50]:=clBlack; case za of 0..9:paintbox1.canvas.Pixels[s+50,z+50]:=clRed; 10..19:paintbox1.canvas.Pixels[s+50,z+50]:=clGreen; . . . |
AW: Funktion deklarieren oder nicht?
Wenn Du einen Parameter innerhalb der Funktion/Prozedur/Methode veränderst, musst Du ihn mit 'var' deklarieren, also
Delphi-Quellcode:
function zaehler(var za:integer; var x,y,x2,a,b:real):integer;
begin x2:=x*x-y*y+a; y:=2*x*y+b; x:=x2; If (za<100) and (sqrt(x*x+y*y)<2) then za:=zaehler(za+1,x,y,x2,a,b) else za:=1; end; |
AW: Funktion deklarieren oder nicht?
Delphi-Quellcode:
So besser?
function zaehler(var za:integer; var x,y,x2,a,b:real):integer;
[edit] Einen Tick zu langsam. Möglichweise kann man die Fließkommaparameter aber auch by Value übergeben (also ohne das "var"), so genau hab ich das jetzt nicht durchdrungen. [/edit] |
AW: Funktion deklarieren oder nicht?
Man könnte za auch im Result der Function übergeben.
Ansonsten wäre eine Procedure sinnvoller. Nachtrag: Ohne Result := za geht der rekursive Aufruf sowieso nicht. |
AW: Funktion deklarieren oder nicht?
Stimmt, ist mir gar nicht aufgefallen :oops:
|
AW: Funktion deklarieren oder nicht?
Eine Rekursion mit
Delphi-Quellcode:
ginge schon, aber dann müsste man die Logik anpassen, damit Diese dann "eigentlich" als Iteration arbeitet, womit man den rekursiven Aufruf dann aber auch gleich entsorgen könnte.
procedure zaehler(var za:integer; x,y,x2,a,b:real);
|
AW: Funktion deklarieren oder nicht?
Hallo nochmal.
Mit der Variante bekomme ich die Fehlermeldungen: [Fehler] Unit1.pas(36): ';', ')' oder '=' erwartet, aber 'VAR' gefunden [Fehler] Unit1.pas(42): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Code:
Was ist mit
function zaehler(var za:integer var x,y,x2,a,b:real):integer; //36
begin x2:=x*x-y*y+a; y:=2*x*y+b; x:=x2; If (za<100) and (sqrt(x*x+y*y)<2) then za:=zaehler(za+1,x,y,x2,a,b) //42 else za:=1; end; result:=za; gemeint? Die Variablen ändern sich doch durch die Funktion, oder nicht? Der rek. Aufruf ist schon Absicht. MfG Ergosquare |
AW: Funktion deklarieren oder nicht?
Delphi-Quellcode:
Gruß
function zaehler(var za:integer; var x,y,x2,a,b:real):integer; //36
K-H |
AW: Funktion deklarieren oder nicht?
Da fehlt ein Semikolon im Funktionskopf vor dem zweien "var". Und eine Funktion hat einen Rückgabewert, der wird in Deinem Code aber nirgends gesetzt, der Compiler müsste auch eine diesbezügliche Warnung ausgeben.
|
AW: Funktion deklarieren oder nicht?
Zitat:
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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