Projekt: Der Turm von Hanoi

Ähnliche Dokumente
Der Turm von Hanoi [als Java Applet]

Inhalt. 7 Rekursionen Eine unendliche Geschichte Fakultät Türme von Hanoi Dr.

Projektthema: Modul Programmiersprachen (Java)

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

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

Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.

Vorkurs Informatik WiSe 17/18

Nadel 1 Nadel 2 Nadel 3

II.3.1 Rekursive Algorithmen - 1 -

Vorkurs Informatik WiSe 16/17

Praktikum aus Programmierung Dr. Michael Hahsler (WS 05/06) Projekt: Würfelpoker

ALPII Objektorientierte Programmierung

Elementare Konzepte von

Einstieg in die Informatik mit Java

9 Türme von Hanoi Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleine

EidP. Blocktutorium SS 2014

Klassenvariablen, Klassenmethoden

C++ - Kontrollstrukturen Teil 2

Inhalt. 3. Spezielle Algorithmen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Informatik Abitur Bayern 2017 / II - Lösung

Rekursive Funktionen

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Rekursive Algorithmen

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

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

Welche Informatik-Kenntnisse bringen Sie mit?

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

JAVA - Rekursion

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

Stapel (Stack, Keller)

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

4. Algorithmus der Woche Zahlen auf Deutsch aussprechen Wie macht das ein Auto-Navigationssystem?

Listing 1: Cowboy. Listing 2: Woody

n(n + 1)(2n + 1). 6 j 2 = Hinweis: Setze für n IN n(n + 1)(2n + 1) 6 A(n) : und wähle die Bezeichnung s n := n (2j + 1) = n2 (2j + 1) = (n + 1)2

Die Ausgangsposition. Der aus drei Scheiben bestehende Turm steht auf Platz 1.

1 2 3 Bewege Stapel von links nach rechts. In jedem Zug darf genau ein Ring bewegt werden. Es darf nie ein größerer auf einen kleineren Ring gelegt we

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

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundlagen der Programmierung in C Funktionen

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Java - weil es Spass macht Aegidius Plüss

Algorithmen implementieren. Implementieren von Algorithmen

Konzepte und Methoden der Programmierung Lösungen P. Fierz / FS 2012

Speicher und Adressraum

5 Codierung nach RSA (Lösung)

Hilfsblatt für C++ Prüfungen im 5. Semester

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)

Verkettete Datenstrukturen: Listen

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Informatik B von Adrian Neumann

Programmieren 1 C Überblick

System.out.println("TEXT");

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Übungen zu Computeranwendung und Programmierung WS 13/14

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

4 Rekursionen. 4.1 Erstes Beispiel

JAVA-Datentypen und deren Wertebereich

8.6 Visualisierung der Sortieralgorithmen

Einführung in die Programmierung für NF MI. Übung 04

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Durchzuführende Aktivität: Turm von Hanoi

Einstieg in die Informatik mit Java

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume

Einstieg in die Informatik mit Java

= =

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Objektorientierte Programmierung OOP Programmieren mit Java

Java Kurzreferenz Für Fortgeschrittene

Java: Eine kurze Einführung an Beispielen

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

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

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

Einführung in die Programmierung Vorlesungsprüfung

Programmierkurs Java

Die Klasse java.lang.object. Thorsten Treffer

Einstieg in die Informatik mit Java

Anweisungen zur Ablaufsteuerung

Selbststudium OOP8 & ALG3 Aufgaben

Klausur Einführung in die Informatik I für Elektrotechniker 16. Juli 2003

Java programmieren mit JavaKara. Eine Zusammenfassung in Beispielen

'($)*'+ $, *$+*$'- $..$+/, 01.2$, 2*$0, - $'($)*'+ $, *$+*$

Damit kann die Kantenlänge s berechnet werden: s = s=17cm ; 3s = 51cm; 5s = 85 cm d) Volumen des Würfels: 2197cm 3

Türme von Hanoi. Worum geht es? Iterativer Algorithmus

Klausur: Java (Liste P)

Informatik für Schüler, Foliensatz 18 Rekursion

Ausnahmebehandlung in Java

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

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

Prof. Dr. Heinrich Müller; Dr. Frank Weichert 7. September 2015

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Transkript:

Projekt: Der Turm von Hanoi als Java Applet... Monika Wojtowiec Michael Gebhard STephan Kambor Dauer ca. 20 min Version 1.01 Gliederung ~> 1. Aufgabenstellung ~> 2. Das Spiel Geschichte Regeln Prinzip ~> 3. Die Lösung ~> 4. Die Umsetzung

1. Aufgabenstellung ~> Entwicklung als Java Applet ~> Problem soll für Turm mit n Scheiben gelöst werden ~> graphische Darstellung ~> Ablauf der Lösung animiert per Vor- bzw. Zurücktasten 2. Das Spiel Geschichte ~> Legende [1883] von französischem Mathematiker Eduard Lucas ~> in einem Tempel in der indischen Stadt Benares lagen 64 kostbare Scheiben aus Diamant zu einem Turm aufgeschichtet ~> Turm soll unter Beachtung heiliger Regeln umgeschichtet werden ~> dies klang so unwarscheinlich, dass man sagte: "Wenn es gelingt, wird der Tempel, das Leben, das Universum und der ganze Rest zu Staub zerfallen!"

2. Das Spiel Die [heiligen] Regeln ~> Die Scheiben dürfen nur auf einem der drei festgelegten Plätze liegen. ~> Man darf immer nur eine Scheibe umlegen. ~> Man darf eine größere Scheibe nicht auf eine kleinere legen. 2. Das Spiel Prinzip Beispiel mit drei Scheiben ~> Ausgangssituation

2. Das Spiel Prinzip Beispiel mit drei Scheiben Die Scheiben müssen mit Hilfe des Zwischenlagers [rechts] und unter beachtung der Regeln von Platz 1 [links] auf Platz 2 [mitte] gebracht werden. 2. Das Spiel Prinzip Beispiel mit drei Scheiben ~> Endsituation

3. Die Lösung ~> Beweis das es möglich ist n Scheiben umzustapeln ~> Berechnung der Anzahl der Züge ~> Erklärung am besten mit dem Applet 3. Die Lösung ~> gleiches Prinzip egal wie viele Scheiben ~> wenn drei Scheiben dann auch vier ~> wenn vier Scheiben dann auch fünf usw. ~> Beweis durch vollständige Induktion

3. Die Lösung Für 3 Scheiben 7 Züge. Für 4 Scheiben 7+1+7=15 Züge. Für 5 Scheiben 15+1+15=31 Züge. Daraus ergibt sich die Formel: Züge zur Lösung = 2 Scheibenanzahl - 1 3. Die Lösung ~> Beispiel mit 64 Scheiben ~> 2 64-1 = 18.446.744.073.709.551.615 ~> 18 Trillionen 446 Billiarden 744 Billionen 73 Milliarden 709 Millionen 551 Tausend 615 Züge ~> In einem Menschenleben nich zu schaffen ~> grob gerundet 585 Milliarden Jahre

4. Die Umsetzung Erzeugung eines Strings mit der Lösung. String Loesung(int anzahl,string quelle,string lager,string ziel) { String loesung=new String(); loesung = quelle+ziel; if (anzahl>1) loesung = Loesung(anzahl-1,quelle,ziel,lager)+loesung+Loesung(anzahl-1,lager,quelle,ziel); return loesung; } 4. Die Umsetzung Die Lösung wird durch angeben des Quell und des Zielstiftes des entsprechenden Schrittes berechnet. Die Nummerierung beginnt mit Null. 01021201202101 ist in diesem Fall die Lösung für drei Scheiben. Für das Programm heißt dieses, dass zuerst vom ersten auf den zweiten Stift, dann vom ersten zum dritten usw. geschoben wird. So ein Schritt wird in der Methode void demo (boolean go) ausgeführt.

4. Die Umsetzung In einzelnen Schritten wird der Lösungsstring generiert: Aufruf mit (3, 0, 2, 1 ): loesung= 01 loesung=(2, 0, 1, 2 )+01+(2, 2, 0, 1 ) (2, 0, 1, 2 ): loesung= 02 loesung=(1, 0, 2, 1 )+02+(1, 1, 0, 2 ) (1, 0, 2, 1 ): loesung= 01 return 01 (1, 1, 0, 2 ): loesung= 01 return 12 (2, 0, 1, 2 ): return 010212 (2, 2, 0, 1 ): loesung= 21 loesung=(1, 2, 1, 0 )+02+(1, 0, 2, 1 ) (1, 2, 1, 0 ): loesung= 20 return 20 (1, 0, 2, 1 ): loesung= 01 return 01 (2, 0, 1, 2 ): return 202101 (3, 0, 2, 1 ): return 01021201202101 4. Die Umsetzung void demo(boolean go) führt damit immer einen Schritt aus, wobei go aussagt in welche Richtung, true für vorwärts false für rückwärts. Die Buttons [Go] und [Back] rufen jeweils diese Methode einmal auf, falls der Turm nicht am Ende ist. Der Button [Animation] erstellt, falls nicht schon durch vormaliges drücken geschehen, einen Thread der die Methode demo in vorwärts Richtung immer wieder aufruft. Er setzt die Laufvariable solange auf true, bis entweder durch [Reset] oder [Stop] die Laufvariable false gesetzt wird.

4. Die Umsetzung Der Button [Reset] setzt den Turm in die Ausgangsposition zurück und aktualisiert die beteiligten Variablen. Die Anzahl der Scheiben wird auf Grundlage der Auswahl generiert. Die Scheiben selbst werden durch entsprechende Größenanpassung des Grundbildes in paint() erzeugt. Vielen Dank für die Aufmerksamkeit...