Imperative vs. Funktionale Programmierung

Ähnliche Dokumente
1 Funktionale vs. Imperative Programmierung

Programmieren lernen mit Groovy Rekursion Rekursion und Iteration

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Einführung in die Programmierung mit VBA

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

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

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

Algorithmen und Datenstrukturen

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

C.3 Funktionen und Prozeduren

Kapitel 1: Informationsverarbeitung durch Programme

Grundlagen der Informatik I (Studiengang Medieninformatik)

Informatik 1. Prüfung im Wintersemester 1997/98

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Programmierkurs Python I

Zuverlässige Software mit GoTo Ludwig Suski

Kapitel 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen

Syntax der Sprache PASCAL

4.4 Imperative Algorithmen Prozeduren

Javakurs für Anfänger

Lösungsvorschlag Serie 2 Rekursion

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

INFORMATIK FÜR BIOLOGEN

III.1 Prinzipien der funktionalen Programmierung - 1 -

1 Programmiersprachen 1.1 1

Javakurs für Anfänger

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Programmierkurs Java

C- Kurs 04 Anweisungen

ALP I. Funktionale Programmierung

Algorithmen implementieren. Implementieren von Algorithmen

Euklidischer Algorithmus

Basiskonstrukte von Haskell

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

if ( Logischer Operator ) { } else { Anweisungen false

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Kapitel 1: Informationsverarbeitung durch Programme

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Algorithmierung und Programmierung - immer aktuell. Material, S.54ff.

Webbasierte Programmierung

Programmentwurf mittels strukturierter Programmierung. Programmentwurf. Nassi-Shneiderman-Diagramm [DIN ]

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

4.4 Imperative Algorithmen Verzweigung und Iteration

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

IoT-Werkstatt Das Internet der Dinge anfassbar machen Algorithmisches Denken

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

4.Grundsätzliche Programmentwicklungsmethoden

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

Programmieren I. Kapitel 5. Kontrollfluss

Informatik I Übung, Woche 40

Übersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)

Grundbegriffe der Informatik

Ein Fragment von Pascal

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

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

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Grundlagen der Theoretischen Informatik: Übung 10

Turing-Maschinen: Ein abstrakes Maschinenmodell

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Programmierkurs Python I

C-Propädeutikum Anweisungen

Elementare Konzepte von

Array-Zuweisungen. Array-Zuweisungen können über die Position, den Namen oder gemischt erfolgen.

Grundlegende Datentypen

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

ALP I Einführung in Haskell

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Kontrollstrukturen

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

2. Programmierung in C

Algorithmen und Datenstrukturen II

Einführung in Funktionale Programmierung. Klassifizierung von Programmierparadigmen und -sprachen. Einleitung & Motivation

6. Kontrollanweisungen II

Programmieren lernen mit Visual Basic

Crashkurs Python und Sage U23 Krypto-Mission

Abschnitt 5. Grundlagen der funktionalen & imperativen Programmierung

Funktionale Programmierung Mehr funktionale Muster

5. Kontrollanweisungen II

Repetitorium Programmieren I + II

Programmieren als Grundkompetenz

Transkript:

Beispiel: Entwerfe eine Funktion, die testet, ob eine Zahl n eine Primzahl ist oder nicht. Beobachtung: (1) Wenn n Primzahl ist, ist die Menge der Teiler von n leer. (2) Die Menge der Teiler von n sind alle Zahlen x zwischen 2 n-1, die n ohne Rest teilen

Imperatives Programm zur Berechnung, ob eine gegebene Zahl eine Primzahl ist function isprime (n : ganzzahl) : wahrheitswert; variables m : ganzzahl; found : wahrheitswert; begin m := 2; found := false; end while (m <= n-1) and (not found) do if (n mod m) = 0 then found := true; else m := m + 1; isprime := not found;

Das imperative Programm (lat. imperare = befehlen) besteht aus einer Folge von Befehlen (Statements) an die Maschine; es beschreibt, wie der Algorithmus abläuft Das imperative Programm kontrolliert die Abarbeitung durch explizite Schleifenanweisungen (while, for), bedingte Anweisungen (if then else), Sequenzierung (`;') von Anweisungen. Die Anweisungsfolge ist explizit festgelegt. Die Berechnung erfolgt als Seiteneffekt auf den Zustandsvariablen Zustandsvariablen dienen gleichzeitig zur Kontrolle der Maschine und zur Protokollierung des Ergebnisses

Der imperative Programmierer hat seine Anweisungen explizit aufzureihen und muss den Ablauf des Programms direkt kodieren (über Kontrollstrukturen) Der Zustand eines Algorithmus muss durch Variablenzuweisung bzw. -auslesen explizit kontrolliert werden Direkte Abstraktion des von Neumann schen Maschinenmodells

Imperative Programmiersprachen bieten noch weitergehenden direkten Zugriff auf die Maschine: Felder und Indexzugriffe (A[i]) (abstrahiert den linearen Speicher der Maschine sowie indizierende Adressierungsmodi) Pointer und Dereferenzierung (indirekte Adressierungsmodi) Explizite (De-)Allokation von Speicher (der Speicher wird eigenverantwortlich als Ressource verwaltet) Sprunganweisungen (goto) (direkte Manipulation des PC)

Funktionale Programmiersprachen gehören zu den deklarativen (lat. declarare = erklären) Programmiersprachen Sie beschreiben was getan werden muss, durch eine Folge von Ausdrücken (Expressions) -- Ist n eine Primzahl? isprime :: Integer -> Bool isprime n = (factors n == []) -- (1) where factors n = [ x x <- [2..n-1], n `mod` x == 0 ] -- (2)

Funktionale Programmiersprachen sind vollständig auf dem mathematischen Funktionsbegriff aufgebaut. Programme einer funktionalen Programmiersprache bestehen ausschließlich aus Funktionsdefinitionen, Funktionsaufrufen (Applikation) und Funktionskomposition (g f, g wird auf das Ergebnis von f angewendet. Programme berechnen ihre Ergebnisse allein durch die Ersetzung von Funktionsaufrufen durch Funktionsergebnisse. Berechnungen geschehen allein durch Auswertung von Funktionen, nicht durch Manipulation des Maschinenzustandes bzw. speichers FPLs sind zustandslos und bieten daher keine änderbaren Variablen

Beispiel für ein funktionales Programm zur Berechnung der Fakultätsfunktion fak :: ganzzahl -> ganzzahl fak 0 = 1 fak n = n * fak (n-1)