![]() |
AW: Funktion deklarieren oder nicht?
Und wo soll das sein?
|
AW: Funktion deklarieren oder nicht?
Sorry, mein Fehler, das mit dem Semikolon hätte ich sehen können.
Das zweite Problem besteht weiterhin. Eine Warnung bekomme ich nicht. MfG Ergosquare |
AW: Funktion deklarieren oder nicht?
2 Möglichkeiten:
Delphi-Quellcode:
oder auch
function SomeFunction: integer;
begin Result := 42; (* Result *) end;
Delphi-Quellcode:
Auch nach 20-maligem Drübergucken habe ich in Deinem Code keine der beiden Möglichkeiten entdecken können. Du musst also vor dem rekursiven Aufruf der Funktion einen Wert zuweisen, sonst steht da irgendetwas drin, aber nichts Definiertes. Steppe doch einmal durch und schau Dir den Wert von za nach dem Aufruf an. Nach meinem Dafürhalten müsste da ziemlicher Nonsens drinstehen.
function SomeFunction: integer;
begin SomeFunction := 42; (* Funktionsname *) end; |
AW: Funktion deklarieren oder nicht?
Zitat:
Gruß K-H |
AW: Funktion deklarieren oder nicht?
Achso, Missverständnis meinerseits, ich dachte, Du hättest meine Tomaten gemeint :lol:
|
AW: Funktion deklarieren oder nicht?
So, die Funktion hat jetzt eine Rückgabewert.
za scheint trotzdem durch die Funktion nicht verändert zu werden. MfG Ergosquare |
AW: Funktion deklarieren oder nicht?
Um mal zusammenzufassen:
- Rekursion ist in der Regel langsamer als Iteration - Parameter, lokale Variablen und Rückgabewerte nicht durcheinander werfen So stelle ich mir das vor:
Delphi-Quellcode:
Pixels ist so ziemlich die langsamste Möglichkeit eine Grafik auszugeben.
function zaehler(x, y, a, b: Real): Integer;
var x2: Real; begin Result := 0; while (Result <= 100) and (sqrt((x * x) + (y * y)) < 2) do begin x2 := (x * x) - (y * y) + a; y := (2 * x * y) + b; x := x2; Inc(Result); end; end; var c: TColor; za := zaehler(x, y, a, b); case za of 0..9: c := clRed; 10..19: c := clGreen; {...} else c := clBlack; end; paintbox1.canvas.Pixels[s + 50, z + 50] := c; Besser du verwendest eine Bitmap und greifst mit Scanline darauf zu. Die Bitmap dann komplett oder nach jeder Zeile zeichnen. Alternativ gleich mit einer TImage-Komponente arbeiten (Image1.Picture.Bitmap). |
AW: Funktion deklarieren oder nicht?
Ich hatte noch einen entscheidenden Fehler:
Code:
Sonst wird za nach der Funktion nicht verändert.
If (za<100) and (sqrt(x*x+y*y)<2)
then za:=zaehler(za+1,x,y,x2,a,b)+1 //+1 hat gefehlt else za:=1; Dennoch bleibt es leider bei der Einfarbigkeit. PS: Ich würde trotzdem gerne bei Rekursion bleiben. MfG Ergosquare |
AW: Funktion deklarieren oder nicht?
Zitat:
- Nein. Hm. Also eigentlich irgendwie doch aber nicht so einfach. ;-) Eine sehr schöne Erklärung ist ![]() |
AW: Funktion deklarieren oder nicht?
Den Ausdruck
Delphi-Quellcode:
kann man übrigens zu
(sqrt((x * x) + (y * y)) < 2)
Delphi-Quellcode:
vereinfachen.
((x * x) + (y * y) < 4)
Man kommt darauf wenn man den Ausdruck auf beiden Seiten des Kleinerzeichens quadriert. Die Quadratwurzel
Delphi-Quellcode:
wird dann aufgehoben und das spart recht viel Zeit.
sqrt()
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 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