Aufgabe 1 - Zinseszins Schreibe ein Programm, das für eine Geldanlage Zinsen (inkl. Zinseszinsen) berechnet. Die Zinsen sollen am Ende jeden Laufzeitjahres dem Kapital zugeschlagen werden und in den Folgejahren zusammen mit dem Kapital verzinst werden. Die folgenden Angaben sind einzulesen: 1. eingezahltes Kapital in Euro (mind. 100 Euro) 2. Zinssatz in % 3. Anlagedauer in Jahren Die eingelesenen Werte sollen auf Gültigkeit geprüft werden. Bei korrekter Eingabe soll eine Tabelle ähnlich wie in dem folgenden Beispiel ausgegeben werden. Hier ist der Anlagebetrag 1000 Euro bei 3% Zinsen und einer Laufzeit von 3 Jahren: Jahr 0 1 2 3 Zinsen 0.00 30.00 30.90 31.83 Guthaben 1000.00 1030.00 1060.90 1092.73 Aufgabe 2 - Felder umkehren (1) Gegeben sei das Array 3, -55, 2, 97, -13, 2008. Schreibe ein Programm, welches die Reihenfolge der Zahlen in dem Array umkehrt (2008, -13, 97, 2, -55, 3). Das Feld soll vor und nach der Umkehrung mit Hilfe einer Schleife ausgegeben werden. Aufgabe 3 - Felder umkehren (2) Verändere das geschriebene Programm zum Umkehren von Feldern so, dass das Umkehren des Arrays in einer Methode umkehr geschieht. Diese Methode soll das ursprüngliche Array als Parameter erhalten und das veränderte Array zurückgeben. In der main-Funktion soll nun das ursprüngliche Array ausgegeben werden, die Methode umkehr aufgerufen werden und anschließend das veränderte Array wieder ausgegeben werden. Aufgabe 4 - Kleines 1x1 Schreibe ein Programm, welches das kleine Ein-Mal-Eins (bis 10 mal 10) berechnet und in einer Matrix (einem zweidimensionalen Feld) speichert. Die Matrix soll dann mit Hilfe von zwei Schleifen tabellarisch auf dem Bildschirm ausgegeben werden. Um die Werte geeignet einzurücken kann \t verwendet werden. Mit System.out.print(x) wird nach der Ausgabe von x keine neue Zeile angefangen. Die Ausgabe sieht also etwa wie folgt aus: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 Aufgabe 5 - binary search Schreibe ein Programm, welches in einem sortierten Array nach einer eingelesenen Zahl sucht und gebe die Position aus, auf der die Zahl gefunden werden konnte oder eine Fehlermeldung, falls die Zahl nicht in dem Array enthalten ist. Das Feld sei wie folgt definiert: 1, 3, 4, 7, 9, 13, 17, 18, 19, 23, 26, 30 Gesucht werden soll nach folgendem Algorithmus: • beginne in der Mitte des Arrays bzw. bei gerader Feldanzahl bei dem linken der mittleren Felder (einfache Integer-Division durch 2) • vergleiche das Element an dieser Position mit dem Suchelement • ist das Suchelement kleiner, als das Element dieser Position, so wähle als nächstes Vergleichselement das Element, welches sich in der Mitte des Intervalls zwischen der aktuellen Position und dem Anfang des Intervalls befindet • ist das Suchelement größer, als das Element dieser Position, so setze die Suche analog in der rechten Hälfte des Suchintervalls fort. Wiederhole die obigen Schritte mehrfach, wobei sich das Suchintervall jeweils halbiert, bis das Intervall nur noch eine Länge von 1 hat. Das aktuelle Element ist nun entweder die gesuchte Zahl, oder das Suchelement ist nicht in dem Feld enthalten. Aufgabe 6 - GGT Entwickle eine Methode ggt(int x,int y), welche für zwei einzulesenden natürlichen Zahlen den größten gemeinsamen Teiler (GGT) dieser Zahl mit Hilfe des von Euklidischen Algorithmus berechnet. Dieser lautet wie folgt: • Sind die beiden Zahlen gleich, so ist ihr Wert der gesuchte GGT, der Wert wird ausgegeben und das Programm bricht ab. • Sind die beiden Zahlen nicht gleich, wird der Wert der größeren Zahl um den Wert der kleineren Zahl vermindert und wieder mit dem ersten Schritt begonnen. In der main-Funktion soll die Methode mit verschiedenen Eingabewerten mehrfach aufgerufen werden und jeweils der GGT ausgegeben werden. Aufgabe 7 - Palindrom Eine natürliche Zahl ist ein Palindrom, wenn die umgekehrte Reihenfolge ihrer Dezimalziffern identisch zur Zahl ist: 121 und 881323188 sind zum Beispiel Palindrome. Schreibe ein Java-Programm, das eine Zahl einliest und in der Methode boolean palindrom(int zahl) prüft, ob die Zahl ein Palindrom ist. Tipp: Speichere die Zahl zunächst Ziffern-weise in einem Feld ab. Aufgabe 8 - Potenz (1) Schreibe eine Methode power, die zwei ganze Zahlen x und y (x, y 0) als Parameter übergeben bekommt und die Potenz xy berechnet und zurückgibt. In einer Schleife soll in der main-Funktion beliebig oft ein Zahlenpaar eingelesen werden. Durch die Eingabe einer negativen Zahl kann die Schleife abgebrochen werden. Aufgabe 9 - Rekursion - Fakultät Versuche für Aufgabe 9 von Übungsblatt 2 nun eine rekursive Lösung zu finden. Noch einmal zur Information: Rekursive Methoden rufen sich selbst wieder auf, wobei die eigentliche Aufgabe in kleinere Teilaufgaben aufgesplittert wird. Eine Rekursion benötigt immer eine Abbruchbedingung, d.h. ein Teilproblem, für das die Lösung bekannt ist. Aufgabe 10 - Rekursion - Binomialkoeffizient Schreibe ein Programm, welches rekursiv den Binomialkoeffizienten zweier ganzer Zahlen ausrechnet. Zur Erinnerung hier die Definition des Binomialkoeffizienten: n n * (n 1)...(n k 1) n! 1 * 2... * k k k!*(n k )! Als Eingabebeispiel kannst du n=49 und k=6 verwenden, womit die Wahrscheinlichkeit berechnet wird im Lotto zu gewinnen: 49 13983816 6 Aufgabe 11 - Rekursion - Potenz (2) Es ist möglich die Potenz an, a, n IN 0 mit weniger als n−1 Multiplikationen zu berechnen. Dazu überlegt man sich, dass man die Potenz schreiben kann als n 1 n1 a 2 * a 2 * a , n ungerade n n n a = 2 2 n gerade a * a , Durch rekursives Anwenden dieser Zerlegung wird die Anzahl der Multiplikationen reduziert. Schreibe ein Programm, welches zwei Zahlen a und n einliest, auf Gültigkeit prüft und mittels einer rekursiven Methode die Potenz an berechnet und zurückgibt.