Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Parameter wieder als parameter mitgeben??? (https://www.delphipraxis.net/34625-parameter-wieder-als-parameter-mitgeben.html)

Thorben86 25. Nov 2004 17:16


Parameter wieder als parameter mitgeben???
 
Warum muss ich hier das Ergebnis erst auf a schreiben und dass dann der Funktion mit übergeben.

Delphi-Quellcode:
Procedure Fak_rek1(n : integer; var Ergebnis : int64);
      a:= ergebnis*n ;
      fak_rek1 ( n-1 , a);
und kann nicht direkt Ergebnis*n übergeben.
Delphi-Quellcode:
Procedure Fak_rek1(n : integer; var Ergebnis : int64);
      a:= ergebnis*n ;
      fak_rek1 ( n-1 , a ); <-- a eingestetzt
Gibt es da keine mögklichkeit das direkt zu machen?

Edit: Sry, ich hatte vergessen das ergebnis*n durch a zu ersetzten.

Dax 25. Nov 2004 17:18

Re: Parameter wieder als parameter mitgeben???
 
So ginge es:
Delphi-Quellcode:
Procedure Fak_rek1(n : integer; Ergebnis : int64);
      a:= ergebnis*n ;
      fak_rek1 ( n-1 , ergebnis*n );
Aber es wäre komplett sinnfrei, weil Ergebnis offensichtlich (schon vom Namen her) ein Ergebnis enthalten soll. Nachdem die Funktion zurückgesprungen ist, ist sowieso davon auszugehen, das a einen anderen Wert enthält als den, den du a gegeben hast.

Thorben86 25. Nov 2004 17:49

Re: Parameter wieder als parameter mitgeben???
 
Also wenn ich nur Ergebnis übergebe, klappt es ja. Wenn ich jetzt noch das *n anhänge gibt er mir an, dass die tatsächlichen und Formalen Parameter übereinstimmem müssen. Nur warum meckert der mir da an den Parametern rum, die sind beide gleich deklariert(int64)

Wenn ich bei der deklaration das var bei ergebnis wegneheme, dann lässt sich das program starten, ist jedoch sinnlos, da ich am ende ja nicht den wert von ergebnis habe, da dieser ja nicht wieder mit zurückgegeben wird.

Dax 25. Nov 2004 17:50

Re: Parameter wieder als parameter mitgeben???
 
Ergebnis ist in dieser FUnktion ein variabler Parameter, das bedeutet, du musst der Funktion an dieser Stelle eine Variable übergeben. Wenn du allerdings an dieser Stelle eine Formel schreibst, wertet der Compiler dies als konstanten Ausdruck.

dizzy 25. Nov 2004 17:58

Re: Parameter wieder als parameter mitgeben???
 
Eine rekursive Prozedur macht imho auch nicht wirklich Sinn. Ich würde da doch eher eine rek. Funktion mit Ergebnisrückgabe nehmen ;).
Weil so wie du es jetzt hast ist es deutlich besser mit einer Iteration zu lösen - es ist sogar implizit quasi iterativ, auch wenn sich die Prozedur natürlich selber aufruft. Aber du rechnest immer nur mit einer identischen Variablen. Durch das Zuweisen an "a" erstellst du eine Kopie des var-Parameters, die aber nicht an selbigen zurückgegeben wird. "Ergebnis" würde sich schlicht nicht ändern.

Delphi-Quellcode:
function Fak_rek1(n: integer): int64;
begin
  if n>1 then
    result := fak_rek1(n-1)*n;
  else
    result := 1;
end;
(ist eben aus'm Kopf - könnte gehen ;))

Thorben86 25. Nov 2004 18:03

Re: Parameter wieder als parameter mitgeben???
 
Die Iterative + Linear rekursive Variante(deien) hab ich schon, ich Verwende das nur in meiner Facharbeit, um zu die endrekursive Sonderform der linearen Rekursion zeigen. Darum benötige ich diese umständliche Variante :?

Aber pls nicht weiterhelfen, nur weil ich das wort facharbeit geschireben haben, und manche denken werden, ich will dass ihr alles macht, ich will ja aeigentlich nur wissen, ob ich das mit einer Hilfs-Variable machen muss, oder ob es doch eine kürzere lösung dafür gibt, da es ja eigntlich sinnlos ist.

Nothine 26. Nov 2004 14:06

Re: Parameter wieder als parameter mitgeben???
 
Zitat:

Zitat von Thorben86
Aber pls nicht weiterhelfen, nur weil ich das wort facharbeit geschireben haben, und manche denken werden, ich will dass ihr alles macht, ich will ja aeigentlich nur wissen, ob ich das mit einer Hilfs-Variable machen muss, oder ob es doch eine kürzere lösung dafür gibt, da es ja eigntlich sinnlos ist.

nein, im prinzip musst du die hilfsvariable nicht benutzen, du kannst Ergebnis*n auch direkt an Ergebnis zuweisen, da es ja eine variable ist, und diese (übergebene) variable dann weiter (rekursiv) übergeben. damit entfällt die deklaration der hilfsvariable, und es ist im prinzip genau dasselbe. Bei der in deinem ersten post geschriebenen funktion fehlt allerdings noch (wie hier auch schon erwähnt) die abfrage ob n>1


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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