Einführung in die Programmierung I. Funktionen, Rekursion. Stefan Zimmer

Ähnliche Dokumente
Funktionen; Rekursion

Programmieren lernen mit Visual Basic

Einführung in die Programmierung II. 4. Funktionen

Ausdrücke (1) Grundlegende Eigenschaften

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

Einführung in die Programmierung I. 4. Kontrollstrukturen. Stefan Zimmer

3 Funktionsdefinitionen

Datentypen: integer, char, string, boolean

Einführung in die Programmierung I. 8. Prozedurale Konzepte in Java, Teil1. Stefan Zimmer

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Rechnungen, wo kein sinnvoller Wert rauskommt Bsp.: 1/0, *0, sqrt(-1.0) Beispiel: Quadratische Gleichungen

Einführung in die Programmierung II. 5. Zeiger

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

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

Übungen zur Vorlesung Wissenschaftliches Rechnen I

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Programmsteuerung mit PHP - if/else, elseif,switch

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Collatz-Folge. falls a i ungerade.

JAVA-Datentypen und deren Wertebereich

Einführung in die Programmierung Wintersemester 2017/18

Einführung in die Programmierung Wintersemester 2010/11

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Einführung in die Programmierung II. 3. Kontrollstrukturen

Projekt 3 Variablen und Operatoren

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Kapitel 3: Variablen

Beispiel 1: Fakultät

Syntax der Sprache PASCAL

Grundlagen der Informatik 2. Operatoren

5.3 Auswertung von Ausdrücken

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Operatoren in C/C++ und Java:

Übungspaket 9 Logische Ausdrücke

Vorkurs Informatik WiSe 16/17

Java Einführung Operatoren Kapitel 2 und 3

Informatik Funktionen

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Grundlagen der Programmierung 2. Operationale Semantik

Java I Vorlesung Imperatives Programmieren

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

Informatik I: Einführung in die Programmierung

Einstieg in die Informatik mit Java

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

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

Einführung in die Programmierung

Algorithmen und Datenstrukturen (für ET/IT)

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Rekursive Funktionen

Ausdrücke in C. Ein großes Teilgebiet der Sprache C im Zusammenhang von Dieter Holzhäuser

Korrektheit und Hoare-Kalkül für Imperative Programme

Programmierkurs Python I

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

1. Wahrheitswerte. Boole sche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung.

Tutoraufgabe 1 (Auswertungsstrategie):

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:

Einführung in die Programmierung II. 9. Dynamische Datenstrukturen: Binärbäume

Programmierkurs Python I

Java Anweisungen und Ablaufsteuerung

Dr. Monika Meiler. Inhalt

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Operatoren in C. Gastvorlesung Andreas Textor

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

Grundlagen der Programmierung

Repetitorium Programmieren I + II

Algorithmen & Programmierung. Rekursive Funktionen (2)

Entscheidungen. INE1, Montag M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Vorkurs Informatik WiSe 17/18

Kompaktkurs Einführung in die Programmierung. 3. Fundamentale Datentypen, Ausdrücke

Einführung in die Programmierung WS 2018/19. Übungsblatt 2: Boolesche Algebra, Vollständige Induktion

Grundlagen der Programmierung 2 (1.A)

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

Logik I. Symbole, Terme, Formeln

Angewandte Mathematik und Programmierung

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Rekursive Funktionen

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

C.3 Funktionen und Prozeduren

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

Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung

HSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)

Stabilitätsabschätzungen Vorlesung vom

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

Einführung in die Computerlinguistik

Zahl ist der im Gradmaß angegebene Winkel, dessen Sinus Sie berechnen möchten.

Transkript:

Einführung in die Programmierung I Funktionen, Rekursion Stefan Zimmer 29.10.2007

2 Formeln wiederverwenden Ein Schritt in Richtung Programmierung ist, sich eine Sammlung von Formeln zuzulegen, die dann für verschiedene Werte ausgewertet werden können. Das entspricht dem Konzept der Funktion in der Mathematik: die Eingabedaten werden auf das Formelergebnis abgebildet. In Maple gibt es den Operator ->, der aus einer Formel eine Funktion macht.

3 Der Operator -> Der Operator -> hat zwei Operanden: auf der linken Seite die Formalparameter, das kann ein Name sein oder eine Liste von Namen, letztere durch Kommas getrennt und in ( ) eingeschlossen auf der rechten Seite ein Ausdruck Etwa so: (x,y) -> x^2*sin(y) Das Ergebnis des Operators ist etwas vom Typ Funktion, das wie alle anderen Objekte einem Namen zugewiesen werden kann.

4 Funktionsauswertung Ein Funktionsaufruf ist ein Objekt vom Typ Funktion (normalerweise ein Name, der zu so einem Objekt ausgewertet wird), gefolgt von einer Liste von Aktualparametern, letztere durch Kommas getrennt und in Klammern eingeschlossen: f(x,y) Bei der Auswertung werden die Aktualparameter ausgewertet; sie ersetzen dann in der Formel die Formalparameter, dann wird die Formel ausgewertet und liefert das Funktionsergebnis.

Fallunterscheidung Häufig braucht man für eine Funktionsdefinition eine Fallunterscheidung:,b ={ max a a, b fallsa b sonst In Maple gibt es dazu die Funktion if, die drei Parameter hat: eine Bedingung, das ist ein Ausdruck, der zu einem Wahrheitswert (true oder false) ausgewertet wird je ein Ausdruck, der (ausgewertet) das Funktionsergebnis ist, wenn die Bedingung true bzw. false ergibt 5

6 Bedingungen Um Bedingungen zu formulieren, gibt es die Vergleichsoperatoren =, <> (ungleich), >, >= (größer gleich), < und <= Weiter gibt es die logischen Operatoren wie and, or und not mit Wahrheitswerten als Operanden Manchmal werden solche Ausdrücke nicht so weit ausgewertet, wie wir wollen dann hilft die Funktion evalb.

Technische Probleme mit if Der Name if hat noch ein technisches Problem: er ist in Maple für etwas anderes reserviert (wofür, lernen wir noch) und daher ein sytaktisches Element, etwa so wie das Semikolon ;. Abhilfe: man kann explizit sagen, dass man den Namen if meint, indem man ihn in Rückwärts-Hochkommas einschließt: `if` Auf die Dauer eleganter: man weist die Funktion einfach noch einem anderen Namen zu: falls := `if`; Jetzt haben wir alles zusammen für z.b. Max := (a,b) -> `if`(a>=b, a, b); 7

8 Formelauswertung Ein Funktionsaufruf bekommt im Kantorovic- Baum einen Knoten mit so vielen Söhnen, wie die Funktion Parameter hat. Z.B. für Max(Max(10*n, n+10), 2^n): Max Max ** * + 2 n 10 n n 10 Nebenbei: die Auswertung der Parameter kann unterdrückt werden (wie bei if): uneval.

Divide et impera! Funktionsdefinitionen sind ein wichtiges Hilfsmittel bei einer zentralen Aufgabe der Programmentwicklung, der Zerlegung des (schrecklich großen) Gesamtproblems in handliche Teilprobleme: Teile und herrsche! Besonders wichtig hierbei: das Innenleben einer (vernünftig geschriebenen) Funktion geht den Benutzer nichts an er bekommt nur gesagt, welche Parameter er reinzustecken hat und was das Ergebnis ist, alles andere braucht ihn nicht zu interessieren, er kann sich über wichtigere Dinge Gedanken machen. 9

10 Rekursion Ein interessanter Fall von Teile und herrsche liegt vor, wenn Teilprobleme auftreten, die dieselbe Struktur des Ausgangsproblem haben, aber einfachere Eingabedaten. Dann können wir die Funktion selber zum Lösen dieser Teilprobleme verwenden diese Technik nennt man Rekursion und dafür gibt's jetzt noch einige Beispiele.

11 Aufrufstruktur Fibonacci-Zahlen Die Aufrufstruktur der ineffizienten Funktion F(n) und zum Vergleich das Schema der effizienten Berechnung F(n) F(n) F(n-1) F(n-2) F(n-1) F(n-2) F(n-3) F(n-3) F(n-4) F(n-2) F(n-3) F(n-4) F(n-4) F(n-5) F(n-4) F(n-5) F(n-5) F(n-6) F(n-3)...................................................