Rekursion mit JavaKara

Größe: px
Ab Seite anzeigen:

Download "Rekursion mit JavaKara"

Transkript

1 Hans Peter Schneider Rekursion mit JavaKara eine Unterrichtsreihe des Faches Informatik im Rahmen des Wahlpflichtunterrichts der Klasse 9 an Gymnasien 1. Semesterarbeit zur Virtuellen Lehrerweiterbildung Informatik in Niedersachsen

2 Hans Peter Schneider Rekursion mit JavaKara Seite 2 Inhalt Seite JavaKara... 3 Beschreibung... 3 Einsatz... 3 Rekursion... 5 Rekursion vs. Iteration... 5 Modell der Impliziten Speicherung... 5 Unterrichtsreihe Hin und Zurück Einführung Labyrinth rekursiv Anwendung Füllen Vertiefung... 9 Weitere Aufgaben zur Rekursion Türme von Hanoi ggt mit Euler Quellen... 11

3 Hans Peter Schneider Rekursion mit JavaKara Seite 3 JavaKara Beschreibung Die ETH Zürich [1] bietet ein Java-Programm zum kostenlosen Download an, das für den Unterricht eine einfache Umgebung bietet, um Programmieren zu lernen. Ein Roboter-Objekt namens Kara in Form eines Marienkäfers kann mittels eines kleinen Befehlssatzes in einer diskreten Welt gesteuert werden. Unter anderem kann dieser Roboter in der Sprache Java programmiert werden, wobei die sequentielle Programmierung im Vordergrund steht, Objektorientierung und Ereignissteuerung werden nicht unterstützt. Die Welt, in der sich Kara bewegt, ist zweidimensional, in beiden Hauptrichtungen zyklisch und besteht aus einem rechteckigen Bereich aus endlich vielen quadratischen Feldern. Jedes Feld kann mit einem Kleeblatt, einem Pilz oder einem Baumstumpf belegt sein. Kara kann auf den freien Feldern und über Kleeblätter laufen. Ein Pilz wird von Kara verschoben, wenn das Feld dahinter frei ist. Ein Baumstumpf ist für Kara ein unbewegliches Hindernis. Der Benutzer kann die Welt frei gestalten und speichern. In der Java-Umgebung wird Kara durch das Objekt kara Die Befehle void void ein Feld vorwärts bewegen auf dem Feld eine Vierteldrehung links repräsentiert, die zulässigen void kara.turnright(); auf dem Feld eine Vierteldrehung rechts Befehle und Sensoren des Roboters sind als Methoden dieses void kara.putleaf(); Kleeblatt ablegen void kara.removeleaf(); Kleeblatt aufnehmen Die Sensoren Objekts implementiert (siehe boolean kara.treefront(); ist in Laufrichtung ein Baum? Kasten). Die Hauptklasse des boolean kara.treeleft(); ist links ein Baum? boolean kara.treeright(); ist rechts ein Baum? Java-Programms wird von der boolean kara.onleaf(); steht Kara auf einem Blatt? vordefinierten Klasse Java- boolean kara.mushroomfront(); ist in Laufrichtung ein Pilz? KaraProgram abgeleitet. In dieser wird das Programm selbst innerhalb der Methode public void myprogram() implementiert, die die gleichnamige Methode der Elternklasse überlagert. Innerhalb der Klasse können wie in jeder Klasse weitere Methoden und Variablen definiert werden. Weitere eigene Klassen können zwar definiert und verwendet werden, dies geht aber über die eigentliche Zielsetzung von JavaKara hinaus. Das fertige Programm wird aus der Umgebung heraus kompiliert und ausgeführt, dabei wird die zugehörige.class-datei erzeugt und als Teil von allkara.jar ausgeführt. Einsatz Die JavaKara-Umgebung wurde programmiert für die von Objektorientierung ungestörte Einführung in die sequentielle Programmierung mit C-Strukturen, die der Sprache Java zu Grunde liegen. Die Welt und der Befehlssatz von JavaKara erlauben am Anfang sogar eine variablen- und parameterfreie Programmierung, die es ermöglicht ohne großen Aufwand die Schüler zu komplexen kognitiven Strukturen wie

4 Hans Peter Schneider Rekursion mit JavaKara Seite 4 den Begriff der Rekursion zu führen. Das niedliche Design spricht Schüler in der Klasse 9 nicht mehr sehr an, es ist eher was für die Klassen 5 bis 7, dennoch ist JavaKara als Werkzeug für die Unterrichtsreihe Einführung in die Java-Programmierung im zweiten Quartal des Kurses sehr wertvoll. Die Verwendung von Java-Kara fügt sich wie folgt in den Kanon des Informatikunterrichts der Klasse 9 mit 4 Wochenstunden ein: 1. Halbjahr: Webseitengestaltung mit HTML und CSS: Gewöhnung an geschachtelte Strukturen, Gestaltung einer Website. 2. Halbjahr: Einführung in die Programmierung mit JavaKara: Programmstrukturen, Variablen, Felder, Sortieralgorithmen, Rekursion. 3. Halbjahr: Einführung in JavaScript: Verwendung des HTML-DOMs und ereignisgesteuerter Programmierung, Programmierprojekt: Gesellschaftsspiel (Memory, TicTacToe, Mühle, Minesweeper oder ähnliches). 4. Halbjahr: Javaprogrammierung: Anwendungen mit eigenem Fenster, OOP, Ereignissteuerung, GUI mit AWT, Computergrafik 1. Strategie Man taste nach der linken Wand und folge dieser bis zum Kleenlatt. 2. Algorithmus Ist links ein Durchgang, so benutze diesen; sonst, wenn geradaus frei, folge dem Gang; sonst, wenn rechts ein Durchlass, benutze diesen; sonst kehre um. Dies alles immer wieder bis zum Kleeblatt. 3. Struktogramm public class FindeBlatt extends JavaKaraProgram { public void myprogram() { while (!kara.onleaf()) { Naheliegend ist ein Start mit der Einführung der while-struktur, um Kara zu einer Markierung (etwa einem Blatt) laufen zu lassen. Besonders eignen sich im weiteren Verlauf Probleme aus dem Irrgarten -Sortiment, an denen die Schüler üben, Lösungsstrategien zu entwickeln, die sie verfeinern und über Struktogramme schließlich bis zum Code führen. Exemplarisch dafür ist Lösung Immer an der Wand lang für nicht zyklische Labyrinthe: Man versetze die Schüler in die Lage des Käfers, in dem man ihnen das Problem stellt, in einem finsteren, unbekannten Raum den Ausgang zu finden, wobei sie sich nur auf ihren Tastsinn verlassen können. In der Regel kommen die Schüler selbst auf die Strategie Immer an der Wand lang, sie müssen diese dann verbalisieren und schrittweise genauer formulieren, bis die Strategie sich in einen Algorithmus fassen lässt. 4. Code public class ImmerAnDerWandLang extends JavaKaraProgram { public void myprogram() { while (!kara.onleaf()) { while (kara.treefront()) { kara.turnright();

5 Hans Peter Schneider Rekursion mit JavaKara Seite 5 Rekursion Rekursion vs. Iteration Schon einige der ersten höheren Programmiersprachen, also solche, die die Implementierung von Methoden erlauben, kannten den Selbstaufruf der Methode innerhalb ihrer eigenen Deklaration. Doch selbst in Java, eine Sprache, in der sich weitgehend das System um Sicherheit, Kontrolle und Speicherverwaltung kümmern muss, kann der endlose Selbstaufruf nicht abgefangen werden und führt bei unsachgemäßer Anwendung zum Stack-Overflow und damit schlimmstenfalls zum Absturz des Rechners. Die Iteration kommt in der Regel mit einer definiert endlichen Speichermenge aus, ein Stack-Overflow ist nur vorsätzlich aber nicht fahrlässig zu erzeugen. Schülern fällt es schwer, den Rekursionsbegriff zu begreifen und rekursiv Probleme zu lösen, zu Anfang greifen sie immer lieber auf iterative Verfahren zurück. Daher muss bei der Einführung der Rekursion möglichst gleich zu Anfang Probleme auftauchen, die sich rekursiv sehr kurz und elegant lösen lassen, iterativ aber nur sehr umständlich und arbeitsintensiv. Beispiele für sehr effiziente, kurze Rekursionen sind die Türme von Hanoi, das Euler-Verfahren zur Bestimmung des ggt zweier Zahlen und das Füllen einer beliebigen, einfarbig zusammenhängenden Pixelfläche: Die rekursiven Kerne der Lösungen dieser Beispiele lassen sich jeweils mit weniger als zehn Zeilen implementieren und entfalten bei der Ausführung enorme Kraft und Effektivität. Modell der impliziten Speicherung Der Programm-Stack in der Laufzeitumgebung dient der Steuerung von Umterprogrammaufrufen: Wird ein Unterprogramm aufgerufen, wird die Adresse des ersten Befehls des Unterprogramms im Hauptspeicher in den Programmzeiger geladen. Damit der Programmzeiger nach Beendigung des Unterprogramms zum Ausgangspunkt, von dem aus das Unterprogramm aufgerufen wurde, zurückfindet, wird zuvor die aktuelle Adresse im Programmzeiger auf den Stack gelegt. Bei Beendigung des Unterprogramms wird stets ein ret (return)-befehl ausgeführt, der die oberste Adresse vom Stack nimmt und zurück in den Programmzeiger lädt. Der Programmschritt- Inkrement sorgt dafür, dass das Programm an der Stelle nach dem Aufruf des Unterprogramms fortgesetzt wird. Ist das Unterprogramm nun rekursiv, enthält es also einen Sprungbefehl zu seiner eigenen Startadresse, so wird mit jedem neuen Aufruf eine Adresse auf dem Stack abgelegt. Die Anzahl der Adressen auf dem Stack, bzw. der Wert des Stackzeigers ist eine Größe, die Information enthält, die vom laufenden Programm benutzt wird. In der Regel ist diese in der rekursiven Lösung nur implizit verwendete Information (implizit, da diese Größe nicht vorsätzlich oder zugreifbar im Programm verwaltet wird) gerade die, die zur Steuerung einer Schleife der korrespondierenden iterativen Lösung explizit angegeben oder errechnet werden muss. Die

6 Hans Peter Schneider Rekursion mit JavaKara Seite 6 Struktur der Rekursion dient selbst also als Informationsspeicher für die Ausführung des Programms. Dies ist im einführenden Problem Hin und wieder zurück besonders deutlich zu erkennen und kann daran mit den Schülern erarbeitet werden. Unterrichtsreihe Die Reihe zur Einführung der Rekursion umfasst drei zentrale Probleme, zu denen Lösungen entwickelt und implementiert werden. Das erste Problem Hin und wieder zurück ist so einfach, dass die Schüler die iterative Lösung selbst entwickeln und nach gemeinschaftlicher Erarbeitung der rekursiven Lösung beide Lösungen gegenüberstellen können. Das zweite Problem Labyrinth rekursiv vermittelt dann die Vorteile des rekursiven Algorithmus bei speziell strukturierten Problemen. Das dritte Problem des Füllens einer beliebigen, einfarbigen Pixelfläche zeigt die Macht der Rekursion und gleichzeitig ihre Schwäche: Einerseits ist das Füllen -Problem iterativ mit vertretbarem Aufwand nicht zu lösen, andererseits benötigt die rekursive Lösung bei großen Flächen ( = Pixel) hudertausende von rekursiven Aufrufen, die bei den üblichen Rechnern in der Regel einen stack overflow verursachen und so, wenn nicht den Rechner, doch zumindest das Programm zum Absturz bringen. Hin und wieder zurück Einführung Ein Aufgabenbeispiel, wo eine iterative Lösung praktischer erscheint, das sich aber gut dazu eignet den Unterschied zwischen Rekursion und Iteration zu diskutieren, ist das Problem des Hin und wieder zurück : Kara soll gerade auf einen Baum zulaufen, dort umkehren und genau zu dem Feld zurückkehren, von dem Kara gestartet ist. Dabei darf es keine Rolle spielen, wie viele Felder der Baum von der Ausgangsposition entfernt ist. Dazu können die Schüler verschiedene Lösungsansätze selbst entwickeln, wobei sie in der Regel iterative Lösungen vorschlagen, zum Beispiel: 1. Markierung des Ausgangsfeldes: Kara legt ein Kleeblatt auf sein Ausgangsfeld, dann läuft er bis zum Baum, dreht sich um und läuft, bis er auf einem Kleeblatt steht. 2. Messen der Entfernung: Kara zählt die Felder bis zum Baum und merkt sich den Wert. Vor dem Baum dreht sich Kara um und läuft so viele Schritte zurück, wie gezählt wurden. Schade, dass wir noch nicht gelernt haben, wie Kara zählen und sich eine Zahl merken kann. Beide Lösungen verlangen in irgendeiner Form einen Speicher, in dem Kara sich die Ausgangsposition merken kann. Verbietet der Lehrer solche Hilfen, wird das Problem komplizierter. Damit wird dann die rekursive Lösung motiviert. Die Lösung lässt sich auf der Kara-Welt gut grafisch entwickeln, dazu eignet sich als Einführung folgende Parodie: Einem Mathematiker und einem Ingenieur werden an einem Lagerfeuer jeweils die selben Aufgaben gestellt: 1. Ein Topf mit Wasser steht an Position A. Bringe das Wasser zum kochen! - Der Ingenieur nimmt den

7 Hans Peter Schneider Rekursion mit JavaKara Seite 7 Topf von Position A und stellt ihn auf das Feuer. - Der Mathematiker nimmt den Topf von Position A und stellt ihn auf das Feuer. 2. Ein Topf mit Wasser steht an Position B, die von A verschieden ist. Bringe das Wasser zum kochen! - Der Ingenieur nimmt den Topf von Position B und stellt ihn auf das Feuer. - Der Mathematiker nimmt den Topf von Position B, stellt ihn auf Position A und hat somit das Problem auf das vorherige zurückgeführt. Dieses Grundprinzip des Mathematikers wenden wir jetzt auf unser Problem an. Auf den ersten Blick scheint das Problem, Kara aus einiger Entfernung zum Baum und zurück gehen zu lassen, als zu schwierig, also reduzieren wir für den Anfang das Problem auf ein einfacheres: Wie sieht es aus, wenn Kara direkt vor dem Baum steht? Überhaupt kein Problem: Kara dreht sich um und fertig. Jetzt entwickeln wir das Problem rekursiv für zunehmende Entfernungen. Was ist, wenn Kara ein Feld von dem Baum entfernt steht (was Kara ja nicht weiß)? Ist augenscheinlich zu lösen: Kara geht ein Feld und hat somit das Problem auf das vorherige zurückgeführt. Nach dessen Lösung (umdrehen) muss Kara nur noch einmal ein Feld gehen (diesmal in die andere Richtung). Jetzt sehen wir schnell, dass dieses Konzept unser ganzes Problem vollständig löst: Kara geht ein Feld, hat das Problem auf das Problem mit einem Feld weniger zurückgeführt und nach dessen Lösung geht Kara noch einmal ein Feld. Analog zur vollständigen Induktion wird das Problem also vom Fall Entfernung gleich Null an entfaltet. Gehe zum Baum und zurück bedeutet jetzt im Einzelnen: - Steht Kara schon vor dem Baum, dann drehe er sich um. - Steht Kara nicht vor dem Baum, dann gehe einen Schritt, gehe zum Baum und zurück und gehe einen Schritt ( in die andere Richtung). Der Selbstaufruf der Definition stellt die Rekursion dar, die sich terminiert durch den Fall, dass Kara vor dem Baum steht. public class HinUndWiederZurueck extends JavaKaraProgram { void gehezumbaumundz() { if (kara.treefront()) { gehezumbaumundz(); // Rekursion public void myprogram() { gehezumbaumundz(); Bei dieser rekursiven Lösung braucht Kara weder eine Markierung noch eine Variable. Wie aber wird die Information über das Ausgangsfeld gespeichert? Irgendwo muss sie sein, da sie ja offensichtlich nicht verloren geht, sonst würde Kara ja nicht zum Ausgangsfeld zurückfinden. Die Information wird (im Gegensatz zur expliziten Speicherung über den Befehl merke Dir! ) implizit, also quasi unauffällig und nebenbei, in der Zahl der verschachtelten Selbstaufrufe gespeichert. Bei einer Entfernung von ca. fünf Feldern lässt sich diese Verschachtelung auch vollständig grafisch illustrieren. Versierte Schüler kommen schnell dahinter, dass diese Methode sehr viel mehr Speicher verbraucht als eine Variable zu definieren oder ein Kleeblatt zu hinterlegen, wird doch mit jedem Selbstaufruf der Programmzustand auf den Stack geschoben und ein neuer Programmzeiger gesetzt. Da der Programmieraufwand sich mit den iterativen Lösungen die Waage hält ist also nicht einzusehen, warum Rekursion sinnvoll sei. An diesem Punkt leite der Lehrer dann zu komplexeren Problemen wie

8 Hans Peter Schneider Rekursion mit JavaKara Seite 8 Labyrinth rekursiv über, deren rekursive Lösung aus wenigen Zeilen besteht, deren iterative Lösungen aber überhaupt nur schwer zu entwickeln sind. Labyrinth rekursiv Anwendung Wir haben im Laufe des Anfangsunterrichts zur Methodik des Programmierens bereits ein Labyrinth mit der Strategie Immer an der Wand lang gelöst (s.o.). Diese Strategie ist in sofern unbefriedigend, da die Schüler sehr schnell feststellen, dass man ohne Schwierigkeiten ein Labyrinth bauen kann, in dem Kara bis in alle Ewigkeit nach dem Kleeblatt sucht und es nicht finden kann, da das Labyrinth nicht aus nur einer sondern aus mehreren (unzusammenhängenden) Wänden besteht und das Kleeblatt gerade an einer anderen Wand als der abgetasteten liegt. Die Frage nach einer besseren Strategie führt schnell zur Hänsel und Gretel - Strategie: Kara hinterlege eine Spur, die kennzeichnet, ob Kara ein Teillabyrinth bereits untersucht hat. (Einige Schüler meinten, diese Strategie solle besser Ariadne - Strategie heißen, da es sonst eine Verschwendung von Lebensmitteln bedeuten würde. Wir haben uns dann darauf verständigt, die Strategie Hänsel und Gretel zu nennen für den Fall, das die Spur nur gelegt aber nicht wieder eingesammelt wird, aber Ariadne, wenn die Spur gemäß des roten Fadens im Labyrinth des Minotaurus beim zurückgehen wieder aufgerollt, äh, eingesammelt wird. Wir werden sehen, dass Einsammeln zur Lösung nicht beiträgt, aber auch keinen besonderen Aufwand bedeutet. Einsammeln hat jedoch zwei Vorteile: Zum Einen ist das Labyrinth im Anschluss der Lösung einigermaßen sauber, zum Anderen wird ein direkter Weg vom Ausgangspunkt zum Ziel markiert, dem andere folgen könnten.) Um eine Spur hinterlegen zu Können, die sich vom Ziel unterscheidet (wir erinnern uns: Wir suchten oben nach einem Kleeblatt unter lauter Bäumen), Soll Kara im Baumlabyrinth jetzt nach einem Pilz suchen, so kann er aus Kleeblättern die Spur legen. Die Strategie: Steht Kara auf einem Feld und hat den Pilz noch nicht gefunden, so markiert er dieses als schon durchsucht und wendet sich dann nacheinander dem Labyrinth hinter dem vorderen, dem linken und dem rechten Durchgang zu, bevor Kara sich umwendet, die Markierung wieder entfernt und sich auf den Rückweg macht. Der Ablauf soll gestoppt werden, sobald der Pilz gefunden wurde, dazu implementieren wir die Methode so, dass sie als Rückgabewert den Erfolg/Misserfolg an die aufrufende Methode weitergibt. public class LabyrinthRekursiv extends JavaKaraProgram { void turnu() { boolean fandnpilz() { if (kara.onleaf()) { //schon durchsucht, schnell zurück! turnu(); kara.putleaf(); Kara.turnLeft(); for (int i = 0; i < 3; i=i+1) { // drei Richtungen untersuchen: if (kara.mushroomfront()) { return true; } else if (kara.treefront()) { turnu(); if (fandnpilz()) { return true; // bereit zur Rückkehr: kara.removeleaf(); // Ariadne return false; // nichts gefunden public void myprogram() { fandnpilz();

9 Hans Peter Schneider Rekursion mit JavaKara Seite 9 Füllen Vertiefung Diese Aufgabe ist geeignet, um Schülern,die das Prinzip der Rekursion durchschaut haben, die Gelegenheit zu geben, selbst eine Rekursive Lösung zu entwickeln. Es geht darum, das Kara eine beliebige von Bäumen eingegrenzte Fläche mit Kleeblättern public class Fuellen extends JavaKaraProgram { void fuelle() { if (kara.onleaf()) { kara.putleaf(); // vier Nachbarfelder: for (int i = 0; i < 4; i=i+1) { if (kara.treefront()) { fuelle(); public void myprogram() { fuelle(); restlos füllen soll. Sicher wird es Wider-stand von einigen Schülern geben, das Problem ließe sich mindestens genauso gut iterativ lösen, diese kann man dann getrost machen lassen, eine iterative Lösung, die alle Eventualitäten berücksichtigt, werden die Schüler in angemessener Zeit auch nicht annähernd hinbekommen. Der rekursive Ansatz hat hier große Vorteile und ist relativ einfach zu erkären: Strategie: Wenn Kara auf einem Kleeblatt steht, drehe Kara um und gehe zurück. Im anderen Fall lege Kara auf seine Position ein Kleeblatt und fülle (rekursiv) die vier Nachbarfelder, wenn auf diesen kein Baum steht. Der schwierigste Teil ist nicht die Rekursion, sondern in der Implementierung Karas Stellung zu verfolgen und Kara richtig zu drehen und zu bewegen. Weitere Aufgaben zur Rekursion Die Türme von Hanoi Der Klassiker der rekursiven Problemstellungen: Auf einem von drei Plätzen steht ein Turm aus aufeinander geschichteten, nach oben kleiner werdenden Scheiben. Aufgabe ist es, den Turm auf einen der anderen Plätze zu bewegen unter folgenden Bedingungen: 1. Es darf nur jeweils die oberste Scheibe eines Stapels bewegt werden. 2. Eine Scheibe darf nur auf einen leeren Platz oder auf eine größere Scheibe gelegt werden. Die rekursive Lösung der Aufgabe reduziert ein Problem von n Scheiben darauf, die unterste der

10 Hans Peter Schneider Rekursion mit JavaKara Seite 10 Scheiben zu versetzen, in dem man den darüberliegenden Turm von (n 1) Scheiben auf dem dritten Platz zwischenlagert. Man gelangt zu folgendem Algorithmus: versetze Turm aus n Scheiben von Platz p nach Platz q{ wenn (n > 1) { r sei der dritte Platz neben p und q; versetze Turm aus n 1 Scheiben von Platz p nach Platz r; bewege oberste Scheibe von Platz p nach Platz q; versetze Turm aus n 1 Scheiben von Platz r nach Platz q; } sonst { bewege oberste Scheibe von Platz p nach Platz q; Hierzu lässt sich auch eine iterative Lösung implementieren, die aber nicht ganz einfach zu entdecken ist (siehe Kasten rechts, wer will, kann sie ja analysieren). int lowestbit(int i) { //Hilfsmethode // ermittelt niedrigstes Bit = 1 der // binären Darstellung von i int n = 0; while (i%2 == 0) { i = i >> 1; n++; return n; // iterativ public int hanoi(int n) { // Bewegt n Scheiben. // Die Plätze haben die Nummern // 0, 1 und 2. int[] platz = new int[n]; // Merkt sich den aktuellen Plätze // der n Scheiben. Initialisierung // mit p für alle Scheiben: for (int i = 0; i < n; i++) { platz[i] = 0; // Iteration über 2^n - 1 Bewegungen: for (int i = 1; i < (1 << n); i++) { // Scheinbennummer berechnen: n = lowestbit(i); // Scheibe bewegen: platz[n] = (platz[n]+1+n%2)%3; zeichnetuerme(platz); // Anzeige ggt mit Euler Den mathematische Satz Der größte gemeinsame Teiler von zwei natürlichen Zahlen ist auch der größte gemeinsame Teiler jeder der beiden Zahlen mit ihrer Differenz. ggt(a, b) = ggt(a, a b ) = ggt(b, a b ) V a, b C IN hat Euler zu dem rekursiven Algorithmus zur Bestimmung des größten gemeinsamen Teilers zweier Zahlen entwickelt. Durch die sukzessive Anwendung der des Satzes als ggt(a, b) = ggt(min(a, b), a b ) kann er die Zahlen a und b so weit verkleinern, bis sie sich bei ihrem ggt treffen, und sei dieser 1. An den Implementierungen rechts sehen wir, dass rekursive und iterative Form sich sowohl vom Aufwand als auch vom Algorithmus her sehr ähneln. Die gegenüberstellende Analyse der Implementierungen rückt Themen wie Speicherbedarf und Schnelligkeit der Methoden in den Fokus der Diskussion, lassen sich doch in beiden Fällen sowohl Ablauf als auch Speicherabbilder an konkreten Beispielen leicht Schritt für Schritt verfolgen. // rekursiv public int ggt(int a, int b) { if (a == b) { return a; } else if (a > b) { return ggt(b, a-b); return ggt(a, b-a); // iterativ public int ggt(int a, int b) { while (a!= b) { if (a > b) { a = a - b; b = b - a; return a;

11 Hans Peter Schneider Rekursion mit JavaKara Seite 11 Quellen [1] Eindgenössische Technische Hochschule Zürich, Bereich Edukation, Fach Informatik Informatik auf educeth - JavaKara: Einführung in Java

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

Informatik 11: Einführung in Java. Lösungen zu den Rekursions-Aufgaben 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

Mehr

Gestern: Kara. Steuerung: Endliche Automaten

Gestern: Kara. Steuerung: Endliche Automaten Gestern: Kara Steuerung: Endliche Automaten Heute: JavaKara Steuerung: Programmiersprache Java Java ist objektorientiert Zentrales Element: Objekt kara Bett world Stuhl Tisch Objekte: Befehle und Sensoren

Mehr

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

Kurze Begründung, warum der Ausdruck korrekt ist oder jeweils zwei Gegenbeispiele, die zeigen, warum der Ausdruck nicht korrekt ist Lösungen AUFGABE 1: REGULÄRE AUSDRÜCKE (5 PUNKTE) AUFGABE 1.1 (3 PUNKTE) Lösung [3 Punkte total - jeweils 1 Punkt für gute Begründung der korrekten Ausdrücke, 1 Punkt für die mind. 1 korrektes Gegenbeispiel

Mehr

Arbeitsblatt zu Methoden

Arbeitsblatt zu Methoden Arbeitsblatt zu Methoden In den vorhergehenden Programmen haben wir bereits jede Menge Methoden benutzt: 1. kara.move(), kara.turnright(), kara.putleaf() Dies sind alles Methoden, die etwas ausführen,

Mehr

Grundlegende Programmierkonzepte: Anweisungen und Methoden

Grundlegende Programmierkonzepte: Anweisungen und Methoden Grundlegende Programmierkonzepte: Anweisungen und Methoden Einleitung: Eigene Befehle definieren Kara steht vor einem Baum, der alleine in der Welt steht. Hinter dem Baum hat es ein Kleeblatt, das Kara

Mehr

Arbeiten mit JavaKara

Arbeiten mit JavaKara Arbeiten mit JavaKara 1. Programmierumgebung Möchte man ein neues Programm erstellen, so wird einem ein Programmeditor zur Verfügung gestellt, der bereits eine vorgefertigte Schablone darstellt. In der

Mehr

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

Methoden-Expertin. Aufgabe 1. Das Neue. Lösung in JavaKara. Puzzle: Expertin D Methoden-Expertin Aufgabe 1 Kara steht vor einem Baum, der alleine in der Welt steht. Hinter dem Baum hat es ein Kleeblatt, das Kara aufheben soll. Danach soll Kara wieder zum Ausgangsort zurückkehren.

Mehr

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

AUFGABE 1: REGULÄRE AUSDRÜCKE (5 PUNKTE) AUFGABE 1: REGULÄRE AUSDRÜCKE (5 PUNKTE) a Das Zeichen a. Ein beliebiges Zeichen [abc] Ein beliebiges Zeichen aus der Menge {a, b, c [a-f] Ein beliebiges Zeichen aus der Menge {a, b, c, d, e, f \d eine

Mehr

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

import JavaKaraProgram; public class Quadrat extends JavaKaraProgram { // Anfang von Quadrat void turnaround() { kara.turnleft(); kara. Informatik 11: Einführung in Java Kara legt Muster!(Lsg.) Gierhardt Aufgaben: 1. KARA soll ein mit Kleeblättern gefülltes Quadrat mit variabler Seitenlänge ablegen. Der Methodenaufruf quadratzeichnen(5)

Mehr

Aufgabe Total Punkte

Aufgabe Total Punkte Lösung der Informatikprüfung Klasse 4 Sa Kantonsschule XY 2007 Name :...Vorname :... Du hast 90 Minuten Zeit. Spicken ist nicht erlaubt (Die Prüfung wird sofort eingezoegen und Deine mögliche Bestnote

Mehr

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n! Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich

Mehr

12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =

12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! = Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,

Mehr

Grundlegende Programmierkonzepte: Abläufe mit Wiederholungen (Schleifen)

Grundlegende Programmierkonzepte: Abläufe mit Wiederholungen (Schleifen) Grundlegende Programmierkonzepte: Abläufe mit Wiederholungen (Schleifen) Wiederholung mit Abbruchbedingung (while-schleife) Kara soll geradeaus laufen, bis er vor einem Baum steht: Situation vor dem Start

Mehr

Programmieren 1 C Überblick

Programmieren 1 C Überblick Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen

Mehr

Prüfung Computation, Programming

Prüfung Computation, Programming Prüfung Computation, Programming 1. Computation: Reguläre Ausdrücke [5 Punkte] Zusammenfassung reguläre Ausdrücke a Das Zeichen a. Ein beliebiges Zeichen [abc] Ein beliebiges Zeichen aus der Menge {a,

Mehr

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

Grundlegende Programmierkonzepte: Variablen, Methoden-Parameter, Rückgabewerte Grundlegende Programmierkonzepte: Variablen, Methoden-Parameter, Rückgabewerte Erklärungen zu Methoden- Parametern Kara soll vor sich eine Spur von x Kleeblättern legen. Die Anzahl x sei variabel. Karas

Mehr

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen Java programmieren mit JavaKara Eine Zusammenfassung in Beispielen Kleeblätter in einer Zeile zählen @Override public void mymainprogram() { int anzahlkleeblaetter = 0; for (int x = 0; x < world.getsizex();

Mehr

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme

Mehr

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

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 { Informatik: Einführung in Java Gierhardt Play it again, Kara! (Lsg.) 1. Kara soll ein Kleeblatt finden, das sich in der gleichen Zeile (oder Spalte) befindet wie er selbst. Zwischen ihm und dem Kleeblatt

Mehr

Vorkurs Informatik WiSe 17/18

Vorkurs Informatik WiSe 17/18 Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann

Mehr

Das Kontrollfluss-Diagramm für Ò ¼ µ:

Das Kontrollfluss-Diagramm für Ò ¼ µ: Das Kontrollfluss-Diagramm für Ò ¼ µ: find0(a,x,n1,n2) t = (n1+n2)/2; no a[t]==x yes no n1==n2 yes return t; no x > a[t] yes return 1; no n1 < t yes return find0(a,x,t+1,n2); return 1; return find0(a,x,n1,t

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 8. September 2014 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr

Mehr

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. Januar 2018 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 17. Februar

Mehr

Kapitel 1: Die ersten Schritte 1

Kapitel 1: Die ersten Schritte 1 Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte 1 Starten Sie Eclipse. Importieren Sie das Eclipse-Projekt scenarios-chapter-1. Gehen Sie in den Unterordner

Mehr

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März

Mehr

11. Rekursion, Komplexität von Algorithmen

11. Rekursion, Komplexität von Algorithmen 11. Rekursion, Komplexität von Algorithmen Teil 2 Java-Beispiele: Power1.java Hanoi.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 23. Nov. 2015 Anwendung der Rekursion Rekursiv

Mehr

II.3.1 Rekursive Algorithmen - 1 -

II.3.1 Rekursive Algorithmen - 1 - 1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 6. März 2013 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems 4. Algorithmen Motivation Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems Der Begriff Algorithmus geht auf den Gelehrten Muhammad al-chwarizmi zurück, der um

Mehr

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test

public class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args

Mehr

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

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1 Kapitel 1: Die ersten Schritte mit Greenfoot 1 Starten Sie Greenfoot. (Wenn Sie Greenfoot das erste Mal öffnen, erscheint ein Dialogfenster,

Mehr

Speicher und Adressraum

Speicher und Adressraum Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,

Mehr

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen

Mehr

Teil 14: Rekursive Programmierung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Teil 14: Rekursive Programmierung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Teil 14: Rekursive Programmierung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 14 Rekursive Programmierung... 3 14.1 Die Fakultätsfunktion...

Mehr

7. Verkettete Strukturen: Listen

7. Verkettete Strukturen: Listen 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):

Mehr

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

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2016/2017 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen Variablen Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Variablen dienen zur Speicherung von Daten. Um Variablen

Mehr

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät

Mehr

Einführung in die Informatik

Einführung in die Informatik Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 12. März 2014 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:

Mehr

Erste Java-Programme (Scopes und Rekursion)

Erste Java-Programme (Scopes und Rekursion) Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: Konstantin.pelz@campus.lmu.de Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/

Mehr

2. Algorithmenbegriff

2. Algorithmenbegriff 2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 11 Rekursion Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION

Mehr

Kapitel 3: Variablen

Kapitel 3: Variablen Kapitel 3: Variablen Thema: Programmieren Seite: 1 Kapitel 3: Variablen Im letzten Kapitel haben wir gelernt, bestimmte Ereignisse zu wiederholen solange eine Bedingung erfüllt ist. Nun möchten wir aber

Mehr

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1] Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -108 Kapitel 5: Arrays Einführung Ein Array ist eine Reihung gleichartiger Objekte. a: a[0] a[1] a[2] a[3] a[n 1] Bezeichner a steht

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Stack. Seniorenseminar Michael Pohlig

Stack. Seniorenseminar Michael Pohlig Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Rekursive Prozeduren zu charakterisieren. Terminierung von rekursiven Prozeduren mit Hilfe von geeigneten Abstiegsfunktionen

Mehr

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

Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Humboldt-Universität zu Berlin Institut für Informatik Grundlagen der Programmierung WS 15/16 (Vorlesung von Prof. Bothe) Übungsblatt 4: Felder und Rekursion Abgabe: bis 9:00 Uhr am 14.12.2015 über Goya

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:

Mehr

Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck

Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck Kasparov versus Deep Blue Institut für Theoretische Informatik Universität zu Lübeck 18. Vorlesung zu Informatik A für MLS 14. Dezember 2006 Die Lernziele der heutigen Vorlesung und der Übungen. 1 Das

Mehr

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 13. März 2017 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:

Mehr

Die Türme von Hanoi. Wollen

Die Türme von Hanoi. Wollen Eine Loesungsstrategie 3 Die Türme von Hanoi Eine mögliche Strategie zur Lösung des Puzzles ist folgende: Falls der Turm die Höhe n hat, bewege den Turm der Höhe n-1 zunächst auf den dritten Pfahl. (Wie

Mehr

8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?

8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor? 8 Anwendung: Suchen Gegeben: Gesucht: Folge a ganzer Zahlen; Element x Wo kommt x in a vor? Naives Vorgehen: Vergleiche x der Reihe nach mit a[0], a[1], usw. Finden wir i mit a[i] == x, geben wir i aus.

Mehr

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

Aufgaben: Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public c l a s s Quadrat extends JavaKaraProgram 4 { 5 void turnaround ( ) Informatik: Einführung in Java Gierhardt Kara legt Muster!(Lsg.) Aufgaben: 1. Kara soll ein mit Kleeblättern gefülltes Quadrat mit variabler Seitenlänge ablegen. Der Methodenaufruf quadratzeichnen(5) soll

Mehr

Einführung in die Programmierung Wintersemester 2010/11

Einführung in die Programmierung Wintersemester 2010/11 Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Informatik I: Einführung in die Programmierung

Informatik I: Einführung in die Programmierung Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte Teile in Anlehnung an

Mehr

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang.   WS 07/08 Reihungen Prof. Dr. Christian Böhm In Zusammenarbeit mit Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Die Datenstruktur der Reihungen verstehen: mathematisch und im Speicher Grundlegende

Mehr

Objektorientierte Programmierung (ZQ1u2B)

Objektorientierte Programmierung (ZQ1u2B) Objektorientierte Programmierung (ZQ1u2B) Woche 4 Rekursion Christopher Scho lzel Technische Hochschule Mittelhessen 4. November 2015 Inhalt Rekursion Lineare Rekursion Verzweigte Rekursion Verschränkte

Mehr

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt Klassen und Objekte Klassen sind Vorlagen für Objekte. Objekte haben Attribute Konstruktoren Methoden Aus einer Klasse kann man beliebig viele Objekte herstellen. Attribute bestimmen die Eigenschaften

Mehr

ÜBUNGS-BLOCK 7 LÖSUNGEN

ÜBUNGS-BLOCK 7 LÖSUNGEN ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i

Mehr

A&R TECH C++ Chess Challenge

A&R TECH C++ Chess Challenge Willkommen zur A&R TECH C++ Chess Challenge! Wir freuen uns, dass du an dieser Herausforderung teilnimmst. Bevor es losgeht, möchten wir dich noch auf einige Dinge aufmerksam machen: Die Challenge besteht

Mehr

Kompaktkurs Einführung in die Programmierung Übungsblatt 5: Funktionen

Kompaktkurs Einführung in die Programmierung Übungsblatt 5: Funktionen Technische Universität München März 2013 Institut für Informatik Dr. rer. nat. Tobias Weinzierl Kaveh Rahnema Kompaktkurs Einführung in die Programmierung Übungsblatt 5: Funktionen Lernziele Mehrfache

Mehr

Einführung in die Informatik 1

Einführung in die Informatik 1 Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag,

Mehr

Reihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang

Reihungen. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang Reihungen Martin Wirsing in Zusammenarbeit mit Michael Barth, Fabian Birzele und Gefei Zhang http://www.pst.informatik.uni-muenchen.de/lehre/ws0506/infoeinf/ WS 05/06 2 Ziele Die Datenstruktur der Reihungen

Mehr

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. 3.6 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. Klassisches Beispiel: Berechnung von n! (Fakultät

Mehr

Wiederholungsklausur "ADP" WS 2016/2017

Wiederholungsklausur ADP WS 2016/2017 PD Dr. J. Reischer 23.02.2017 Wiederholungsklausur "ADP" WS 2016/2017 Nachname, Vorname Abschluss (BA, MA, FKN etc.) Matrikelnummer, Semester Versuch (1/2/3) Bitte füllen Sie zuerst den Kopf des Angabenblattes

Mehr

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)

Mehr

public static void main(string[] args) {

public static void main(string[] args) { Lösungen 55 Lösungen Aufgabe 1: Die Variable y enthält den Wert 1.0. Entsprechend den Prioritäten der beteiligten Operatoren / und = wird erst die Division und anschließend die Zuweisung durchgeführt.

Mehr

Einführung in die Programmierung Wintersemester 2017/18

Einführung in die Programmierung Wintersemester 2017/18 Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion

Mehr

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018 Fakultät IV NI & CV Java Einführung in die Informatik Wintersemester 2017/2018 Hinweis: Diese ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der schriftlichen Prüfung des Moduls Einführung

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von

Mehr

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

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen Rekursion Sie wissen wie man Programme rekursiv entwickelt Sie kennen typische Beispiele von rekursiven Algorithmen Sie kennen die Vor-/Nachteile von rekursiven Algorithmen Einführung 2 von 40 Rekursiver

Mehr

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String // Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String tostring() { String result = "["+info; for(list t=next;

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

Mehr

Technische Universität München SoSe 2018 Fakultät für Informatik, I Mai 2018 Dr. Stefanie Demirci

Technische Universität München SoSe 2018 Fakultät für Informatik, I Mai 2018 Dr. Stefanie Demirci Name: Vorname: Matr. Nr.: Technische Universität München SoSe 2018 Fakultät für Informatik, I-16 9. Mai 2018 Dr. Stefanie Demirci Probeklausur zu Algorithmen und Datenstrukturen Allgemeine Hinweise Die

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Aufrufe von Objektmethoden

Aufrufe von Objektmethoden Aufrufe von Objektmethoden SWE-35 Objektmethoden werden für ein bestimmtes Objekt aufgerufen; sie benutzen dessen Objektvariablen: double r = big.getradius (); Methodenaufrufe können auch die Werte von

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

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

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe Ludwig-Maximilians-Universität München München, 04.12.2009 Institut für Informatik Prof. Dr. Christian Böhm Annahita Oswald, Bianca Wackersreuther Einführung in die Programmierung WS 2009/10 Übungsblatt

Mehr

6 Speicherorganisation

6 Speicherorganisation Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für

Mehr

Workshop zu Folge 9.3 Überarbeitete Version vom Mai 2016

Workshop zu Folge 9.3 Überarbeitete Version vom Mai 2016 Workshop zu Folge 9.3 Überarbeitete Version vom Mai 2016 Schritt 1 - Ein Spielfeld Wir beginnen mit zwei einfachen Java-Klassen, dem eigentlichen Spielfeld und dem Applet zum Anzeigen des Spielfeldes.

Mehr

Algorithmen implementieren. Implementieren von Algorithmen

Algorithmen implementieren. Implementieren von Algorithmen Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente

Mehr

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

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. ) Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Mehrdimensionale Arrays

Mehrdimensionale Arrays Mehrdimensionale Arrays Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Eindimensionale Arrays haben wir bereits kennen gelernt. Es gibt aber auch mehrdimensionale Arrays. Die sind auch sehr notwendig, denken

Mehr