Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Berechnen der Fakultät: - Wert als Ergebnis?? (https://www.delphipraxis.net/157663-berechnen-der-fakultaet-wert-als-ergebnis.html)

Newcomer91 20. Jan 2011 08:11

Berechnen der Fakultät: - Wert als Ergebnis??
 
Guten Morgen,

ich habe ein Programm für Arithmetische Berechnungen geschrieben, welches unter anderem die Fakultät einer beliebigen positiven Zahl berechnet.

Es läuft bis ca. zahl=20 auch gut. Nur ab dann kommt es in unregelmäßigen Abständen dazu, dass die Ergebnisse mit negativen Vorzeichen ausgegeben werden.
Hier noch der Code:

Delphi-Quellcode:
implementation

Function Fakultaet(Zahl : Int64): Int64;
begin
  If Zahl = 0 then
    result := 1
  else
    result := Zahl * Fakultaet(Zahl - 1);
end;
Delphi-Quellcode:
procedure TfrmFak.btnCalculateClick(Sender: TObject);
begin
  frmFak.Label1.Caption := IntToStr(Fakultaet(StrToInt(frmFak.edtZahl.text)));
end;
Wo ist mein Fehler?

Gruß

New

Neutral General 20. Jan 2011 08:12

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Hallo,

Du hast keinen Fehler im Code. Problem ist einfach, dass die Zahlen zu groß werden. Das bedeutet die Int64-Variable läuft über und man landet im negativen Bereich.

Gruß
Neutral General

Newcomer91 20. Jan 2011 08:18

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Aber wenn ich teils größere Zahlen als z.B. 21 verwende, sind sie auch wieder positiv.

Int64 geht bis 65!, wo -9223372036854775808 angeblich rauskommen sollen, was aber falsch ist.

65 ! = 8.24765059 × 1090 wäre richtig.

hatte es auch schon mit Double als Zahlentyp probiert. Das funktioniert allerdings werden mir da die Ergebnisse nicht so schön ausgegegeben z.B. 53,3535535E53

Ich verstehe schon was das E bedeutet etc. aber ich hätte das gerne als normale ausgabe.

Satty67 20. Jan 2011 08:36

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Zitat:

Zitat von Newcomer91 (Beitrag 1075997)
Aber wenn ich teils größere Zahlen als z.B. 21 verwende, sind sie auch wieder positiv.

Ein einfacher Test zeigt das Verhalten (Werteinhalt) einer Variablen bei (mehrfachen) Überlauf:
Delphi-Quellcode:
var
  i : Integer;
  s : ShortInt;
begin
  for i := 125 to 260 do
  begin
    s := i;
    Memo1.Lines.Add(IntToStr(s));
  end;
Um Double-Werte zu formatieren, beitet sich die Funktion "Format" an:
Delphi-Quellcode:
Label1.Caption := Format('%.0f', [1234.5678]);
(Details zu Format siehe Hilfe)

Newcomer91 20. Jan 2011 09:13

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
habs nun vorerst so gelöst:

Delphi-Quellcode:
procedure TfrmFak.btnCalculateClick(Sender: TObject);
begin
  frmFak.Label1.Caption := FloatToStrf(Fakultaet(StrToFloat(frmFak.edtZahl.text)), ffgeneral, 6,3);
end;

Chemiker 20. Jan 2011 09:57

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Hallo Newcomer91,

ich würde bei der Fakultätsberechnung immer vorher prüfen, ob die Eingabe noch in den zulässigen Wertebereich der Variablen liegt.

Delphi-Quellcode:
If Zahl > 20 then
  {Fehler Ergebniss ist zu groß}
Bis bald Chemiker

Luckie 20. Jan 2011 10:02

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Und ich würde eine Exception werfen.

Chemiker 20. Jan 2011 10:06

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Richtig:-D

pustekuchen 20. Jan 2011 10:17

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
Zitat:

Zitat von Luckie (Beitrag 1076032)
Und ich würde eine Exception werfen.

Dann würd ich sie auffangen und behandeln :)

Luckie 20. Jan 2011 13:14

AW: Berechnen der Fakultät: - Wert als Ergebnis??
 
So was unverschämtes aber auch! Haben die Leute heute keinen Anstand mehr?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Seite 1 von 2  1 2      

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