AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Funktion deklarieren oder nicht?

Funktion deklarieren oder nicht?

Ein Thema von Ergosquare · begonnen am 4. Mär 2014 · letzter Beitrag vom 6. Mär 2014
Antwort Antwort
Seite 1 von 3  1 23   
Ergosquare

Registriert seit: 4. Mär 2014
5 Beiträge
 
#1

Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:33
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;

   .
   .
   .
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:36
function zaehler(var za:integer; var x,y,x2,a,b:real):integer; So besser?

[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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 4. Mär 2014 um 14:38 Uhr)
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
110 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:45
Stimmt, ist mir gar nicht aufgefallen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#6

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:54
Eine Rekursion mit procedure zaehler(var za:integer; x,y,x2,a,b:real); 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Ergosquare

Registriert seit: 4. Mär 2014
5 Beiträge
 
#7

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 14:59
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:
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;
Was ist mit
result:=za;
gemeint?
Die Variablen ändern sich doch durch die Funktion, oder nicht?

Der rek. Aufruf ist schon Absicht.

MfG Ergosquare
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 15:07
function zaehler(var za:integer; var x,y,x2,a,b:real):integer; //36 Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 15:08
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Funktion deklarieren oder nicht?

  Alt 4. Mär 2014, 15:15
Und eine Funktion hat einen Rückgabewert, der wird in Deinem Code aber nirgends gesetzt
Wenn man die Tomaten zur Seite schiebt, sieht man auch das.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz