AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Berechnen der Fakultät: - Wert als Ergebnis??
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Newcomer91 · begonnen am 20. Jan 2011 · letzter Beitrag vom 20. Jan 2011
Antwort Antwort
Seite 1 von 2  1 2      
Newcomer91

Registriert seit: 9. Mär 2010
66 Beiträge
 
Delphi 2010 Professional
 
#1

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

  Alt 20. Jan 2011, 09:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

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

  Alt 20. Jan 2011, 09:12
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Newcomer91

Registriert seit: 9. Mär 2010
66 Beiträge
 
Delphi 2010 Professional
 
#3

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

  Alt 20. Jan 2011, 09:18
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.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

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

  Alt 20. Jan 2011, 09:36
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:
Label1.Caption := Format('%.0f', [1234.5678]); (Details zu Format siehe Hilfe)
  Mit Zitat antworten Zitat
Newcomer91

Registriert seit: 9. Mär 2010
66 Beiträge
 
Delphi 2010 Professional
 
#5

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

  Alt 20. Jan 2011, 10:13
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;
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 20. Jan 2011, 10:57
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

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

  Alt 20. Jan 2011, 11:02
Und ich würde eine Exception werfen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 20. Jan 2011, 11:06
Richtig
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 20. Jan 2011, 11:17
Und ich würde eine Exception werfen.
Dann würd ich sie auffangen und behandeln
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

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

  Alt 20. Jan 2011, 14:14
So was unverschämtes aber auch! Haben die Leute heute keinen Anstand mehr?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16: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