FH Darmstadt 
FB Informatik 
Prof.Dr. H.P.Weber
Programmieren I 
Praktikum
3

Ziel: Sie sollen den modularen Programmaufbau mit Funktionen, die Simulation von Zufallsereignissen und einfache Rekursion üben. 

1    Verwenden einer einfachen Funktion

  • Schreiben Sie eine Funktion, die die Uhrzeit als drei integer-Argumente übernimmt (hour, minute, second) und die Anzahl der Sekunden seit 0 Uhr zurückgibt.
  • Benutzen Sie diese Funktion, um die Zeitspanne in Sekunden zwischen zwei Zeitpunkten (am gleichen Tag) zu berechnen.

2    Einfache Simulation und Analyse von Zufallsereignissen

  • Schreiben Sie ein Programm, das simuliert, zwei Würfel 6000mal zu werfen. 
  • Ergänzen Sie die Simulation um eine Häufigkeitstabelle, die angibt, wie oft die möglichen Augenzahlen eines Wurfes (2 bis 12) gefallen sind. 

3    Vollkommene Zahlen 

  • Eine ganze Zahl wird eine vollkommene Zahl genannt, falls die Summe ihrer Faktoren (also der Zahlen, durch die die Zahl ohne Rest teilbar ist) gleich der Zahl selbst ist. Bei der Bildung der Summe wird die 1 eingeschlossen, aber nicht die Zahl selbst. Zum Beispiel ist 6 eine vollkommene Zahl, denn es gilt 6 = 1 + 2 + 3.
  • Schreiben Sie eine Funktion isPerfect, die bestimmt, ob ihr Parameter number eine vollkommene Zahl ist.
  • Benutzen Sie diese Funktion in einem Programm, das alle vollkommenen Zahlen zwischen 1 und 1000 bestimmt und ausgibt. Geben Sie die Faktoren jeder vollkommenen Zahl mit aus, damit Ihr Ergebnis besser überprüft werden kann.
  • Fordern Sie die Rechenleistung Ihres Computers, indem Sie Zahlen testen, die deutlich größer als 1000 sind. 

4    Größter gemeinsamer Teiler - rekursiv

  • Der größte gemeinsame Teiler (greatest common divisor: gcd) zweier ganzer Zahlen x und y ist die größte ganze Zahl, die x und y ohne Rest teilt.
  • Schreiben Sie eine rekursive Funktion gcd, die den größten gemeinsamen Teiler von x und y zurückgibt. Nutzen Sie dabei folgende rekursive Beziehung:
  • Falls y gleich 0 ist, dann ist gcd(x,y) gleich x.
    Sonst gilt: gcd(x,y) ist gcd(y,x%y).
  • Testen Sie Ihre Funktion, indem Sie Werte für x und y einlesen und den zugehörigen größten gemeinsamen Teiler ausgeben.

5    Ägyptische Multiplikation (fakultativ)

  • Schreiben Sie eine Funktion multIterative, die das Produkt zweier ganzer Zahlen a und b auf folgende Weise berechnet.
    Ausgehend von den der Funktion übergebenen Werten a und b wird eine Reihe von gleichartigen Schritten durchgeführt:
    • Falls b ungeradzahlig ist, wird der Wert von a zur Variablen product addiert.
    • Danach wird der Wert von a verdoppelt und der Wert von b halbiert (ohne Rest und ohne Rundung).
    Diese beiden Schritte werden solange wiederholt, bis b durch die fortlaufende Halbierung den Wert 0 annimmt. Die in product gebildete Summe ist dann gleich dem Produkt von a und b.
  • Hinweis: Realisieren Sie die Verdoppelung von a durch den Operator zur bitweisen Linksverschiebung << und die Halbierung von b ohne Rest und Rundung durch den Operator zur bitweisen Rechtsverschiebung >>.
  • Schreiben Sie ein Programm, das zwei ganze Zahlen von der Tastatur einliest und das mit der Funktion multIterative berechnete Produkt ausgibt.
  • Schreiben Sie eine zweite Funktion multRecursive, die die oben beschriebene Verdopplung, Halbierung und Summation durch rekursive Aufrufe von sich selbst realisiert. Testen Sie auch diese Funktion mit von der Tastatur eingegebenen Werten.