Ubungsblatt 4

Werbung
Algorithmen und Programmierung
Fachgebiet Telematik/Rechnernetze
WS 12/13
Prof. Dr.-Ing. Günter Schäfer
Übungsblatt 4
Aufgabe 1
2 Punkte
N
Eine Zahl n ∈ heißt perfekt oder vollkommen, wenn die Summe ihrer Teiler gleich
n ist. Dabei sind die Teiler echt kleiner als n. Beispielsweise ist 6 = 1 + 2 + 3 eine
perfekte Zahl.
Schreiben Sie ein JAVA-Programm, das alle perfekten Zahlen bis 5000 bestimmt.
Geben Sie diese an.
Aufgabe 2
3 Punkte
Formulieren Sie einen terminierenden Algorithmus in Pseudocode für die Division mit
Rest zweier Zahlen x , y ∈ , y 6= 0 mit dem Ergebnis z und Rest r (z , r ∈ ), so daß
für f (x , y) = (z , r ) gilt x = z · y + r mit 0 ≤ r < y.
Zulässige Grundoperationen sind die Addition und die Subtraktion zweier beliebiger
Zahlen aus sowie die Vergleichsoperationen ≤ und if ...then...else....
Der Algorithmus soll als rekursive Funktionsdefinition formuliert werden.
Machen Sie plausibel, daß Ihr Algorithmus für alle erlaubten Werte terminiert. Erläutern
Sie den Algorithmus an einem sinnvoll gewählten Beispiel Ihrer Wahl.
N
N
N
Aufgabe 3
2 Punkte
Es gilt 11 + 22 + 33 + · · · + 1010 = 10405071317.
Entwickeln
Sie einen Algorithmus in Java, der die letzten 10 Ziffern der Summe
P1000 i
1
2
3
1000
berechnet und geben Sie diese an.
i=1 i = 1 + 2 + 3 + · · · + 1000
Aufgabe 4
2 Punkte
Nach dem Gregorianischen Kalender (gilt seit 1583) wird der Wochentag aus einem
beliebigen Datum nach folgender Berechnungsvorschrift ermittelt:
T = J + ((J − 1) div 4) − ((J − 1) div 100) + ((J − 1) div 400) + D
J: Jahr
D: Tage bis zum zu berechnenden Datum
T* = T mod 7 → 0: Samstag, 1: Sonntag, 2: Montag, ... , 6: Freitag
Beispiel:
1. Januar 1994
D=1
T = 1994 + 498 - 19 + 4 + 1 = 2478
T* = 2478 mod 7 = 0 → Samstag
a) Schreiben Sie ein Java-Programm, das für den ersten Januar eines beliebigen
Jahres den Wochentag bestimmt.
b) Erweitern Sie das Programm für ein beliebiges Datum.
Hinweis: Schaltjahre sind alle Jahre, die durch 4 teilbar sind, mit Ausnahme der Jahre,
die durch 100, aber nicht durch 400 teilbar sind.
Aufgabe 5
4 Punkte
Implementieren Sie das Spiel des Lebens in Java. Bei diesem Spiel entwickelt sich eine
Zellmatrix von variabler Größe (n x n) rundenweise. Jede Zelle besitz einen Zustand
und kann entweder tot oder lebendig sein. Eine tote Zelle beginnt zu leben wenn
genau drei ihrer acht Nachbarn leben. Eine Zelle überlebt wenn zwei oder drei ihrer
Nachbarn leben. Dabei kann die Matrix als Torus interpretiert werden, das bedeutet
Zellen, welche sich eigentlich am Rand der Matrix befinden, haben ihre Nachbarn am
gegebüberliegenden Rand.
Kapseln Sie bei der Implementierung die Rundenfunktion in eine Methode
boolean[][] nextGeneration(boolean[][] cells).
Wie viele Runden lebt die folgende Zellmatrix bis sie wieder in einen alten Zustand
wechselt?
0
1
2
3
Aufgabe 6
0
1
2
3
true true false false
false false true false
true true false false
false true true false
6 Punkte
Gegeben ist folgende Funktion q(n) für n ∈
N:
q(n) = if n = 0 then 0 else q(n − 1) + n + n − 1 fi
a) Welche mathematische Operation wird durch die Funktion realisiert?
b) Führen Sie die Funktion für die Eingaben n=1, n=2 und n=3 aus. Vergessen
Sie nicht Zwischenschritte aufzschreiben!
c) Bitte formulieren Sie diese Funktion imperativ nicht-rekursiv in einer while−Schleife
mit einem einzelnen Anweisungsblock:
Q: var
input
while
output
do
od;
.
Herunterladen