Übung 2 - TU Ilmenau

Werbung
Algorithmen und Programmierung
Fachgebiet Telematik/Rechnernetze
WS 12/13
Prof. Dr.-Ing. Günter Schäfer
Übungsblatt 2
Aufgabe 1
4 Punkte
Schreiben Sie ein Java-Programm, das prüft, ob eine gegebene Zahl eine Primzahl
ist. Berücksichtigen Sie dabei die Eigenschaft, daß eine Primzahl nur durch eins und
durch sich selbst teilbar ist.
a) Als erster Lösungsansatz ist zu untersuchen, ob die Zahl durch einen ihrer
Vorgänger teilbar ist.
b) Geben Sie zu dieser Vorgehensweise Verbesserungen an, die die Effizienz des
Programms steigern!
Aufgabe 2
3 Punkte
Java kennt die drei Arten der Wiederholanweisung:
for(Init − Ausdr; Abbruchkrit; ausdr) anw;
while (ausdr) anw;
do anw while (ausdr);
Realisieren Sie für die Summation von 2+3+5+7+11+ ... +997 durch Anwendung
dieser drei Schleifenkonstrukte je eine Variante.
Aufgabe 3
3 Punkte
a) Berechnen Sie das Produkt x · y zweier natürlicher Zahlen x ≥ 0 und y ≥ 0
durch wiederholte Anwendung der Addition. Formulieren Sie einen Algorithmus im Pseudocode unter Verwendung einer Schleife. Überprüfen Sie dabei die
Abbruchbedingung am Anfang der Schleife.
b) Berechnen Sie die Potenz xy zweier natürlicher Zahlen x ≥ 0 und y ≥ 0 durch
wiederholte Anwendung der Multiplikation. Formulieren Sie einen Algorithmus
im Pseudocode unter Verwendung einer Schleife. Überprüfen Sie dabei die Abbruchbedingung am Ende der Schleife.
c) Wenn Sie für die Potenz die Multiplikation der ersten Aufgabe nutzen, wie
häufig überprüfen Sie insgesamt auf Schleifenabbruch?
Aufgabe 4
3 Punkte
Die Quersumme einer natürlichen Zahl errechnet sich durch Addition der einzelnen
Ziffern dieser Zahl. Erstellen Sie ein Java-Programm zur Berechnung der Quersumme
von natürlichen Zahlen, die Ihnen beim Aufruf des Programms als Kommandozeilenparameter (String) übergeben wird.
a) Berechnen Sie die Quersumme durch Zerlegung in Ziffern mit Hilfe des Datentyps java.lang.String.
b) Berechnen Sie die Quersumme der gleichen Zahl mathematisch, nachdem Sie
diese zu einem int umgewandelt haben (Hinweis: der modulo-Operator ist in
Java durch % implementiert und ganzzahlige Divisionen ergeben ganzzahlige
Ergebnisse (789/10 = 78).
Aufgabe 5
6 Punkte
Im Netz sieht man häufig, dass Emoticons, also :-) oder :-( eingesetzt werden, um
die eigene Stimmung auszudrücken. Durch die folgenden BNF-Gleichungen wird eine solche Sprache der Emoticons über den Terminalen {:, −, (, ), /, o} formal definiert:
1. <gesicht>::= <augen><nase><mund> | <augen><mund>
2. <augen>::= :
3. <nase>::= − | o
4. <mund>::=<gutestimmung> | <schlechtestimmung> | <sehrschlechtestimmung>
5. <gutestimmung>::= ) | <gutestimmung> )
6. <schlechtestimmung>::= /
7. <sehrschlechtestimmung>::= ( | <sehrschlechtestimmung> (
Welche der folgenden Emoticons sind korrekt (gemäß der Definition < gesicht >)?
Bitte geben Sie jeweils eine Begründung (die Herleitung über die Regeln) an!
a) :>(
b) :−/(
c) ::−///
d) −)
e) :))))
f ) : o)))
g) : ((((
h) :−o(
Bitte erweitern Sie die Sprache um zwinkernde Augen und optionale ,,Teufelshörnchen” (>).
Aufgabe 6
4 Punkte
Der reguläre Ausdruck ((0 + . . . + 9) + (0 + 1)(0 + 1 . . . + 9) + 2(0 + 1 + 2 + 3)) matcht
alle Zahlen von 0 bis 23 (mit oder ohne führender 0). Bitte schreiben Sie reguläre
Ausdrücke wie sie in der Vorlesung behandelt wurden, die
a) alle gültigen Daten der Form yyyy − mm − dd, also beispielsweise 2006 − 10 − 23
b) gültige Uhrzeiten der Form hh : mm : ss (23 : 05 : 42)
c) alle gültigen Email-Adressen aus Deutschland, Dänemark und der DDR (theoretischer Fall, wir wissen es!), nicht jedoch Dschibuti, Dominica und Algerien
matchen. Abstrahieren Sie gegebenenfalls sinnvoll!
Herunterladen