Rekursion mit JavaKara
|
|
- Frida Wolf
- vor 7 Jahren
- Abrufe
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 Gierhardt 1. KARA steht in einer Reihe, an deren Ende ein Baum steht. KARA soll bis zum Baum laufen, dabei alle Blätter einsammeln
MehrGestern: 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
MehrKurze 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
MehrArbeitsblatt 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,
MehrGrundlegende 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
MehrArbeiten 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
MehrMethoden-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.
MehrAUFGABE 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
Mehrimport 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)
MehrAufgabe 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
Mehr11. 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
Mehr12. 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,
MehrGrundlegende 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
MehrProgrammieren 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
MehrPrü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,
MehrGrundlegende 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
MehrJava 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();
MehrFHZ. 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
MehrGierhardt. 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
MehrVorkurs 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
MehrDas 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
MehrTechnische 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
MehrInstitut 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
MehrKapitel 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
MehrInstitut 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
Mehr11. 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
MehrII.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 -
MehrTechnische 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:
MehrAlgorithmen 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
MehrAlgorithmen 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
Mehrpublic 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
MehrKapitel 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,
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrVorkurs 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,
Mehr9. 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
MehrTeil 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...
Mehr7. 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++):
MehrSchwerpunkte. 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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrKapitel 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
MehrProbeklausur 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
Mehr2 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
MehrKapitel 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
MehrEinfü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
MehrTechnische 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:
MehrErste 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/
Mehr2. Algorithmenbegriff
2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen
MehrVorlesung 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
MehrKapitel 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
MehrSoftware 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
MehrImplementieren 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
MehrUniversitä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
MehrProgrammieren 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
MehrStack. 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.
MehrSoftware 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
MehrGrundlagen 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
MehrObjektorientierte Programmierung Studiengang Medieninformatik
Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:
MehrKasparov 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
MehrTechnische 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:
MehrDie 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
Mehr8 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.
MehrAufgaben: 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
MehrEinfü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
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrInformatik 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
MehrGrundlagen 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
MehrReihungen. 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
MehrObjektorientierte 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
MehrKlassen 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 Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
MehrA&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
MehrKompaktkurs 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
MehrEinfü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,
MehrReihungen. 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
MehrEin 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
MehrWiederholungsklausur "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
MehrTU 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)
Mehrpublic 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.
MehrEinfü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
MehrProbeklausur 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
MehrVorlesung 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
MehrRekursion. 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 tostring() { String result = "["+info; for(list t=next;
MehrEinfü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
MehrTechnische 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
MehrJavakurs 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
MehrAufrufe 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
Mehr12 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,
MehrOrganisatorisches. 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
MehrEinfü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
Mehr6 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
MehrWorkshop 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.
MehrAlgorithmen 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
MehrII. 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:
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrMehrdimensionale 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