04. Übungsblatt - Technische Universität Braunschweig

Werbung
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–
Herunterladen