Einführung in die Programmierung I Systema=sches Programmieren
|
|
- Etta Kalb
- vor 7 Jahren
- Abrufe
Transkript
1 Einführung in die Programmierung I 10.0 Systema=sches Programmieren Thomas R. Gross Department Informa=k ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved.
2 Uebersicht! 10.4 Pre/Post CondiDons für Loops 2
3 Analyse von Schleifen Bis jetzt waren die Programme einfach Sie hamen zwei EigenschaOen, die die Analyse sehr vereinfachten: 1. Wenn ein Programm ausgeführt wurde, dann wurde jede Anweisung keinmal oder einmal ausgeführt 2. (Daher) terminierte jedes Programm trivialerweise. 3
4 Diese beiden EigenschaOen treffen nicht zu wenn wir Schleifen (loops) haben (oder rekursive Methoden)! Wir betrachten nur einfache Schleifen! while-loops alle anderen Loops können durch diese ausgedrückt werden! MoDvaDon: Konzept der Invariante einzuführen! Geht über Pre/PostcondiDon hinaus! Auch in anderen SituaDonen sehr hilfreich, z.b. Objek6nvarianten die die Zustände eine Objektes characterizieren.! Wir blenden aus dass wir (auch) zeigen müssen dass eine Schleife terminiert (wir greifen diesen Aspekt später kurz auf) 4
5 Beispiel (informell) Was ist die Grundidee? Sehen wir uns einen Loop an: // assume: x >= 0 y = 0; i = 0; // // while(i!= x) { // i = i+1; // y = y+i; // } // // assert: y == sum(1,x) 6
6 // assume: x >= 0 y = 0; i = 0; // x >= 0 y == 0 i == 0 // invariant: y == sum(1,i) while(i!= x) { // y == sum(1,i) i!= x i = i+1; // y == sum(1,i-1) y = y+i; // y == sum(1,i-1)+i } // i==x y == sum(1,i) // assert: y == sum(1,x) 7
7 Beobachtungen! Um Aussagen über die Ausführung des Loops zu machen brauchen wir eine Invariante! Der Rumpf der Schleife könnte beliebig oo ausgeführt werden! Die PrecondiDon für die Schleife muss die Invariante implizieren! PrecondiDon muss stärker als (oder gleich stark wie) die Invariante sein 8
8 ! Invariante und der Schleifen Test (wenn er wahr ist) müssen stark genug sein um zu zeigen dass die PostcondiDon des Rumpfs auch die Invariante impliziert! Invariante und der Schleifen Test (wenn er falsch ist) müssen stark genug sein um die PostcondiDon der Schleife zu zeigen. 9
9 Hoare Logik! Gegeben sei ein Tripel für einen while-loop {P} while(b) S; {Q} Ein solches Tripel ist güldg wenn es eine Invariante I gibt so dass:! P => I Invariante gilt zu Beginn! {I B} S {I} Nach Ausführen des Rumpfes gilt die Invariante wieder! (I!B) Q Invariante (und Verlassen der Schleife, d.h test B ist false) impliziert PostcondiDon Q. 10
10 ! Für ein güldges Hoare Tripel einer Schleife {P} while(b) S; {Q} sind Schleifentest B, Schleifenrumpf S und die Schleifeninvariante I aufeinander abgesdmmt! S kann eine Folge von Anweisungen sein (auch geschachtelte Loops)! Für eine PostcondiDon Q gibt es (oo, manchmal) verschiedene Schleifen, die für die PrecondiDon P das selbe Result berechnen! Diese Schleifen haben dann andere Invarianten und Statements im Rumpf! DefiniDon allgemein genug, deckt auch den Fall ab dass der Rumpf keinmal durchlaufen wird 11
11 {P} while B S {Q} P => I Invariante gilt zu Beginn {I B} S {I} Nach Ausführen des Rumpfes gilt die Invariante wieder (I!B) => Q Invariante und Verlassen der Schleife impliziert Q. {x >= 0} y = 0; i = 0; {pre: x >= 0 y == 0 i == 0} {inv: y == sum(1,i)} while(i!= x) { i = i+1; y = y+i; } {post: i==x y == sum(1,i)} (also: y == sum(1,x)) 13
12 Ein anderer Loop (für das selbe Problem) Ein anderer Loop hat eine andere Invariante {x >= 0} y = 0; i = 1; {pre: x >= 0 y==0 i==1} {inv: y == sum(1,i-1)} while(i!= x+1) { y = y+i; i = i+1; } {post: i==x+1 y == sum(1,i-1)} (also: y == sum(1,x)) 14
13 Invarianten helfen Bugs zu finden Dieser Loop ist ähnlich aber macht nicht was wir wollen: {x >= 0} y = 0; i = 1; {pre: x >= 0 y==0 i==1} {inv: y == sum(1,i-1)} while(i!= x) { y = y+i; i = i+1; } {post: i==x y == sum(1,i-1)} (also: y == sum(1,x)) 15
14 Mehr Bugs! Dieser Loop enthält ein ungüldges Hoare Triple {x >= 0} y = 0; i = 0; {pre: x >= 0 y==0 i==0} {inv: y == sum(1,i)} while(i!= x) { y = y+i; i = i+1; // Invariante gilt nicht warum? } {post: i==x y == sum(1,i)} 16
15 Invarianten.! dürfen weder zu stark noch zu schwach sein! Wenn die Invariante zu stark ist, dann ist sie evtl. false! D.h. wir können nicht zeigen, dass sie zu Beginn güldg ist, oder! Die Invariante ist nicht wahr nachdem der Rumpf ausgeführt wurde! Wenn die Invariante zu schwach ist! Dann kann die PostcondiDon nach dem Verlassen des Loops evtl. nicht die PostcondiDon der Schleife implizieren! Und/oder es ist unmöglich zu zeigen dass die Invariante nach der Ausführung des Rumpfes (wieder) gilt 17
16 Invarianten nicht zu stark und nicht zu schwach! Das ist der Grund warum es keinen vollautomadschen Weg gibt, eine Loop Invariante zu konstruieren! Programmieren eine krea6ve TäDgkeit! Finden der Invariante erfordert nachdenken (oder manchmal raten )! OO zusammen mit dem Schreiben des Programms! Wenn es keinen Beweis gibt, dann muss entweder der Code, die Invariante, oder beides geändert werden.! Manchmal gibt es verschiedene Invarianten, die alle genügen (d.h. sind weder zu stark noch zu schwach), aber unterschiedlich 18 zweckmässig sind
17 Eine Methodologie! Hier ist ein Ansatz wie wir Schleife und Invarianten entwickeln können! Kein vollständiges Rezept! Nicht stur zu befolgen aber besser als der "schnelle" Weg, erst den Code zu entwickeln und dann die Invariante zu suchen. 19
18 ! [M]ethodology is the general research strategy that outlines the way in which research is to be undertaken and, among other things, idendfies the methods to be used in it.! [Wikipedia]! Computer science usage, in general "analysis of the body of methods and principles associated with a branch of knowledge" [dto] 20
19 Eine Methodologie! Hier ist ein Ansatz wie wir Schleife und Invarianten entwickeln können! Kein vollständiges Rezept! Nicht stur zu befolgen aber besser als der "schnelle" Weg, erst den Code zu entwickeln und dann die Invariante zu raten. 22
20 Eine Methodologie! Vorschlag (funkdoniert überraschenderweise oo): 1. BesDmmen Sie zuerst die Invariante und lassen Sie sie die anderen SchriMe leiten (!)! Wie bringt uns jede IteraDon näher an das Ziel?! Was muss nach jeder IteraDon gelten? 2. Schreiben Sie einen Rumpf der die Invariante güldg lässt 3. BesDmmen Sie den Loop Test so, dass Test-ist-false die PostcondiDon impliziert 4. Schreiben Sie die IniDalisierung so dass dieser Code die Invariante sicher stellt. 23
21 Beispiel Wir wollen dass max den grössten (int) Wert, der in einem Array items auorim, enthält. 1. BesDmmen Sie zuerst die Invariante und lassen Sie sie die anderen SchriMe leiten! Invariante: max speichert den grössten Wert der Elemente 0..k-1 im Array items! Andere Invarianten sind auch möglich 25
22 Wir wollen dass max den grössten (int) Wert, der in einem Array items auorim, enthält. 2. Schreiben Sie einen Rumpf der die Invariante güldg lässt {inv: max holds largest value in items[0..k-1]} while ( ) { } // inv holds if (max < items[k]) { max = items[k]; // breaks inv temporarily } else { // nothing to do } // max holds largest value in items[0..k] k = k+1; // invariant holds again 26
23 Wir wollen dass max den grössten (int) Wert, der in einem Array items auorim, enthält. 3. BesDmmen Sie den Loop Test so, dass Test-ist-false die PostcondiDon impliziert {inv: max holds largest value in items[0..k-1]} while (k!= items.length) { } // inv holds if (max < items[k]) { max = items[k]; // breaks inv temporarily } else { // nothing to do } // max holds largest value in items[0..k] k = k+1; // invariant holds again 27
24 Wir wollen dass max den grössten (int) Wert, der in einem Array items auorim, enthält. 3. BesDmmen Sie den Loop Test so, dass Test-ist-false die PostcondiDon impliziert {inv: max holds largest value in items[0..k-1]} while (k!= items.length) { // inv holds if (max < items[k]) { max = items[k]; // breaks inv temporarily } else { } // nothing to do // max holds largest value in items[0..k] k = k+1; // invariant holds again } {post: k == items.length max largest in items[0..k-1] (also: max largest value in items) } 28
25 Wir wollen dass max den grössten (int) Wert, der in einem Array items auorim, enthält. 4. Schreiben Sie die IniDalisierung so dass dieser Code die Invariante sicher stellt. k=1; max = items[0]; {inv: max holds largest value in items[0..k-1]} while (k!= items.length) { } // inv holds k = k+1; // invariant holds again 29
26 Was muss noch gelten?! Die IniDalisierung hat eine PrecondiDon: items.length > 0 {items.length > 0} k=1; max = items[0]; {inv: max holds largest value in items[0..k-1]} while(k!= items.length) { } 30
27 PrecondiDon! Es ist (je nach SituaDon) akzeptabel eine solche PrecondiDon zu erfordern! Aber sie muss angegeben sein!! Oder wir brauchen eine andere PostcondiDon ( if length is 0, ) und ein If-Statement das diesen Fall prüo! Der Gewinn für uns: Genaue PrecondiDons halten fest, was der Code (die Methode) vom Klienten erwartet.! Für alle lesbar 31
28 QuoDent und Rest Wir suchen für x und y: q den QuoDenten von x / y und Rest r. PrecondiDon: x > 0 y > 0 PostcondiDon: q*y + r == x r >= 0 r < y 33
29 QuoDent und Rest Wir suchen für x und y: q den QuoDent von x / y und Rest r PrecondiDon: x > 0 y > 0 PostcondiDon: q*y + r == x r >= 0 r < y Idee: wiederholte SubtrakDon 34
30 QuoDent und Rest Eine mögliche Loop Invariante: q*y + r == x r >= 0 Ein Schleifenrumpf der die Invariante güldg lässt: q = q + 1; r = r y; Ein Looptest der (wenn falsch) mit der Invariante die PostcondiDon impliziert : y <= r IniDalisierung damit Invariante zu Beginn gilt: q = 0; r = x; 35
31 Alles zusammen {x > 0 y > 0} r = x; q = 0; {inv: q*y + r == x r >= 0 } while (y <= r) { q = q + 1; r = r y; } {q*y + r == x r >= 0 r < y} 36
32 Das Holländische NaDonalflaggen Problem "Klassisches" Problem aus den Anfängen der InformaDk Gegeben sei ein Array mit roten, weissen und blauen Kugeln. Sor6eren Sie den Array so, dass die roten Kugeln am Anfang, die weissen in der MiFe und die blauen am Ende liegen. Benutzen Sie nur die AustauschoperaDon stam (z.b.) zählen und zuweisen Edsgar Dijkstra 37
33 Pre- und PostcondiDons PrecondiDon: irgendeine Mischung von rot, weiss und blau Irgendeine Farbe : rot, weiss, blau PostcondiDon:! Reihenfolge ist rot, dann weiss, dann blau! Die Anzahl der Kugeln jeder Farbe ist die selbe wie zu Anfang Rot Weiss Blau 38
34 Einige mögliche Invarianten Jede dieser Invariante ist brauchbar der Array wird mehr und mehr sordert im Verlauf der Schleife Rot Weiss Blau Beliebig Rot Weiss Beliebig Blau Rot Beliebig Weiss Blau Beliebig Rot Weiss Blau Die beiden mimleren sind besser da wir höchstens nur eine Kugel verschieben müssen nicht evtl. sogar zwei. 40
35 Etwas genauer! PrecondiDon P: arr enthält r rote, w weisse und b blaue Kugeln! PostcondiDon: P 0 <= i <= j <= arr.length arr[0..i-1] ist rot arr[i..j-1] ist weiss arr[j..arr.length-1] ist blau 41
36 Etwas genauer! Invariante: P 0 <= i <= j <= k <= arr.length arr[0..i-1] ist rot arr[i..j-1] ist weiss arr[k..arr.length-1] ist blau! IniDalisierung damit die Invariante gilt (kann vor oder nach der KonstrukDon des Rumpfes gemacht werden): i=0; j=0; k=arr.length; 42
37 Loop Test und Body Rot Weiss Beliebig Blau i j k while(j!=k) { if(arr[j] == Weiss) { j = j+1; } else if (arr[j] == Blau) { swap(arr,j,k-1); k = k-1; } else { // arr[j] == Rot swap(arr,i,j) i = i+1; j = j+1; } } void swap(int[] x, int y, int z) { int tmp = x[y]; x[y] = x[z]; x[z] = tmp; } 43
38 Wann sollten wir Beweise einsetzen! Viele einfache Loops sind offensichtlich! for(string name : friends) { }! Dieser Ansatz lohn sich wenn die Zustände im Rumpf unklar sind, oder es Fencepost Probleme gibt.! Kann auch diesen Ansatz benutzen um eine Idee für den Rumpf zu entwickeln 45
39 Terminierung! Zwei Arten von Schleifen! Die, die immer terminieren sollen (Normalfall)! Die, die immer weiter laufen sollen (z.b. Web Server, Betriebssytem)! Korrektheitsbeweis erfordert im Normalfall einen Beweis, dass der Loop terminiert.! Bisher haben wir das nicht gemacht! Unsere HoareTriples sagen wenn die Schleife terminiert dann gilt die PostcondiDon! ParDelle Korrektheit (korrekt unter der Annahme Terminierung der Schleife) 46
40 Terminierung! Idee: wir bilden den Zustand (nach Ausfuehrung eines Durchlaufs durch die Schleife) auf eine ganze Zahl ab so dass diese Zahl durch jede Ausführung des Rumpfes verkleinert wird! Wir finden einen Beweis dass der Loop Test "false" ergibt wenn diese Zahl zu 0 wird! Damit zeigen wir Terminierung: jede Ausfuehrung verkleinert die Zahl, d.h. es gibt nur endlich viele SchriMe, die die Zahl auf 0 bringen. 47
41 Beispiele! QuoDent-und-Rest: r (am Anfang posidv, wird in jeder IteraDon immer kleiner)! Binäre Suche: Grösse des Bereichs der noch zu bearbeiten ist! Holländische Flagge: Grösse des Bereichs, der noch nicht (nach Farben) aufgeteilt ist (k-j) 48
42 It is easier to write an incorrect program than understand a correct one. Alan Perlis st Department Head at Carnegie Mellon 1 st Winner of the Turing Award 49
Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich
252-0027 Einführung in die Programmierung I 10.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht
Mehr11.0 Systematisches Programmierung
252-0027 Einführung in die Programmierung 11.0 Systematisches Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht
Mehr{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel
Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales
MehrKorrektheit imperativer Algorithmen
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Abschnitt 9 Korrektheit imperativer Algorithmen Skript zur Vorlesung Einführung in die Programmierung im Wintersemester
MehrKapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte
Elementare Schritte Ein elementarer Berechnungsschritt eines Algorithmus ändert im Allgemeinen den Wert von Variablen Zuweisungsoperation von fundamentaler Bedeutung Zuweisungsoperator In Pascal := In
MehrEinführung in die Programmierung I. 2.4 Felder. Thomas R. Gross. Department Informatik ETH Zürich
252-0027 Einführung in die Programmierung I 2.4 Felder Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.4 Felder (Vektoren, "array"s) 2.5 Verschachtelte Schleifen 2.6 "if" Anweisungen 2.7
Mehr2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:
2.4 Schleifen Schleifen beschreiben die Wiederholung einer Anweisung bzw. eines Blocks von Anweisungen (dem Schleifenrumpf) bis eine bestimmte Bedingung (die Abbruchbedingung) eintritt. Schleifen unterscheiden
MehrWS 05/06 mod Verifikation
3.3 Verifikation WS 05/06 mod 351 Verifikation ist der Beweis der Korrektheit eines Algorithmus relativ zu seiner Spezifikation. Die Aussagen gelten für alle Ausführungen des Algorithmus. Sie werden statisch
Mehr5.3 Korrektheit und Verifikation
5.3 Korrektheit und Verifikation Korrektheit bedeutet, dass ein Algorithmus oder ein Programm das in der Spezifikation beschriebene Problem für beliebige Eingabedaten korrekt löst. Die Korrektheit kann
MehrEinführung in die Programmiertechnik
Einführung in die Programmiertechnik Verifikation 2 Vermeidung von Fehlern Verwendung geeigneter Werkzeuge Auswahl einer dem Problem angemessenen Programmiersprache Verwendung eines zuverlässigen Compilers
MehrEinführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
MehrC. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007
C. A. R. Hoare An Axiomatic Basis for Computer Programming Nicolas Schelp Proseminar Assertions SS 2007 Inhalt Motivation Kurze Biographie Der Hoare-Kalkül Axiome und Inferenzregeln des Hoare-Kalküls Die
MehrEinführung in die Programmierung Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich
252-0027 Einführung in die Programmierung 11.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. 1 Übersicht
MehrKorrektheit und Hoare-Kalkül für Imperative Programme
Korrektheit und Hoare-Kalkül für Imperative Programme Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 Ziele Partielle und totale Korrektheit kennen lernen Die Regeln des Hoare-Kalkül
Mehr5.3 Korrektheit und Verifikation
5.3 Korrektheit und Verifikation Korrektheit bedeutet, dass ein Algorithmus oder ein Programm das in der Spezifikation beschriebene Problem für beliebige Eingabedaten korrekt löst. Die Korrektheit kann
MehrKontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht
Kontrollanweisungen Kontrollfluss o bisher linear (von oben nach unten) o Für interessante Programme braucht man Verzweigungen und Sprünge Kontrollfluss o bisher linear (von oben nach unten) o Für interessante
MehrTagesprogramm
1 2015-10-22 Tagesprogramm Syntax und Semantik Varianten von Schleifen Varianten von Programmverzweigungen 2 2015-10-22 Syntax und Semantik Darstellung der Syntax Syntax: Aufbau der Sätze bzw. Programme
MehrAbschnitt 11: Korrektheit von imperativen Programmen
Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961
MehrProblem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.
Formale Verifikation von Algorithmen 1.3 Verifikation Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt. Bisher nicht möglich
Mehrn 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays)
n 1. Erste Schritte n 2. Einfache Datentypen n 3. Anweisungen und Kontrollstrukturen n 4. Verifikation n 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation n Spezifikation: Angabe, was ein
Mehr3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung
115 3. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung Wo wollen wir hin? 116 int a; std::cin >> a; if (a % 2 == 0) std::cout
Mehr1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -
1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun
MehrFormale Systeme Logik: Verifikation von Aussagen über Algorithmen. Ana Sokolova statt Robert Elsässer
Formale Systeme Logik: Verifikation von Aussagen über Algorithmen 20.12.2012 Ana Sokolova statt Robert Elsässer Verifikation von Aussagen über Algorithmen Hoaresche Logik: Kalkül zum Beweisen von Aussagen
Mehr4.3 Verifikation von Aussagen über Algorithmen
4.3 Verifikation von Aussagen über Algorithmen Hoaresche Logik: Kalkül zum Beweisen von Aussagen über Algorithmen und Programme, Programm-Verifikation, [C.A.R. Hoare, 1969]. Mod - 4.51 Statische Aussagen
MehrÜbung zu Grundbegriffe der Informatik. Simon Wacker. 15. November 2013
Übung zu Grundbegriffe der Informatik Simon Wacker 15. November 2013 Vollständige Induktion über die Wortlänge Es sei B ein Alphabet. Dann ist B = n N 0 B n. Für jedes Wort w B sei A w eine Aussage, die
MehrKontrollstrukturen -- Schleifen und Wiederholungen
Kontrollstrukturen -- Schleifen und Wiederholungen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14
Mehr4. Wahrheitswerte. Wo wollen wir hin? Boolesche Werte in der Mathematik. Der Typ bool in C++
162 Wo wollen wir hin? 163 4. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung int a; std::cin >> a; if (a % 2 == 0) std::cout
Mehr! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -
! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation! Spezifikation: Angabe, was ein Programm
Mehr1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -
1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation Spezifikation: Angabe, was ein Programm tun
MehrAlgorithmen und Programmieren II Programmverifikation {V} P {N}
Algorithmen und Programmieren II Programmverifikation {V} P {N} SS 2012 Prof. Dr. Margarita Esponda ALP II: Margarita Esponda, 11. Vorlesung, 22.5.2012 1 Assertions oder Zusicherungen Das Konzept der Zusicherungen
MehrVor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel
Wer ist denn das? Vor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel Programmspezifikation mit Vor- und Nachbedingungen (C) 2007-2018, Ralf Lämmel, Universität Koblenz-Landau 2 3 Gesprächsprotokoll
MehrGrundlagen der Programmierung in C++ Kontrollstrukturen
Block Keine Kontrollstruktur im eigentlichen Sinn Grundlagen der Programmierung in C++ Kontrollstrukturen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Dient
Mehr3. Wahrheitswerte. Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten
114 3. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung; Assertions und Konstanten Wo wollen wir hin? 115 int a; std::cin >> a; if (a % 2 ==
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrEinführung in die Programmierung
252-0027 Einführung in die Programmierung 2.5 if -Anweisungen 2.6 Nochmals Schleifen: while Loops 2.Y Output Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.2 Typen und Variable Deklaration
MehrPartielle Korrektheit von Programmen. Beispiele an der Tafel
Partielle Korrektheit von Programmen Beispiele an der Tafel ALP II: Margarita Esponda, 12. Vorlesung, 24.5.2012 36 Beispiel: Partielle Korrektheit von Programmen Nehmen wir an, wir möchten beweisen, dass
Mehr06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen
06 While-Schleifen While-Schleifen 1/7 Wiederholung: Schleifen Eine Schleife ist eine Struktur, welche den Computer anweist, eine Liste von Befehlen mehrmals auszuführen. Falls Du ein Verfahren hast, das
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Wintersemester 2013/14 1. Vorlesung Kapitel 1: Sortieren Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Das Problem Eingabe Gegeben: eine Folge A = a 1, a 2,..., a
MehrInstitut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März
MehrInstitut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. Januar 2018 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 17. Februar
MehrInformatik II Musterlösung
Ludwig-Maximilians-Universität München SS 2006 Institut für Informatik Übungsblatt 4 Prof. Dr. M. Wirsing, M. Hammer, A. Rauschmayer Informatik II Musterlösung Zu jeder Aufgabe ist eine Datei abzugeben,
MehrEinführung in die Theoretische Informatik
Einführung in die Theoretische Informatik Maximilian Haslbeck Fabian Mitterwallner Georg Moser David Obwaller cbr.uibk.ac.at Zusammenfassung der letzten LVA Definition Eine Registermaschine (RM) R ist
MehrGrundlagen der Programmierung in C++ Kontrollstrukturen
Grundlagen der Programmierung in C++ Kontrollstrukturen Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Block Keine Kontrollstruktur im eigentlichen Sinn Dient
Mehr3. Wahrheitswerte. Wo wollen wir hin? Boolesche Werte in der Mathematik. Der Typ bool in C++
Wo wollen wir hin? 3. Wahrheitswerte Boolesche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung int a; std::cin >> a; if (a % 2 == 0) std::cout
MehrEinführung in die Programmierung II. 3. Kontrollstrukturen
Einführung in die Programmierung II 3. Kontrollstrukturen Thomas Huckle, Stefan Zimmer 2.5.2007-1- Anweisungen: was bisher geschah Bisher kennen wir zwei Formen von Anweisungen Ein Ausdruck mit Semikolon
MehrJava 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Wintersemester 2012/13 1. Vorlesung Kapitel 1: Sortieren Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Das Problem Eingabe Gegeben: eine Folge A = a 1, a 2,..., a
MehrInformatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -
Informatik I - Programmierung Globalübung 11.11.2003 Hoare-Kalkül Thomas Weiler Fachgruppe Informatik RWTH Aachen T. Weiler, RWTH Aachen - 1 - Ariane 5 Die Ariane 5 ist das jüngste Modell der Trägerrakete
MehrInformatik - Übungsstunde
Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik
Mehr8 Anwendung: Suchen. Folge a ganzer Zahlen; Element x. Wo kommt x in a vor?
8 Anwendung: Suchen Gegeben: Gesucht: Folge a ganzer Zahlen; Element x Wo kommt x in a vor? Naives Vorgehen: Vergleiche x der Reihe nach mit a[0], a[1], usw. Finden wir i mit a[i] == x, geben wir i aus.
MehrKapitel 3: Anweisungen
Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -66 Kapitel : Anweisungen Bedingte Anweisungen (Verzweigungen) Wiederholte Anweisungen (Schleifen) Abweisschleife Durchlaufschleife
MehrAlgorithmen und Datenstrukturen Musterlösung 5
Algorithmen und Datenstrukturen Musterlösung 5 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
MehrTechnische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 17. Februar 2018 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr
MehrAufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.
Aufgabe 8 Betrachten Sie den folgenden Algorithmus namens Bubble-Sort. Bubble-Sort(A[1..n]): 1 for i 1 to length(a) 1 2 do for j length(a) downto i + 1 3 do if A[j 1] > A[j] 4 then A[j 1] A[j] 1 Arbeitsweise
MehrChapter A. Korrekte Programme. Korrektes Programm. Lecture Algorithmen & Datenstrukturen
Chapter A Lecture Algorithmen & Datenstrukturen.09.01 Berner Fachhochschule Technik und Informatik A.1 Das Programm endet nach endlich viel Zeit. Das Programm endet nach endlich viel Zeit. Damit dies erfüllt
MehrSemantik von Programmiersprachen SS 2017
Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen
Mehr2 Teil 2: Nassi-Schneiderman
2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der
Mehr9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
MehrEinstieg in die Informatik mit Java
Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 4. Schleifen
Grundlagen der Programmierung Prof. H. Mössenböck 4. Schleifen While-Schleife Führt eine Anweisungsfolge aus, solange eine bestimmte Bedingung gilt i 1 sum 0 i n sum sum + i i i + 1 i = 1; sum = 0; while
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion
Mehr7.0 Arbeiten mit Objekten und Klassen
252-0027 Einführung in die Programmierung I 7.0 Arbeiten mit Objekten und Klassen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013. and Thomas Gross 2016 All rights reserved.
MehrMathematische Rekursion
Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische
MehrBeispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else
Hoare-Regel für die bedingte Anweisung I1 : I2 : {B P } S 1 {Q} { nicht B P } {Q} {P } if (B) then S 1 {Q} {B P } S 1 {Q} { nicht B P } S 2 {Q} {P } if (B) then S 1 else S 2 {Q} In der Regel für bedingte
MehrFACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung
C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf
Übersicht Komplexitätsresultate Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Synchronisation (4) Drei Komplexitätsresultate Eine genaue Schranke für den Platzbedarf
MehrTechnische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 13. März 2017 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:
MehrÜbersetzen des Quelltexts in ausführbaren Maschinen-Code Translation of source code into executable machine code
Informatik II D-BAUG Self-Assessment, 2. März 2017 Lösung Name, Vorname:............................................................. Legi-Nummer:.............................................................
MehrStudent: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:
Berufsakademie Stuttgart / Außenstelle Horb Studienbereich Technik Studiengang Informationstechnik Kurs IT2006, 2.Semester Dozent: Olaf Herden Student: Alexander Carls Matrikelnummer: 166270 Aufgabe: Beschreibung
MehrEinführung in die Programmierung I. 4. Kontrollstrukturen. Stefan Zimmer
Einführung in die Programmierung I 4. Kontrollstrukturen Stefan Zimmer 12.11.2007 Arten von Anweisungen Ein Maple-Programm besteht aus einer Folge von Anweisungen (englisch: statement), getrennt durch
MehrDank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung
Dank Vorlesung Theoretische Informatik II Bernhard Beckert Institut für Informatik Diese Vorlesungsmaterialien basieren zum Teil auf den Folien zu den Vorlesungen von Katrin Erk (gehalten an der Universität
MehrCognitive Interaction Technology Center of Excellence
Kanonische Abdeckung Motivation: eine Instanz einer Datenbank muss nun alle funktionalen Abhängigkeiten in F + erfüllen. Das muss natürlich immer überprüft werden (z.b. bei jedem update). Es reicht natürlich
MehrVerifikation von Programmen
http://scam-trap.com/i/stophacking1.gif Verifikation von Programmen OOPM, Ralf Lämmel 380 Was tun? (Mit den Spezifikationen) Dokumentation Überprüfen der Bedingungen zur Laufzeit Verifizieren der Bedingungen
MehrBeispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung
Hoare-Regel für die bedingte Anweisung I1 : I2 : {B und P } S 1 {Q} { nicht B und P } {Q} {P } if (B) then S 1 {Q} {B und P } S 1 {Q} { nicht B und P } S 2 {Q} {P } if (B) then S 1 S 2 {Q} In der Regel
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare
MehrEinstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Weitere Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick 2 Verbundanweisung 3 Bedingte Anweisung 4 Auswahlanweisung
MehrTechnische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 7. September 2015 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr
MehrHerzlich willkommen!
Programmiertechnik 1 Herzlich willkommen! Dozent: Dipl.-Ing. Jürgen Wemheuer Teil 4: Schleifenkonstruktionen Mail: wemheuer@ewla.de Online: http://cpp.ewla.de/ Schleifenkonstruktion goto (veraltet!) 2
MehrTechnische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 12. März 2014 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:
MehrZusammenfassung. Definition. 1 (x i ) 1 i n Sequenz von Registern x i, die natürliche Zahlen beinhalten. 2 P ein Programm. Befehle: 1 x i := x i + 1
Zusammenfassung Zusammenfassung der letzten LVA Einführung in die Theoretische Informatik Christina Kohl Alexander Maringele Georg Moser Michael Schaper Manuel Schneckenreither Eine Registermaschine (RM)
MehrC++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
MehrModul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016
MehrIntensivübung zu Algorithmen und Datenstrukturen
Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche
MehrÜbung Informatik I - Programmierung - Blatt 3
RHEINISCH- WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN LEHR- UND FORSCHUNGSGEBIET INFORMATIK II RWTH Aachen D-52056 Aachen GERMANY http://programmierung.informatik.rwth-aachen.de LuFG Informatik II Prof.
MehrKompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen
Kompaktkurs Einführung in die Programmierung 4. Kontrollstrukturen Stefan Zimmer 28.2.2008-1- Anweisungen: was bisher geschah Bisher kennen wir zwei Formen von Anweisungen Ein Ausdruck mit Semikolon ist
MehrAlgorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen
Ludwig-Maximilians-Universität München München, 16.04.2018 Institut für Informatik Prof. Dr. Thomas Seidl Anna Beer, Florian Richter Algorithmen und Datenstrukturen SS 2018 Übungsblatt 1: Grundlagen Tutorien:
MehrTechnische Universität Braunschweig Institut für Programmierung und Reaktive Systeme
Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme Programmieren I Dr. Werner Struckmann 6. März 2013 Name: Vorname: Matrikelnummer: Kennnummer: Anrede: Frau Herr Studiengang:
MehrD-BAUG Informatik I. Exercise session: week 1 HS 2018
1 D-BAUG Informatik I Exercise session: week 1 HS 2018 Java Tutorials 2 Questions? expert.ethz.ch 3 Common questions and issues. expert.ethz.ch 4 Need help with expert? Mixed expressions Type Conversions
MehrWarum Programme Verträge schließen sollten
1 Warum Programme Verträge schließen sollten RALF HINZE Institut für Informatik, Lehrstuhl Softwaretechnik, Universität Freiburg Georges-Köhler-Allee, Gebäude 079, 79110 Freiburg i. Br. Email: ralf@informatik.uni-bonn.de
MehrEinführung in die Programmierung für NF. Rückgabewerte, Fallunterscheidung, Schleifen
Einführung in die Programmierung für NF Rückgabewerte, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 EBNF, Fallunterscheidung, Schleifen 2 Funk=on und Prozedur Methoden bestehen aus Funk=onen
MehrGrundlagen der Theoretischen Informatik
FH Wedel Prof. Dr. Sebastian Iwanowski GTI33 Folie 1 Grundlagen der Theoretischen Informatik Sebastian Iwanowski FH Wedel Kap. 3: Verifikationstechniken Teil 3: FH Wedel Prof. Dr. Sebastian Iwanowski GTI33
Mehr1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster
1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster Aufgabe: Bearbeitungszeit: ca. 1/4 Std) Schreiben Sie ein "objektorientiertes" Programm ("CuB_05_1") für das Sammeln der Körner. Aufgabenbeschreibung:
MehrGrundlagen der Programmierung Teil1 Einheit III Okt. 2010
Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den
Mehr3. Grundanweisungen in Java
3. Grundanweisungen in Java Die Grundanweisungen entsprechen den Prinzipien der strukturierten Programmierung 1. Zuweisung 2. Verzweigungen 3. Wiederholungen 4. Anweisungsfolge (Sequenz) Die Anweisungen
MehrGirls Day 2017 Programmierung
Girls Day 2017 Programmierung Anke Brocker Quality Management Würselen, 27. April 2017 www.lancom-systems.de Programmierung 27.04.2017 - Übersicht Programmieren mit der Arduino IDE Die Arduino IDE Der
Mehr