Tutoraufgabe 1 (Das Herz):

Ähnliche Dokumente
Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse):

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

Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (Pilze):

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 9 2. Semester ARBEITSBLATT 9 GEOMETRISCHE KÖRPER 1) DAS PRISMA

Hausaufgabe 2 (Induktionsbeweis):

23. Kontextsensitive Sprachen

1 Vektoren, Vektorräume, Abstände: 2D

Musterlösung zur Nachklausur Theoretische Grundlagen der Informatik Wintersemester 2013/14

Aufgaben und Ihre Lösungen:

Natur der Zahlen und Zahlen der Natur

Winkel Wi Schätzaufgabe: Nummeriere die Winkel der Grösse nach! Der kleinste Winkel trägt die Nummer 1, der grösste die Nummer 8!

Tutoraufgabe 1 (Verifikation):

Tutoraufgabe 1 (ɛ-produktionen):

Noch einmal zu den Grundlagen: Algebra und Geometrie

Annehmende Schleife do while

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

Die quadratische Gleichung und die quadratische Funktion

Der deterministische, endliche Automat. Formale Grundlagen der Informatik 1 Kapitel 3 Mehr zu regulären Sprachen

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Informatik I Übung, Woche 40

Algorithmische Bioinformatik I

1 GN GRUNDWISSEN MATHEMATIK. für die Jahrgangsstufe Reelle Zahlen ℝ :

Endliche Automaten. aus. Abbildung 1: Modell eines einfachen Lichtschalters

Programmieren I + II Regeln der Code-Formatierung

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

Umwandlung von endlichen Automaten in reguläre Ausdrücke

Probeklausur: Programmierung WS04/05

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

Inhalt: Die vorliegenden Folienvorlagen enthalten folgende Elemente:

Vorlesung Programmieren

Lineare Gleichungen und lineare Gleichungssysteme mit zwei Variablen. 1.1 Beispiel einer linearen Gleichung mit zwei Variablen 2

Automaten, Sprachen, Grammatiken und reguläre Ausdrücke

Einführung in die Informatik 1

Objektorientierte Programmierung OOP Programmieren mit Java

Schriftliche Prüfungsarbeit zum mittleren Schulabschluss 2006 im Fach Mathematik. 10. Mai 2006

Programmierkurs Java

Die Regelungen zu den Einsendeaufgaben (Einsendeschluss, Klausurzulassung) finden Sie in den Studien- und Prüfungsinformationen Heft Nr. 1.

Praktikum aus Programmierung Dr. Michael Hahsler (WS 05/06) Projekt: Würfelpoker

Lektion 2 Ich bin Journalistin.

PIWIN 1 Übung Blatt 5

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Einführung in die Programmierung Vorlesungsprüfung

Entwurf von Algorithmen - Kontrollstrukturen

JAVA-Datentypen und deren Wertebereich

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Primitive Datentypen

Lineare (affine) Abbildung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Tutoren Jan Ebbe Tatjana Frank Cedric Geissmann Sascha Scherrer Alexander Stiemer

Klausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

5. Tutorium zu Programmieren

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

3. Anweisungen und Kontrollstrukturen

Einführung in die Integralrechnung Das Integral als Gesamteffekt von Änderungen bzw. als Summe orientierter Flächeninhalte

Kapitel 3: Variablen

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

<? $ZeilenMax = 9; $SpaltenMax = 9; echo "<pre>";

Quadratische Funktion und Parabel: Darstellungsformen

Hinweise zur Bearbeitung der Klausur zum Kurs Einführung in die imperative Programmierung

Access 2010 Programmierung Schleifen

Lektion 4 Der Tisch ist schön!

Selbsttest in Schulwissen Mathematik

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

Serie 4. Analysis D-BAUG Dr. Cornelia Busch FS 2015

Teil III: Evaluationstest

Quadratische Funktionen und Gleichungen Mathematik Jahrgangsstufe 9 (G8) Bergstadt-Gymnasium Lüdenscheid. Friedrich Hattendorf

Referat. zum Proseminar: Programmiersysteme. Thema: Serialisierung. von Benedict Fehringer. Betreuer: Guido Tack Lehrstuhl: Prof. Dr.

Spiele und logische Komplexitätsklassen

Vorkurs Mathematik-Physik, Teil 5 c 2016 A. Kersch

Lineare Funktionen systematisch erkunden. Arbeitsblatt 1

Institut fu r Informatik

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

Tutoraufgabe 1 (Datenstrukturen in Haskell):

Übungsblatt 3: Algorithmen in Java & Grammatiken

Installations und Bedienungsanleitung

Übungen zur Vorlesung Wissenschaftliches Rechnen I. Grundelemente von Java. Eine Anweisung. wird mit dem Wertzuweisungsoperator = geschrieben.

Algorithmen und Datenstrukturen

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Aufgabenblatt 1: - Präsenzübung für die Übungen Do Mi Ausgabe Mi

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Einführung in die Java- Programmierung

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Selbsteinstufungstest Vorkurs Programmieren

(Allgemeine) Vektorräume (Teschl/Teschl 9)

1. Das Koordinatensystem

Universität Duisburg - Essen

1 Dreiecksfläche. Für das Dreieck A( 1, 0), B(0, 2), C(1, 0) berechnet das Programm zum Beispiel2 diefläche2.0:

Einführung in die Programmierung 1

Probeklausur: Einführung in die objektorientierte Programmierung mit Java 15WS

Tutorium für Fortgeschrittene

Transkript:

Prof. aa Dr. J. Giesl Programmierung WS4/5 Üungslatt (Agae 5..4) C. Aschermann, F. Frohn, J. Hensel, T. Ströder Allgemeine Die Hausaufgaen sollen in Gruppen von je Studierenden aus der gleichen Kleingruppenüung (Tutorium) eareitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt der Agae zu schreien. Heften zw. tackern Sie die Blätter! Die Nummer der Üungsgruppe muss links oen auf das erste Blatt der Agae geschrieen werden. Notieren Sie die Gruppennummer gut sichtar, damit wir esser sortieren können. Die Lösungen müssen is Mittwoch, den 5..4 um 5: Uhr in den entsprechenden Üungskasten eingeworfen werden. Sie nden die Kästen am Eingang Halifaxstr. des Informatikzentrums (Ahornstr. 55). Alternativ können Sie die Lösungen auch vor der Agaefrist direkt ei Ihrer Tutorin/Ihrem Tutor ageen. In einigen Aufgaen müssen Sie in Java programmieren und.java-dateien anlegen. Drucken Sie diese aus und schicken Sie sie per E-Mail vor Mittwoch, dem 5..4 um 5: Uhr an Ihre Tutorin/Ihren Tutor. Stellen Sie sicher, dass Ihr Programm von javac akzeptiert wird, ansonsten werden keine Punkte vergeen. Aufgaen, die mit einem markiert sind, sind Sonderaufgaen mit erhöhtem Schwierigkeitsgrad. Sie tragen nicht zur Summe der erreicharen Punkte ei, die für die Klausurzulassung relevant ist, jedoch werden Ihnen die in solchen Aufgaen erreichten Punkte ganz normal gutgeschrieen. Tutoraufgae (Das Herz): In dieser Aufgae sollen Sie ein Programm schreien, das auf der Konsole ein Herz ausgit. Im Folgenden etrachten wir ein Koordinatensystem, in dem der Ursprung links oen ist. Betrachten Sie zur Illustration das folgende Bild, in dem der Punkt A an (, ) und der Punkt B an (, ) liegt: 4 B A a) Wir wollen nun untersuchen, o ein Punkt P mit den Koordinaten (p x, p y ) in einem Kreis liegt, den wir mit Hilfe eines Punktes C (an Position (c x, c y )) und eines Radius r angeen. Dies wird im folgenden Schauild für P = (, ), C = (.5,.5) und r = illustriert: 4 C P r

Üungslatt (Agae 5..4) Ein Punkt (p x, p y ) liegt dann in einem Kreis, wenn sein Astand vom Mittelpunkt (c x, c y ) kleiner oder gleich dem Radius r ist (d. h. Punkte auf dem Rand des Kreises zählen als innerhal des Kreises liegend). Vervollständigen Sie nun die folgende Funktion so, dass true zurückgegeen wird, wenn (px, py) im vom Mittelpunkt (cx, cy) und Radius r denierten Kreis liegt und false in allen anderen Fällen: pulic static oolean inkreis ( doule px, doule py, doule cx, doule cy, doule r ) { return... Sie dürfen daei annehmen, dass der Radius r eine positive Zahl ist. Die Anweisung return expr wertet den Ausdruck expr aus und setzt das Ergenis an der Aufrufstelle der Funktion ein. Verwenden Sie die Funktion Math.sqrt(doule a), die a als doule zurückgit. ) Wir wollen nun untersuchen, o ein Punkt P mit den Koordinaten (p x, p y ) in einer quadratischen Raute liegt, die wir mit Hilfe eines Punktes C (an Position (c x, c y )) und einer Rautenreite denieren. Dies wird im folgenden Schauild für P = (, ), C = (.5,.5) und =.5 illustriert: 4 C P Ein Punkt (p x, p y ) liegt dann in einer Raute um (c x, c y ), wenn die Summe der Dierenzen p x c x + p y c y kleiner oder gleich der Rautenreite ist (d. h. Punkte auf dem Rand der Raute zählen als innerhal der Raute liegend). Vervollständigen Sie nun die folgende Funktion so, dass true zurückgegeen wird, wenn (px, py) in der Raute um den Mittelpunkt (cx, cy) und Rautenreite liegt und false in allen anderen Fällen: pulic static oolean inraute ( doule px, doule py, doule cx, doule cy, doule ) { return... Sie dürfen daei annehmen, dass die Rautenreite eine positive Zahl ist. Verwenden Sie die Funktion Math.as(doule a), die a als doule zurückgit. c) Wir wollen nun untersuchen, o ein Punkt in einem Herz liegt. Betrachten Sie zuerst das folgende Schauild:

Üungslatt (Agae 5..4) 4 C g Ein Punkt liegt dann in einem Herz mit Gesamtreite g und Mittelpunkt C = (c x, c y ), wenn er in einer Raute mit Rautenreite = g um C, in einem Kreis mit Radius + um (c x, c y ) oder in einem Kreis mit dem gleichen Radius um (c x +, c y ) liegt. Im Beispiel ist g = 4 gewählt worden. Verwenden Sie nun die Funktionen inkreis aus Teilaufgae a) und inraute aus Teilaufgae ), um die folgende Funktion zu implementieren, die genau dann true zurückgit, wenn ein Punkt (px, py) in einem durch den Mittelpunkt (cx, cy) und die Gesamtreite g eschrieenen Herzen liegt: pulic static oolean inherz ( doule px, doule py, doule cx, doule cy, doule g) { return... Sie dürfen daei annehmen, dass die Gesamtreite g eine positive Zahl ist. Verwenden Sie die oolesche Verknüpfung, um die verschiedenen Bedingungen miteinander zu verinden. d) Sie sollen nun die Funktion inherz aus Aufgaenteil c) verwenden, um ein Herz auf der Konsole auszugeen. Schreien Sie nun ein Programm, das. den Benutzer nach der Gesamtreite g für das Herz fragt und eine Integer-Zahl einliest. Bestimmen Sie daraus ( g, g ) als Mittelpunkt für das Herz. Zur Vereinfachung dürfen Sie annehmen, dass der Benutzer hier eine positive ganze Zahl eingit.. mit Hilfe zweier Schleifen alle Koordinaten (, ),..., (, g), (, ),... (, g),... (g, g) aläuft und ein # ausgit, wenn sich die Koordinate im Herz endet und sonst ausgit. Ein Aufruf des Programms soll dann etwa das folgende Resultat zeigen: Geen Sie die gewuenschte Gesamtreite ein : ######### ######### ######################### ########################### ############################# ############################# ########################### ######################### ####################### ################### ############### ########### ####### ###

Üungslatt (Agae 5..4) Wenn Sie mit dem Aussehen Ihres Herzens unzufrieden sind, weil es vertikal gestreckt ist, liegt dies vermutlich daran, dass in ülichen Schriftarten ein Zeichen ca. mal so hoch wie reit ist. Wollen Sie ein gleichmäÿigeres Ergenis erzielen, so dürfen Sie die y-werte (also die Höhe) aller Koordinaten vor der Eingae in inherz mit multiplizieren. Dies wurde auch ei der oigen Beispielausgae gemacht. Sie dürfen statt eines # für ein schöneres Ergenis auch das Unicode-Zeichen \u665 (dargestellt als ) verwenden. Aufgae (Das Smiley): ( + + 5 + = Punkte) In dieser Aufgae sollen Sie ein Programm schreien, das auf der Konsole ein Smiley ausgit. Die zur Illustration verwendeten Koordinatensysteme werden in der vorhergehenden Tutoraufgae eingehend erklärt. a) Wir wollen zuerst untersuchen, o ein Punkt P mit den Koordinaten (p x, p y ) in einer Sichel liegt, die später den Mund des Smileys darstellen soll. Hierei geen wir eine Sichel mit Hilfe eines Mittelpunktes C (an Position (c x, c y )) und eines Radius r an, um den Auÿenogen der Sichel zu eschreien. Den Innenogen stellen wir zur Vereinfachung durch eine gerade Linie dar, deren nächster Punkt zu C genau r von C entfernt ist. Dies wird im folgenden Schauild für P = (, 4), C = (.5,.5) und r = illustriert: 4 4 C r P Ein Punkt P = (p x, p y ) liegt also genau dann in einer Sichel, wenn seine Koordinaten im durch den Mittelpunkt C = (c x, c y ) und Radius r eschrieenen Kreis liegen und die Dierenz von p y und c y mindestens r eträgt. Punkte auf dem Rand der Sichel sollen als innerhal der Sichel liegend gewertet werden. Vervollständigen Sie nun die folgende Funktion so, dass true zurückgegeen wird, wenn (px, py) in der durch den Mittelpunkt (cx, cy) und Radius r denierten Sichel liegt und false in allen anderen Fällen: pulic static oolean insichel ( doule px, doule py, doule cx, doule cy, doule r) { return... Sie dürfen daei annehmen, dass der Radius r eine positive Zahl ist. Die Anweisung return expr wertet den Ausdruck expr aus und setzt das Ergenis an der Aufrufstelle der Funktion ein. ) Wir wollen nun untersuchen, o ein Punkt in einem Smiley liegt. Betrachten Sie zuerst das folgende Schauild: 4

Üungslatt (Agae 5..4) 4 5 6 C g 5 A g D r 4 5 6 g r Ein Punkt liegt genau dann in einem Smiley mit Gesamtreite g und Mittelpunkt A = (a x, a y ), wenn er gleichzeitig die folgenden Eigenschaften erfüllt: Er liegt in einem Kreis mit Radius r = g um den Punkt A. Er liegt nicht im Mund des Smileys, der durch die Sichel dargestellt wird, die durch einen Kreis mit Radius r um den Punkt (a x, a y r ) erzeugt wird. Er liegt nicht in einem der eiden Augen des Smileys. Diese werden durch Kreise mit Radius r = r 6 um die Punkte C = (a x g 5, a y g ) und D = (a x + g 5, a y g ) eschrieen. Im Beispiel ist g = 6 und A = (, ) gewählt worden. Verwenden Sie nun die Funktionen inkreis aus der vorherigen Tutoraufgae und insichel aus Teilaufgae a), um die folgende Funktion zu implementieren, die genau dann true zurückgit, wenn ein Punkt (px, py) in einem durch den Mittelpunkt (ax, ay) und die Gesamtreite g eschrieenen Smiley liegt: pulic static oolean insmiley ( doule px, doule py, doule ax, doule ay, doule g) { return... Sie dürfen daei annehmen, dass die Gesamtreite g eine positive Zahl ist. Verwenden Sie oolesche Verknüpfungen ( und/oder &&) sowie die Negation (!), um die verschiedenen Bedingungen miteinander zu verinden. c) Sie sollen nun die Funktion insmiley aus Aufgaenteil ) verwenden, um ein Smiley auf der Konsole auszugeen. Schreien Sie ein Programm, das. den Benutzer nach der Gesamtreite g für das Smiley fragt und eine Integer-Zahl einliest. Bestimmen Sie daraus ( g, g ) als Mittelpunkt für das Smiley. Zur Vereinfachung dürfen Sie annehmen, dass der Benutzer hier eine positive ganze Zahl eingit.. mit Hilfe zweier Schleifen alle Koordinaten (, ),..., (, g), (, ),... (, g),... (g, g) aläuft und ein # ausgit, wenn sich die Koordinate im Smiley endet, und sonst ausgit. 5

Üungslatt (Agae 5..4) Ein Aufruf des Programms soll dann etwa das folgende Resultat zeigen: Geen Sie die gewuenschte Gesamtreite ein : 45 ######### ##################### ########################### ############################### ################################### ####################################### ######################################### ########### ############### ########### ######### ########### ######### ########## ########### ########## ########### ############# ########### ############################################# ############################################# ############################################# ########################################### ##### ##### ###### ###### ######## ######## ########### ########### ############################### ########################### ##################### ######### Wenn Sie mit dem Aussehen Ihres Smileys unzufrieden sind, weil es vertikal gestreckt ist, liegt dies vermutlich daran, dass in ülichen Schriftarten ein Zeichen ca. mal so hoch wie reit ist. Wollen Sie ein gleichmäÿigeres Ergenis erzielen, so dürfen Sie die y-werte (also die Höhe) aller Koordinaten vor der Eingae in insmiley mit multiplizieren. Dies wurde auch ei der oigen Beispielausgae gemacht. d) Passen Sie das Programm so an, dass die Auorderung zur Eingae einer Gesamtreite so lange wiederholt wird, is die vom Benutzer eingegeene Zahl mindestens eträgt. Bieten Sie ihm auÿerdem die Möglichkeit, nach Eingae der Breite eines von drei möglichen Zeichen zu wählen, aus dem das Smiley estehen soll. Eine mögliche Ausgae is zu diesem Punkt könnte aussehen wie folgt: Geen Sie die gewuenschte Gesamtreite ein ( mind. ): Geen Sie die gewuenschte Gesamtreite ein ( mind. ): 45 Aus welchem Zeichen soll das Smiley estehen? : Plus (+) : Stern (*) : Herz ( ) Hier kann der Benutzer mit, oder sein evorzugtes Zeichen wählen. Nutzen Sie eine switch- Anweisung zur Ausgae der korrekten Zeichen. Falls der Benutzer eine ungültige Zahl eingit, soll hier # gewählt werden. Um ein Herz darzustellen, können Sie das Unicode-Zeichen \u665 verwenden. 6

Üungslatt (Agae 5..4) Tutoraufgae (Verikation): Gegeen sei folgendes Java-Programm P üer den Integer-Varialen x, y, c und res: y (Voredingung) res = ; c = y; while (c > ) { res = res * x; c = c - ; res = x y (Nachedingung) a) Vervollständigen Sie die folgende Verikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oeren folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. Sie dürfen elieig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegeenen Zusicherungen enutzt. Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshal Sie semantische Änderungen (eispielsweise von x+ = y+ zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. y res = ; c = y; while (c > ) { res = res * x; c = c - ; 7

Üungslatt (Agae 5..4) res = x y ) Untersuchen Sie den Algorithmus P auf seine Terminierung. Für einen Beweis der Terminierung muss eine Variante angegeen werden und mit Hilfe des Hoare-Kalküls die Terminierung unter der Voraussetzung y ewiesen werden. Aufgae 4 (Verikation): Gegeen sei folgendes Java-Programm P üer den Integer-Varialen n, k, i und res: ϕ (Voredingung) res = ; i = n; while (i > k) { res = res * i; i = i - ; ψ (Nachedingung) (7 + = 9 Punkte) a) Als Voredingung ϕ für das oen aufgeführte Programm P gelte k > n k und als Nachedingung ψ gelte res = n! k!. Vervollständigen Sie die folgende Verikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oeren folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. Sie dürfen elieig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegeenen Zusicherungen enutzt. Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshal Sie semantische Änderungen (eispielsweise von x+ = y+ zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. k > n k res = ; i = n; 8

Üungslatt (Agae 5..4) while (i > k) { res = res * i; i = i - ; res = n! k! ) Untersuchen Sie den Algorithmus P auf seine Terminierung. Für einen Beweis der Terminierung muss eine Variante angegeen werden und mit Hilfe des Hoare-Kalküls die Terminierung ewiesen werden. Aufgae 5 (Verikation): Gegeen sei folgendes Java-Programm P üer den Integer-Varialen n, i und res: ϕ (Voredingung) i = n; res = ; while (i > ) { res = res + *i - ; i = i - ; ψ (Nachedingung) (7 + = 9 Punkte) a) Als Voredingung ϕ für das oen aufgeführte Programm P gelte n und als Nachedingung ψ gelte res = n. Vervollständigen Sie die folgende Verikation des Algorithmus im Hoare-Kalkül, indem Sie die unterstrichenen Teile ergänzen. Hierei dürfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oeren folgt. Hinter einer Programmanweisung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalküls folgt. 9

Üungslatt (Agae 5..4) Sie dürfen elieig viele Zusicherungs-Zeilen ergänzen oder streichen. In der Musterlösung werden allerdings genau die angegeenen Zusicherungen enutzt. Bedenken Sie, dass die Regeln des Kalküls syntaktisch sind, weshal Sie semantische Änderungen (eispielsweise von x+ = y+ zu x = y) nur unter Zuhilfenahme der Konsequenzregeln vornehmen dürfen. n i = n; res = ; while (i > ) { res = res + * i - ; i = i - ; res = n ) Untersuchen Sie den Algorithmus P auf seine Terminierung. Für einen Beweis der Terminierung muss eine Variante angegeen werden und mit Hilfe des Hoare-Kalküls die Terminierung ewiesen werden.