Übungsblatt zum Thema Wiederholungsschleifen (Aufgaben mit * sind Zusatzaufgaben) Aufgabe 1 (Summe der ungeraden Zahlen) Schreibe in der Klasse SUMME eine Methode summeUngeraderZahlen(int n) , in der ein Feld mit den ersten n ungeraden Zahlen erzeugt und ausgegeben wird. Verwende beim Erzeugen des Feldes eine while-Schleife und bei der Ausgabe eine for - Schleife. Gib in der Methode auch die Summe der Feldelemente aus. Welcher mathematische Zusammenhang lässt sich erkennen? Aufgabe 2 (Roboterkompanie) Im Projekt "Drillinge" hast du ein Roboterfeld mit drei Robotern erzeugt. Speichere es unter neuem Namen (z. B. Kompanie) und ergänze: a) Die Feldlänge wird zu 2 ,4 oder 5 (mehr Roboter können sich nicht in einer Welt bewegen) verändert. Schreibe den Konstruktor und die Methoden gleichschrittVor(), linksUm(), rechtsUm() und bisZurWand() mit Hilfe einer passenden Schleife. Die Methode bisZurWand() lässt die Roboter geradeaus gehen, bis der Vorderste an die Wand anstößt. b*) Schreibe die Methode reiheNachLinks(), die die Roboterkompanie nach links um eine Ecke gehen lässt. Tipp: Schreibe in der Klasse ROBOTER zunächst eine Methode bisWand(), die einen einzelnen Roboter bis zur Wand gehen lässt. Die Roboter der Kompanie gehen folgendermaßen um die Ecke: feld [ i ] : geht jeweils bis zur Wand, dreht sich nach links und geht n Schritte (n hängt von der Feldlänge und vom Feldindex i ab!) c*) Schreibe eine Methode rundlauf(), die die Roboterkompanie einige Runden um ihre Welt drehen lässt. Aufgabe 3 (Zahlenrechner) Die Klasse Zahlenrechner soll die Methoden public int berechneQuersumme(int z) public int berechneAnzahlStellen(int z) public void berechneTeiler(int z) enthalten. Die Quersumme einer Zahl z lässt sich z. B. nach folgendem Verfahren berechnen: Starte mit Quersumme 0. Wiederhole solange z >0 : o berechne z mod 10 (das ist der Rest bei der Division von z durch 10) und addiere das Ergebnis zur Quersumme. o Der neue Wert von z ist der ganzzahlige Teil bei der Division von z durch 10. Ende wiederhole. Gib den Wert der Quersumme aus. Überzeuge dich von der Korrektheit dieses Verfahrens anhand einiger Beispiele und implementiere dann diese Methode. Für ganze Zahlen z berechnet man z mod 10 in Java mit z % 10. Den ganzzahligen Teil der Division erhält man mit z/10 . Die Idee zur Berechnung der Quersumme kannst du auch für die Berechnung der Stellanzahl verwenden. Zur Bestimmung aller Teiler einer Zahl prüft man mit Hilfe einer geeigneten Schleife, ob die Zahl durch 1, 2, 3, 4, … (bis zu welcher Zahl braucht man nur zu prüfen?) teilbar ist. Die Methode soll alle Teiler und auch die Anzahl der Teiler ausgeben. Aufgabe 4 (Ulam-Folge): Die Ulam-Zahlenfolge a1 , a2 , a3 , a4 , a5 ,... beginnt mit einer beliebigen natürlichen Startzahl a1 . Das nächste Element der Folge erhält man aus dem vorherigen Element durch die rekursive Vorschrift: an /2 wennan gerade an 1 3an 1 wennan ungerade Beispiele: 12 6 3 10 5 16 8 4 2 1 7 8 22 4 11 2 34 1 17 52 26 13 40 20 10 5 16 Es stellt sich die Frage, ob die Ulam-Folge für alle natürlichen Zahlen als Startwert endlich ist. Man vermutet, dass dies tatsächlich so ist, da bis heute kein Startwert bekannt ist, für den die Folge nicht endlich ist. Ein Beweis ist den Mathematikern aber bisher noch nicht gelungen. Die Ulam-Folge gehört deshalb zu den so genannten "offenen Problemen". Schreibe eine Javamethode ulamFolge(int startzahl), die die Elemente der Ulamfolge ausgibt. Ob eine Zahl gerade ist, prüft man mit Hilfe des Restes bei der Division durch 2: Bsp.: 5%2 ergibt den Wert 1; 8%2 ergibt den Wert 0 Aufgabe 5 (Größter gemeinsamer Teiler ggT zweier Zahlen) Bsp.: ggT(15, 18) = 3; ggT( 5; 75) = 5; ggT (13, 20) = 1 Schon Euklid überlegte sich folgenden Algorithmus zur Berechnung von ggT(a, b) : Wiederhole solange bis b = 0: wenn a > b, dann a = a – b, sonst b = b –a; Ende wiederhole; Gib den Wert von a aus. a) Teste den Algorithmus mit Papier und Bleistift für die obigen Beispiele. b) Schreibe ein Programm, das den ggT von zwei Zahlen berechnet Aufgabe 6 (Einfügen und Suchen im Feld) * Die Klasse Suchen besitzt ein Feld der Länge 10 der Referenzklasse String. Schreibe eine Methode einfuegen(String neu), mit der ein neues Wort in das Feld eingefügt werden kann. Verwende dazu eine Schleife, mit der man durch das Feld wandert und das neue Wort am ersten freien Platz im Feld einfügt. Ist das Feld voll, soll eine entsprechende Fehlermeldung ausgegeben werden. Hilfreich bei der Schleife ist eine boolesche Variable platzGefunden. Schreibe dann eine Methode suchen (String wort), mit der ein bestimmtes Wort im Feld gesucht werden kann. Wird das Wort gefunden, werden eine entsprechende Meldung und der Platz dieses Wortes ausgegeben. Wird das Wort nicht gefunden, kommt eine entsprechende Meldung. Hinweise: Die Schleife kann einen ähnlichen Aufbau wie in der Methode einfuegen besitzen. Um zwei String-Objekte zu vergleichen gibt es die Methode equals. wort1.equals(wort2) liefert dann true oder false.