top of page
Boys at School

Werden Sie ein Teil von Lehrer - Alltag

GPT5 - Dokument- und Code-Modus

[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

Mit 0 von 5 Sternen bewertet.
Noch keine Ratings

Rating hinzufügen
bottom of page