GPT5 - Dokument- und Code-Modus
- Pauker 61

- 10. Sept.
- 2 Min. Lesezeit
[mode: reasoning_effort=mittel | search_budget=LOW] - Code/Tabellen immer in Code-Fences. - Kommentare im Code ausführlich, aber Antworttext kompakt. - Kein Nachfragen, sofort best-effort Struktur liefern. -
Ergebnis: lauffähiger Code + TL;DR für Einsatzbereich. Schreibe eine Python-Funktion zur Berechnung der Fakultät.
Kurz: Iterative, sichere Fakultätsfunktion für Lazarus/Free Pascal (QWord, gültig bis 20!). Enthält Eingabekontrolle und Demo-Programm.
program FactorialDemo;
{$mode objfpc}{$H+}
{-----------------------------------------------------------------------------
Lazarus/Free Pascal: Fakultät berechnen
- Datentyp: QWord (0..2^64-1) -> 20! passt hinein, 21! nicht mehr.
- Iterative Implementierung: stabiler als rekursiv (kein Stack-Overflow).
- Eingabekontrollen:
* Negative Werte sind bei QWord ausgeschlossen, aber wir prüfen Logik.
* Obergrenze 20 wird strikt erzwungen; darüber Exception.
- Demo: Ausgabe von 0! bis 10! und optionaler Kommandozeilenwert.
- Kompilieren: fpc FactorialDemo.pas oder in Lazarus als Konsolenprojekt.
------------------------------------------------------------------------}
uses
SysUtils;
{ Berechnet n! für 0 <= n <= 20 als QWord.
Warum Grenze bei 20?
20! = 2_432_902_008_176_640_000 (passt in 64-bit unsigned)
21! überschreitet QWord.MaxValue.
Algorithmus:
- Spezialfall n=0 -> 1 (Definition der Fakultät)
- Laufvariable i von 2..n und Akkumulator result.
Fehlerbehandlung:
- Bei n > 20 wird eine Exception ausgelöst, um Überläufe zu verhindern.
}
function Factorial(const n: QWord): QWord;
var
i: QWord;
acc: QWord;
begin
if n > 20 then
raise ERangeError.Create('Fakultät nur bis einschließlich 20 berechenbar (QWord-Grenze).');
{ 0! und 1! sind per Definition 1 }
if n <= 1 then
begin
Result := 1;
Exit;
end;
acc := 1;
for i := 2 to n do
begin
{ Da n <= 20 garantiert ist, kann hier kein Überlauf auftreten. }
acc := acc * i;
end;
Result := acc;
end;
procedure Demo;
var
k: Integer;
begin
Writeln('Demo: Fakultäten 0..10 mit QWord');
for k := 0 to 10 do
Writeln(k, '! = ', Factorial(k));
{ Optional: ersten Kommandozeilenparameter auswerten }
if ParamCount >= 1 then
begin
try
{ StrToQWord wirft bei ungültiger Eingabe eine Exception }
Writeln(ParamStr(1), '! = ', Factorial(StrToQWord(ParamStr(1))));
except
on E: Exception do
Writeln('Fehler: ', E.Message);
end;
end;
end;
begin
Demo;
end.
TL;DR: Iterative Fakultätsfunktion Factorial(n: QWord) für Lazarus; sicher bis n=20, darüber Exception, inkl. kleinem Konsolen-Demo. Ideal für Unterricht und grundlegende Algorithmenübungen.










Kommentare