Übungen zu C++ Kapitel 3 Aufgabe 1 Gib jeweils den Funktionskopf für die folgenden Funktionen an! a) Die Funktion Hypotenuse übernimmt zwei double-variable Seite1 und Seite2 und liefert ein double-ergebnis zurück. b) Die Funktion Minimum soll aus den drei integer-werten i1, i2, i3 den kleinsten integer- Wert zurückliefern. c) Die Funktion int2double soll aus einer integer-zahl i eine double-zahl machen. Aufgabe 2 Gib jeweils einen Funktionsprototyp an: a) Für die Funktion in 1a) b) Für die Funktion in 1b) c) Für die Funktion in 1c) Aufgabe 3 Suche in jedem der Programmausschnitte die Fehler und gib mögliche Korrekturen an. a) produkt * = c; int g(void) cout «" Ich bin im Innern der Funktion g" «endl; int h(void) cout «" Ich bin im Innern der Funktion h" «endl; b) int Summe(int x, int y) int result ; result = x + y; c) void f(double a) ; int a; cout «a «endl ; 1
d) void Produkt(void) int a,b,c, Ergebnis; cout «" Gib drei ganze Zahlen ein: "; cin» a» b» c; Ergebnis = a * b * c; cout «" Das Produkt ist " «Ergebnis; return Ergebnis; Aufgabe 4 Die mathematische Standardfunktion floor(x) liefert die größte ganze Zahl (als double Größe) zurück, die kleiner oder gleich x ist. Damit können Zahlen auf eine bestimmte Zahl von Dezimalen gerundet werden. So rundet z. B. die Anweisung y = floor (x * 100 + 0.5) /100 auf zwei Dezimalstellen. Schreibe ein C++ Programm, das vier Funktionen definiert, welche jeweils eine Zahl x runden: a) runde2ganz(zahl) b) runde2zehntel(zahl) c) runde2hundertstel(zahl) d) runde2tausendstel(zahl) Für jede eingegebene Zahl soll das Programm auf eine ganze Zahl, eine, zwei und drei Dezimalstellen runden. Aufgabe 5 a) Warum ist die rand-funktion hilfreich, um Glücksspiele zu simulieren? b) Wozu ist die srand-funktion gut? c) Warum muss man oft die Zufallszahlen von rand z. B. mit der %-Funktion modifizieren? Aufgabe 6 Schreibe Anweisungen, welche Integer-Zufallszahlen der Variablen n in den angegebenen Bereichen zuweisen. a) 1 n 2 b) 1 n 100 c) 0 n 9 d) 3 n 11 2
Aufgabe 7 Schreibe eine Funktion, welche auf dem Bildschirm ein Quadrat aus * darstellt. Die Breite des Quadrats (Anzahl der *), soll der Funktion mit dem integer Parameter Seite übergeben werden. Beispiel: Wenn Seite den Wert 4 hat, soll die Funktion folgendes Quadrat darstellen: Aufgabe 8 Schreibe eine Funktion, welche die kleinste von drei double-zahlen zurückliefert. Aufgabe 9 Eine natürliche Zahl n nennt man eine vollkommene Zahl, wenn ihre Teilersumme, die Zahl selbst ausgenommen, gleich n ist. Beispiel: 6 = 1 + 2 + 3. Schreibe eine Funktion vollkommen, die überprüft, ob eine Zahl vollkommen ist. Bestimme mit einem C++ Programm alle vollkommenen Zahlen zwischen 1 und 1000. Aufgabe 10 Primzahlen sind solche natürlichen Zahlen n 1, die nur sich selbst als Teiler haben (2, 3, 5, 7, 11, 13, 117, 19, 23, 29, 31, 37,... ). Schreibe eine Funktion, die überprüft, ob eine natürliche Zahl prim ist. Verwende diese Funktion in einem C++ Programm, das alle Primzahlen zwischen 1 und 10000 ausgibt. Hinweis: Wie viele Zahlen sind zu testen, um sicher zu gehen, dass alle Primzahlen gefunden wurden? Aufgabe 11 Schreibe eine Funktion, die eine integer Zahl mit umgekehrter Ziffernfolge zurückgibt. Beispiel: Die Zahl 7632 wird als 2367 zurückgegeben. Aufgabe 12 Schreibe eine Funktion ggt, welche den größten gemeinsamen Teiler zweier natürlicher Zahlen bestimmt. 3
Aufgabe 13 Schreibe ein Programm, das den Münzwurf simuliert. Die Münze soll hundertmal geworfen werden. Bei jedem Wurf soll Kopf bzw. Zahl ausgegeben werden. Am Schluss soll die Anzahl für Kopf und Zahl ausgegeben werden. Das Programm soll die Funktion MuenzWurf aufrufen, welcher kein Parameter übergeben wird, die aber die Zahlenwerte 0 bzw. 1 zurückliefert. Aufgabe 14 Schreibe für Grundschüler ein C++ Programm zur Einübung der Multiplikation der ganzen Zahlen 1, 2,... 9. Verwende die rand Funktion. Mache fünf Beispiele und zähle die richtigen Ergebnisse. Sind alle Ergebnisse richtig, dann lobe den Schüler mit Sehr gut, andernfalls ermuntere ihn zu weiteren Übungen mit Du brauchst noch mehr Übungen!. Aufgabe 15 Ratespiel Schreibe ein C++ Programm, das folgendes Ratespiel simuliert: Das Programm bestimmt eine Zufallszahl zwischen 1 und 1000. Der Spieler rät eine Zahl. Das Programm meldet: Bingo, Treffer, deine Zahl ist zu klein, deine Zahl ist zu groß. Solange der Spieler die Zahl nicht erraten hat, soll das Programm in einer Schleife das Ratespiel weiterführen. Aufgabe 16 Modifiziere das Ratespiel in 15) so, dass das Programm die Anzahl der Rateversuche addiert. Wenn der Spieler nicht mehr als 10 Versuche braucht, dann soll Du kennst den Trick oder hast Glück gehabt! ausgegeben werden. Wenn der Spieler mehr als 10 Versuche braucht, dann soll Du müsstest es eigentlich schneller schaffen! ausgegeben werden. Aufgabe 17 Turm von Hanoi Nach einer alten Legende standen einmal drei goldene Säulen vor einem Tempel in Hanoi. Auf einer Säule befanden sich n=100 Scheiben, jedesmal eine kleinere auf einer größeren Scheibe. Ein alter Mönch bekam die Aufgabe, den Scheibenturm von Säule 1 nach Säule2 unter folgenden Bedingungen zu transportieren: Es darf jeweils nur die oberste Scheibe von einem Turm genommen werden. Es darf niemals eine größere Scheibe auf einer kleineren liegen. Wenn der Mönch seine Arbeit erledigt habe, so berichtet die Legende weiter, dann werde das Ende der Welt kommen. Belastet mit dieser schweren Aufgabe setzte sich der alte Mönch in seinen Tempel und meditierte. Bald wurde ihm klar, dass er für seine Aufgabe auch die dritte Säule benötigte und er die Aufgabe in drei Schritten lösen kann: 4
1. Transportiere den Turm, bestehend aus den oberen 99 Scheiben (n-1) von Säule 1 nach Säule 3. 2. Transportiere die letzte, größte Scheibe von Säule 1 nach Säule 2. 3. Transportiere zum Schluss den Turm von 99 Scheiben (n-1) von Säule 3 nach Säule 2. a) Schreibe ein C++ Programm, um für den Mönch das Problem zu lösen. Verwende eine rekursive Funktion mit vier Parametern: Anzahl der zu bewegenden Scheiben Nummer der Säule, auf der die Scheiben ursprünglich liegen Nummer der Säule, auf die die Scheiben gestapelt werden sollen Nummer der Säule, welche als Zwischenlager benutzt werden soll Um z. B. drei Scheiben von Säule 1 nach Säule 3 zu transportieren, soll das Programm folgende Anweisungen ausgeben: 1 3 (d. h. trage die oberste Scheibe von Säule 1 nach Säule 3) 1 2 3 2 1 3 2 1 2 3 1 3 b) Wie lange wird der alte Mönch etwa brauchen, um seine Aufgabe zu erledigen? Aufgabe 18 Schreibe ein C++ Programm, das ein Funktionstemplate min benutzt, um die kleinste von zwei Zahlen zu bestimmen. Teste das Programm mit integer und double Zahlenpaaren. 5