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!