Constraint Logical Programming

Größe: px
Ab Seite anzeigen:

Download "Constraint Logical Programming"

Transkript

1 Constraint Logical Programming Betreuer: Thomas Ströder Proseminar: Fortgeschrittene Programmierkonzepte in Java, Haskell und Prolog Rene Niewianda, Martin Breuer 15. Juni Einleitung: Das Ziel dieses Vortrags ist, grundlegende Strukturen der Constraint Programmierung am Beispiel der Constraint-Theorie für finite Domains kennen zu lernen. Dabei betrachten wir die Auswertung der Constraints und vergleichen Programmieraufwand sowie die Laufzeit von normalen, uns bekannten Logikprogrammen und Logikprogrammen mit Constraints unter Verwendung der Prolog Implementierung SWI-Prolog. Inhaltlich orientieren wir uns an den Vorlesungsnotizen der Vorlesung Logikprogrammierung [Gie13]. 1.1 Was ist ein Constraint? Ein Constraint ist eine Einschränkung, Bedingung oder Relation zwischen Termen. Diese Terme sind einfache logische Formeln, z. B. X #= Y+1 oder {X*X=Y}, wobei das # und die geschweiften Klammern der Notation in Prolog entsprechen. Wie genau diese Ausdrücke ausgewertet werden bzw. wann sie wahr sein sollen, wird in einer so genannten Constraint-Theorie festgelegt. 1.2 Constraint-Theorie Eine Constraint-Theorie ist eine Erweiterung der in einem Logikprogramm vorhandenen Prädikate. Würde man eine leere Constraint-Theorie verwenden, so würde das Programm einem normalen, uns bekannten Logikprogramm entsprechen. In Prolog gibt es mehrere Constraint-Theorien, u. a. eine für reelle Zahlen ( CLPR ) und eine für ganze Zahlen ( CLP(FD) ), wobei CLP für Constraint Logical Programming, R für Real und FD für Finite Domain steht. In der Constraint-Theorie CLPR werden reelle Zahlen durch Fließkommazahlen repräsentiert. Eine genaue Darstellung aller reeller Zahlen ist folglich nicht möglich. Diese Erweiterungen sind als Module in Prolog verfügbar. Sie lassen sich einfach über :-use module(library(clpr)). 1

2 oder :- use module(library(clpfd)). in ein Logikprogramm einbinden. Bei den hier aufgeführten Beispielen sei die jeweilige Constraint-Theorie stets konsultiert. Weitere Beispiele für Constraints sind: CLP(FD) CLPR X #= Y+1 {X = Y + 1} X #>= Y*10 {X >= Y*10} X #\= Y {X =\= Y} X*X #\= Y + 1 {X*X =\= Y+1} 2 Die Constraint-Theorie CLP(FD) 2.1 Die Auswertung mit Finite Domains in SWI-Prolog Bei einem Logikprogramm mit Constraints, werden die Relationen zwischen den Variablen oder Termen gesammelt und vereinfacht. Die gesammelten Constraints bzw. Relationen werden daraufhin durch den Constraint-Solver ausgewertet. Wir betrachten nun anhand eines Beispiels, wie der Constraint-Solver eine Konjunktion von Constraints auswertet, wobei das Sammeln der Constraints in diesem Beispiel trivial ist (ein komplexeres Beispiel zum Sammeln der Constraints ist in 3.3 zu finden):? X1 #> X2, X2 #> 5, X1 #< 8. Für jede Variable (X 1,..., X n ) der Constraints werden Domains (D 1,..., D n ), wobei n die Anzahl der Variablen der Constraints ist, angelegt, die zuerst alle auf Z gesetzt werden. Normale Prädikate werden hierbei insofern umgeschrieben, dass ihre Variablen nicht, wie bei der normalen Logikprogrammierung, direkt unifiziert, sondern durch Constraints ersetzt werden. Vereinfachend gesagt wird für eine Variable eines normalen Prädikats eine Domain angelegt. Wir durchlaufen die Constraints solange, bis sich die Domains nicht mehr ändern, wobei wir die Domains an die Bedingungen anpassen: Zuerst setzen wir die Domains D 1 = Z und D 2 = Z. Wenn wir nun den ersten Constraint X1 #> X2 betrachten, fällt auf, dass die Domains nicht verändert werden müssen, da wir nur den ersten Constraint isoliert betrachten. Betrachten wir hingegen den zweiten Constraint, so ändern sich die Domains auf D 1 = Z und D 2 = {6, 7,.., }. Beim dritten Constraint X1 #< 8 werden wiederum die Domains eingeschränkt: D 1 = {,.., 7} und D 2 = {6, 7,.., }. Nun beginnen wir bei den Constraints von vorne und prüfen, ob die Domains verändert werden müssen. Wir durchlaufen die Constraints mehrmals, um die Zusammenhänge zwischen den Variablen zu erfassen. Mit dem ersten Constraint X1 #> X2 folgt nun: D 1 = {7} und D 2 = {6}. Falls keine Änderungen beim wiederholten isolierten Betrachten der einzelnen Constraints stattfinden und alle Domains nicht leer sind, nennt 2

3 man die Konjunktion der Constraints pfadkonsistent. Als letztes wird also die Pfadkonsistenz geprüft und somit folgt (da die Domains nicht leer sind), dass die Lösungen der Anfrage X1 = 7 und X2 = 6 sind.? X1 #> X2, X2 #> 5, X1 #< 8. X1 = 7, X2 = 6. Falls die Auswertung leere Domains als Ergebnis haben sollte, so wird die Anfrage mit false. beantwortet. Als Notation für unendlich große und kleine Werte werden die Schlüsselwörter sup und inf als Ergebnis ausgegeben. Einen Vorteil, den wir hier sehen, ist die Bidirektionalität der Constraints, d. h. wir müssen während der Implementierung der Prädikate nicht wissen, welche Werte wir gegeben haben bzw. berechnen wollen, da wir lediglich Zusammenhänge bzw. Relationen zwischen den Variablen festlegen. Bei der Logikprogrammierung ohne Constraints muss z. B. beim infix Prädikat is/2 die rechte Seite komplett ausgewertet sein. Hierzu betrachten wir ein Beispiel, welches sowohl in Standard-Prolog als auch mit Constraints implementiert wurde: Ohne Constraints: minuszehn (X, Y) : Y i s X 1 0. Stellen wir nun eine Anfrage an das Programm, bei der uns die Variable Y bekannt und X unbekannt ist, erhalten wir einen Instanziierungsfehler:? minuszehn (X, 1 0 ). ERROR: i s / 2 : Arguments are not s u f f i c i e n t l y i n s t a n t i a t e d Betrachten wir nun das bidirektionale Programm mit Constraints: : use module ( l i b r a r y ( c l p f d ) ). minuszehnc (X, Y) : Y #= X 10. So können wir ohne weiteres die gleiche Anfrage stellen und erhalten ein sinnvolles Ergebnis:? minuszehnc (X, 1 0 ). X = 2 0. Ein dadurch entstandener Vorteil ist, dass sich die Constraint Programme universeller einsetzen und wiederverwenden lassen. Ist die Berechnung einer Variable X, die nur von Y abhängig ist, deutlich schwerer zu implementieren, als die Berechnung von Y, so können wir mithilfe von Constraints die andere Richtung implementieren. Dadurch könnte z. B. vermieden werden komplexe arithmetische Operationen zu verwenden. Dies führt zu einer deutlichen Verbesserung des Programmierkomforts bzw. einer Vereinfachung der Problemlösung. Siehe hierzu auch das Beispiel in

4 2.2 Nützliche Prädikate von CLP(FD) In der Constraint-Theorie CLP(FD) sind verschiedene Prädikate implementiert, die einem das Lösen von kombinatorischen Problemen ermöglichen bzw. deutlich erleichtern. Wir wollen nun ein paar der nützlichsten Prädikate der CLP(FD) Constraint-Theorie betrachten. Ein besonderes Augenmerk soll auf Prädikate gelegt werden, die Eigenschaften bzw. Bedingungen an Listen stellen. Um eine Liste XS von Zahlen zwischen 1 und 30 zu erzeugen, benutzen wir den Constraint XS ins 1..30, der besagt, dass jedes Element von XS einen Wert zwischen 1 und 30 besitzt. Wollen wir nun die Anzahl der Elemente auf einen Beispielwert von 9 festlegen, so können wir das vordefinierte Prolog Prädikat length(xs, 9) verwenden. An dieser Stelle soll betont werden, dass length/2 kein Prädikat von CLP(FD) ist und es lediglich zum Instanziieren der Liste benötigt wird. Wenn wir die Anfrage length(xs,9), XS ins stellen, so erhalten wir eine Liste, wobei für jedes Element lediglich in angegeben wird. Möchten wir jedoch konkrete Werte für jedes Element haben, so können wir dies mit label/1 lösen, sodass Prolog nun statt Wertebereichen konkrete Werte liefert:? length (XS, 9 ), XS i n s , l a b e l (XS ). XS = [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ] Zu beachten ist bei der Nutzung von label/1, dass die Menge der möglichen Werte für eine Variable endlich sein muss. Falls die Menge unendlich ist, so liefert die Anfrage einen Fehler. Ein solcher Fehler könnte wie folgt aussehen:? X1 #> 3, X1 i n i n f.. sup, l a b e l ( [ X1 ] ). ERROR: Arguments are not s u f f i c i e n t l y i n s t a n t i a t e d Wenn für X1 jedoch eine feste obere Schranke gewählt wird, könnte folgende Ausgabe erfolgen:? X1 #> 3, X1 i n i n f.. 6, l a b e l ( [ X1 ] ). X1 = 4 ; X1 = 5 ; X1 = 6. Nun wollen wir jedoch paarweise unterschiedliche Werte in unserer Liste vorfinden. Um dies zu realisieren, gibt es das Prädikat all different/1, welches angewandt auf unsere Liste dafür sorgt, dass alle Werte paarweise unterschiedlich sind:? length (XS, 9 ), XS i n s , a l l d i f f e r e n t (XS), l a b e l (XS ). XS = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]. Angenommen uns wäre wichtig, dass die Summe der Elemente größer als 100 sein sollte, so ließe sich dies mit dem Prädikat sum/3 realisieren, wobei der erste Parameter die Liste, der Zweite eine Relation (#=, #>, #<, usw.) und 4

5 der Letzte ein Ausdruck ist, zu dem die Summe der Elemente in Relation stehen soll:? length (XS, 9 ), XS i n s , a l l d i f f e r e n t (XS), sum(xs,# >,100), l a b e l (XS ). XS = [ 1, 2, 3, 4, 5, 6, 21, 29, 3 0 ]. Wir haben nun den Gedanken gefasst, dass wir an sechster Stelle in der Liste unbedingt eine 13 haben möchten, so können wir dies mit dem Prädikat element(6,xs,13) festlegen:? length (XS, 9 ), XS i n s , element ( 6, XS, 13), a l l d i f f e r e n t (XS), sum(xs, #=, 100), l a b e l (XS ). XS = [ 1, 2, 3, 4, 5, 13, 14, 28, 3 0 ]. Weitere Prädikate für fortgeschrittenere Anwendungsgebiete (z. B. endliche Automaten) sind in dem SWI-Prolog Manual [Tri12] 1 zu finden, welches auch als Quelle für diesen Abschnitt verwendet wurde. 2.3 Mechanismen zur Verbesserung der Laufzeit Um die Performance der CLP(FD) Auswertung zu verbessern, werden arithmetische Constraints zur Kompilezeit überschrieben, sodass lower-level Prädikate wann immer möglich benutzt werden (Übersetzung aus [Tri]). Somit wird die Performance des Constraint solvers mithilfe von Low-Level-Code automatisch verbessert. Da der SWI-Prolog Finite Domain Constraint Solver in Prolog implementiert ist, steht die Performance der Auswertung in Relation zur Performance des unterliegenden Prolog Systems. Dies hat den Nachteil, dass sich ein ineffizientes Grundsystem auf die endgültige Performance des Constraint-Solvers auswirkt. Es existieren effizientere Systeme als SWI-Prolog, der Vorteil dieses Systems ist jedoch, dass es mit großen ganzzahligen Werten rechnen kann [Tri12]. 3 Vergleich von Prolog mit und ohne Constraints Im Folgendem wollen wir durch den Vergleich an einem konkreten Beispiel die Unterschiede zwischen Prolog mit und ohne Constraints untersuchen. Dazu betrachten wir das N-Damen Problem. 3.1 Das N-Damen Problem Kern dieses Problems ist es, n Damen auf einem n*n großen Schachfeld zu platzieren, ohne dass sie sich gegenseitig schlagen können. Das heißt, dass in den Spalten und Zeilen des Feldes jeweils nur eine Dame stehen darf. Zusätzlich dürfen auch keine Damen auf der gleichen Diagonalen stehen. 1 5

6 Abbildung 1: Zugrichtungen Wir betrachten zunächst die trivialen Fälle: 1,2,3 Damen. Bei einer Dame ist die Lösung offensichtlich, da es nur ein Feld und eine Dame gibt. Die Fälle mit zwei bzw. drei Damen sind nicht lösbar, da es keine Möglichkeit gibt, die Damen mit Berücksichtigung der oben beschriebenen Regeln zu platzieren. (a) 1-Dame (b) 2-Damen (c) 3-Damen(1) (d) 3-Damen(2) Abbildung 2: Triviale Fälle Im Folgenden werden wir das Schachfeld mit den platzierten Damen als Liste auffassen, sodass der Platz einer Zahl in der Liste die jeweilige Spalte auf dem Feld angibt und die Zahl selbst die Zeile. Hier ein Beispiel zur Liste [5,2,4,1,3] : Abbildung 3: 6

7 3.2 Lösung des Problems mit Constraints : use module ( l i b r a r y ( c l p f d ) ). queens (N, L) : length (L,N), L i n s 1.. N, a l l d i f f e r e n t (L) s a f e (L), l a b e l (L ). s a f e ( [ ] ). s a f e ( [X Xs ] ) : s a f e b e t w e e n (X, Xs, 1 ), s a f e ( Xs ). s a f e b e t w e e n (X, [ ],M). s a f e b e t w e e n (X, [ Y Ys ],M) : n o a t t a c k (X,Y,M), M1 #= M + 1, s a f e b e t w e e n (X, Ys,M1). n o a t t a c k (X,Y,N) : X+N #\= Y, X N #\= Y. Programmcode siehe [Gie13]. Die folgenden Erklärungen orientieren sich an [Gie13]. Die Eingabe für dieses Programm ist queens(n,l), wobei N die Größe des Feldes bzw. die Anzahl der Damen angibt und L die Liste mit deren Positionen. Wir überprüfen mit dem vordefinierten Prädikat lenght/2, ob L die korrekte Länge, also N hat. Die drei Prädikate +Vars ins +Domains, all different() und label/1 sind in der clpfd-bibliothek vordefiniert. Mit ins wird überprüft, ob die Zahlen in L im Bereich 1 bis N liegen, sodass zusammen mit length/2 sichergestellt wird, dass die Höhe und Breite des Feldes eingehalten wird. Mit dem Prädikat all different/1 wird sichergestellt, dass keine zwei Damen in derselben Zeile stehen. Zusammen mit dem allgemeinen Aufbau der Liste L ist so sichergestellt, dass sich keine Damen auf Geraden schlagen können. Durch das Prädikat safe/1 wird die letzte Anforderung an L geprüft, dass keine zwei Damen auf der selben Diagonalen stehen. Dazu werden alle Spalten rechts einer Dame überprüft. Hier werden die beiden Hilfsprädikate safe between/3 und no attack/3 verwendet. safe between(x,l,m) wird wahr, wenn die Dame in der Zeile X die Dame in der Zeile L, welche M Spalten entfernt ist, nicht schlagen kann. Dazu wird zusätzlich das Prädikat no attack/3 verwendet, um dies sicherzustellen. no attack(x,y,n) wird wahr, wenn die Dame X nicht auf der Diagonalen der Dame Y steht, welche N Spalten entfernt ist. Dieses Programm ist bidirektional, d.h. es kann sowohl zu einer Liste das entsprechende N bestimmen (wobei die Liste auf Richtigkeit geprüft wird) 7

8 als auch aus einem N die entsprechenden Ergebnislisten bestimmen. Für N=4 ist die Ein- und Ausgabe :? queens ( 4,L ). L = [ 2, 4, 1, 3 ] ; L = [ 3, 1, 4, 2 ] ; f a l s e. 3.3 Auswertung am Beispiel von N = 4 In Prolog werden die Prädikate der Reihe nach von links nach rechts und von oben nach unten abgearbeitet, sodass bei der Anfrage?-queens(4,L). folgende Schritte durchgeführt werden: Als ersten Schritt erzeugen wir mithilfe von length/2 eine Liste der Länge vier, die als Elemente Variablen enthält und später die Position einer Dame in der jeweiligen Spalte repräsentiert. Damit wir die folgenden Ausgaben von SWI-Prolog besser lesen können, wurden die ausgegebenen Variablennamen (z. B. G4888) durch besser lesbare (z. B. X1) ersetzt:? length (L, 4 ). L = [ X1, X2, X3, X4 ]. Da die Nummer der Zeile, in der sich eine Dame befinden kann, zwischen 1 und 4 bewegt, reduzieren wir den Wertebereich der Variablen auf 1 bis 4:? length (L, 4 ), L i n s L = [ X1, X2, X3, X4 ], X1 i n 1.. 4, X2 i n 1.. 4, X3 i n 1.. 4, X4 i n Nun stellen wir sicher, dass sich keine Dame in der gleichen Zeile befindet, indem wir mit all different/1 die paarweise Unterschiedlichkeit der Einträge sichern:? length (L, 4 ), L i n s 1.. 4, a l l d i f f e r e n t (L ). L = [ X1, X2, X3, X4 ], X1 i n 1.. 4, a l l d i f f e r e n t ( [ X1, X2, X3, X4 ] ), X2 i n 1.. 4, X3 i n 1.. 4, X4 i n Wir sehen nun, dass Prolog für den ersten Listeneintrag Werte von eins bis vier zulässt und von dort ausgehend mit all different/1 gleiche Werte ausschließt. Im nächsten Schritt stellen wir sicher, dass sich in einer Diagonalen nur eine Dame befindet, wobei hier wiederum Ungleichungen gesammelt werden: 8

9 ? length (L, 4 ), L i n s 1.. 4, a l l d i f f e r e n t (L), s a f e (L ). L = [ X1, X2, X3, X4 ], X1 i n 1.. 4, X1#\=X4+3, X4#\=X1+3, X1#\=X3+2, X3#\=X1+2, X1#\=X2+1, X2#\=X1+1, a l l d i f f e r e n t ( [ X1, X2, X3, X4 ] ), X4 i n 1.. 4, X3#\=X4+1, X4#\=X3+1, X2#\=X4+2, X4#\=X2+2, X3 i n 1.. 4, X2#\=X3+1, X3#\=X2+1, X2 i n Im letzten Schritt, nachdem wir alle Relationen zwischen den Variablen aufgestellt haben, lassen wir uns mithilfe von label/1 konkrete Werte ausgeben. Für die Berechnung der jeweiligen Werte ist der Constraint-Solver 2 zuständig, der, wenn wir mit einem Semikolon erzwingen, dass weitere Werte gesucht werden, diese unter Zuhilfenahme von Backtracking findet:? length (L, 4 ), L i n s 1.. 4, a l l d i f f e r e n t (L), s a f e (L), l a b e l (L ). L = [ 2, 4, 1, 3 ] ; L = [ 3, 1, 4, 2 ] ; f a l s e. 3.4 Vergleich mit einer constraintfreien Lösung Um die Unterschiede des gerade vorgestellten Programms zu dem Programm mit Constraints zu verdeutlichen, werden wir es mit dem folgendem constraintfreien Programm vergleichen. e r z l i s t e n ( [ 1 ], 1 ). e r z l i s t e n ( [N XS ],N) : NMO i s N 1, e r z l i s t e n (XS,NMO),!. queens (N, L) : length (L,N), e r z l i s t e n (R,N), permutation (L,R), s a f e (L ). s a f e ( [ ] ). s a f e ( [X Xs ] ) : s a f e b e t w e e n (X, Xs, 1 ), s a f e ( Xs ). s a f e b e t w e e n (X, [ ], M). s a f e b e t w e e n (X, [ Y Ys ],M) : n o a t t a c k (X,Y,M), M1 i s M + 1, s a f e b e t w e e n (X, Ys,M1). n o a t t a c k (X,Y,N) : R i s (X+N), Y \== R,Q i s X N, Y \== Q. Zuerst werden wir die Funktionsweise grob umreißen und danach die Vorteile der Constraint-Lösung hervorheben. Dieses Programm ist, wie das Constraint-Programm, bidirektional. Dies kann nicht bei allen constraintfreien Programmen sichergestellt werden, da 2 Wie der Solver im Einzelnen funktioniert, wurde bereits im Abschnitt 2.1 beispielhaft erklärt. 9

10 es darauf ankommt, wie die einzelnen Prädikate konstruiert sind bzw. verwendet werden. Hier wurden Constraints wie #= in is Prädikate umgewandelt. is ist jedoch unidirektional, was hier aber keinen Unterschied macht, da das Prädikat safe/1 in beiden Fällen nur in eine Richtung aufgerufen wird. Die Constraints +Vars ins +Domains, all different/1 und label/1 wurden durch eine Kombination der Prädikate erzlisten/2 und permutation/2 ersetzt. erzlisten(l,n) wird wahr, wenn die Liste L die Elemente von 1 bis N in absteigender Reihenfolge enthält.? e r z l i s t e n (L, 4 ) L = [ 4, 3, 2, 1 ] Der Cut am Ende der Funktion verhindert lediglich das Auftreten von Fehlern. Da es nur ein mögliches richtiges Ergebnis gibt, würde eine Fortsetzung der Suche nicht mehr terminieren. Das vordefinierte Prädikat permutation(r,l) ist wahr, wenn R eine Permutation von L ist. Diese beiden Prädikate zusammen erzeugen nacheinander alle Listen der Länge N mit den Elementen von 1 bis N. Diese sind wichtig für den Schritt von einem N zu einer Liste. Um von einer Liste zu einem N zu kommen, wird mit dem Prädikat length/2 sichergestellt, welches zuerst die Länge der Liste misst, dass erzlisten/2 ausreichend instanziiert ist (was unerlässlich für Bidirektionalität ist). Im Rest des Codes sind lediglich die Rechnungen ersetzt worden, was aber in diesem Fall, wie gerade beschrieben, keinen Unterschied macht. Betrachten wir einen weiteren Unterschied der beiden Programme und zwar die Laufzeiten. Dieser Unterschied zeigt sich deutlich durch Tests mit verschiedenen Eingaben. Wir verwenden time/1, um die Zeit zu messen. Wir betrachten nur die Zeit bis zum ersten Ergebnis: N Mit C. Ohne C s 0.000s s 0.000s s 0.000s s 0.145s s 0.980s s 9.8s s 93s s 1327s 10

11 Hier zeigt sich klar und deutlich, dass durch Constraints die Auswertung bestimmter Prädikate optimiert wird, sodass sie nicht wie in der constraintfreien Lösung wie ein reines Logikprogramm ausgewertet werden. Die schnelle Zunahme der Laufzeit lässt sich dadurch erklären, dass es N! verschiedene Listen gibt und das Programm alle nacheinander überprüft, bis es eine richtige Lösung gefunden hat. Es ist noch anzumerken, dass je nachdem, wie das Programm implementiert ist, die Laufzeit variieren kann, da die Reihenfolge, in der die Listen überprüft werden, eine große Rolle spielt. 4 Fazit Wie wir gesehen haben, haben Constraints viele Vorteile gegenüber normaler Logikprogrammierung. Es ist meistens intuitiver zu programmieren, da man nicht prüfen muss, ob bei jeder Eingabevariation alle Prädikate ausreichend instanziiert sind. Es reicht meist aus, dies für eine Richtung zu tun. Der Rest wird dann durch die Bidirektionalität der Constraints übernommen. Das erhöht die Wiederverwendbarkeit, wie bereits oben erwähnt. Durch diese Vorteile und die Tatsache, dass viele häufig verwendeten Prädikate bereits vordefiniert sind, werden die Programme in sich und Programme, die die Prädikate weiter verwenden, leichter lesbar, da man nicht alle Prädikate erst erschließen muss. Ein weiterer nicht zu vernachlässigender Vorteil ist die Laufzeit, welche vor allem bei komplexen Programmen und Anfragen eine Rolle spielt, da die Programme um ein vielfaches schneller laufen. Abschließend lässt sich also sagen, dass Constraints für die Arithmetik in Prolog eine nötige und sinnvolle Erweiterung darstellen. Da wir bisher nur die Constraint-Theorie CLP(FD) betrachtet haben, wollen wir noch einen kurzen Blick auf eine andere Theorie werfen. 5 Ausblick 5.1 Constraint Logical Programming over Rationals C B Abbildung 4: A Wir betrachten nun ein Anwendungsbeispiel für Constraints mit rationalen bzw. reellen Zahlen, welches wir bereits in dem Kurzvortrag kennen gelernt haben. Wir wollen Seitenlängen eines rechtwinkligen Dreiecks mithilfe des Satzes von Pythagoras (A 2 + B 2 = C 2 ) bestimmen. Dabei sind die Bezeichnungen der jeweiligen Seiten wie in Abbildung 4 gewählt. Die Relation zwischen den Variablen ist hierbei nicht linear. In der Gleichung müssen immer zwei von drei Va- 11

12 riablen gegeben sein, damit wir die Gleichung eindeutig lösen können. In unserem Beispiel betrachten wir nun eine mögliche Implementierung mit Constraints, wobei wir auch negative Werte für Strecken zulassen: : use module ( l i b r a r y ( c l p r ) ). pyt (A, B, C) : { C C = A A + B B}. Hier haben wir zuerst das Modul für die Constraint-Theorie CLPR geladen und das Prädikat pyt/3 definiert, welches den Satz des Pythagoras implementiert, indem eine Relation zwischen den Variablen angegeben wird. Hier sehen wir wiederum, dass im Gegensatz zum Prädikat is/2 die linke Seite des Ausdrucks eine Formel enthalten darf. Wir können nun eine Anfrage an unser Programm stellen:? pyt ( 1,X, 4 ). X = Angenommen wir wollen dieses Problem ohne Constraints lösen, so könnte eine Implementierung wie folgt aussehen: pytn (A, B,C) : C i s s q r t (A A+B B ). Solange wir C berechnen möchten, gibt es kein Problem, wenn wir allerdings B oder A berechnen wollen, erhalten wir Instanziierungsfehler:? pytn ( 1, 2,X). X = ? pytn ( 1,X, 3 ). ERROR: i s / 2 : Arguments are not s u f f i c i e n t l y i n s t a n t i a t e d Um dieses Problem zu lösen, müssten wir für jede Kombination von gegebenen Variablen ein eigenes Prädikat implementieren. Des Weiteren ist hier der Nachteil, dass die Grundrechenarten nicht mehr ausreichen und wir komplexere arithmetische Operationen benötigen. Dies führt zu einem deutlich höheren Entwicklungsaufwand und erschwert die Lösung des Problems. Literatur [Gie13] Jürgen Giesl. Logikprogrammierung, sommersemester 2013, lehrund forschungsgebiet informatik 2, rwth aachen. pages , [Tri] Markus Triska. library(clpfd): Constraint logical programming over finite domains. [Tri12] Markus Triska. The finite domain constraint solver of SWI-Prolog. In FLOPS, volume 7294 of LNCS, pages ,

Programmiersprachen 2 (SS 2013)

Programmiersprachen 2 (SS 2013) n Advanced 2 1. Juli 2013 Beispielprogramm pq(x,y) :- p(x,z), q(z,y). p(a,b). p(b,c). p(c,a). 2 q(a,a). q(b,d). Logisch gesehen Die Reihenfolge verändert nicht die logische Aussage p(x,z), q(z,y) äquivalent

Mehr

Einführung in PROLOG. Christian Stocker

Einführung in PROLOG. Christian Stocker Einführung in PROLOG Christian Stocker Inhalt Was ist PROLOG? Der PROLOG- Interpreter Welcher Interpreter? SWI-Prolog Syntax Einführung Fakten, Regeln, Anfragen Operatoren Rekursion Listen Cut Funktionsweise

Mehr

Java Einführung Operatoren Kapitel 2 und 3

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

Mehr

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

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.

Mehr

Binäre Suchbäume (binary search trees, kurz: bst)

Binäre Suchbäume (binary search trees, kurz: bst) Binäre Suchbäume (binary search trees, kurz: bst) Datenstruktur zum Speichern einer endlichen Menge M von Zahlen. Genauer: Binärbaum T mit n := M Knoten Jeder Knoten v von T ist mit einer Zahl m v M markiert.

Mehr

Anleitung fu r die Vorlage restpunkte.xlsx

Anleitung fu r die Vorlage restpunkte.xlsx Anleitung fu r die Vorlage restpunkte.xlsx Inhalt 1 Einleitung... 1 2 Grundsätzliche Bedienungshinweise... 1 3 Wichtige Regeln für das Ausfüllen... 2 4 Erfassen der Information... 2 4.1 Das Blatt Inspektionen...

Mehr

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013 Programmiervorkurs Wintersemester 2012/2013 Organisation: Steffen Gebert, Alexander Wolff Tutoren: Jürgen Zöller, Jonathan Stoll Kontakt (für Organisatorisches, Fehler auf Folien...): Steffen Gebert steffen.gebert@informatik.uni-wuerzburg.de

Mehr

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

Berechnungen in Excel Zahlen, Formeln und Funktionen

Berechnungen in Excel Zahlen, Formeln und Funktionen René Martin Berechnungen in Excel Zahlen, Formeln und Funktionen ISBN-10: 3-446-41029-5 ISBN-13: 978-3-446-41029-9 Leseprobe Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-41029-9

Mehr

Numerisches Programmieren

Numerisches Programmieren Technische Universität München SS 2012 Institut für Informatik Prof Dr Thomas Huckle Dipl-Inf Christoph Riesinger Dipl-Math Alexander Breuer Dipl-Math Dipl-Inf Jürgen Bräckle Dr-Ing Markus Kowarschik Numerisches

Mehr

7.4 Analyse anhand der SQL-Trace. 7.3.5 Vorabanalyse mit dem Code Inspector

7.4 Analyse anhand der SQL-Trace. 7.3.5 Vorabanalyse mit dem Code Inspector 7.4 Analyse anhand der SQL-Trace 337 7.3.5 Vorabanalyse mit dem Code Inspector Der Code Inspector (SCI) wurde in den vorangegangenen Kapiteln immer wieder erwähnt. Er stellt ein paar nützliche Prüfungen

Mehr

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4 Arbeiten mit s Eine effiziente Programmierung mit PHP ohne seine s ist kaum vorstellbar. Diese Datenstruktur muss man verstanden haben, sonst brauchen wir mit weitergehenden Programmiertechniken wie der

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

syntax.tex Eine Übersicht

syntax.tex Eine Übersicht syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen

Mehr

Kopf und Rest einer Liste (head and tail): Trennung durch. Listenkopf: kann mehrere Elemente umfassen

Kopf und Rest einer Liste (head and tail): Trennung durch. Listenkopf: kann mehrere Elemente umfassen Prolog Syntax Liste, Variable [ Term Liste ] Listenelemente: Trennung durch Komma [1, pferd, klaus] Kopf und Rest einer Liste (head and tail): Trennung durch [K R] = [1, pferd, klaus] (K = 1, R = [pferd,

Mehr

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 4: Einführung in JavaScript Stand: 03.11.2014. Übung WS 2014/2015. Benedikt Schumm M.Sc.

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 4: Einführung in JavaScript Stand: 03.11.2014. Übung WS 2014/2015. Benedikt Schumm M.Sc. Übung WS 2014/2015 E-Commerce: IT-Werkzeuge Web-Programmierung Kapitel 4: Stand: 03.11.2014 Benedikt Schumm M.Sc. Lehrstuhl für ABWL und Wirtschaftsinformatik Katholische Universität Eichstätt-Ingolstadt

Mehr

Aufgabe 6. Gedichtinterpretation worte sind schatten

Aufgabe 6. Gedichtinterpretation worte sind schatten Aufgabe 6 Dennis Blöte, 08.12.2006 Gedichtinterpretation worte sind schatten Das Gedicht worte sind schatten wurde 1969 von Eugen Gomringer geschrieben und befasst sich auf spielerische Art und Weise mit

Mehr

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen.

I. Aussagenlogik. Aussagenlogik untersucht Verknüpfungen wie und, oder, nicht, wenn... dann zwischen atomaren und komplexen Sätzen. I. Aussagenlogik 2.1 Syntax Aussagenlogik untersucht Verknüpfungen wie "und", "oder", "nicht", "wenn... dann" zwischen atomaren und komplexen Sätzen. Sätze selbst sind entweder wahr oder falsch. Ansonsten

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

Mehr

Laufzeitverifikation

Laufzeitverifikation Laufzeitverifikation Martin Möser Seminar Fehlertolerante und Selbstheilende Systeme: Verifikation und Validierung autonomer Systeme Martin Möser - 1 Einführung / Motivation Autonome Systeme Komplexes

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 7 Prof. R. Westermann, A. Lehmann, R.

Mehr

3 Berechnungen und Variablen

3 Berechnungen und Variablen 3 Berechnungen und Variablen Du hast Python installiert und weißt, wie man die Python-Shell startet. Jetzt kannst Du etwas damit machen. Wir fangen mit ein paar einfachen Berechnungen an und wenden uns

Mehr

Elemente der Analysis II

Elemente der Analysis II Elemente der Analysis II Kapitel 3: Lineare Abbildungen und Gleichungssysteme Informationen zur Vorlesung: http://www.mathematik.uni-trier.de/ wengenroth/ J. Wengenroth () 15. Mai 2009 1 / 35 3.1 Beispiel

Mehr

Der Bipolar-Transistor und die Emitterschaltung Gruppe B412

Der Bipolar-Transistor und die Emitterschaltung Gruppe B412 TECHNISCHE UNIVERSITÄT MÜNCHEN Der Bipolar-Transistor und die Emitterschaltung Gruppe B412 Patrick Christ und Daniel Biedermann 16.10.2009 1. INHALTSVERZEICHNIS 1. INHALTSVERZEICHNIS... 2 2. AUFGABE 1...

Mehr

Prolog basiert auf Prädikatenlogik

Prolog basiert auf Prädikatenlogik Software-Technologie Software-Systeme sind sehr komplex. Im Idealfall erfolgt die Programmierung problemorientiert, während die notwendige Übertragung in ausführbare Programme automatisch erfolgt. Prolog-Philosophie:

Mehr

Approximationsalgorithmen

Approximationsalgorithmen Ausarbeitung zum Thema Approximationsalgorithmen im Rahmen des Fachseminars 24. Juli 2009 Robert Bahmann robert.bahmann@gmail.com FH Wiesbaden Erstellt von: Robert Bahmann Zuletzt berarbeitet von: Robert

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB.

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen. while-schleifen. Zahlarstellung auf dem Computer. Formatierung von Zahlen in MATLAB. Logische Verknüpfungen In der letzten Sitzung haben wir kennengelernt, wie wir Zahlen mit Operationen

Mehr

Grundlagen und Basisalgorithmus

Grundlagen und Basisalgorithmus Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg

Mehr

Kapitel 15: Differentialgleichungen

Kapitel 15: Differentialgleichungen FernUNI Hagen WS 00/03 Kapitel 15: Differentialgleichungen Differentialgleichungen = Gleichungen die Beziehungen zwischen einer Funktion und mindestens einer ihrer Ableitungen herstellen. Kommen bei vielen

Mehr

RSA Verfahren. Kapitel 7 p. 103

RSA Verfahren. Kapitel 7 p. 103 RSA Verfahren RSA benannt nach den Erfindern Ron Rivest, Adi Shamir und Leonard Adleman war das erste Public-Key Verschlüsselungsverfahren. Sicherheit hängt eng mit der Schwierigkeit zusammen, große Zahlen

Mehr

Aufgabenbeispiele/ Schwerpunkte zur Vorbereitung auf die Eignungsprüfung im Fach Mathematik

Aufgabenbeispiele/ Schwerpunkte zur Vorbereitung auf die Eignungsprüfung im Fach Mathematik Aufgabenbeispiele/ Schwerpunkte zur Vorbereitung auf die Eignungsprüfung im Fach Mathematik. Bruchrechnung (ohne Taschenrechner!!!) a) Mache gleichnamig! 4 und ; und ; 4 7 b) Berechne! 8 7 8 + 4 9 8 4

Mehr

Beispiel 11.2. Wenn p ein Polynom vom Grad größer gleich 1 ist, ist q : C Ĉ definiert durch q (z) =

Beispiel 11.2. Wenn p ein Polynom vom Grad größer gleich 1 ist, ist q : C Ĉ definiert durch q (z) = Funktionentheorie, Woche Funktionen und Polstellen. Meromorphe Funktionen Definition.. Sei U C offen und sei f : U gilt, nennt man f meromorph auf U: Ĉ eine Funktion. Wenn folgendes. P := f hat keine Häufungspunkte;.

Mehr

Bachelor Grundlagen der Logik und Logikprogrammierung 12. Februar 2009 3

Bachelor Grundlagen der Logik und Logikprogrammierung 12. Februar 2009 3 Bachelor Grundlagen der Logik und Logikprogrammierung 12. Februar 2009 3 Aufgabe 1 (20 Punkte) Dialogische Logik a) Was isteine formal wahrebehauptung? Welche Aussageschematasindallgemeingültig? b) Überprüfen

Mehr

OPERATIONS-RESEARCH (OR)

OPERATIONS-RESEARCH (OR) OPERATIONS-RESEARCH (OR) Man versteht darunter die Anwendung mathematischer Methoden und Modelle zur Vorbereitung optimaler Entscheidungen bei einem Unternehmen. Andere deutsche und englische Bezeichnungen:

Mehr

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens Mathematische Grundlagen der Kryptographie 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe Stefan Brandstädter Jennifer Karstens 18. Januar 2005 Inhaltsverzeichnis 1 Ganze Zahlen 1 1.1 Grundlagen............................

Mehr

How-To : Nachtragen von Tagesdiagrammen auf der Solarlog Homepage

How-To : Nachtragen von Tagesdiagrammen auf der Solarlog Homepage How-To : Nachtragen von Tagesdiagrammen auf der Solarlog Homepage Von Zeit zu Zeit erweitern neue Funktionen die Ausstattungsmerkmale des SolarLog. Wenn ein neues Firmewareupdate heraus kommt, werden plötzlich

Mehr

Einführung in VisualBasic for Applications. Stefan Mahlitz

Einführung in VisualBasic for Applications. Stefan Mahlitz Einführung in VisualBasic for Applications Stefan Mahlitz Stefan Mahlitz Einführung in VBA 27.08.00 Inhaltsverzeichnis 1. Grundlagen der VisualBasic for Applications (VBA) Programmierung...2 1.1 Variablen,

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Entscheidungsprobleme. Berechenbarkeit und Komplexität Entscheidbarkeit und Unentscheidbarkeit. Die Entscheidbarkeit von Problemen

Entscheidungsprobleme. Berechenbarkeit und Komplexität Entscheidbarkeit und Unentscheidbarkeit. Die Entscheidbarkeit von Problemen Berechenbarkeit und Komlexität Entscheidbarkeit und Unentscheidbarkeit Wolfgang Schreiner Wolfgang.Schreiner@risc.uni-linz.ac.at Research Institute for Symbolic Comutation (RISC) Johannes Keler University,

Mehr

A.1 Schaltfunktionen und Schaltnetze

A.1 Schaltfunktionen und Schaltnetze Schaltfunktionen und Schaltnetze A. Schaltfunktionen und Schaltnetze 22 Prof. Dr. Rainer Manthey Informatik II Bedeutung des Binärsystems für den Rechneraufbau Seit Beginn der Entwicklung von Computerhardware

Mehr

x 2 2x + = 3 + Es gibt genau ein x R mit ax + b = 0, denn es gilt

x 2 2x + = 3 + Es gibt genau ein x R mit ax + b = 0, denn es gilt - 17 - Die Frage ist hier also: Für welche x R gilt x = x + 1? Das ist eine quadratische Gleichung für x. Es gilt x = x + 1 x x 3 = 0, und man kann quadratische Ergänzung machen:... ( ) ( ) x x + = 3 +

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

N Bit binäre Zahlen (signed)

N Bit binäre Zahlen (signed) N Bit binäre Zahlen (signed) n Bit Darstellung ist ein Fenster auf die ersten n Stellen der Binär Zahl 0000000000000000000000000000000000000000000000000110 = 6 1111111111111111111111111111111111111111111111111101

Mehr

Erwin Grüner 15.12.2005

Erwin Grüner 15.12.2005 FB Psychologie Uni Marburg 15.12.2005 Themenübersicht Mit Hilfe der Funktionen runif(), rnorm() usw. kann man (Pseudo-) erzeugen. Darüber hinaus gibt es in R noch zwei weitere interessante Zufallsfunktionen:

Mehr

Binäre lineare Optimierung mit K*BMDs p.1/42

Binäre lineare Optimierung mit K*BMDs p.1/42 Binäre lineare Optimierung mit K*BMDs Ralf Wimmer wimmer@informatik.uni-freiburg.de Institut für Informatik Albert-Ludwigs-Universität Freiburg Binäre lineare Optimierung mit K*BMDs p.1/42 Grundlagen Binäre

Mehr

Übung 4: Schreiben eines Shell-Skripts

Übung 4: Schreiben eines Shell-Skripts Aufgabenteil 1 Ziel der Übung Übung 4: Schreiben eines Shell-Skripts Anhand eines einfachen Linux-Skripts sollen die Grundlagen der Shell-Programmierung vermittelt werden. Das für die Bash-Shell zu erstellende

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

4. Relationen. Beschreibung einer binären Relation

4. Relationen. Beschreibung einer binären Relation 4. Relationen Relationen spielen bei Datenbanken eine wichtige Rolle. Die meisten Datenbanksysteme sind relational. 4.1 Binäre Relationen Eine binäre Relation (Beziehung) R zwischen zwei Mengen A und B

Mehr

Gibt es verschiedene Arten unendlich? Dieter Wolke

Gibt es verschiedene Arten unendlich? Dieter Wolke Gibt es verschiedene Arten unendlich? Dieter Wolke 1 Zuerst zum Gebrauch des Wortes unendlich Es wird in der Mathematik in zwei unterschiedlichen Bedeutungen benutzt Erstens im Zusammenhang mit Funktionen

Mehr

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2) Aufgabe 3 Bankkonto Schreiben Sie eine Klasse, die ein Bankkonto realisiert. Attribute für das Bankkonto sind der Name und Vorname des Kontoinhabers,

Mehr

ax 2 + bx + c = 0, (4.1)

ax 2 + bx + c = 0, (4.1) Kapitel 4 Komplexe Zahlen Wenn wir uns auf die reellen Zahlen beschränken, ist die Operation des Wurzelziehens (also die Umkehrung der Potenzierung) nicht immer möglich. Zum Beispiel können wir nicht die

Mehr

Verträge für die funktionale Programmierung Design und Implementierung

Verträge für die funktionale Programmierung Design und Implementierung 1 Verträge für die funktionale Programmierung Design und Implementierung RALF HINZE Institut für Informatik III, Universität Bonn Römerstraße 164, 53117 Bonn, Germany Email: ralf@informatik.uni-bonn.de

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Seminararbeit Ruby Uno Kartenspiel

Seminararbeit Ruby Uno Kartenspiel Seminararbeit Ruby Uno Kartenspiel Autor: Fabian Merki Fabian Merki 05.11.2006 1 von 10 Inhaltsverzeichnis Einleitung... 3 Die Idee... 4 Design und Implementierung in Ruby... 5 Testing... 7 Startbefehle...

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Compilerbau I Sommersemester 2008

Compilerbau I Sommersemester 2008 Fachbereich 12 Informatik und Elektrotechnik Programmiersprachen Kurt Sieber Benedikt Meurer Compilerbau I Sommersemester 2008 Übungsblatt 1 Aufgabe 1 Der erweiterte reguläre Ausdruck α{m, n erkennt zwischen

Mehr

TimePunch. TimePunch Command. Benutzerhandbuch 14.08.2013. TimePunch KG, Wormser Str. 37, 68642 Bürstadt

TimePunch. TimePunch Command. Benutzerhandbuch 14.08.2013. TimePunch KG, Wormser Str. 37, 68642 Bürstadt TimePunch TimePunch Command Benutzerhandbuch 14.08.2013 TimePunch KG, Wormser Str. 37, 68642 Bürstadt Dokumenten Information: Dokumenten-Name Benutzerhandbuch, TimePunch Command Revisions-Nummer 37 Gespeichert

Mehr

Zeichnen von Graphen. graph drawing

Zeichnen von Graphen. graph drawing Zeichnen von Graphen graph drawing WS 2006 / 2007 Gruppe: D_rot_Ala0607 Christian Becker 11042315 Eugen Plischke 11042351 Vadim Filippov 11042026 Gegeben sei ein Graph G = (V; E) Problemstellung V E =

Mehr

Drupal Views Bildergalerie erstellen

Drupal Views Bildergalerie erstellen Drupal Views Bildergalerie erstellen (HTML5-Tags ergänzen, Gesamtsumme der Bilder, Bild URL hinzufügen) Es wird eine Galerie Übersichtsseite basierend auf Views-Relationships aufgebaut. Von dieser ausgehend

Mehr

Übungsaufgaben mit Lösungsvorschlägen

Übungsaufgaben mit Lösungsvorschlägen Otto-Friedrich-Universität Bamberg Lehrstuhl für Medieninformatik Prof. Dr. Andreas Henrich Dipl. Wirtsch.Inf. Daniel Blank Einführung in das Information Retrieval, 8. Mai 2008 Veranstaltung für die Berufsakademie

Mehr

Von Paul Curzon, Queen Mary, University of London mit Unterstützung von Google und EPSRC

Von Paul Curzon, Queen Mary, University of London mit Unterstützung von Google und EPSRC Compu terwissenscha ften mi t Spaßfak tor Spiele gewinnen: der perfekte Tic Tac Toe-Spieler Von Paul Curzon, Queen Mary, University of London mit Unterstützung von Google und EPSRC Spiele gewinnen: der

Mehr

Einführung in die Informatik Grammars & Parsers

Einführung in die Informatik Grammars & Parsers Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme

Mehr

1 Ein Beispiel: Das Berechnen eines Schulzeugnisses

1 Ein Beispiel: Das Berechnen eines Schulzeugnisses Funktionen in Excel 1 Ein Beispiel: Das Berechnen eines Schulzeugnisses Jim hat die folgenden Noten im 1. Trimester: Fach Prüfung 1 Prüfung 2 Prüfung 3 Englisch 35 38 43 Deutsch 44 42 48 Französisch 28

Mehr

Zur Vereinfachung betrachten wir nun nur noch Funktionen f, die einen Funktionswert f nµberechnen. Sie werden alle in einer Tabelle dargestellt:

Zur Vereinfachung betrachten wir nun nur noch Funktionen f, die einen Funktionswert f nµberechnen. Sie werden alle in einer Tabelle dargestellt: Informatik 13: Gierhardt Theoretische Informatik III Berechenbarkeit Nicht-berechenbare Funktionen Nach der Church-Turing-These kann alles, was berechenbar ist, mit einer Turing-Maschine oder einer While-Maschine

Mehr

Excel. Funktionen professionell einsetzen

Excel. Funktionen professionell einsetzen Excel Funktionen professionell einsetzen Verlag: BILDNER Verlag GmbH Bahnhofstraße 8 94032 Passau http://www.bildner-verlag.de info@bildner-verlag.de Tel.: +49 851-6700 Fax: +49 851-6624 ISBN: 978-3-8328-0080-2

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Lohnlaufdatenimport Schnittstellen

Lohnlaufdatenimport Schnittstellen Lohnlaufdatenimport Schnittstellen 1 Lohnlaufdatenimport Schnittstellen Inhalt Einleitung 2 Schnittstellen 3 Standardschnittstelle... 3 Calitime... 6 Format für Lohnarten-Nummer... 6 Excel-Tabelle... 7

Mehr

Erster Bug: eine Motte

Erster Bug: eine Motte SOFTWAREFEHLER Der erste Bug Erster Bug: eine Motte Der Begriff Bug (deutsch: Motte) stammt aus dem Jahre 1945, als Ingenieure in einem Schaltrelais eines Computers (Harvard Mark II-System) eine Motte

Mehr

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen

Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur

Mehr

Absolute Stetigkeit von Maßen

Absolute Stetigkeit von Maßen Absolute Stetigkeit von Maßen Definition. Seien µ und ν Maße auf (X, Ω). Dann heißt ν absolut stetig bezüglich µ (kurz ν µ ), wenn für alle A Ω mit µ(a) = 0 auch gilt dass ν(a) = 0. Lemma. Sei ν ein endliches

Mehr

Entwicklung eines korrekten Übersetzers

Entwicklung eines korrekten Übersetzers Entwicklung eines korrekten Übersetzers für eine funktionale Programmiersprache im Theorembeweiser Coq Thomas Strathmann 14.01.2011 Gliederung 1 Einleitung

Mehr

1 Ordnung muß sein. 1.1 Angeordnete Körper. 1.2 Folgerungen aus den Anordnungsaxiomen. ( c) (b a) > 0. Somit a c b c > 0.

1 Ordnung muß sein. 1.1 Angeordnete Körper. 1.2 Folgerungen aus den Anordnungsaxiomen. ( c) (b a) > 0. Somit a c b c > 0. 1 Ordnung uß sein 1.1 Angeordnete Körper Wir nehen einal an, daß es in eine Körper Eleente gibt, die wir positiv nennen. Welche Eigenschaften sollen diese haben? O1) Wenn x und y positiv sind, dann auch

Mehr

Information in einem Computer ist ein

Information in einem Computer ist ein 4 Arithmetik Die in den vorhergehenden Kapiteln vorgestellten Schaltungen haben ausschließlich einfache, Boole sche Signale verarbeitet. In diesem Kapitel wird nun erklärt, wie Prozessoren mit Zahlen umgehen.

Mehr

Informatik 12 Datenbanken SQL-Einführung

Informatik 12 Datenbanken SQL-Einführung Informatik 12 Datenbanken SQL-Einführung Gierhardt Vorbemerkungen Bisher haben wir Datenbanken nur über einzelne Tabellen kennen gelernt. Stehen mehrere Tabellen in gewissen Beziehungen zur Beschreibung

Mehr

Entwicklung eines Scheduling-Verfahrens zur Optimierung der Reihenfolge von Prototypentests. Masterarbeit

Entwicklung eines Scheduling-Verfahrens zur Optimierung der Reihenfolge von Prototypentests. Masterarbeit Entwicklung eines Scheduling-Verfahrens zur Optimierung der Reihenfolge von Prototypentests Masterarbeit zur Erlangung des akademischen Grades Master of Science (M.Sc.) im Masterstudiengang Wirtschaftswissenschaft

Mehr

Answer Set Programming

Answer Set Programming Answer Set Programming mit Answer Set Prolog (A-Prolog) Wangler Thomas Logikprogrammierung Institut für Computerlinguistik Universität Heidelberg Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis

Mehr

Seminararbeit für das SE Reine Mathematik- Graphentheorie

Seminararbeit für das SE Reine Mathematik- Graphentheorie Seminararbeit für das SE Reine Mathematik- Graphentheorie Der binäre Rang, der symplektische Graph, die Spektralzerlegung und rationale Funktionen Vortrag am 24.01.2012 Heike Farkas 0410052 Inhaltsverzeichnis

Mehr

WIRIS quizzes Datenbank, Mathematik für Moodle Quiz

WIRIS quizzes Datenbank, Mathematik für Moodle Quiz WIRIS quizzes Datenbank, Mathematik für Moodle Quiz Carles Aguiló Maths for More WIRIS quizzes verbessert die Funktionalität von Moodle Quiz in der Mathematik und in anderen wissenschaftlichen Themengebieten.

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

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

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N. Fuhr

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N. Fuhr Raum: LF 230 Bearbeitung: 9.-11. Mai 2005 Datum Gruppe Vorbereitung Präsenz Aktuelle Informationen unter: http://www.is.informatik.uni-duisburg.de/courses/dbp_ss03/ Tabellen in IBM DB2 Tabellen Eine relationale

Mehr

Approximationsalgorithmen: Klassiker I. Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling

Approximationsalgorithmen: Klassiker I. Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling Approximationsalgorithmen: Klassiker I Kombinatorische Optimierung Absolute Gütegarantie Graph-Coloring Clique Relative Gütegarantie Scheduling VO Approximationsalgorithmen WiSe 2011/12 Markus Chimani

Mehr

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet

Mehr

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

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

Mehr

EINFACHES HAUSHALT- KASSABUCH

EINFACHES HAUSHALT- KASSABUCH EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)

Mehr

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle

CAS-Ansicht Computer Algebra System & Cas spezifische Befehle CAS-Ansicht Computer Algebra System & Cas spezifische Befehle GeoGebra Workshop Handout 10 1 1. Einführung in die GeoGebra CAS-Ansicht Die CAS-Ansicht ermöglicht die Verwendung eines CAS (Computer Algebra

Mehr

Vier Gewinnt Nicolas Schmidt Matthias Dietsche Bernhard Weiß Benjamin Ruile Datum: 17.2.2009 Tutor: Prof. Schottenloher Spieltheorie

Vier Gewinnt Nicolas Schmidt Matthias Dietsche Bernhard Weiß Benjamin Ruile Datum: 17.2.2009 Tutor: Prof. Schottenloher Spieltheorie Vier Gewinnt Nicolas Schmidt Matthias Dietsche Bernhard Weiß Benjamin Ruile Datum: 17.2.2009 Tutor: Prof. Schottenloher Spieltheorie Präsentation Agenda I. Einführung 1. Motivation 2. Das Spiel Vier Gewinnt

Mehr

2. Die Darstellung von Algorithmen

2. Die Darstellung von Algorithmen 2. Die Darstellung von Algorithmen Aus den Einführungsbeispielen und Übungsaufgaben ist erkennbar, dass zur Darstellung von Algorithmen Grundelemente notwendig sind. Neben der Notation einzelner elementarer

Mehr

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK (HAUPTTERMIN) Bearbeitungszeit: 270 Minuten Hilfsmittel: Wörterbuch zur deutschen Rechtschreibung Taschenrechner (nicht programmierbar, nicht grafikfähig) (Schüler,

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen Austausch- bzw. Übergangsrozesse und Gleichgewichtsverteilungen Wir betrachten ein System mit verschiedenen Zuständen, zwischen denen ein Austausch stattfinden kann. Etwa soziale Schichten in einer Gesellschaft:

Mehr

Theoretische Grundlagen der Informatik WS 09/10

Theoretische Grundlagen der Informatik WS 09/10 Theoretische Grundlagen der Informatik WS 09/10 - Tutorium 6 - Michael Kirsten und Kai Wallisch Sitzung 13 02.02.2010 Inhaltsverzeichnis 1 Formeln zur Berechnung Aufgabe 1 2 Hamming-Distanz Aufgabe 2 3

Mehr

Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 4. Juni 2007 45

Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 4. Juni 2007 45 Software Engineering, SoSe 07, WSI, D. Huson, (Original Author: A. Zeller), 4. Juni 2007 45 7 Programmverstehen + Fehlersuche Nach einer Vorlesung von Prof. Andreas Zeller, Lehrstuhl Softwaretechnik Universität

Mehr

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book Wir wollen wissen wieviel Umsatz Vertreter Müller im Juni gemacht hat? Dazu klicken wir irgendwo in ein Feld und geben ein: =SVERWEIS

Mehr

1. Grundlegende Konzepte der Informatik

1. Grundlegende Konzepte der Informatik 1. Grundlegende Konzepte der Informatik Inhalt Algorithmen Darstellung von Algorithmen mit Programmablaufplänen Beispiele für Algorithmen Aussagenlogik Zahlensysteme Kodierung Peter Sobe 1 Algorithmen

Mehr

Beispiel. Bsp.: Betrachte Schlussweise in: (3) folgt aus (1) und (2), siehe z.b. Resolutionsregel. was ist mit folgender Schlußweise:

Beispiel. Bsp.: Betrachte Schlussweise in: (3) folgt aus (1) und (2), siehe z.b. Resolutionsregel. was ist mit folgender Schlußweise: Theoretische Informatik: Logik, M. Lange, FB16, Uni Kassel: 5.4 Prädikatenlogik mit Gleichheit Resolution 192 Beispiel Bsp.: Betrachte Schlussweise in: 1 Wenn es regnet, dann wird die Straße nass. R N

Mehr