Programmieren 1 Praktikum 3 Prof.Dr.H.P.Weber Ziel: Sie sollen einfache und komplexere Kontrollstrukturen, den modularen Programmaufbau mit Funktionen, die Simulation von Zufallsereignissen und einfache Rekursion üben. 1 Einfaches Histogramm erstellen Schreiben Sie ein Programm, das zuerst sechs Zahlen (jede zwischen 1 und 79) von der Konsole einliest. Danach soll Ihr Programm für jede eingelesene Zahl eine Zeile mit entsprechend vielen aneinander hängenden Sternchen (*) ausgeben. Zum Beispiel soll für die eingegebenen Zahlen 4, 15, 23, 42, 16, 8 folgende Ausgabe erscheinen: **** *************** *********************** ****************************************** **************** ******** 2 Ganzzahlige rechtwinklige Dreiecke Es gibt rechtwinklige Dreiecke (d.h. Dreiecke für die der Satz des Pythagoras gilt), deren Seitenlängen alle ganze Zahlen sind. 3 • Schreiben Sie ein Programm, das alle diese Dreiecke in Form der Längen ihrer drei Seiten findet und diese drei Seitenlängen für jedes gefundene Dreieck ausgibt. Hierbei sollen nur Seitenlängen, die nicht größer als 500 sind, berücksichtigt werden. • Geben Sie zusätzlich die Anzahl der gefundenen Dreiecke aus. • Hinweis: Nutzen Sie drei geschachtelte for-Schleifen, die alle Möglichkeiten durchprobieren. Diese Vorgehensweise ist ein Beispiel für eine sogenannte "Brute Force"-Methode. Primzahlen Schreiben Sie ein Programm, das zwei positive ganze Zahlen von der Tastatur einliest und alle Primzahlen, die im Bereich zwischen diesen beiden Zahlen liegen, ausgibt. 4 Einfache Simulation und Analyse von Zufallsereignissen Schreiben Sie ein Programm, das simuliert, zwei Würfel 6 000 000mal zu werfen. Ergänzen Sie die Simulation um eine Häufigkeitstabelle, die angibt, wie oft die möglichen Augenzahlen eines Wurfes (2 bis 12) gefallen sind. 5 Euklidscher Algorithmus Der größte gemeinsame Teiler (greatest common divisor: gcd) zweier positiver ganzer Zahlen p und q kann durch den in der Vorlesung erläuterten Euklidschen Algorithmus bestimmt werden. • Schreiben Sie eine Funktion gcdIterative, die den größten gemeinsamen Teiler von p und q mit Hilfe einer Schleifenstruktur berechnet und zurückgibt. • Schreiben Sie eine Funktion gcdRecursive, die den größten gemeinsamen Teiler von p und q durch rekursive Aufrufe, die den Euklidschen Algorithmus realisieren, berechnet und zurückgibt. • Testen Sie Ihre Funktionen, indem Sie Werte für p und q einlesen und den zugehörigen größten gemeinsamen Teiler ausgeben. 6 Ägyptische Multiplikation (fakultativ) Schreiben Sie eine Funktion multIterative, die das Produkt zweier positiver ganzer Zahlen a und b auf folgende Weise berechnet: • Ausgehend von den der Funktion übergebenen Werten a und b wird eine Reihe von gleichartigen Schritten durchgeführt: o o Falls b ungeradzahlig ist, wird der Wert von a zur Variablen product addiert. Danach wird der Wert von a verdoppelt und der Wert von b halbiert (ohne Rest und ohne Rundung). Diese beiden Schritte werden solange wiederholt, bis b durch die fortlaufende Halbierung den Wert 0 annimmt. Die in product gebildete Summe ist dann gleich dem Produkt von a und b. • Hinweis: Realisieren Sie die Verdoppelung von a durch den Operator zur bitweisen Linksverschiebung << und die Halbierung von b ohne Rest und Rundung durch den Operator zur bitweisen Rechtsverschiebung >>. • Schreiben Sie ein Programm, das zwei positive ganze Zahlen von der Tastatur einliest und das mit der Funktion multIterative berechnete Produkt ausgibt. • Schreiben Sie eine zweite Funktion multRecursive, die die oben beschriebene Verdopplung, Halbierung und Summation durch rekursive Aufrufe von sich selbst realisiert. Testen Sie auch diese Funktion mit von der Tastatur eingegebenen Werten. 7 Vollkommene Zahlen (fakultativ) Eine natürliche Zahl wird eine vollkommene Zahl genannt, falls die Summe ihrer Faktoren (also der Zahlen, durch die die Zahl ohne Rest teilbar ist) gleich der Zahl selbst ist. Bei der Bildung der Summe wird die 1 eingeschlossen, aber nicht die Zahl selbst. Zum Beispiel ist 6 eine vollkommene Zahl, denn es gilt 6 = 1 + 2 + 3. • Schreiben Sie eine Funktion isPerfect, die bestimmt, ob eine ihr als Parameter übergebene positive ganze Zahl eine vollkommene Zahl ist. • Benutzen Sie diese Funktion in einem Programm, das alle vollkommenen Zahlen zwischen 1 und 1000 bestimmt und ausgibt. Geben Sie die Faktoren jeder vollkommenen Zahl mit aus, damit Ihr Ergebnis besser überprüft werden kann. • Fordern Sie die Rechenleistung Ihres Computers, indem Sie Zahlen testen, die deutlich größer als 1000 sind.
© Copyright 2024 ExpyDoc