8 DieTürmevonHanoi. Problem:

Ähnliche Dokumente

Verteilte Systeme/Sicherheit im Internet




Nachfolgend alle Unterlagen

Abschlussklausur Cluster-, Grid- und Cloud-Computing (CGC) Dr. Christian Baun



Die Mikroprogrammebene eines Rechners


4. Übungsblatt zu Mathematik für Informatiker I, WS 2003/04


Programmierkurs Java

B1 Stapelspeicher (stack)

Von Zeit zu Zeit ist man gezwungen, ein fsck manuell auszuführen. Sehen Sie sich dazu einfach das folgende Beispiel an:

9 Dynamische Programmierung (Tabellierung)

Eröffnung eines Weiterbildungskontos für Versicherungsvermittler


Stephan Brumme, SST, 2.FS, Matrikelnr

Trustworthy Preservation Planning. Christoph Becker. nestor edition 4

Im Original veränderbare Word-Dateien



Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),



Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7


Security. Privacy. Authentity

Superharte, unterschiedlich gradierte PVD-Kohlenstoffschichten mit und ohne Zusätze von Titan und Silizium


Programmierung in C++

J.5 Die Java Virtual Machine


Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg Universitätsstraße 31, Regensburg

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Modellierung und Programmierung 1

Java Einführung Operatoren Kapitel 2 und 3

Technische Informatik 2 Adressierungsarten


Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

PPL 10 Installationsanleitung

)XQGDPHQWDOH &3$ /DVHU QP 6WHXHUXQJ 'DWHQDXIQDKPH 9HU] JHUXQJV VWUH NH /R N,Q :HL OL KWN YHWWH KURPDWRU 3KRWRGLRGH )LOWHU,) =HUKD NHU 0RQR 3UREH

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at


Tooldemo: Soot. Softwareanalyse SS 2011 Veranstalter: Prof. Dr. Klaus Ostermann Tillmann Rendel, M.Sc. Von Kim Maurice Nuspl

Kap 4. 4 Die Mikroprogrammebene eines Rechners



Technische Informatik. Der VON NEUMANN Computer

Stefan Michaelis E S. Lehrstuhl für Elektronische Systeme und Vermittlungstechnik. Lehrstuhl für Künstliche Intelligenz

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester


Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe


Erwin Grüner

Wirtschaftlichkeit und optimaler Betrieb von KWK-Anlagen unter den neuen energiewirtschaftlichen Rahmenbedingungen

Die Programmiersprache C


Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Tutorial Excel Übung 5&6 Tom s Skater -1- Die Aufgabenstellung ist der folgenden URL zu entnehmen: Übung5&6.

a. Flipflop (taktflankengesteuert) Wdh. Signalverläufe beim D-FF



Compiler und Codegenerierung. Hw-Sw-Co-Design


Wir unterscheiden folgende drei Schritte im Design paralleler Algorithmen:

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum


Einführung in die Java- Programmierung

Tutorübung 7: Mikroprogrammierung I

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

Rekursion. Was heißt "rekursiv" Page 1. Eine Methode m() heißt rekursiv, wenn sie sich selbst aufruft. Beispiel: Berechnung der Fakultät (n!

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

BS Registers/Home Network HLR/AuC


Sectoral Adjustment of Employment: The Impact of Outsourcing and Trade at the Micro Level

Advanced Encryption Standard. Copyright Stefan Dahler 20. Februar 2010 Version 2.0

Hello world. Sebastian Dyroff. 21. September 2009

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Grundlagen der Kognitiven Informatik

Computer-Architektur Ein Überblick

Kapitel 1. Programmierkurs. 1.2 Allgemeiner Aufbau des Computers. 1.1 Hallo, Computer...?

Strategische Standortplanung in Reverse-Logistik-Netzwerken - Eine empirische und modellgestützte Analyse

Unterprogramme, Pointer und die Übergabe von Arrays

Der MS-DOS Standardmonitor und Debugger DEBUG

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Einführung in die C++ Programmierung für Ingenieure


Die Befehle mit dem Ziel IP sind nichts anderes als Sprungbefehle, sie sind unten noch mal aufgeführt.

Instruktionssatz-Architektur

Midterm-Klausur Technische Grundlagen der Informatik

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen

Klausur in Programmieren

Beispiel Zusammengesetzte Zufallsvariablen

Transkript:

8 DieTürmevonHanoi Problem: 216

Bewege den Stapel von links nach rechts! InjedemZugdarfgenaueinRingbewegtwerden. Es darf nie ein größerer Ring auf einen kleineren gelegt werden. 217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

Idee: VersetzeneinesTurmsderHöheh =0isteinfach:wirtun nichts. VersetzeneinesTurmsderHöheh >0vonPositionanach Position b zerlegen wir in drei Teilaufgaben: 1.Versetzenderoberenh 1ScheibenaufdenfreienPlatz; 2. Versetzen der untersten Scheibe auf die Zielposition; 3. Versetzen der zwischengelagerten Scheiben auf die Zielposition. VersetzeneinesTurmsderHöheh >0erfordertalso zweimaliges Versetzen eines Turms der Höhe h 1. 234

ÔÙ Ð Ø Ø ÚÓ ÑÓÚ ÒØ ÝØ ÝØ µ ß ¼µ ß ÝØ Ö µ ÑÓÚ ¹½ µ ËÝ Ø ÑºÓÙغÔÖ ÒØ ØÑÓÚ ØÓ Ò µ ÑÓÚ ¹½ µ Ð Ð Bleibt die Ermittlung des freien Platzes... 235

0 1 2 0 2 1 1 2 0 2 1 0 Offenbar hängt das Ergebnis nur von der Summe der beiden Argumenteab... 0 1 2 0 1 2 1 1 3 2 2 3 236

Um solche Tabellen leicht implementieren zu können, stellt Java das Û Ø -StatementzurVerfügung: ÔÙ Ð Ø Ø ÝØ Ö ÝØ ÝØ µ ß Û Ø µ ß Ð ½ ¾ ÙÐØ Ð Ö ØÙÖÒ ¾ Ö ØÙÖÒ ½ Ö ØÙÖÒ ¼ Ö ØÙÖÒ ¹½ 237

AllgemeineFormeines Û Ø -Statements: Û Ø expr µ ß const 0 ss 0 ( Ö )? const 1 ss 1 ( Ö )? const k 1 ss k 1 ( Ö )? ( ÙÐØ ss k )? Ð expr sollteeineganzezahl(oderein Ö)sein. Die const i sindganz-zahligekonstanten. Die ss i sinddiealternativenstatement-folgen. 238

ÙÐØ beschreibtdenfall,beidemkeinerderkonstanten zutrifft. Fehltein Ö -Statement,wirdmitderStatement-Folgeder nächsten Alternative fortgefahren :-) 239

ÙÐØ beschreibtdenfall,beidemkeinerderkonstanten zutrifft. Fehltein Ö -Statement,wirdmitderStatement-Folgeder nächsten Alternative fortgefahren :-) Eine einfachere Lösung in unserem Fall ist: ÔÙ Ð Ø Ø ÝØ Ö ÝØ ÝØ µ ß Ö ØÙÖÒ ÝØ µ ¹ µµ Ð 240

FüreinenTurmderHöheh =4liefertdas: ÑÓÚ ¼ ØÓ ½ ÑÓÚ ¼ ØÓ ¾ ÑÓÚ ½ ØÓ ¾ ÑÓÚ ¼ ØÓ ½ ÑÓÚ ¾ ØÓ ¼ ÑÓÚ ¾ ØÓ ½ ÑÓÚ ¼ ØÓ ½ ÑÓÚ ¼ ØÓ ¾ ÑÓÚ ½ ØÓ ¾ ÑÓÚ ½ ØÓ ¼ ÑÓÚ ¾ ØÓ ¼ ÑÓÚ ½ ØÓ ¾ ÑÓÚ ¼ ØÓ ½ ÑÓÚ ¼ ØÓ ¾ ÑÓÚ ½ ØÓ ¾ 241

Bemerkungen: ÑÓÚ µistrekursiv,abernichtend-rekursiv. Sei N(h) die Anzahl der ausgegebenen Moves für einen Turm derhöheh 0.Dannist N(0) = 0 undfürh >0, N(h) = 1 +2 N(h 1) Folglichist N(h) =2 h 1. Bei genauerer Analyse des Problems lässt sich auch ein nicht ganz so einfacher nicht-rekursiver Algorithmus finden...(wie könnte der aussehen? :-) Hinweis: Offenbar rückt die kleinste Scheibe in jedem zweiten Schritt eine Position weiter... 242

9 VonMiniJavazurJVM Architektur der JVM: Code PC 17 0 1 2 3 17 Store SP 54 0 1 2 3 54 243

Code = enthält JVM-Programm; jede Zelle enthält einen Befehl; PC = Program Counter zeigt auf nächsten auszuführenden Befehl; Store = Speicher für Daten; jede Zelle kann einen Wert aufnehmen; SP = Stack-Pointer zeigt auf oberste belegte Zelle. 244

Achtung: ProgrammwieDatenliegenimSpeicher aberin verschiedenen Abschnitten. Programm-Ausführung holt nacheinander Befehle aus Code und führt die entsprechenden Operationen auf Store aus. 245

Konvention: Store SP 54 0 1 2 3 54 54 Store = Stack 3 2 1 0 246

Befehle der JVM: ÒØ-Operatoren: Æ ËÍ ÅÍÄ ÁÎ ÅÇ ÓÓÐ Ò-Operatoren: ÆÇÌ Æ ÇÊ Vergleichs-Operatoren: Ä ËË Ä É É Æ É LadenvonKonstanten: ÇÆËÌ ÌÊÍ ÄË Speicher-Operationen: ÄÇ ËÌÇÊ Sprung-Befehle: ÂÍÅÈ ÂÍÅÈ IO-Befehle: Ê ÏÊÁÌ ReservierungvonSpeicher: ÄÄÇ BeendungdesProgramms: À ÄÌ 247

Ein Beispiel-Programm: ÄÄÇ ¾ ÄÇ ¼ ÄÇ ¼ Ê ÄÇ ½ ÄÇ ½ ËÌÇÊ ¼ Ä ËË ËÍ Ê ÂÍÅÈ ËÌÇÊ ¼ ËÌÇÊ ½ ÄÇ ½ ÂÍÅÈ ÄÇ ¼ ÄÇ ¼ ÄÇ ½ ÄÇ ½ ËÍ ÏÊÁÌ Æ É ËÌÇÊ ½ À ÄÌ ÂÍÅÈ ÂÍÅÈ 248

Das Programm berechnet den GGT :-) DieMarken(Labels) bezeichnensymbolischdie Adressen der zugehörigen Befehle: = 5 = 18 = 22 = 23... können vom Compiler leicht in die entsprechenden Adressen umgesetzt werden(wir benutzen sie aber, um uns besser im Programmzurechtzufinden :-) 249

Bevor wir erklären, wie man MiniJava in JVM-Code übersetzt, erklären wir, was die einzelnen Befehle bewirken. Idee: Befehle, die Argumente benötigen, erwarten sie am oberen Ende des Stack. Nach ihrer Benutzung werden die Argumente vom Stack herunter geworfen. Mögliche Ergebnisse werden oben auf dem Stack abgelegt. BetrachtenwiralsBeispieledieIO-Befehle Ê und ÏÊÁÌ. 250

Ê 39 PC PC... falls 39 eingegeben wurde 251

39 ÏÊÁÌ PC PC... wobei 39 ausgegeben wird 252

Arithmetik Unäre Operatoren modifizieren die oberste Zelle. Binäre Operatoren verkürzen den Stack. 253

7 7 Æ PC PC 254

4 17 21 PC PC 255

4 17 ËÍ 13 PC PC 256

DieübrigenarithmetischenOperationen ÅÍÄ ÁÎ ÅÇ funktionieren völlig analog. DielogischenOperationen ÆÇÌ Æ ÇÊebenfalls mitdem Unterschied, dass sie statt mit ganzen Zahlen, mit Intern-Darstellungenvon ØÖÙ und Ð arbeiten(hier: tt und ff ). Auch die Vergleiche arbeiten so nur konsumieren sie ganze Zahlen und liefern einen logischen Wert. 257

tt ff Æ ff PC PC 258

4 17 Ä ËË ff PC PC 259