Informatik 11: Einführung in Java. Lösungen zu den Rekursions-Aufgaben

Ähnliche Dokumente
Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

import JavaKaraProgram; public class Quadrat extends JavaKaraProgram { // Anfang von Quadrat void turnaround() { kara.turnleft(); kara.

Kurze Begründung, warum der Ausdruck korrekt ist oder jeweils zwei Gegenbeispiele, die zeigen, warum der Ausdruck nicht korrekt ist

Arbeitsblatt zu Methoden

Aufgaben: Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public c l a s s Quadrat extends JavaKaraProgram 4 { 5 void turnaround ( )

Methoden-Expertin. Aufgabe 1. Das Neue. Lösung in JavaKara. Puzzle: Expertin D

AUFGABE 1: REGULÄRE AUSDRÜCKE (5 PUNKTE)

Gestern: Kara. Steuerung: Endliche Automaten

Prüfung Computation, Programming

Grundlegende Programmierkonzepte: Anweisungen und Methoden

Arbeiten mit JavaKara

Grundlegende Programmierkonzepte: Variablen, Methoden-Parameter, Rückgabewerte

Rekursion mit JavaKara

Aufgabe Total Punkte

JavaKara. In JavaKara gibt es folgende Anweisungen: kara.move()

Grundlegende Programmierkonzepte: Abläufe mit Wiederholungen (Schleifen)

Kapitel 2: Programmfluss steuern

HTW IMI-B Informatik 1 Kara Worksheet 2 Seite: 1. Variables to store a true/false state: boolean movingright = true;

II.3.1 Rekursive Algorithmen - 1 -

Informatik mit Kara. Spielerischer Einstieg in die Informatik. Gerhard Bitsch. Seminarsitzung Informatik, Januar Kepler - Gymnasium Tübingen

Kapitel 3: Variablen

Informatik Abitur Bayern 2017 / II - Lösung

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Technische Universität München WS 2004/2005 Fakultät für Informatik 11. Dezember 2004 Prof. Dr. Seidl

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Verkettete Datenstrukturen: Listen

Backtracking mit Heuristiken

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Musterlösung Stand: 5. Februar 2009

Greenfoot: Verzweigungen

JAVA - Methoden - Rekursion

EINFÜHRUNG IN DIE PROGRAMMIERUNG

13. Bäume: effektives Suchen und Sortieren

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

public class SternchenRechteckGefuellt {

EINFÜHRUNG IN DIE PROGRAMMIERUNG

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Kapitel 12: Induktive

Prüfung Computation, Programming

Objektorientierte Programmierung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in C. EDV1-04C-Einführung 1

Einfaches Labyrinth Kleeblatt-Suche

Client-Server-Beziehungen

Einführung in die Informatik I Informatik I/A

Greenfoot: Verzweigungen Nicolas Ruh und Dieter Koch

JAVA-Datentypen und deren Wertebereich

Client-Server-Beziehungen

Verkettete Datenstrukturen: Bäume

System.out.println("TEXT");

Informatik II Übung, Woche 14

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Die Schnittstelle Comparable

Einführung in JAVAKARA

Programmierkurs Java

Ersetzbarkeit und Verhalten

Die Käfer machen vieles immer wieder...

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

UML / Fujaba. Generierung von Java-Quellcode aus UML-Diagrammen. Marcel Friedrich

Einführung in die Programmierung für Wirtschaftsinformatik

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Geordnete Binärbäume

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

6 Speicherorganisation

ALP II Dynamische Datenmengen Datenabstraktion

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

JavaKara Aufgaben. 1 Kara und die Blätter... (einfach)

Wintersemester 2007/2008 Helmut Seidl Institut für Informatik TU München

Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe)

Klassenvariablen, Klassenmethoden

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Einführung in die Informatik 2

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

1.) Zahlensysteme (10 Punkte)

public interface Stack<E> { public void push(e e); public E pop();

Tagesprogramm

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Klausur Software-Entwicklung September 00

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java - Programmierung - Prozedurale Programmierung 1

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Objektorientierung (OO)

Einführung in die Programmierung

Elementare Konzepte von

Test-Driven Design: Ein einfaches Beispiel

Selbsteinstufungstest Vorkurs Programmieren

2.5 Backtracking. 1 Ausgang. Beispiel: ungerichteter Graph: Ausweg aus einem Labyrinth suchen, modelliert als. Sackgasse. Ecken. Kanten 2.

Informatik II Prüfungsvorbereitungskurs

6. Verkettete Strukturen: Listen

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Transkript:

Informatik 11: Einführung in Java Lösungen zu den Rekursions-Aufgaben Gierhardt 1. KARA steht in einer Reihe, an deren Ende ein Baum steht. KARA soll bis zum Baum laufen, dabei alle Blätter einsammeln und sich dort umdrehen. public class BlaetterSammeln extends JavaKaraProgram void zumbaum() if (kara.onleaf()) kara.removeleaf(); else if (kara.onleaf()) kara.removeleaf(); // Ende zumbaum // Ende von BlaetterSammeln 2. KARA steht in einer Reihe, an deren Ende ein Kleeblatt liegt. KARA soll bis zum Kleeblatt laufen und das Blatt an seinen Startpunkt bringen. public class BlattHolen extends JavaKaraProgram void holeblatt() if (!kara.onleaf()) holeblatt(); // rekursiver Aufruf else kara.removeleaf(); holeblatt(); // Ende von BlattHolen 3. KARA steht in einer Reihe, an deren Ende ein Baum steht. KARA soll bis zum Baum laufen, dabei alle Blätter einsammeln, sich dort umdrehen, zurücklaufen und die Blätter an den alten Plätzen ablegen. public class BlaetterAblegen extends JavaKaraProgram void zumbaum() if (kara.onleaf()) 1

kara.removeleaf(); kara.putleaf(); else else if (kara.onleaf()) kara.removeleaf(); kara.putleaf(); // eigentlich unnoetig // Ende zumbaum // Ende von BlaetterAblegen 4. KARA steht in einer Reihe, an deren Ende ein Baum steht. KARA soll bis zum Baum laufen, dabei alle Blätter einsammeln und die Blätter hinter dem Baum spiegelbildlich ablegen. Es gibt keine weiteren Bäume, die stören könnten. public class BlaetterGespiegeltAblegen extends JavaKaraProgram void umbaumherum() void zumbaum() if (kara.onleaf()) kara.removeleaf(); kara.putleaf(); else else if (kara.onleaf()) kara.removeleaf(); umbaumherum(); kara.putleaf(); else umbaumherum(); 2

// Ende zumbaum // Ende von BlaetterGespiegeltAblegen 5. Schreibe eine rekursive Version des Programms Pacman. Die Kleeblattspur geht durch einen Wald hindurch. Am Ende der Spur steht ein Pilz. Erweiterung: KARA läuft die Spur hin und wieder zurück. public class PacmanRek extends JavaKaraProgram // Anfang von PacmanRek void turnaround() void moveback() turnaround(); turnaround(); boolean leaffront() boolean blatt=false; // auch false, wenn vorne Baum steht // jetzt muss man nachschauen boolean leafleft() boolean blatt=false; // auch false, wenn links Baum steht if (!kara.treeleft()) // jetzt muss man nachschauen void naechsteskleeblattsuchen() if (kara.mushroomfront()) tools.showmessage("ich bin so satt, \n " + "ich mag kein Blatt!"); turnaround(); else // Ende noch nicht erreicht if (leaffront()) kara.removeleaf(); naechsteskleeblattsuchen(); 3

else // nach links oder nach rechts if (leafleft()) kara.removeleaf(); naechsteskleeblattsuchen(); else // dann eben nach rechts kara.removeleaf(); naechsteskleeblattsuchen(); // naechsteskleeblattsuchen // Anfang von myprogram kara.removeleaf(); // Start auf erstem Kleeblatt naechsteskleeblattsuchen(); // Ende von myprogram // Ende von PacmanRek 6. Schreibe eine rekursive Version von Labyrinth. Das Labyrinth ist so gebaut, dass der Weg immer nur einen Baum breit ist und es keine Löcher auf dem Weg gibt. Es gibt auch keine Verzweigungen. Erweiterung: KARA läuft den Weg im Labyrinth hin und wieder zurück. public class LabyrinthRek extends JavaKaraProgram // Anfang von LabyrinthRek void zumnaechstenfeld() zumnaechstenfeld(); else if (!kara.treeleft()) zumnaechstenfeld(); else if (!kara.treeright()) zumnaechstenfeld(); else // zumnaechstenfeld 4

zumnaechstenfeld(); // Ende von LabyrinthRek 7. KARA steht vor einer Treppe mit einer Stufenbreite von zwei Bäumen (siehe Abbildung). Der Beginn der Treppe ist ihm nicht bekannt. Die Höhe der Treppe ist auch unbekannt. KARA soll die Treppe hochlaufen und auf der obersten Stufe stehen bleiben. public class TreppeHoch extends JavaKaraProgram void stufehoch() if (kara.treefront()) stufehoch(); else // Ende von stufehoch while (!kara.treefront()) // Zur Treppe stufehoch(); // Ende von TreppeHoch 8. KARA soll wie vorher die Treppe hochsteigen und die gleiche Stufenanzahl auf der anderen Seite herabsteigen. public class TreppeHochUndRunter extends JavaKaraProgram void stufehoch() if (kara.treefront()) // hoch stufehoch(); // Rekursion // Ende von stufehoch while (!kara.treefront()) // Zur Treppe stufehoch(); // Ende von TreppeHochUndRunter // und runter 9. KARA hat rechts von sich einen Baum stehen, der zu einem abgeschlossenen, von Bäumen umrandeten Feld gehört. Irgendwo am Rande dieses Feldes liegt ein Kleeblatt, das er finden und an seinen Startpunkt zurückbringen soll. 5

public class BlattAmFeldHolen extends JavaKaraProgram void zumblatt() if (kara.onleaf()) kara.removeleaf(); else if (!kara.treeright()) zumblatt(); else if (kara.treefront()) zumblatt(); else // Ende von weiter zumblatt(); // Ende von BlattAmFeldHolen zumblatt(); 10. KARA befindet sich in einem nach außen abgeschlossenen Irrgarten, der nur an einer Stelle, die durch ein Kleeblatt markiert ist, verlassen werden kann. Der Irrgarten enthält keine Inseln, d.h. von jeder Stelle im Innern ist der Rand des Irrgartens erreichbar. Schreibe ein Programm, das KARA von jedem beliebigen Punkt im Innern den Ausgang finden lässt. Erweiterung: KARA läuft nach dem Finden des Ausgangs wieder an seinen Ausgangspunkt zurück. public class Irrgarten extends JavaKaraProgram // Anfang von Irrgarten void zumerstenbaum() zumerstenbaum(); else // jetzt ist rechts ein Baum zumausgang(); void zumausgang() // immer rechts an der Wand entlang if (kara.onleaf()) kara.removeleaf(); else if (!kara.treeright()) 6

else zumausgang(); if (kara.treefront()) zumausgang(); else // Ende von zumausgang // Anfang von myprogram zumerstenbaum(); // Ende von myprogram // Ende von Irrgarten zumausgang(); 11. KARA bewacht ein Mobilé. Die Drähte sind hier als Kleeblätter dargestellt. Manchmal macht er einen Kontrollgang über alle Drähte und stößt diverse Insekten, die sich an den Enden der Drähte niedergelassen haben, vom Drahtgestell (Die Insekten sind hier als Pilze dargestellt). Schreibe ein Programm für einen Kontrollgang mit Rückkehr. public class Mobile extends JavaKaraProgram // Anfang von Mobile void turnaround() void moveback() turnaround(); turnaround(); boolean leaffront() boolean blatt=false; // auch false, wenn vorne Baum steht // jetzt muss man nachschauen boolean leafleft() boolean blatt=false; // auch false, wenn links Baum steht if (!kara.treeleft()) // jetzt muss man nachschauen 7

boolean leafright() boolean blatt=false; // auch false, wenn links Baum steht if (!kara.treeright()) // jetzt muss man nachschauen void zurlaus() if (kara.mushroomfront()) // Ende erreicht turnaround(); // Laus abwerfen else if (leaffront()) // normal weiter else if (leafleft() && leafright()) // Verzweigung // nach links // von links zurueck // nach rechts // von rechts zurueck else // Ende von zurlaus // Anfang von myprogram // Ende von myprogram // Ende von Mobile if (leafleft()) // nur nach links else if (leafright()) // nur nach rechts else // vorne kein Blatt turnaround(); 8