Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fakultät berechnen (https://www.delphipraxis.net/54979-fakultaet-berechnen.html)

Lehmar 14. Okt 2005 13:11


Fakultät berechnen
 
Ich wollte ein Programm schreiben bei dem man eine Zahl eingeben kann
und was dann auf Button druck die Fakultät berechnet bei nietregen
Zahlen funktioniert es ganz gut, doch bei Zahlen über 70 bekomme ich nur ne
Fehlermeldung von wegen „Gleitkommazahl“ kann mir jemand helfen hier ist der
Quellcode.

Delphi-Quellcode:
var
  Form1: TForm1;
  n : integer;
  F : Double;
  k : Integer;
implementation

{$R *.DFM}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;

function Fakult1(k : integer): Double;
var
i : Integer;
a : Integer;
begin
result := 1;
a := i;
for a := 2 to k do
result := a*result;
end;

function Fakult2(k : integer): Double;
begin
if k = 0 then
Fakult2 := 1 else Fakult2 := k*Fakult2(k-1);
end;

procedure Fakult3(k: Integer; var f : double);
begin
if k=0 then f:=1 else
begin
Fakult3(k-1,f);
f:=k*f;
end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
k := Spinedit1.Value;
Fakult1(k);
Fakult2(k);
Fakult3(k,f);
Edit1.Text := Floattostr(F);
end;
[edit=alcaeus]Delphi-Tags eingefuegt. Spaet, aber doch... Mfg, alcaeus[/edit]

flomei 14. Okt 2005 13:15

Re: Fakultät berechnen
 
Umklammer deinen Quelltext bitte zunächst mit
Delphi-Quellcode:
 und
Danke!

MfG Florian :hi:

Lehmar 14. Okt 2005 13:18

Re: Fakultät berechnen
 
Wenn es denn hilft...


Delphi-Quellcode:
var
  Form1: TForm1;
  n : integer;
  F : Double;
  k : Integer;
implementation

{$R *.DFM}

procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;

function Fakult1(k : integer): Double;
var
i : Integer;
a : Integer;
begin
result := 1;
a := i;
for a := 2 to k do
result := a*result;
end;

function Fakult2(k : integer): Double;
begin
if k = 0 then
Fakult2 := 1 else Fakult2 := k*Fakult2(k-1);
end;

procedure Fakult3(k: Integer; var f : double);
begin
if k=0 then f:=1 else
begin
Fakult3(k-1,f);
f:=k*f;
end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
k := Spinedit1.Value;
Fakult1(k);
Fakult2(k);
Fakult3(k,f);

flomei 14. Okt 2005 13:20

Re: Fakultät berechnen
 
Es hätte gereicht wenn du den ersten Beitrag editiert hättest... :roll:

MfG Florian :hi:

BeerBear 14. Okt 2005 13:23

Re: Fakultät berechnen
 
Die Fakultät von 70 ist eine 101-stellige Zahl.

Dann wird wohl dein Ergebnis einfach zu groß sein.

hanselmansel 14. Okt 2005 13:23

Re: Fakultät berechnen
 
HiHo,

aus von flomei genanntem Grund habe ich mir die Berechnung deiner Fakultäten nicht auf Richtigkeit hin angesehen, aber beim Dechiffrieren des unformatierten Codes fiel mir auf, dass du
  1. nichts mit den ersten beiden Funktionen anstellst, ausser sie aufzurufen, und
  2. 70! schon so groß sein dürfte, dass Double das Ergebnis nicht mehr aufnehmen kann.

Mit vielen Grüßen (aus dem Krankenbett :cry: )

hanselmansel

Lehmar 14. Okt 2005 13:28

Re: Fakultät berechnen
 
Meint ihr echt es wäre zu groß...
Aber irgendwie muss es gehen mit dem Taschenrechner (unter Zubehör) geht es ja auch
und das Ergebnis des Rechenaufwandes ist einfach faszinierend!
Habt ihr mit ihm schon einmal 100000000 Fakultät (n!) gerechnet?

Dax 14. Okt 2005 13:33

Re: Fakultät berechnen
 
Zitat:

Zitat von Lehmar
100000000 Fakultät (n!) gerechnet?

Ich bin doch nicht bescheuert unsterblich ;)

hanselmansel 14. Okt 2005 13:40

Re: Fakultät berechnen
 
Okey, Double geht bis irgendwas mit 10^300. 70! ist aber nur etwas größer als 10^100. Sollte also eigentlich passen. An dieser Stelle wäre also die genaue Fehlermeldung von Vorteil.

BeerBear 14. Okt 2005 14:08

Re: Fakultät berechnen
 
Stimmt, Double kann einen Wert zwischen 5.0x10^-324 und 1.7x10^308 annehmen.
Aber wenns mit kleineren Zahlen funzt, wirds wohl in irgendeiner Weise an der größe der Zahl liegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Seite 1 von 3  1 23      

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