Funktionale Programmierung mit Haskell
|
|
|
- Oskar Kranz
- vor 10 Jahren
- Abrufe
Transkript
1 Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die Sprache Haskell II. Fallstudien 8. Suchbäume und beliebige Graphen 9. Lambda-Interpretierer 10. Syntaxanalyse 11. Algebraische Spezifikation 12. Semantik operationeller Sprachen 13. Kategorien in Haskell 14. Compilieren funktionaler Programme c Hans J. Schneider 2011
2 Motivation Philip Wadler: The essence of functional programming (Principles of Programming Languages, 1992) Rein funktional oder nicht? Pure functional languages (Haskell, Miranda) offer the power of lazy evaluation and the simplicity of equational reasoning. Impure functional languages (ML, Scheme) offer a tempting spread of features such as state, exception handling, or continuations. Wadlers Entscheidung hängt davon ab, wie leicht ein Programm geändert werden kann: Pure languages ease change by making manifest the data upon which each operation depends. But, sometimes, a seemingly small change may require a program [... ] to be extensively restructured. Funktionale Programmierung mit Haskell 9.1
3 Beispiel: Interpretierer für den Lambda-Kalkül Wadlers Beispiel beschränkt sich auf Addition, Funktionsdefinition und Funktionsanwendung. Definition der zu interpretierenden Terme: data Term = Var Name Con Int Add Term Term Lam Name Term App Term Term Weitere Operationen können problemlos eingebaut werden. Die Beschränkung auf den Typ Int erspart die Typprüfung. Die Interpretation ist wesentlich einfacher als die für zuweisungsorientierte Sprachen. (Siehe später!) Funktionale Programmierung mit Haskell 9.2
4 Kern eines Interpretierers Kern eines Interpretierers: Typ: interp (Var x) e = lookup x e interp (Con i) e = Num i interp (Add u v) e = add (interp u e) (interp v e) interp (Lam x v) e = Fun (\a -> interp v ((x,a):e)) interp (App t u) e = apply (interp t e) (interp u e) interp Wir benötigen noch: :: Term -> Environment -> Value die Basisfunktionen add und apply, die Definitionen von Term, Environment, und Value, kümmern uns darum aber erst in der Fassung mit monadischen Klassen. Funktionale Programmierung mit Haskell 9.3
5 Wadlers Varianten des Interpretierers To add error handling to it, I need to modify the result type to include error values, and at each recursive call to check for and handle errors appropriately. exception handling To add an execution count to it, I need to modify the result type to include such a count, and modify each recursive call to pass around such counts appropriately. global variable To add an output instruction to it, I need to modify the result type to include an output list, and to modify each recursive call to pass around this list appropriately. side effect Wadlers Vorschlag mit monadischen Klassen: All that is required is to redefine the monad and to make a few local changes. Funktionale Programmierung mit Haskell 9.4
6 Modifikation der Basiswerte Das Beispiel wird auf ganzzahlige Werte und Funktionen darauf beschränkt: data Value = Wrong Num Int Fun (Value -> M Value) Der Typkonstruktor M erlaubt, das eigentliche (rechnerische) Ergebnis um Zusatzinformationen zu erweitern. Die Werte müssen ausdruckbar sein: instance Show Value where show Wrong = "<wrong>" show (Num i) = show i show (Fun f) = "<function>" Das Ausdrucken der M-Werte muss abhängig von deren Definition geregelt werden. Hinweis: In Wadlers Arbeit werden unterschiedliche Konstruktoren verwandt. Funktionale Programmierung mit Haskell 9.5
7 Standardversion Value benötigt keine zusätzliche Information (Wadler-Variante 0): newtype M a = M a instance Show a => Show (M a) where show (M a) = show a Allgemeine Definition der monadischen Interpretiererklasse: class InterpMonad m where unit :: a -> m a -- entspricht return bind :: m a -> (a -> m b) -> m b -- entspricht >>= fail :: String -> m a instance InterpMonad M where unit a = M a (M a) bind k = k a fail s = error s -- wird nicht aufgerufen Wadler definiert für jede Version eine eigene Klasse und muss dann auch die Methoden unterschiedlich benennen. Funktionale Programmierung mit Haskell 9.6
8 Grundlegende Funktionen Operationen auf den Werten: Funktionsanwendung: -- apply :: Value -> Value -> M Value apply (Fun k) a = k a apply notfun a = unit Wrong Arithmetische Operationen: -- add :: Value -> Value -> M Value add (Num i) (Num j) = unit (Num (i+j)) add a b = unit Wrong Umgebung: type Environment = [(Name, Value)] type Name = String -- lookup :: Name -> Environment -> M Value lookup x [] = unit Wrong lookup x ((y,b):e) = if x==y then unit b else lookup x e Funktionale Programmierung mit Haskell 9.7
9 Interpretation der Terme Die Interpretation eines Termes liefert, abhängig von der Umgebung einen monadischen Wert: -- interp :: Term -> Environment -> M Value Interpretation der Atome: interp (Var x) e = lookup x e interp (Con i) e = unit (Num i) interp (Lam x v) e = unit (Fun (\a -> interp v ((x,a):e))) Interpretation der vordefinierten Operationen: interp (Add u v) e = interp u e bind (\x -> interp v e bind (\y -> add x y)) Interpretation der Funktionsanwendung: interp (App t u) e = interp t e bind (\f -> interp u e bind (\x -> apply f x)) Funktionale Programmierung mit Haskell 9.8
10 Erinnerung unit verwandelt Value in M Value: unit :: a -> m a unit a = M a interp (Con i) e = unit (Num i) Was macht bind? bind :: m a -> (a -> m b) -> m b (M y) bind k = k y bind gibt einen M Value an eine Funktion Value -> M Value weiter, die einen neuen M Value berechnet. interp (Add u v) e = interp u e bind (\x -> interp v e bind (\y -> add x y)) Funktionale Programmierung mit Haskell 9.9
11 Beispiele Testfunktion: -- test :: Term -> String test t = show (interp t []) Testbeispiele: twice = (Lam "f" (Lam "x" (App (Var "f") (App (Var "f") (Var "x"))))) increm = (Lam "x" (Add (Var "x") (Con 1))) term12 = (App (App twice increm) (Con 5)) Main> test term12 "7" Main> test increm "<function>" Main> test (App increm (Con 10)) "11" Beispiel mit Fehler: Main> test (App (App twice (Con 3)) (Con 5)) "<wrong>" Funktionale Programmierung mit Haskell 9.10
12 Interpretierer mit Fehlermeldungen Wir unterscheiden in M Value zwischen erfolgreichen und fehlerbehafteten Berechnungen: data M a = Suc a Err String Fehler werden bis zum Ende der Berechnung durchgereicht: instance InterpMonad M where unit a = Suc a (Suc a) bind k = k a (Err s) bind k = Err s fail s = Err s und schließlich ausgedruckt: instance Show a => Show (M a) where show (Suc a) = "Success: " ++ show a show (Err s) = "Error: " ++ s Man könnte auch auf die Meldung Success verzichten. Funktionale Programmierung mit Haskell 9.11
13 Notwendige Änderungen interp muss gar nicht geändert werden. lookup muss an einer Stelle geändert werden: lookup x [] = fail("unbound variable: " ++ x) lookup x ((y,b):e) = if x==y then unit b else lookup x e apply muss an einer Stelle geändert werden: apply (Fun k) a = k a apply notfun a = fail("should be function: " ++ show notfun) add muss an einer Stelle geändert werden: add (Num i) (Num j) = unit (Num (i+j)) add a b = fail("should be numbers: " ++ show a ++ ", " ++ show b) Man könnte bei add noch eine Fallunterscheidung bezüglich des nicht korrekten Summanden einfügen. Funktionale Programmierung mit Haskell 9.12
14 Beispiele term12 = (App (App twice increm) (Con 5)) terme1 = (Add (Var "x") (Con 10)) terme2 = (Add (Con 10) term9) terme4 = (App (App twice (Con 3)) (Con 5)) terme5 = (App (App twice (Con 3)) (Var "x")) Korrektes Beispiel: Main> test term12 "Success: 7" Inkorrekte Beispiele: Main> test terme4 "Error: should be function: 3" Main> test terme1 "Error: unbound variable: x" Main> test terme2 "Error: should be numbers: 10, <function>" Main> test terme5 "Error: unbound variable: x" Funktionale Programmierung mit Haskell 9.13
15 Interpretierer mit Reduktionszähler Das Zählen der Reduktionen (Anwendung eines λ-ausdruckes auf ein Argument) wird hier als Beispiel für das Mitführen von Zuständen und ihrer Transformation betrachtet. Eine Zustandstransformation geht von einem Zustand aus und liefert einen neuen Zustand, zusammen mit einem Wert: newtype M a = M (State -> (a, State)) Gegenüber der Fassung von Wadler ist hier der Konstruktor M eingefügt. Für das Zählerbeispiel genügt: type State = Int tick = M (\s -> ((), s+1)) Am Ende sollen das Ergebnis und der akkumulierte Zähler ausgedruckt werden: instance (Show a) => Show (M a) where show (M f) = let (a, s) = f 0 in "Value: " ++ show a ++ " Count: " ++ show s Funktionale Programmierung mit Haskell 9.14
16 Einbettung in die monadische Klasse unit liefert den gegebenen Wert, ohne den Zustand zu ändern.: instance InterpMonad M where unit a = M (\s -> (a, s)) bind :: M a -> (a -> M b) -> M b nimmt eine Zustandstransformation M m und eine Funktion k und transformiert den Anfangszustand s0 mit m zu einem Paar (a,s1): (M m) bind k = M (\s0 -> let (a, s1) = m s0 k erzeugt durch Anwendung auf diesen Wert a eine neue Zustandstransformation M m : (M m ) = k a An diese wird der Zwischenzustand s1 weitergegeben: in m s1 ) fail s = error s -- wird nicht aufgerufen Funktionale Programmierung mit Haskell 9.15
17 Einfügen des Zählers State ist in dieser Variante ein Zähler: newtype M a = M (State -> (a, State)) tick = M (\s -> ((), s+1)) Wir müssen die Zähloperation in die Interpretationen von add und apply einfügen. add: add (Num i) (Num j) = tick bind (\() -> unit (Num (i+j))) add a b = unit Wrong apply apply (Fun k) a = tick bind (\() -> k a) apply notfun a = unit Wrong Funktionale Programmierung mit Haskell 9.16
18 Simulation von add add (Num i) (Num j) = tick bind (\() -> unit (Num (i+j))) = M (\s -> ((), s+1)) bind (\() -> unit (Num (i+j))) = M (\s0 -> let (a, s1) = (\s -> ((), s+1) s0 = ((), s0+1) a = () s1 = s0+1 (M m ) = (\() -> unit (Num (i+j))) a = unit (Num (i+j)) = M (\s -> (Num (i+j), s)) m = (\s -> (Num (i+j), s)) in (m s1) = (\s -> (Num (i+j), s)) (s0+1) = (Num (i+j), s0+1) Funktionale Programmierung mit Haskell 9.17
19 Beispiele term1 = (Add (Con 10) (Con 11)) term4 = (Lam "x" (Add (Var "x") (Var "x"))) term5 = (App term4 term1) Interpretation mit der ursprünglichen Version: *Main> test term5 "42" Interpretation mit der Zähler-Version: *Main> test term5 "Value: 42 Count: 3" Fehlerhafte Beispiele: terme1 = (Add (Var "x") (Con 10)) terme4 = (App (App twice (Con 3)) (Con 5)) *Main> test terme1 "Value: <wrong> Count: 0" *Main> test terme4 "Value: <wrong> Count: 2" Funktionale Programmierung mit Haskell 9.18
20 Call-by-name-Interpretierer Die bisherigen Lösungen simulieren das Prinzip call-by-value : Das Argument ist ein Wert. Fun:: Value -> M Value Haskell macht das natürlich lazy! Bei Auswertung mit call-by-name muss die Auswertung des Arguments zurückgestellt werden. Das Argument bleibt eine Berechnung: Fun:: M Value -> M Value Notwendige Änderung des Datentyps Value: data Value = Wrong Num Int Fun (M Value -> M Value) Variablen sind jetzt an Berechnungen gebunden: type Environment = [(Name, M Value)] Deshalb genügt in lookup jetzt b statt unit b: lookup x [] = unit Wrong lookup x ((y,b):e) = if x==y then b else lookup x e Funktionale Programmierung mit Haskell 9.19
21 Änderungen in den Berechnungen Die Auswertung von Konstanten und der Addition ändert sich nicht. Die Änderung bei der Auswertung der Variablen ist bereits in lookup berücksichtigt. Die Auswertung der Lambda-Ausdrücke sieht zwar gleich aus: interp (Lam x v) e = unit (Fun (\a -> interp v ((x,a):e))) interp (Lam x v) e = unit (Fun (\m -> interp v ((x,m):e))) Der Parameter ist jetzt aber vom Typ M Value, nicht mehr vom Typ Value. Die wesentliche Änderung passiert in der Auswertung der Funktionsapplikation: Die Funktion wird ausgewertet, nicht aber das Argument. interp (App t u) e = interp t e bind (\f -> apply f (interp u e)) In diesen Interpretierer können wie zuvor Fehlermeldungen und/oder ein Reduktionszähler durch Anpassung des Typs State eingebaut werden. Funktionale Programmierung mit Haskell 9.20
22 Zusammenfassung des Call-by-name-Interpretierers Interpretierer: interp :: Term -> Environment -> M Value interp (Var x) e = lookup x e interp (Con i) e = unit (Num i) interp (Add u v) e = interp u e bind (\a -> interp v e bind (\b -> add a b)) interp (Lam x v) e = unit (Fun (\m -> interp v ((x,m):e))) interp (App t u) e = interp t e bind (\f -> apply f (interp u e)) Wadler: An advantage of the monadic style is that the types make clear where effects occur. Thus, one can distinguish call-by-value from call-by-name simply by examining the types. Funktionale Programmierung mit Haskell 9.21
23 Vergleich Wir betrachten folgendes Beispiel: term1 = (Add (Con 10) (Con 11)) term4 = (Lam "x" (Add (Var "x") (Var "x"))) term5 = (App term4 term1) Ergebnis bei Verwendung des Call-by-name-Interpretierers: *Main> test term5 "Value: 42 Count: 4" Ergebnis bei Verwendung des Call-by-value-Interpretierers: *Main> test term5 "Value: 42 Count: 3" Bei Verwendung des Call-by-value-Interpretierers wird term1 nur einmal ausgewertet. Funktionale Programmierung mit Haskell 9.22
24 Zustandstransformationen Monadische Klassen können benutzt werden, um Programme zu formulieren, die interne Zustände benutzen: data State s a = ST (s -> (a, s)) (M.P. Jones: Lect. Notes Comp. Sc. 925, 1995) Einbettung in die vordefinierte Klasse Monad: instance Monad (State s) where return x = ST (\s -> (x,s)) -- entspricht unserem unit m >>= f = ST (\s -> let ST m = m (x, s1) = m s ST f = f x in f s1 ) -- entspricht unserem bind Passender Funktor: instance Functor (State s) where fun f (ST st) = ST (\s -> let (x, s ) = st s in (f x, s ) ) Funktionale Programmierung mit Haskell 9.23
Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected]
Inhalt SWP Funktionale Programme (2. Teil) Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie [email protected] Interpreter für funktionale Sprache
Funktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12
Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Objektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
Einführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger [email protected] WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
Funktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
Scala kann auch faul sein
Scala kann auch faul sein Kapitel 19 des Buches 1 Faulheit Faulheit ( lazy evaluation ) ist auch in C oder Java nicht unbekannt int x=0; if(x!=0 && 10/x>3){ System.out.println("In if"); } Nutzen der Faulheit?
Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme
Gliederung Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg 1 Einführung Sprachmittel Sommer 2011, 20. Juni 2011,
Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck
Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle
Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
Programmierparadigmen
Programmierparadigmen D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2011, 20. Juni 2011, c 2011 D.Rösner D. Rösner PGP 2011...
Java: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
Eine Logikschaltung zur Addition zweier Zahlen
Eine Logikschaltung zur Addition zweier Zahlen Grundlegender Ansatz für die Umsetzung arithmetischer Operationen als elektronische Schaltung ist die Darstellung von Zahlen im Binärsystem. Eine Logikschaltung
Grundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
Generische Record-Kombinatoren mit statischer Typprüfung
System Generische mit statischer Typprüfung Brandenburgische Technische Universität Cottbus Lehrstuhl Programmiersprachen und Compilerbau Lehrstuhlkolloquium am 13. Januar 2010 Überblick System System
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java
Objektorientierte Programmierung mit Java Eine praxisnahe Einführung mit BlueJ Klassenentwurf Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? 1.0 Zentrale Konzepte
Excel Funktionen durch eigene Funktionen erweitern.
Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion
Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Anzeige des Java Error Stack in Oracle Forms
Anzeige des Java Error Stack in Oracle Forms (Version 2.0) Juni 2008 Autoren: Jürgen Menge / Thomas Robert Seite 1 von 7 Oracle Forms bietet seit der Version 6i die Möglichkeit, serverseitig Java-Klassen
Java Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
Kontrollstrukturen und Funktionen in C
Kontrollstrukturen und Funktionen in C Lernziele: Vertiefen der Kenntnisse über Operatoren, Kontrollstrukturen und die Verwendung von Funktionen. Aufgabe 1: Quickies: Datentypen in C a) Was sind die elementaren
Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 [email protected]
Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter
Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und
Kapitalerhöhung - Verbuchung
Kapitalerhöhung - Verbuchung Beschreibung Eine Kapitalerhöhung ist eine Erhöhung des Aktienkapitals einer Aktiengesellschaft durch Emission von en Aktien. Es gibt unterschiedliche Formen von Kapitalerhöhung.
IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft
IMAP Backup Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails Hersteller: malu-soft WEB Adresse: http://www.malu-soft.de email: [email protected] [email protected]
Informationsblatt Induktionsbeweis
Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln
Zweite Möglichkeit: Ausgabe direkt auf dem Bildschirm durchführen:
Ein- und Ausgabe Zweite Möglichkeit: Ausgabe direkt auf dem Bildschirm durchführen: fun p r i n t T r e e printa t = c a s e t o f Leaf a => ( p r i n t Leaf ; printa a ) Node ( l, a, r ) => ( p r i n
Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!
Mathefritz 5 Terme und Gleichungen Meine Mathe-Seite im Internet kostenlose Matheaufgaben, Skripte, Mathebücher Lernspiele, Lerntipps, Quiz und noch viel mehr http:// www.mathefritz.de Seite 1 Copyright
Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen
Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11
Zeichen bei Zahlen entschlüsseln
Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6
Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6 Aufgabe 1: Pareto mit SV-Semantik Suchmaschinen Pareto Definition: x < P
Lineare Gleichungssysteme
Lineare Gleichungssysteme 1 Zwei Gleichungen mit zwei Unbekannten Es kommt häufig vor, dass man nicht mit einer Variablen alleine auskommt, um ein Problem zu lösen. Das folgende Beispiel soll dies verdeutlichen
Fotos in Tobii Communicator verwenden
Fotos in Tobii Communicator verwenden Hier wird beschrieben wie man Fotos in Tobii Communicator verwenden kann und was man zur Nutzung beachten sollte. Fotonutzung in Tobii Communicator In einigen Fällen
C/C++ Programmierung
1 C/C++ Programmierung Grundlagen: Anweisungen Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Anweisungen (Statements)
Typdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
Arge Betriebsinformatik GmbH & Co.KG, CAP News 40, Februar 2013. CAP-News 40
CAP-News 40 CAP-News ist in unrägelmäßigen Abständen erscheinende Information zum Produktkonfigurator CAP/VARIANTS. Hier werden die neuen Befehle, Funktionen und Möglichkeiten beschrieben. In CAP-News
Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag
Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 13 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:
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
Zählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
Robot Karol für Delphi
Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško
Einführung in. Logische Schaltungen
Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von
XONTRO Newsletter. Makler. Nr. 16
XONTRO Newsletter Makler Nr. 16 Seite 1 In XONTRO werden zum 24. Januar 2005 folgende Änderungen eingeführt: Inflationsindexierte Anleihen Stückzinsberechnung für französische und italienische Staatsanleihen
Was ist Logische Programmierung?
Was ist Logische Programmierung? Die Bedeutung eines Computer-Programms kann durch Logik erklärt werden. Die Idee der logischen Programmierung besteht darin, die Logik eines Programms selber als Programm
II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
3. LINEARE GLEICHUNGSSYSTEME
176 3. LINEARE GLEICHUNGSSYSTEME 90 Vitamin-C-Gehalt verschiedener Säfte 18,0 mg 35,0 mg 12,5 mg 1. a) 100 ml + 50 ml + 50 ml = 41,75 mg 100 ml 100 ml 100 ml b) : Menge an Kirschsaft in ml y: Menge an
Installation der SAS Foundation Software auf Windows
Installation der SAS Foundation Software auf Windows Der installierende Benutzer unter Windows muss Mitglied der lokalen Gruppe Administratoren / Administrators sein und damit das Recht besitzen, Software
Grammatiken. Einführung
Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische
Einführung in die Programmierung
: Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte
Excel Pivot-Tabellen 2010 effektiv
7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes
10.6 Programmier-Exits für Workitems
10.6 Programmier-Exits für Workitems 279 10.6 Programmier-Exits für Workitems 10.6.1 Das Interface IF_SWF_IFS_WORKITEM_EXIT Am Schritt einer Workflow-Definition im Reiter»Programmier-Exits«können verschiedene
SEMINAR Modifikation für die Nutzung des Community Builders
20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen
Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis
Unterrichtsmaterialien in digitaler und in gedruckter Form Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis Das komplette Material finden Sie hier: Download bei School-Scout.de
Übungen für Woche 10
Übungen für Woche 10 Martin Rubey 12. Januar 2011 Die folgenden Übungen sollen den Umgang mit Backtracking und kombinatorischen Spezies näherbringen. Genaue Hinweise gibt es erst auf Seite 5. Zur Erinnerung:
Kleines Handbuch zur Fotogalerie der Pixel AG
1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link
1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:
Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:
Kurzeinführung LABTALK
Kurzeinführung LABTALK Mit der Interpreter-Sprache LabTalk, die von ORIGIN zur Verfügung gestellt wird, können bequem Datenmanipulationen sowie Zugriffe direkt auf das Programm (Veränderungen der Oberfläche,
Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH
Funktionsbeschreibung Lieferantenbewertung von IT Consulting Kauka GmbH Stand 16.02.2010 odul LBW Das Modul LBW... 3 1. Konfiguration... 4 1.1 ppm... 4 1.2 Zertifikate... 5 1.3 Reklamationsverhalten...
Programmierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9
Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9 Prof. Dr. W. Conen Version 1.0c Januar 2009 Genereller Ablauf der Suche Gegeben: Variablen X, Domains D, Constraints R (explizit
Konzepte der Informatik
Konzepte der Informatik Vorkurs Informatik zum WS 2011/2012 26.09. - 30.09.2011 17.10. - 21.10.2011 Dr. Werner Struckmann / Christoph Peltz Stark angelehnt an Kapitel 1 aus "Abenteuer Informatik" von Jens
Einführung in die C++ Programmierung für Ingenieure
Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF
Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.
Binäres und dezimales Zahlensystem Ziel In diesem ersten Schritt geht es darum, die grundlegende Umrechnung aus dem Dezimalsystem in das Binärsystem zu verstehen. Zusätzlich wird auch die andere Richtung,
Funktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
Künstliches binäres Neuron
Künstliches binäres Neuron G.Döben-Henisch Fachbereich Informatik und Ingenieurwissenschaften FH Frankfurt am Main University of Applied Sciences D-60318 Frankfurt am Main Germany Email: doeben at fb2.fh-frankfurt.de
Grundlagen der Programmierung (Vorlesung 14)
Grundlagen der Programmierung (Vorlesung 14) Ralf Möller, FH-Wedel Vorige Vorlesung Verifikation von Anweisungen und Anweisungsfolgen Schleifen Inhalt dieser Vorlesung Funktionen und Prozeduren Lernziele
Durchführung der Datenübernahme nach Reisekosten 2011
Durchführung der Datenübernahme nach Reisekosten 2011 1. Starten Sie QuickSteuer Deluxe 2010. Rufen Sie anschließend über den Menüpunkt /Extras/Reisekosten Rechner den QuickSteuer Deluxe 2010 Reisekosten-Rechner,
Primzahlen und RSA-Verschlüsselung
Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also
OP-LOG www.op-log.de
Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server
Switching. Übung 7 Spanning Tree. 7.1 Szenario
Übung 7 Spanning Tree 7.1 Szenario In der folgenden Übung konfigurieren Sie Spanning Tree. An jeweils einem Switch schließen Sie Ihre Rechner über Port 24 an. Beide Switche sind direkt über 2 Patchkabel
Source Code Konverter... 2. Online: (VB.net <-> C#)... 3. Kommerzielle Produkte (VB, C#, C++, Java)... 3. Code Nachbearbeitung in der Praxis...
Autor: Thomas Reinwart 2008-05-05 [email protected] Inhalt Source Code Konverter... 2 Online: (VB.net C#)... 3 Kommerzielle Produkte (VB, C#, C++, Java)... 3 Code Nachbearbeitung in der Praxis...
Besonderheiten von C#
Besonderheiten von C# Wert- und Referenztypen int a, b; a = 3; b = a; a++; Debug.Assert( a==4 && b==3 &&!a.equals(b), "int ist doch kein Werttyp" ); RTyp ra, rb; ra = new RTyp(3); rb = ra; ra.inc(); Debug.Assert(
Programmieren Tutorium
Programmieren Tutorium Tom Schildhauer Tutorium 12 Universität Karlsruhe (TH) Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by Tom Schildhauer,
SWE1 / Übung 2 (19.10.2011)
SWE1 / Übung 2 (19.1.211) Simulation von Algorithmen Testen, Testplan Beispiel arithmetische Ausdrücke Handsimulation von Algorithmen Man versteht einen Algorithmus (insbesonders einen "Fremden"), wenn
Workshop: Eigenes Image ohne VMware-Programme erstellen
Workshop: Eigenes Image ohne VMware-Programme erstellen Normalerweise sind zum Erstellen neuer, kompatibler Images VMware-Programme wie die Workstation, der ESX-Server oder VMware ACE notwendig. Die Community
Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall
Software Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
Kapitalerhöhung - Verbuchung
Kapitalerhöhung - Verbuchung Beschreibung Eine Kapitalerhöhung ist eine Erhöhung des Aktienkapitals einer Aktiengesellschaft durch Emission von en Aktien. Es gibt unterschiedliche Formen von Kapitalerhöhung.
Fehlermonitor. Software zur seriellen Verbindung PC-Airdos Visualdatensignale und Fehlermeldungen-Ausagabe per SMS / Drucker
Fehlermonitor Software zur seriellen Verbindung PC-Airdos Visualdatensignale und Fehlermeldungen-Ausagabe per SMS / Drucker Das Programm ist problemlos zu installieren auf jedem Windows-PC (XP) mit.net
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK WS 11/12 Einführung in die Informatik II Übungsblatt 2 Univ.-Prof. Dr. Andrey Rybalchenko, M.Sc. Ruslán Ledesma Garza 8.11.2011 Dieses Blatt behandelt
4D Server v12 64-bit Version BETA VERSION
4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und
Java Einführung Operatoren Kapitel 2 und 3
Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig
a n + 2 1 auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:
Beispiel: Wir untersuchen die rekursiv definierte Folge a 0 + auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert: ( ) (,, 7, 5,...) Wir können also vermuten, dass die Folge monoton fallend
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum
4. Lernen von Entscheidungsbäumen Klassifikation mit Entscheidungsbäumen Gegeben sei eine Menge von Objekten, die durch /Wert- Paare beschrieben sind. Jedes Objekt kann einer Klasse zugeordnet werden.
Programmieren in Haskell Einführung
Programmieren in Haskell Einführung Peter Steffen Universität Bielefeld Technische Fakultät 16.10.2009 1 Programmieren in Haskell Veranstalter Dr. Peter Steffen Raum: M3-124 Tel.: 0521/106-2906 Email:
Bauteilattribute als Sachdaten anzeigen
Mit den speedikon Attributfiltern können Sie die speedikon Attribute eines Bauteils als MicroStation Sachdaten an die Elemente anhängen Inhalte Was ist ein speedikon Attribut?... 3 Eigene Attribute vergeben...
Theoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)
AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"
AZK 1- Freistil Nur bei Bedarf werden dafür gekennzeichnete Lohnbestandteile (Stundenzahl und Stundensatz) zwischen dem aktuellen Bruttolohnjournal und dem AZK ausgetauscht. Das Ansparen und das Auszahlen
Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur
Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert
