Fakultät Programm

T

Trekkii

Gast
Hallo zusammen,

ich habe das folgende Programm zur Berechnung der Fakultät in Pascal geschrieben. Wenn ich als einzulesende Zahl die 8 eingebe, wird die Berechnung nicht richtig ausgeführt. Hat jemand eine Idee, woran das liegen könnte?

Danke und Grüße

[\code]
program Fakultaet (input, output);
{ berechnet die Fakultaet einer einzulesenden
* natuerlichen Zahl }

type
tNatZahl = 0..maxint;

var
i : tNatZahl; { Laufvariable }
Zahl, { einzulesende Zahl }
Ergebnis : integer;

begin
write ('Fuer welche Zahl soll die Fakultaet ',
'berechnet werden? ');
readln (Zahl);
if Zahl < 0 then
writeln ('Fuer negative Zahlen ist die ',
'Fakultaet nicht definiert.')
else
begin
Ergebnis := 1; { Initialisierung }
for i := 1 to Zahl do
Ergebnis := Ergebnis * i;
writeln ('Die Fakultaet von ', Zahl, ' lautet ',
Ergebnis, '.')
end
end. { Fakultaet }


Code:
 
Zuletzt bearbeitet:
Für 8! weiß ich es nicht, aber deine Methode kann auch für 0! kein korrektes Ergebnis liefern.
 
@Plutos

Moin,

also für 0! bis 7! werden bei mir die korrekten Werte ausgegeben. Ab 8! macht das Programm alles, aber keine Fakultät Berechnung :(
 
Vielleicht beginnst du erstmal den Code richtig als Code zu markieren, damit man das mal etwas besser lesen kann...
 
Müsst doch funktionieren außer ich verschau mich?
Hab das mal in etwa nachgecoded in C#:
Code:
int n = Convert.ToInt32(Console.ReadLine());
int erg = 1;

for (int i = 1; i <= n; i++)
{
   erg = erg * i;
}

Console.WriteLine("Ergebnis: " + erg.ToString());
Console.ReadKey();

P.S.: Lol 16bit Integer? Kann natürlich sein.
 
Zuletzt bearbeitet:
@Powerfx: Das müsste die Lösung sein, stimmt!

@Zerstoerer jo stimmt ;)

@Theobald93: Glaub der Fehler lag in der Bereichsüberschreitung von integer, wie Powerfx angemerkt hatte.
 
Da ich nie so Mathe-Funktionen brauche, ist das völlig ausreichend xD
Und wenn dann halt Int64 :p
 
Trekkii schrieb:
@Plutos

Moin,

also für 0! bis 7! werden bei mir die korrekten Werte ausgegeben. Ab 8! macht das Programm alles, aber keine Fakultät Berechnung :(
Wirklich? Dieser Code liefert bei Eingabe "0" also für 0! den Wert 1? Ich hätte eher entweder einen Fehler bei der Schleife [for i=1 to 0 do...] oder das Ergebnis 0 erwartet.
edit: okay, bei 0 wird die Schleife wahrscheinlich gar nicht erst durchlaufen. Das Ergebnis scheint mir dann aber mehr zufällig richtig zu sein. ;)
 
Zuletzt bearbeitet von einem Moderator:
Ist doch richtig. 0! = 1
Damit geht er gar nicht in die Schleife und es bleibt bei der Initialisierung.
 
Zurück
Oben