Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auch größere Fakultäten ausrechnen? (https://www.delphipraxis.net/31517-auch-groessere-fakultaeten-ausrechnen.html)

Thorben86 10. Okt 2004 18:09


Auch größere Fakultäten ausrechnen?
 
Hi, ich bin gerade dabei, ein Programm zu schreiben, in dem ich die Fakultät von x ausrechnen will..

Hierfür verwende ich den Code, den ich hier gefunden habe.
Delphi-Quellcode:
function NFak(Val: Integer): Int64;
begin
  if Val < 0 then
    raise Exception.Create('Val muss größer/gleich 0 sein.');
  Result := 1;
  repeat
    Result := Result * Val;
    Dec(Val);
  until Val <= 1;
end;
Das Problem ist jetzt aber, dass das Ergebnis nur bis 20 richtig "erscheint", da bei 21 schon eine negative Zahl als Lösung rauskommt. Gibt es eine Möglichkeit dies weniger Speicherintensiv(muss aber rekusiv sein) zu lösen, damit man auch über die 20 hinaus kommt?

Ratte 10. Okt 2004 18:21

Re: Auch größere Fakultäten ausrechnen?
 
Komisch 34 (z.B.) geht wieder, ich kann auch keinen Fehler erkennen. Probiers mal mit
Delphi-Quellcode:
function NFak(Val: Integer): Int64;
var i:Integer;
begin
  if Val < 0 then
    raise Exception.Create('Val muss größer/gleich 0 sein.');
  Result := 1;
  for i:= Val downto 1 do Result := Result * i;
end;
Was ist an deinem Code bitte rekursiv???

Ratte

Thorben86 10. Okt 2004 18:44

Re: Auch größere Fakultäten ausrechnen?
 
oh, stimmt, da is wohl was schiefgeaufen, dann muss ich den mal kurz umschreiben und dann nochmal probieren^^ :pale: :wall:

Fourcorner 10. Okt 2004 18:54

Re: Auch größere Fakultäten ausrechnen?
 
Solly,

was machst du, falls der Int64 zu klein wird (ist zwar groß, aber die Möglichkeit besteht ja).
Ich habes so gelöst, dass ich eine Array mit Integer gemacht habe, wobei jeder Arrayeintrag eine spätere Zahl darstellt. Man muss dann nurnoch den Array immer wieder durchgehen und falls eine Zahl des Array > 10 ist diese in dem nächsten Eintrag des Array übertragen (wie beim schrieftlichen Rechnen auch)

Phoenix 10. Okt 2004 19:21

Re: Auch größere Fakultäten ausrechnen?
 
Das hatte ich gerade letztens erst. Ich habe das mit der Mathe-Unit von Hagen gelöst, da man hier mit sehr grossen Zahlen rechnen kann. Sucht mal hier nach DecMath.

negaH 11. Okt 2004 11:26

Re: Auch größere Fakultäten ausrechnen?
 
@Phonix: und in dieser Version gibt es sogar eine spezielle Unit in Sourcen mit Namen "NComp.pas". Sie enthält insgesamt 7 verschiedene mathematische Verfahren um die Fakultät auszurechnen. Darunter auch den schnellsten Algorithmus, nach A. Schönhage. Natürlich gibts in den Sourcen auch noch weitere Funktionen der Kombinatorik.
Es ist also mit dieser DEC Version garnicht nötig eine eigene Factorial() Function zu programmieren, denn sie enthält schon alle bekannten Verfahren.

Heute abend werde ich hier mal eine kleine EXE reinstellen.

Gruß Hagen

negaH 11. Okt 2004 12:12

Re: Auch größere Fakultäten ausrechnen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi

hier die Anwendung zur Berechnung der Faktultät mit hilfe der verschiedenen Algorithmen.

Gruß Hagen


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