Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Dr. Werner Struckmann 23. November 2012 Programmieren I 4. Übungsblatt Hinweis: Ihre Lösung der Pflichtaufgabe dieses Übungsblatts müssen Sie bis spätestens zum 2. Dezember 2012 auf der Web-Seite http://abgabe.yafido.de abgeben. Beachten Sie, dass Sie Ihre Lösung auch Ihrem Tutor erläutern müssen. Halten Sie sich bei der Programmierung an die in der Vorlesung vorgestellten Richtlinien zur Formatierung von Java-Programmen. Auf der Internetseite zu dieser Veranstaltung finden Sie eine Zusammenstellung dieser Richtlinien. Kommentieren Sie Ihre Lösung der Pflichtaufgabe. Der Kommentar muss Ihren Namen, Ihre Matrikelnummer und Ihre Übungsgruppe sowie eine Beschreibung Ihrer Lösung enthalten. Auf der Abgabeseite finden Sie eine Möglichkeit, die Formatierung Ihrer Lösung zu checken. Aufgabe 25: Der Algorithmus 1. Lies den Wert von n ein. 2. Setze i auf 2. 3. Solange i < 3(n + 1) ist: a. Erhöhe i um 3. b. Gib (2i + 1)2 aus. soll auf drei verschiedene Arten implementiert werden: Schreiben Sie jeweils ein JavaProgrammstück, das diesen Algorithmus als while-, als for- und als do-Schleife realisiert. Sämtliche Programmstücke sollen die gleiche Ausgabe erzeugen. Aufgabe 26: Gegeben sei eine natürliche Zahl n ∈ N, n ≥ 1. Mit σ(n) bezeichnen wir die Summe aller positiven Teiler von n. Beispielsweise ist σ(12) = 1 + 2 + 3 + 4 + 6 + 12 = 28. Schreiben Sie ein Java-Programm, das diejenige dreistellige Zahl k berechnet und ausgibt, für die σ(k) maximal ist. Aufgabe 27: Die Wahrscheinlichkeit p(n), dass mindestens zwei Personen aus einer Gruppe von n Menschen am gleichen Tage Geburtstag haben, beträgt 365 − n + 1 365 364 363 · · · ... · . p(n) = 1 − 365 365 365 365 Schreiben Sie ein Java-Programm, um die Wahrscheinlichkeiten p(2), . . . , p(60) zu berechnen und auszugeben. Wie viele Personen müssen der Gruppe mindestens angehören, damit die gesuchte Wahrscheinlichkeit größer als 50 % ist? Aufgabe 28: Schreiben Sie ein Programm, das mithilfe von geschachtelten Schleifen das folgende Zahlendreieck auf dem Bildschirm ausgibt: 1 2 3 4 1 2 3 1 2 1 Die Anzahl der Zeilen – im Beispiel 4 – soll der Benutzer vorher eingeben. Aufgabe 29: Die Dezimalziffern einer natürlichen Zahl n, n ≥ 1, werden einzeln quadriert und addiert. Anschließend wird mit der entstandenen Summe genauso verfahren. Die Ausgangszahl n heißt fröhlich, wenn man bei diesem Vorgehen schließlich auf die Zahl 1 stößt, sonst traurig. Beispielsweise ist 7 eine fröhliche Zahl: 7: 49: 97: 130: 10: 72 42 + 92 92 + 72 12 + 32 + 02 12 + 02 = 49 = 97 = 130 = 10 = 1 Schreiben Sie ein Java-Programm, das alle fröhlichen Zahlen zwischen einer Unter- und einer Obergrenze berechnet und die zugehörigen Folgen ausgibt. Der Dialog soll folgendermaßen ablaufen: Bitte geben Sie die untere Grenze ein: 5 Bitte geben Sie die obere Grenze ein: 30 7 -> 49 -> 97 -> 130 -> 10 -> 1 10 -> 1 13 -> 10 -> 1 19 -> 82 -> 68 -> 100 -> 1 23 -> 13 -> 10 -> 1 28 -> 68 -> 100 -> 1 Hinweis: Für traurige Zahlen führt die Folge schließlich auf die Zahl 4. –2– Aufgabe 30: Seit dem 1. Januar 2007 enthalten alle Bücher eine 10- und eine 13-stellige Internationale Standard-Buchnummer, kurz ISBN genannt. Beispielsweise ist 3-8274-16310 eine gültige 10-stellige ISBN. Der Ziffer 3 können wir entnehmen, dass das Buch im deutschsprachigen Raum erschienen ist. Die Zifferngruppe 8274 gibt den Verlag (in diesem Fall Elsevier-Verlag) an. Die dritte Zifferngruppe, hier 1631, identifiziert das betreffende Buch. Die letzte Ziffer ist eine sogenannte Prüfziffer. Mithilfe der Prüfziffer können z. B. einzelne fehlerhafte Ziffern oder zwei vertauschte Ziffern erkannt werden. Die Prüfziffer wird folgendermaßen berechnet: Man multipliziert die – von links – erste Ziffer mit 10, die zweite mit 9, die dritte mit 8 und entsprechend weiter mit 7, 6, 5, 4, 3 und 2. Die so gewonnenen Produkte werden addiert. Die Differenz zur nächsten durch 11 teilbaren Zahl ist die Prüfziffer. Wenn die Prüfziffer die Zahl 10 ergibt, nimmt man den Buchstaben X. Die ISBN 3-486-57938-X ist hierfür ein Beispiel. Die obige ISBN lautet in der 13-stelligen Form 978-3-8274-1631-5. Bei einer 13-stelligen ISBN ist die erste Zifferngruppe entweder 978 oder 979. Die zweite, dritte und vierte Zifferngruppe stimmen mit den ersten drei Gruppen der 10-stelligen ISBN überein. In diesem Fall wird die Prüfziffer wie folgt berechnet: Man multipliziert die – von links – erste Ziffer mit 1, die zweite mit 3, die dritte mit 1 und abwechselnd weiter mit 3, 1, 3, 1, 3, 1, 3, 1 und 3. Die so gewonnenen Produkte werden addiert. Die Differenz zur nächsten durch 10 teilbaren Zahl ist die Prüfziffer. Ihre Aufgabe ist es ein Programm zu schreiben, das auf der Kommandozeile als Parameter Zeichenfolgen erhält und überprüft, ob die jeweilige Zeichenfolge eine gültige ISBN darstellt. Beispiel: javac Isbn.java java Isbn 3827416310 348657938X 9783827416315 3411052343 3827416310 ist eine gültige ISBN. 348657938X ist eine gültige ISBN. 9783827416315 ist eine gültige ISBN. 3411052343 ist keine gültige ISBN. Aufgabe 31: Was passiert bei der Ausführung des folgenden Programms? public class BrowserTest { public static void main(String[] args) { System.out.print("BrowserTest"); http://www.google.com; System.out.println("Suchbegriff"); } } –3– Pflichtaufgabe 32: In der Informatik werden häufig Zufallszahlen benötigt, z. B. um Simulationen durchzuführen. Einer der ersten Algorithmen zur Erzeugung von Pseudozufallszahlen wurde von John von Neumann in der 1940er Jahren entwickelt. Dieser Algorithmus wird Mid-Square-Methode genannt. Er beginnt mit einer Zahl, die als erste Zufallszahl genommen wird. Die Zahl wird quadriert. Anschließend werden die mittleren Ziffern der Quadratzahl als nächste Zahl verwendet. Falls die Quadratzahl nicht doppelt so lang ist, müssen vorne führende Nullen eingefügt werden. Als Beispiel betrachten wir die ersten Schritte des Algorithmus mit der Anfangszahl 4637: 4637 5017 1702 8968 4250 625 3906 --> --> --> --> --> --> --> 21501769 25170289 02896804 80425024 18062500 00390625 ... = = = = = = 4637*4637 5017*5017 1702*1702 8968*8968 4250*4250 625* 625 Meistens wiederholen sich nach relativ wenigen Schritten die Zufallszahlen. Aus diesem Grund wird der Algorithmus heute kaum noch verwendet. Mit der Anfangszahl 4637 erzeugt die Mid-Square-Methode die folgenden Pseudozufallszahlen 4637, 5017, 1702, 8968, 4250, 625, 3906, . . . , 6100, 2100, 4100, 8100, 6100, . . . , Dann wiederholen sich die Zahlen 6100, 2100, 4100, 8100, . . . Je nachdem, ob die Anfangszahl 4637 mitgezählt wird oder nicht, besteht die Folge aus 47 oder 46 verschiedenen Zufallszahlen. Schreiben Sie ein Java-Programm, das den Algorithmus auf alle vierstelligen Zahlen, d. h. auf alle Anfangszahlen aus dem Bereich 1000, . . . , 9999, anwendet. Ihr Programm soll ausgeben, wie viele verschiedene Zufallszahlen maximal von einer Anfangszahl erzeugt werden können. Außerdem soll Ihr Programm diese Folge ausgeben. Ob Sie die Anfangszahl zu den Zufallszahlen mitzählen oder nicht, bleibt Ihnen überlassen. Falls es mehrere Anfangszahlen geben sollte, die die maximale Anzahl der Zufallszahlen erzeugen, dürfen Sie eine auswählen. –4–