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

Größe: px
Ab Seite anzeigen:

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

Transkript

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

2 Inhaltsverzeichnis 14 Rekursive Programmierung Die Fakultätsfunktion Die Türme von Hanoi Ein einfaches Spiel... 7 Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 2

3 14 Rekursive Programmierung Wir wollen versuchen, zu verstehen, durch welches Prinzip es dem Rechner z.b. möglich wird, eine nur schwer zu übertreffende Spielstrategie zu entwickeln. Dieses Prinzip, das uns die Lösung vieler verwandter Fragestellungen erschließt, ist die rekursive Programmierung. An Hand von drei Beispielen wird gezeigt, wie mit Hilfe rekursiver Prozeduren sehr einfache und elegante Lösungen erstellt werden können: Ein anschauliches einführendes Beispiel findet sich in der Mathematik zur Berechnung der Fakultät. Eine Denksportaufgabe die Türme von Hanoi zeigt ganz deutlich, wie eine Fragestellung auf ein einfacheres Problem zurückgeführt werden kann. Letztlich wollen wir ein einfaches Spiel realisieren, um gegen den Computer anzutreten Die Fakultätsfunktion Die Fakultät einer positiven ganzen Zahl n > 0 wird definiert als Produkt n! = fact( n) = n ( n 1) L 2 1 der ganzen Zahlen von 1 bis n. Mit dieser Definition könnten wir sicher eine C++ Funktion realisieren, die dieses Produkt berechnet. Iterative Berechnung der Fakultät: int fact(int n) int prod = 1; while (n > 0) prod *= n--; return prod; Die Fakultät einer Zahl n könnte aber auch wie folgt definiert werden. 1, falls fact( n) = n fact( n 1), n = 0 sonst Das besondere daran ist, daß in der Definition von fact bereits die zu definierende Funktion verwendet wird. Eine solche Definition heißt rekursiv. Die Berechnung der Fakultät der Zahl n wird auf die Berechnung der Fakultät von n-1 zurückgeführt. Neu für uns ist, daß auch C++ die rekursive Definition von Funktionen zuläßt. Das bedeutet, daß man in dem Definitionsblock einer Funktion diese Funktion bereits aufrufen kann. Damit lassen sich derartige rekursive Definitionen eins zu eins in C++ Programmcode umsetzen. Und wir können die Fakultät nun auch ohne die Verwendung einer while-schleife programmieren. Die Funktion fact besteht aus einer bedingten Anweisung, die im Falle von n größer als 0, wieder die Funktion fact, nun mit n-1, aufruft. Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 3

4 Rekursive Berechnung der Fakultät: int fact(int n) if (n > 0) return n * fact(n-1); else return 1; Betrachten wir zum Verständnis dieser rekursiven Prozedur die Berechnung der Fakultät von 4. Unsere Funktion fact wird also mit dem Wert n = 4 aufgerufen. Die Berechnung des Funktionswertes, führt im if-zweig der bedingten Anweisung auf den Ausdruck: 4 * fact(3) Bevor dieser Ausdruck berechnet werden kann, muß das Ergebnis von fact(3) berechnet werden. Dies führt zu einem erneuten Aufruf der Funktion, diesmal mit dem Argument 3. Das Ergebnis dieses Aufrufs muß dann noch mit 4 multipliziert werden. Ebenso führt der Aufruf von fact(3) zu einem erneuten Aufruf der Funktion fact, diesmal mit dem Argument 2. Dieser Ablauf wird fortgesetzt, bis man beim Aufruf von fact(0) angelangt ist und das Ergebnis von 1 sofort ohne weitere Berechnungen im else-zweig erhält, da nun n nicht mehr größer als 0 ist. Das Ergebnis von fact(0) wird nun an den Aufrufenden fact(1) weitergereicht. Um das Ergebnis für fact(1) zu berechnen, muß noch mit 1 multipliziert werden; und so ergibt fact(1) = 1 * 1 = 1. So geht es rückwärts, bis fact(4) schließlich zu 4 * 6 = 24 berechnet wird. Folgende Abbildung stellt diese Aufrufkette dar. Die richtige Durchführung dieser Berechnung organisiert der Compiler mit Hilfe unserer rekursiven Definition vollkommen automatisch. Damit die Rekursion richtig funktioniert, muß sich der Programmierer nur um zwei Dinge kümmern: Grundprinzip rekursiver Prozeduren: Die entstehenden rekursiven Aufrufe müssen immer einfacher werden. Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 4

5 Und schließlich auf einen nicht rekursiven Fall führen, der die Aufrufkette abbricht. Rekursive Algorithmen können daher immer auf Probleme angewandt werden, die sich auf ein gleichartiges, aber einfacheres Problem zurückführen lassen. Und es muß eine Lösung für ein elementares Problem existieren. Das gilt auch für unser folgendes Beispiel Die Türme von Hanoi Bei dieser Knobelaufgabe müssen N Scheiben von einer Ausgangsposition zu einer Zielposition bewegt werden. Dazu dürfen die Scheiben auf einer Zwischenposition abgelegt werden. Der Durchmesser der Scheiben nimmt von unten nach oben hin kontinuierlich ab. Beim Transport der Scheiben müssen folgende 2 Regeln eingehalten werden: 1. Es darf nie eine größere Scheibe auf einer kleineren abgelegt werden. 2. Es darf in einem Zug immer nur eine Scheibe bewegt werden. Beim ersten Probieren werden wir bereits feststellen, daß kleinere Türme wiederholt umgesetzt werden müssen. Das Problem 5 Scheiben umzusetzen läßt sich also auf kleinere Probleme mit weniger Scheiben zurückführen und damit haben wir bereits das Prinzip für eine systematische Lösung mit Hilfe der Rekursion erkannt. Wir wollen uns jetzt vorstellen, wir hätten bereits eine Lösung gefunden, wenn die Höhe des Turmes nur um 1 kleiner wäre. Wir kennen also eine Lösung, um einen Turm von 4 Scheiben von einem Ort zu einem anderen Platz zu bewegen und wir könnten sicher auch die Rollen der Plätze als Zwischenlager bzw. Zielposition vertauschen. Damit gestaltet sich das Problem der 5 Scheiben sehr einfach: Transportiere die oberen 4 Scheiben zur Zwischenablage. Die unterste, größte Scheibe würde dabei sicher nicht stören. Die übriggebliebene größte Scheibe können wir jetzt ungehindert auf ihre Zielposition bewegen. Schließlich müssen wir noch den 4er Turm von der Zwischenablage auf die Zielposition transportieren; aber dafür kennen wir ja bereits wie angenommen eine Lösung, die sich nicht wesentlich von unserem ersten Transport des 4er Turms unterscheiden wird. Lediglich Ausgangsposition und Zielposition haben gewechselt. Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 5

6 Ich behaupte nun, damit ist die Knobelaufgabe erschöpfend gelöst. Wir haben also die Aufgabe, einen Turm der Höhe N zu bewegen, auf eine einfachere aber gleichartige Aufgabe zurückgeführt. Und es gibt auch eine elementare Lösung für Türme, die aus nur einer Scheibe bestehen. Prinzip der Rekursion Die rekursiv formulierte Lösung des Problems können wir sehr einfach in C++ umsetzen. Wir benötigen eine Funktion die folgende Parameter hat: Die Höhe, d.h. die Anzahl N an Scheiben, des umzusetzenden Turms. Drei Parameter, die die Belegung der drei Plätze beschreiben: - Ausgangsposition - Zwischenablage - Zielposition Rekursive Prozedur Hanoi: // Die Türme von Hanoi void Hanoi (int Hoehe, char Ausgang, char Zwischen, char Ziel) if (n > 0) Hanoi(Hoehe-1, Ausgang, Ziel, Zwischen); ziehe(n, Ausgang, Ziel); Hanoi(Hoehe-1, Zwischen, Ausgang, Ziel); void ziehe (int i, char Von, char Nach) cout << "ziehe Scheibe " << i << ", " << Von << " -> " << Nach << endl; Diese wenigen Programmzeilen bewegen nun jede Turmhöhe an die richtige Position. Dazu müssen wir die Funktion Hanoi nur mit der Turmhöhe, der Ausgangsposition und dem gewünschten Zielplatz / Zwischenplatz aufrufen. Hier soll ein Turm von 5 Scheiben von A nach C bewegt werden, wobei B als Zwischenlager genutzt wird. Aufruf der Prozedur Hanoi: // Lösung für die Türme von Hanoi der Höhe 5 int main () Hanoi (5, 'A', 'B', 'C'); return 0; Wenn sie nun den Anweisungen des Computers folgen, haben sie obendrein eine Lösung, die mit einer minimalen Anzahl an Scheibenbewegungen das gewünschte Ziel erreicht. Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 6

7 14.3 Ein einfaches Spiel Anhand eines einfachen Spiels für zwei Spieler, das dem NIM-Spiel verwandt ist, wollen wir zeigen, wie der Computer Spielstellungen bewerten kann, um einen möglichst optimalen Spielzug zu finden. Das Spiel: Zwei Spieler müssen abwechselnd Münzen aus einer Menge von Münzen nehmen. In jedem Zug darf ein Spieler entweder 3, 5, oder 7 Münzen entfernen. Kann ein Spieler nicht mehr ziehen, so hat er verloren. Wir starten mit einer zufälligen Zahl an Münzen. Dieses Spiel zu gewinnen, ist nicht schwer, da es eine einfache Gewinn-Strategie gibt. Wenn der Spieler die Strategie kennt und konsequent verfolgt, hat der Gegner von vornherein keine Chance. Für gewisse Anfangswerte von Münzen hat der Spieler, der beginnt, eine sichere Gewinnstrategie, für andere Anfangswerte gewinnt der zweite Spieler. Wenn beide die Strategie kennen, kann man nur noch hoffen, dass einer einen Fehler macht und das ist natürlich langweilig. Um nun unseren Computer in die Lage zu versetzen, dieses Spiel optimal zu spielen, wollen wir eine Funktion (Prädikat) zur Bewertung einer gegebenen Spielsituation entwickeln, welche uns sagen soll, ob der Spieler, der am Zug ist, eine sichere Gewinnmöglichkeit hat. Das Argument dieser Funktion ist die gegebene Spielsituation, die bewertet werden soll. Die Beschreibung einer gegebenen Spielsituation ist einfach die Anzahl der vorliegenden Münzen. Also eine ganze Zahl beschreibt den aktuellen Stand des Spiels ausreichend. Wir nennen unsere boolsche Funktion 'goodposition' und sie soll wahr liefern, wenn eine günstige Situation vorliegt und falsch wenn wir in einer Verlustsituation sind. Das Prädikat goodposition: // Spielstellung mit Gewinnmöglichkeit bool goodpos (int n) if (n < 3) return false; // schon verloren else if (n <= 9) return true; // klar wie ich gewinne else // ich gewinne, falls die Folgesituation schlecht ist return!goodpos(n-7)!goodpos(n-5)!goodpos(n-3); Für einige wenige Münzen ist ganz klar wer gewinnen oder verlieren wird. Bei weniger als 3 Münzen haben wir in jedem Fall verloren, da kein weiterer Zug mehr möglich ist. goodpos ergibt false. Zwischen 3 und 9 Münzen können wir durch Wegnahme von 3, 5 oder 7 Münzen die Anzahl immer soweit reduzieren, das der Gegner nicht mehr ziehen kann. Das ist also für den Spieler der am Zug ist eine höchst erfreuliche Situation, die in jedem Fall zum Gewinn führt also goodpos liefert true. Alle anderen Spielsituation können wir dann als für uns günstig bewerten, wenn wir durch irgend einen erlaubten Spielzug den Gegner in eine schlechte Situation zwingen können. Genau das versucht die Oder-Verknüpfung der möglichen Folge-Situationen, zu denen der Spieler, der am Zug ist, ziehen darf. Wenn irgend eine der Folgesituationen als "schlechte Position" (goodpos = false) zu bewerten ist, werden wir gewinnen also unsere Position ist gut. Die Funktion goodpos ist ein weiteres Beispiel für eine rekursive Prozedur, da für mehr als 9 Münzen die Funktion sich selbst aufruft. Das besondere hierbei ist, das die Funktion alle möglichen Spielzüge Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 7

8 ausprobieren muß, falls die Aufrufe nicht eine "schlechte" Position finden. Zur Bewertung einer beliebigen Spielsituation muß das Spiel also durch die rekursiven Aufrufe bis zum Spielende verfolgt werden, um zu entscheiden, ob ein Spielzug zum Erfolg führt. Zur Bewertung einer Spielsituation werden durch diese Oder- Verknüpfung nacheinander alle in Frage kommenden Spielzüge getestet. Bei Mißerfolg wird der Versuch zurückgezogen und die nächste Möglichkeit getestet. Dieses Verfahren setzt sich in den rekursiven Aufrufen von goodposition fort. Derartige rekursive Suchverfahren nennt man Backtracking-Verfahren Falls es keine weiteren alternativen Zugmöglichkeiten gibt, ist die aktuelle Spielsituation als "schlecht" zu bewerten. Die Auswertung der Oder-Verknüpfung kann allerdings abgebrochen werden, wenn ein passender Zug gefunden wurde; d.h.!goodpos() = true. Die anderen Alternativen müssen dann nicht mehr getestet werden. Der Operator wertet die Operanden von links nach rechts aus, solange nicht einer bereits true liefert. Beim Schachspiel explodiert der nötige Suchaufwand allerdings relativ schnell, da es in jeder Spielsituation eine große Menge möglicher Zug-Alternativen gibt. Deshalb können Schachprogramme die Suche nach einem optimalen Spielzug, nur bis zu einer gewissen Tiefe und nicht bis zum Ende des Spieles verfolgen. Daher kann ein Schachprogramm für eine beliebige Spielstellung auch nicht entscheiden ob es sich um eine Gewinn- oder Verlustsituation handelt. Statt dessen versucht man im Schach die Spielstellungen zu bewerten. Das bedeutet, das die Funktion zur Beurteilung der Spielsituation nicht mehr nur wahr oder falsch ausspuckt, sondern eine Zahl, die angibt wie gut oder schlecht eine bestimmte Spielstellung ist. Die Aufgabe der Suche nach einem optimalen Zug besteht nun darin, von allen Alternativen, diejenige zu wählen, die die beste Bewertung bekommt. Ein vollständiges Spielprogramm Unsere Funktion goodpos bildet den Kern eines Programms, das auch selber spielen kann. Wenn der Computer am Zug ist, wählt er aus allen möglichen Zügen einfach denjenigen aus, der in eine Spielsituation führt, für die goodpos falsch ist. Wenn eine solche Situation existiert, erhält der Gegner, der ja nun am Zug ist, eine "schlechte" Situation und ihm bleibt keine Chance. Existiert eine solche Stellung nicht, dann muß der Computer irgendeinen Spielzug zufällig wählen und ausführen. Er hat nur dann noch eine Chance, wenn der Gegner einen Fehler macht. Prof. Dr. Manfred Beham, FH Amberg-Weiden Seite 8

Programmierung in C++

Programmierung in C++ Skript zur Vorlesung Programmierung in C++ IT Kompaktkurs Teil 14: Rekursive Programmierung Wintersemester 2000/2001 Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Empfohlene Literatur: Die C++ Bibel:

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45

Mehr

C++ - Kontrollstrukturen Teil 2

C++ - Kontrollstrukturen Teil 2 C++ - Kontrollstrukturen Teil 2 Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Schleife und Verzweigung kombiniert SV initialisieren while(b1) if(b2) w f V1 V2 SV Richtung Ziel verändern Wichtiger Baustein vieler

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 Matthias Wieczorek Computer-Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45

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

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

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

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

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h>

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h> Lösungen Übung 5 1. Aufgabe #include int max(int anzarg, int a, int b,...) // Hilfsvariable für variable Parameter va_list argumente; va_start(argumente,b); // "b" letzter Parameter der Funktion,

Mehr

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

Die Ausgangsposition. Der aus drei Scheiben bestehende Turm steht auf Platz 1. Der Turm von Hanoi 1. Schritt Die Ausgangsposition. Der aus drei Scheiben bestehende Turm steht auf Platz 1. Im ersten Schritt legen wir die oberste Scheibe auf Platz 3. Nun legen wir die mittlere Scheibe

Mehr

Präzedenz von Operatoren

Präzedenz von Operatoren Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit

Mehr

Einführung in die Programmierung I. 5. Prozeduren. Stefan Zimmer

Einführung in die Programmierung I. 5. Prozeduren. Stefan Zimmer Einführung in die Programmierung I 5. Prozeduren Stefan Zimmer 19.11.2007 Prozedurdeklaration mit proc Eine (mächtigere) Alternative zur Funktionsdeklaration mit -> besteht aus dem Wort proc einer Sequenz

Mehr

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

Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt. Rekursion Unter Rekusion verstehen wir eine Funktion, die sich selbst aufruft. Da sie das nicht immerzu tun kann (das Programm würde ewig laufen) benötigt jeder rekursive Aufruf eine Abbruchbedingung!

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

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Grundlagen der Programmierung in C Funktionen

Grundlagen der Programmierung in C Funktionen Der erste Mechanismus für Code-Reuse! Grundlagen der Programmierung in C Funktionen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Ältester Mechanismus für Code-Reuse:

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

Algorithmen & Programmierung. Rekursive Funktionen (1)

Algorithmen & Programmierung. Rekursive Funktionen (1) Algorithmen & Programmierung Rekursive Funktionen (1) Berechnung der Fakultät Fakultät Die Fakultät N! einer nichtnegativen ganzen Zahl N kann folgendermaßen definiert werden: d.h. zur Berechnung werden

Mehr

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8 Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 6 Pkt.) a) Erklären

Mehr

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 4 Pkt.) Gegeben

Mehr

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung Wintersemester 2008/09 Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Funktionen Inhalt Funktionen - mit / ohne Parameter

Mehr

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =

Mehr

Rekursive Funktionen (1)

Rekursive Funktionen (1) Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Rekursive Funktionen (1)

Rekursive Funktionen (1) Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0

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

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften

Mehr

Induktion und Rekursion

Induktion und Rekursion Induktion und Rekursion Induktion und Rekursion Sommersemester 2018 Ronja Düffel 16. März 2018 Induktion und Rekursion > Mathematische Beweistechniken > Vollständige Induktion Der kleine Gauß Induktion

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

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen 2.9 Unstrukturierte Kontrollanweisungen W. Tasin, M.Sc. Fakultät 04 tasin@hm.edu Allgemeines (1) Unstrukturierte Kontrollanweisungen ermöglichen einen bedingten oder unbedingte

Mehr

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen!

1. Teilklausur Gruppe A. Bitte in Druckschrift leserlich ausfüllen! Objektorientierte Programmierung & Modellierung WS 2007/8 Universität Koblenz-Landau Institut für Informatik Prof. Dr. Ralf Lämmel Dr. Manfred Jackel 1. Teilklausur 07.12.2007 Gruppe A Bitte in Druckschrift

Mehr

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik Seite 1 von 7 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 4 Pkt.) Gegeben

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

5. Elementare Befehle und Struktogramme

5. Elementare Befehle und Struktogramme 5. Elementare Befehle und Struktogramme Programmablauf Beschreibung des Programmablaufs mittel grafischer Symbole Beispiel : Flussdiagramme ja nein Besser : Struktogramme Dr. Norbert Spangler / Grundlagen

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

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

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

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

Hackenbusch und Spieltheorie

Hackenbusch und Spieltheorie Hackenbusch und Spieltheorie Was sind Spiele? Definition. Ein Spiel besteht für uns aus zwei Spielern, Positionen oder Stellungen, in welchen sich das Spiel befinden kann (insbesondere eine besondere Startposition)

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 8 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

1 Aufgaben 1.1 Objektorientiert: (extended-hamster) Sammel-Hamster 1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster Aufgabe: Bearbeitungszeit: ca. 1/4 Std) Schreiben Sie ein "objektorientiertes" Programm ("CuB_05_1") für das Sammeln der Körner. Aufgabenbeschreibung:

Mehr

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 8 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

12. Rekursion Grundlagen der Programmierung 1 (Java)

12. Rekursion Grundlagen der Programmierung 1 (Java) 12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung

Mehr

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

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

4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume 4. Fortgeschrittene Algorithmen 4.1 Rekursion 4.2 Daten und Datenstrukturen 4.3 Bäume 4.1-1 4.1 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines

Mehr

Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do

Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do 1. (6 P) Schreiben Sie die folgenden mathematischen Ausdrücke als korrekte C++- Anweisungen (Variablendeklarationen,

Mehr

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen

Mehr

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

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1) Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1) Anweisungen: Eingabeanweisungen, z.b. Eingabe: x Ausgabeanweisungen, z.b. Ausgabe: Das Maximum ist, max Die Symbole x und max werden

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming

Mehr

5.3 Auswertung von Ausdrücken

5.3 Auswertung von Ausdrücken 5.3 Auswertung von Ausdrücken Funktionen in Java bekommen Parameter/Argumente als Input, und liefern als Output den Wert eines vorbestimmten Typs. Zum Beispiel könnte man eine Funktion i n t min ( i n

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung

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

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen? Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2015 1 Einführung Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Grundlagen von Algorithmen

Mehr

Inhalt. 3. Spezielle Algorithmen

Inhalt. 3. Spezielle Algorithmen Inhalt 0. Rechner und Programmierung für Kommunikationstechniker und Mechatroniker 1. Algorithmen - Wesen, Eigenschaften, Entwurf 2. Darstellung von Algorithmen mit Struktogrammen und Programmablaufplänen

Mehr

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

Einführung in die Programmierung für NF. Übung Einführung in die Programmierung für NF Übung 01 23.10.2013 Inhalt Übungen und Übungsblätter Uniworx und Abgabeformate Plagiarismus Algorithmen und Pseudocode Variablen und Methoden Boolsche Operatoren

Mehr

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT) Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen

Mehr

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik Programmieren I Methoden-Spezial Heusch --- Ratz 6.1, 6.2 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Parameterübergabe bei primitivem Datentypen (Wertkopie) public class MethodParameters

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I LOOP Programme, rekursive Funktionen und der Turm von Hanoi Prof. Dr. Nikolaus Wulff Berechenbarkeit Mitte des 20. Jahrhunderts beantworteten Pioniere, wie Alan M. Turing

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

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik Programmieren I Methoden-Special Heusch --- Ratz 6.1, 6.2 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Parameterübergabe: Wertkopie -By- public class MethodParameters { public

Mehr

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT) Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2018 Mai Bui Computer Aided Medical Procedures Technische Universität München Administratives Zentralübung (Mittwoch, 09:45 11:15) Programmierbeispiele

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

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen Verhalten Def. und Nutzen von Verhalten Algorithmen Pseudocode Schreibtischtest Verhalten & Pseudocode Das Verhalten beschreibt, wie sich die Datenstrukturen (Variablen) eines Programms verändern müssen,

Mehr

Einführung in die Programmierung Wintersemester 2011/12

Einführung in die Programmierung Wintersemester 2011/12 Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while

Mehr

hue06 December 2, 2016

hue06 December 2, 2016 hue06 December 2, 2016 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern

Mehr

Abschnitt 11: Korrektheit von imperativen Programmen

Abschnitt 11: Korrektheit von imperativen Programmen Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961

Mehr

4 Rekursionen. 4.1 Erstes Beispiel

4 Rekursionen. 4.1 Erstes Beispiel 4 Rekursionen Viele Algorithmen besitzen sowohl eine iterative als auch eine rekursive Lösung. Sie unterscheiden sich darin, dass die iterative Version meist einen etwas längeren Kode besitzt, während

Mehr

Was der Mathematiker Gauß nicht konnte, das können wir Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1

Was der Mathematiker Gauß nicht konnte, das können wir Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1 Was der Mathematiker Gauß nicht konnte, das können wir 16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1 friend Klassenmethoden können friend-funktionen anderer Klassen werden Ganze Klassen können

Mehr

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Teil 2

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden Teil 2 Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer Programmiertechnik Klassenmethoden Teil 2 Rekursion 2/23 Definition Rekursion, die siehe Rekursion Was ist Rekursion Allgemein: Rekursion ist die Definition

Mehr

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung

Mehr

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik Seite 1 von 8 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Für eine

Mehr

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest Gliederung Algorithmen und Datenstrukturen I Materialien zur Vorlesung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Winter 2009/10,

Mehr

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen Funktionen Funktionen erlauben, dem Programmcode hierarchisch zu strukturieren ein Hauptprogramm steuert dabei die Abfolge von Schritten, die einzelnen Schritte können durch Funktionen realisiert werden

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) //009 Informatik I (D-ITET) Übungsstunde 8, 6..009 simonmayer@student.ethz.ch ETH Zürich Besprechung/Vertiefung der Vorlesung [..009] ArrayStack Ausgezeichnet Einige haben s etwas kompliziert gemacht clear()

Mehr

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Divide et Impera im Römischen

Mehr

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/ WS17/18 Divide et Impera im Römischen

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

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider

Mehr

Inhalt. 3. Spezielle Algorithmen

Inhalt. 3. Spezielle Algorithmen Inhalt 0. Rechner und Programmierung für Kommunikationstechniker und Mechatroniker 1. Algorithmen - Wesen, Eigenschaften, Entwurf 2. Darstellung von Algorithmen mit Struktogrammen und Programmablaufplänen

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt 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 Wiederholungen - while - do-while - for

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

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

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen 453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv

Mehr

Ein kleiner Blick auf die generische Programmierung

Ein kleiner Blick auf die generische Programmierung TgZero Technik.Blosbasis.net June 3, 2013 1 Inhaltsverzeichnis 1 Vorwort 3 2 Ein kleines Beispiel 3 3 Templates 3 4 Verschiedene Datentypen 4 5 Variadic Templates 5 6 Unterschied zwischen den Programmiersprachen

Mehr

PIC16 Programmierung in HITECH-C

PIC16 Programmierung in HITECH-C PIC16 Programmierung in HITECH-C Operatoren: Arithmetische Operatoren - binäre Operatoren + Addition - Subtraktion * Multiplikation / Division % Modulo + - * / sind auf ganzzahlige und reelle Operanden

Mehr

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen. Themen der Übung Kontrollstrukturen, Pseudocode und Modulo-Rechnung CoMa-Übung III TU Berlin 9.10.01 1 Bedingte Anweisungen Vergleiche und logische Operatoren 3 Fallunterscheidungen 4 Zeichen und Zeichenketten

Mehr

Informatik I: Einführung in die Programmierung

Informatik I: Einführung in die Programmierung Informatik I: Einführung in die Programmierung 5., bedingte Ausführung und Albert-Ludwigs-Universität Freiburg Bernhard Nebel 27. Oktober 2017 1 und der Typ bool Typ bool Typ bool Vergleichsoperationen

Mehr

Beispiel 1: Fakultät

Beispiel 1: Fakultät 16. Rekursion Beispiel 1: Fakultät Rekursive Definition der Fakultät (Mathematik) n! = 1 falls n=0 n*(n-1)! falls n>0 Programmierung mittels einer rekursiven Funktion in C++ double fakultaet(int n) if

Mehr