AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Parameter wieder als parameter mitgeben???
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter wieder als parameter mitgeben???

Ein Thema von Thorben86 · begonnen am 25. Nov 2004 · letzter Beitrag vom 26. Nov 2004
Antwort Antwort
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#1

Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 18:16
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.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 18:18
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.
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 18:49
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.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 18:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 18:58
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 )
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Thorben86

Registriert seit: 20. Nov 2003
Ort: Brühl
365 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Parameter wieder als parameter mitgeben???

  Alt 25. Nov 2004, 19:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Parameter wieder als parameter mitgeben???

  Alt 26. Nov 2004, 15:06
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
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:56 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