Tutoraufgabe 1 (Verifikation):

Ähnliche Dokumente
Tutoraufgabe 1 (Hoare-Kalkül):

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Verikation mit Arrays):

Tutoraufgabe 1 (Das Herz):

Tutoraufgabe 1 (Vollständige Induktion): Tutoraufgabe 2 (Rotationen): Datenstrukturen und Algorithmen SS15 Übungsblatt 5 (Abgabe 3.6.

Tutoraufgabe 1 (Pilze):

Tutoraufgabe 1 (SCC):

Übung zur Vorlesung Programmierung

Tutoraufgabe 1 (Typcasting):

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (Programmanalyse):

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

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

Tutoraufgabe 1 (Listen):

Präsenzübung Programmierung WS 2017/2018

Tutoraufgabe 1 (Starke Zusammenhangskomponenten):

Tutoraufgabe 1 (Seiteneekte):

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 -

int x = 3; int y = 11; public A () { this.x = z; y *= z;

Tutoraufgabe 1 (Überladen von Methoden):

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Klassenhierarchie):

Tutoraufgabe 1 (Verikation): Programmierung WS12/13 Übungsblatt 3 (Abgabe ) M. Brockschmidt, F. Emmes, C. Otto, T.

Semestralklausur Informatik I - Programmierung

Tutoraufgabe 1 (Fibonacci-Zahlen):

Übung Informatik I - Programmierung - Blatt 3

Aufgabe 1 (Programmanalyse):

Übung Programmierung WS 2007/08 - Blatt 6

Tutoraufgabe 1 (Klassenhierarchie):

2. Klausur Programmierung WS 2014/2015

Informatik B von Adrian Neumann

Aufgabe 2 (Unendliche Listen in Haskell):

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Informatik I - Programmierung Globalübung Hoare-Kalkül. Thomas Weiler. Fachgruppe Informatik RWTH Aachen. T. Weiler, RWTH Aachen - 1 -

Tutoraufgabe 1 (Pilze):

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

Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)

Zentralübung Grundlagen der Programmierung

Tutoraufgabe 1 (Verifikation):

Institut für Programmierung und Reaktive Systeme 10. Mai Programmieren II. 11. Übungsblatt

Klausur Programmierung WS 2011/2012

Erste Java-Programme (Scopes und Rekursion)

Einführung in die Programmierung. (K-)II/Wb17

Tutoraufgabe 1 (Überladen und Überschreiben):

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

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

Programmierkurs Java

Probeklausur zur Vorlesung Programmierung

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

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Vorkurs Informatik WiSe 16/17

Institut fu r Informatik

Software Entwicklung 1. Spezifikation von Prozedureigenschaften. Spezifikation prozeduraler Programme. Warum Spezifikationen?

Übung Informatik I - Programmierung - Blatt 8

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Einstieg in die Informatik mit Java

Übungen zum Bioinformatik-Tutorium. Blatt 3

Aufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Entwerfen von Klassenhierarchien):

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Übung Informatik I - Programmierung - Blatt 6

WS 05/06 mod Verifikation

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

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Informatik Praktikum 5

Informatik 1 für Nebenfachstudierende Beispiele für Klausuraufgaben

Programmiertechnik Übungen zu Klassen & -methoden

Programmieren in Java -Eingangstest-

Übungsblatt 3: Algorithmen in Java & Grammatiken

Aufgabe 1 (Programmanalyse):

Programmiermethodik 1. Klausur

Tutoraufgabe 1 (Datenstrukturen in Haskell):

Klausur "C#" WS 2012/2013

Klausur Grundlagen der Programmierung

Einstieg in die Informatik mit Java

Objektorientierte Programmierung OOP Programmieren mit Java

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

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

Tutoraufgabe 1 (ɛ-produktionen):

Javakurs für Anfänger

Tutoraufgabe 1 (Überschreiben, Überladen und Verdecken): Programmierung WS17/18 Übungsblatt 7 (Abgabe ) Allgemeine Hinweise:

Wiederholung. Klassenhierarchie:

Vorkurs Informatik WiSe 17/18

Tutoraufgabe 1 (Entwerfen von Klassenhierarchien):

JAVA für Nichtinformatiker - Probeklausur -

Listing 1: Cowboy. Listing 2: Woody

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Algorithmen und Datenstrukturen

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Algorithmen und Programmierung III

Tutoraufgabe 1 (Programmieren in Prolog):

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Programmieren in Java

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für die Woche vom 3.5. bis zum 7.5.

5. Tutorium zu Programmieren

Transkript:

Prof. aa Dr. M. Müller C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt der Abgabe zu schreiben. Heften bzw. tackern Sie die Blätter! Die Nummer der Übungsgruppe muss links oben auf das erste Blatt der Abgabe geschrieben werden. Notieren Sie die Gruppennummer gut sichtbar, damit wir besser sortieren können. Die Lösungen müssen bis Montag, den 16.11.2015 um 15:00 Uhr in den entsprechenden Übungskasten eingeworfen werden. Sie finden die Kästen am Eingang Halifaxstr. des Informatikzentrums (Ahornstr. 55). Alternativ können Sie die Lösungen auch vor der Abgabefrist direkt bei Ihrer Tutorin/Ihrem Tutor abgeben. In einigen Aufgaben müssen Sie in Java programmieren und.java-dateien anlegen. Drucken Sie diese aus und schicken Sie sie per E-Mail vor Montag, dem 16.11.2015 um 15:00 Uhr an Ihre Tutorin/Ihren Tutor. Stellen Sie sicher, dass Ihr Programm von javac akzeptiert wird, ansonsten werden keine Punkte vergeben. Tutoraufgabe 1 (Verifikation): Gegeben sei folgendes Java-Programm P über den Integer-Variablen x, y, c und res: y 0 (Vorbedingung) res = 1; c = y; while (c > 0) { res = res * x; c = c - 1; res = x y (Nachbedingung) a) Vervollständigen Sie die folgende Verifikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierbei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oberen folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. Sie dürfen beliebig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegebenen Zusicherungen benutzt. Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshalb Sie semantische Änderungen (beispielsweise von x+1 = y+1 zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. y 0 res = 1; c = y; 1

while (c > 0) { res = res * x; c = c - 1; res = x y b) Untersuchen Sie den Algorithmus P auf seine Terminierung. Für einen Beweis der Terminierung muss eine Variante angegeben werden und mit Hilfe des Hoare-Kalküls die Terminierung unter der Voraussetzung y 0 bewiesen werden. Aufgabe 2 (Verifikation): Gegeben sei folgendes Java-Programm P über den Integer-Variablen n, i und res: ϕ (Vorbedingung) i = 1; while (i <= n) { res = res + 2*i; i = i + 1; ψ (Nachbedingung) (7 + 2 = 9 Punkte) a) Als Vorbedingung ϕ für das oben aufgeführte Programm P gelte n > 0 und als Nachbedingung ψ gelte res = n 2 + n. Vervollständigen Sie die folgende Verifikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierbei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oberen folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. Sie dürfen beliebig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegebenen Zusicherungen benutzt. 2

Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshalb Sie semantische Änderungen (beispielsweise von x+1 = y+1 zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. n > 0 i = 1; while (i <= n) { res = res + 2*i; i = i + 1; res = n 2 + n b) Untersuchen Sie den Algorithmus P auf seine Terminierung. Für einen Beweis der Terminierung muss eine Variante angegeben werden und mit Hilfe des Hoare-Kalküls die Terminierung bewiesen werden. Aufgabe 3 (Verifikation): Gegeben sei folgendes Java-Programm P über den Integer-Variablen n, i, j und res: ϕ (Vorbedingung) i = 0; while (i < n) { j = 0 while (j < n) { res = res + 1; j = j + 1; i = i + 1; (7 Punkte) 3

ψ (Nachbedingung) a) Als Vorbedingung ϕ für das oben aufgeführte Programm P gelte n 0 und als Nachbedingung ψ gelte res = n 2. Vervollständigen Sie die folgende Verifikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierbei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oberen folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. Sie dürfen beliebig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegebenen Zusicherungen benutzt. Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshalb Sie semantische Änderungen (beispielsweise von x+1 = y+1 zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. n 0 i = 0; while (i < n) { j = 0 while (j < n) { res = res+1 j = j+1 4

i = i + 1 res = n 2 Tutoraufgabe 4 (Zählen): In dieser Aufgabe soll eine Methode implementiert werden, die zählt, wie oft das Zeichen a in einem String enthalten ist. Verwenden Sie dafür nur eine for-schleife und eine if-abfrage. Listing 1: CountA.java 1 class CountA { 2 static int count_ a ( String str ){ 3 // Implement Me 4 5 6 public static void main ( String [] args ){ 7 assert ( count_a ("") == 0); 8 assert ( count_a ("a") == 1); 9 assert ( count_a ("aa") == 2); 10 assert ( count_a (" abb ") == 1); 11 assert ( count_a (" abba ") == 2); 12 assert ( count_a ("bb") == 0); 13 System. out. println (" Everything good!"); 14 15 Sie dürfen die Methoden length() und charat(int i) der Klasse String verwenden. Benutzen Sie das gegebene Gerüst, um ihre Methode zu testen. Die Methode muss auf allen Eingaben das richtige Ergebnis liefern, nicht nur auf den gegebenen Beispielen. Aufgabe 5 (Palindrom): (3 Punkte) Implementieren Sie eine Methode, die überprüft, ob ein String ein Palindrom ist. Ein String ist ein Palindrom, falls er vorwärts und rückwärts gelesen das gleiche ergibt. Verwenden Sie dafür nur eine for-schleife und eine if-abfrage. 5

Listing 2: Palindrom.java 1 class Palindrom { 2 static boolean is_ palindrom ( String str ){ 3 // Implement Me 4 5 6 public static void main ( String [] args ){ 7 assert ( is_palindrom ("" )); 8 assert ( is_palindrom ("a" )); 9 assert ( is_palindrom ("aa")); 10 assert ( is_palindrom (" aba " )); 11 assert (! is_palindrom (" abab " )); 12 assert (! is_palindrom (" abb " )); 13 System. out. println (" Everything good!"); 14 15 Sie dürfen die Methoden length() und charat(int i) der Klasse String verwenden. Benutzen Sie das gegebene Gerüst, um ihre Methode zu testen. Die Methode muss auf allen Eingaben das richtige Ergebnis liefern, nicht nur auf den gegebenen Beispielen. 6