ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
2924
2924
EMPFEHLEN
-
Ich habe mir für eine rekursive Fakultäts-Rechnung folgendes überlegt.
Code :1 2 3 4 5 6 7 8 9 10 11
x, result: Real; ... function TRechenoperationen.Fakultaet(x: Real): Real; var n: Real; begin if x >= 2 the begin n := x-1; result := Fakultaet(n) * x; end else result := 1; end;
Nur hat result am Ende keinen Wert. Wie kann ich das ändern?
-
20.10.08 11:15 #2
Du hast ganz oben in deinem Code "result" deklariert. Das ist aber unnötig (und verursacht wohl auch den Fehler), weil "result" der Rückgabewert deiner Funktion ist. Du brauchst es nicht extra deklarieren. Ansonsten seh ich jetzt keinen Fehler, hab den Code allerdings nur im Kopf getestet
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
20.10.08 11:23 #3
- Registriert seit
- Jul 2003
- Ort
- Montreal (Quebec)
- Beiträge
- 1.667
Es ist im übrigen ungünstig den Rückgabewert in einer Funktion mehr als einmal zu definieren, auch wenn bei einer Anweisungsüberdeckung dieses nur einmal passiert. Sauberer und schöner ist es, wenn man eine (lokale!) Variable definiert und dann ganz zum Schluss den Rückgabewert setzt.
Code :1 2 3 4 5 6 7 8 9 10 11
function TRechenoperationen.Fakultaet(x: integer): integer; var TempResult: integer; begin if x >= 2 then begin TempResult := Fakultaet(x-1) * x; end else TempResult := 1; result := TempResult; end;
Die globalen Variablen brauchst Du nicht. Darüber hinaus ist die Fakultät < 0 nicht möglich.Geändert von Navy (20.10.08 um 11:26 Uhr)
-
habe es so probiert, wie du gesagt hast, navy, gibt er bei der Ergebnisvariable immer 0 aus.
Warum?
-
23.10.08 08:04 #5
- Registriert seit
- Mar 2004
- Beiträge
- 441
-
23.10.08 09:21 #6
- Registriert seit
- Jul 2003
- Ort
- Montreal (Quebec)
- Beiträge
- 1.667
Das Ergebnis 0 kann bei meiner Lösung nicht entstehen. Das Fehler liegt also bei Dir. Hast Du Dich vielleicht irgendwo verschrieben?
-
Frage - warum ist das ungünstig? Schliesslich legt Delphi ja gerade eine spezielle lokale Variable an um das Resultat dann zu übergeben (die immer den Namen Result hat).
Beispiel:
Code :1 2 3 4 5 6 7 8 9 10
function doSomething : Integer; begin Result:=ERROR_CODE; //mit Fehlerhaft initialisieren //defensives Programmieren, Preconditions pruefen if cond1 = true then Exit; if cond2 = true then Exit; //Preconditions erfuellt ... Result:=... //Erfolgreich berechnet end;
wichtig ist doch blos, dass Result einen definierten Wert hat, bevor die Funktion verlassen wird (wie auch immer sie verlassen wird).
-
20.11.08 19:09 #8
Also ich setz die Rückgabe normal als erstes auch auf falsch und erst am Schluss, wenn alles funktioniert hat, auf true
-
Code :
1 2 3 4 5 6 7 8 9 10
function TRechenoperationen.Fakultaet(x: Integer): Integer; var i: Integer; TempResult: Integer; begin if x <= 0 then TempResult := 0 else TempResult := 1; for i := 2 to x do begin TempResult := TempResult * i; //eröhhen + und mit vorherigem multiplizieren result := TempResult; end; end;
Diese Lösung habe ich in meinem Schulbuch gefunden
-
12.02.09 19:12 #10
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
diese Lösung ist allerdings nicht rekursiv...
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
Ähnliche Themen
-
Fakultät für 100 berechnen
Von Neuling 765 im Forum C/C++Antworten: 6Letzter Beitrag: 19.01.10, 16:02 -
[C++] Wie funktioniert das mit der fakultät berechnen?
Von Irgendjemand_1 im Forum C/C++Antworten: 11Letzter Beitrag: 17.03.06, 16:14 -
Fakultät
Von pulmoll im Forum Flash PlattformAntworten: 4Letzter Beitrag: 29.04.04, 16:37 -
Fakultät mit Turbopascal berechnen
Von Xeal87 im Forum Sonstige SprachenAntworten: 11Letzter Beitrag: 06.11.03, 18:29 -
Fakultät im Java Pseudocode berechnen
Von MS[shady] im Forum JavaAntworten: 10Letzter Beitrag: 11.09.03, 07:28





Zitieren


Login





