Faktorisierung: Problemanalyse


Wir wollen ein Programm entwickeln, das einen Benutzer in die Lage setzt, zu beliebig vielen natürlichen Zahlen jeweils die Zerlegung in Primfaktoren berechnen und anzeigen zu lassen. Da wir aus der Mathematik wissen, daß das Problem grundsätzlich eindeutig lösbar ist, konzentrieren wir uns zuerst auf die Benutzerführung und verschieben die Frage der Berechnung auf später.

Das Programm soll sich mit einem Begrüßungstext melden und dann wiederholt Zahlen vom Benutzer abrufen, deren Faktorzerlegung zu berechnen ist. Durch Eingabe einer Null als Abbruchkriterium soll der Benutzer anzeigen können, daß er keine weiteren Berechnungen wünscht; dann soll das Programm sich geordnet abmelden. Dieses Verhalten können wir jetzt bereits ausprogrammieren, wenn wir die eigentliche Berechnung an einen anderen Programmbaustein delegieren.

MODULE Faktorisiere;
  (* Program zur Faktorisierung natuerlicher Zahlen *)
  (* Vorlesung EI1 WS 1999/2000 *)
  (* Klaus Lagally, 06.11.1999  *)

FROM InOut IMPORT WriteLn, WriteString, ReadCard;
FROM Zahlen IMPORT Zerlege;

VAR Zahl: CARDINAL; (* zu faktorisieren *)

PROCEDURE Prompt;
  (* fordert die naechste Eingabe vom Benutzer an  *)
  (* und legt sie in die CARDINAL-Variable "Zahl" *)
BEGIN WriteString("gib eine natuerliche Zahl oder 0 ein"); 
   WriteLn;
   ReadCard(Zahl);
END Prompt;

BEGIN (* hier beginnt der Ablauf des Hauptprogramms *)
   WriteString("Faktorisieren von natuerlichen Zahlen"); 
   WriteLn;
   WriteString("Eingabe von Null bewirkt: Programmende!"); 
   WriteLn;
   Prompt; (* fordert naechste Eingabe nach "Zahl" an *)

   WHILE Zahl <> 0
   DO Zerlege(Zahl); (* berechne und drucke die Zerlegung *)
      Prompt; (* naechste Eingabe nach "Zahl" anfordern *)
   END;

   WriteString("Auf Wiedersehen!"); WriteLn;
END Faktorisiere.
Die eigentliche Berechnung haben wir in ein noch zu definierendes Bibliotheks-Modul "Zahlen" abgeschoben. Das Programm selbst verwendet die Tatsache der Faktorisierung gar nicht und kann somit, mit den nötigen Anpassungen, für andere wiederholte Berechnungen wiederverwendet werden.
zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36