Wintersemester 2005/2006 Hinweise zur Bearbeitung der Klausur zum Kurs 1612 Konzepte imperativer Programmierung

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

Kurs 1613 Einführung in die imperative Programmierung

Wintersemester 98/99 Hinweise zur Bearbeitung der Klausur zum Kurs 1612 Konzepte imperativer Programmierung

Wintersemester 2010/2011 Hinweise zur Bearbeitung der Klausur zum Kurs 1613 Einführung in die imperative Programmierung

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich Einführung in die imperative Programmierung

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich "Konzepte imperativer Programmierung"

Kurs 1613 Einführung in die imperative Programmierung

( = 18 Punkte)

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Klausur am

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Lösungen der Aufgaben zum Studientag

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

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

Partielle Korrektheit von Programmen. Beispiele an der Tafel

Kurs 1612 Konzepte imperativer Programmierung Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Klausur am

Prüfung Informatik D-MATH/D-PHYS :00 17:00

Vordiplom für Wirtschaftswissenschaften Allgemeine Informatik II SS Juli 2002 Bearbeitungszeit: 120 Minuten BEISPIELLÖSUNG

C. A. R. Hoare. An Axiomatic Basis for Computer Programming. Nicolas Schelp. Proseminar Assertions SS 2007

An die Teilnehmerinnen und Teilnehmer des Kurses 1613 Einführung in die imperative Programmierung im WS 05/06

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

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

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Kurs 1661 Datenstrukturen I Klausur am Seite 1. Hinweise zur Bearbeitung der Klausur zum Kurs 1661 Datenstrukturen I

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

Algorithmen und Programmieren II Programmverifikation {V} P {N}

! 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 -

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

An alle Teilnehmer(innen) des Kurses Einführung in die imperative Programmierung im Wintersemester 2008/2009. Klausur-Informationen

Klausur Informatik B April Teil I: Informatik 3

Klausur zur Vorlesung Algorithmen und Datenstrukturen

3. Übungsblatt zu Algorithmen I im SoSe 2017

Syntax der Sprache PASCAL

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

Klausur "ADP" SS 2015

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

INFORMATIK FÜR BIOLOGEN

Klausur zur Vorlesung Algorithmen und Datenstrukturen

Kurs 1661 Datenstrukturen I Nachklausur am Seite 1. Hinweise zur Bearbeitung der Klausur zum Kurs 1661 Datenstrukturen I

Übungen zu Programmierung I - Blatt 8

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Web-Anwendungen, SS17 - Fragentypen

Einstieg in die Informatik mit Java

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

Universität Duisburg - Essen

Problem: Gegeben Spezifikation (P,Q) und Implementierung S Gesucht formaler (automatisierbarer?) Beweis, dass S (P,Q) erfüllt.

Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen Beispiellösung zu Heimübungsblatt 7. Abbildung 1: Das Array A als Baum (vgl. Foliensatz 16, Folie 3)

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

5. Übung - Kanalkodierung/Programmierung

Informatik 1. Prüfung im Wintersemester 1997/98

Informatik II, SS 2014

Klausur "ADP" SS 2016

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11)

4.Grundsätzliche Programmentwicklungsmethoden

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Klausur zum Kurs Betriebssysteme (1802) am 19. September 2009

Programmierkurs Java

Wiederholungsklausur "ADP" WS 2016/2017

Kapitel 12: Induktive

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Übung Algorithmen und Datenstrukturen

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

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

Klausur Algorithmen und Datenstrukturen

Klausur "ADP" SS 2012

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

Grundlagen der Informatik

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Allgemeine Hinweise:

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)

Prüfung Informatik D-MATH/D-PHYS :00 11:00

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

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

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

Kapitel 3: Anweisungen

Korrektheit imperativer Algorithmen

Semestralklausur Informatik I - Programmierung

Klausur Programmierung WS 2002/03

Einstieg in die Informatik mit Java

KÖNIGSBERGER BRÜCKENPROBLEM

Transkript:

1 Wintersemester 2005/2006 Hinweise zur Bearbeitung der Klausur zum Kurs 1612 Konzepte imperativer Programmierung Wir begrüßen Sie zur Klausur "Konzepte imperativer Programmierung". Lesen Sie sich diese Hinweise vollständig und aufmerksam durch, bevor Sie mit der Bearbeitung der Aufgaben beginnen: 1. Prüfen Sie die Vollständigkeit Ihrer Unterlagen. Die Klausur umfasst: - 2 Deckblätter, - 1 Formblatt für eine Bescheinigung für das Finanzamt, - diese Hinweise zur Bearbeitung, - 8 Aufgaben (Seite 2 - Seite 28), - die Muss-Regeln des Programmierstils, - die Hoare-Regeln - die Definition der Terminierungsfunktion. 2. Füllen Sie, bevor Sie mit der Bearbeitung der Aufgaben beginnen, folgende Seiten des Klausurexemplares aus: a) BEIDE Deckblätter mit Namen, Anschrift sowie Matrikelnummer. Markieren Sie vor der Abgabe auf beiden Deckblättern die von Ihnen bearbeiteten Aufgaben. b) Falls Sie eine Teilnahmebescheinigung für das Finanzamt wünschen, füllen Sie bitte das entsprechende Formblatt aus. Nur wenn Sie beide Deckblätter vollständig ausgefüllt haben, können wir Ihre Klausur korrigieren! 3. Schreiben Sie Ihre Lösungen auf den freien Teil der Seite unterhalb der Aufgabe bzw. auf die leeren Folgeseiten. Sollte dies nicht möglich sein, so vermerken Sie, auf welcher Seite die Lösung zu finden ist. Streichen Sie ungültige Lösungen deutlich durch. 4. Schreiben Sie auf jedem von Ihnen beschriebenen Blatt oben links Ihren Namen und oben rechts Ihre Matrikelnummer. Wenn Sie weitere eigene Blätter benutzt haben, heften Sie auch diese, mit Namen und Matrikelnummer versehen, an Ihr Klausurexemplar. Nur dann werden auch Lösungen außerhalb Ihres Klausurexemplares gewertet! 5. Neben unbeschriebenem Konzeptpapier und Schreibzeug (Füller oder Kugelschreiber) sind keine weiteren Hilfsmittel zugelassen. Die Muss-Regeln des Programmierstils, die Tabelle mit den im Kurs verwendeten Hoare-Regeln und die Definition der Terminierungsfunktion finden Sie im Anschluss an die Aufgabenstellung. 6. Es sind maximal 52 Punkte erreichbar. Sie haben die Klausur sicher dann bestanden, wenn Sie mindestens 26 Punkte erreicht haben. Wir wünschen Ihnen bei der Bearbeitung der Klausur viel Erfolg!

Seite: 2 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 1 (2+2+1+2 Punkte) In der Mathematik gibt es die so genanten Armstrong-Zahlen, die wie folgt definiert werden: Eine Armstrong-Zahl ist eine Zahl, bei der die Summe der einzelnen Ziffern, die jeweils mit der Anzahl der Ziffern der Zahl potenziert sind, gleich der Zahl ist. z.b.: 153 = 1 3 + 5 3 + 3 3 (3 Ziffern je hoch 3) a) Schreiben Sie eine Funktion countziff, welche die Anzahl der Ziffern einer positiven Zahl zurückliefert (in unserem Beispiel die Zahl 3). Benutzen Sie den im Programmrahmen ArmstrongZahlen (siehe unten) vorgegebenen Funktionskopf. b) Schreiben Sie eine Funktion potenziere, welche die n-te Potenz einer Zahl berechnet. Der Sonderfall des undefinierten Wertes 0 0 muss nicht berücksichtigt werden. Benutzen und ergänzen Sie den vorgegebenen Funktionskopf (siehe unten). c) Die Funktion isarmstrong (siehe rechte Seite) gibt true zurück wenn der übergebene Parameter eine Armstrong-Zahl ist, sonst false. In dieser Funktion werden die Funktionen countziff und potenziere benutzt. Bestimmen Sie, an welcher der Stellen (1) - (4) in der Funktion isarmstrong die Funktion potenziere einzusetzen ist und geben Sie die komplette Programmzeile an. d) Schreiben Sie ein Programm, das zwei positive ganze Zahlen x und y (x > 0, y < MAXINT, x < y, diese Bedingungen müssen Sie nicht überprüfen) einliest und dann alle Armstrong-Zahlen mit x a y ausgibt. Auch wenn Sie die Teilaufgaben a) - c) nicht gelöst haben, können Sie die Funktionen voraussetzen. Nutzen Sie dazu den vorgegebenen Programmrahmen. program ArmstrongZahlen (input, output); type tnatzahl = 0..maxint;... function countziff (inzahl : tnatzahl): tnatzahl; {gibt die Stellenanzahl der inzahl zurück}... function potenziere (??? ): tnatzahl; {berechnet die n-te Potenz einer Zahl}... function isarmstrong (inzahl : tnatzahl): boolean; {prüft ob inzahl eine Armstrong-Zahl ist}...

Seite: 3 Name: Matrikelnummer: function isarmstrong (inzahl : tnatzahl): boolean; {prüft ob inzahl eine Armstrong-Zahl ist} var i, j, ggfarmstrong, AnzDerStellen ZwischErg, EndErg, LetzteZiffer : tnatzahl; begin ggfarmstrong := inzahl; AnzDerStellen := countziff(inzahl); EndErg := 0; for i := 1 to AnzDerStellen do begin (1) LetzteZiffer := ggfarmstrong mod 10; (2) ggfarmstrong := ggfarmstrong div 10; (3) EndErg := EndErg + ZwischErg (4) end; if EndErg = inzahl then isarmstrong := true else isarmstrong := false; end;

Seite: 4 Kurs 1612 Konzepte imperativer Programmierung

Seite: 5 Name: Matrikelnummer:

Seite: 6 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 2 (3+5 Punkte) Gegeben ist folgende Definition einer linearen Liste: type trefliste = ^tliste; tliste = record info: integer; next: trefliste end; a) Implementieren Sie eine Funktion kommtvor, die prüft, ob in einer übergebenen linearen Liste ein Element mit einem ebenfalls zu übergebenden info-wert vorkommt. Verwenden Sie folgenden Funktionskopf: function kommtvor(inrefliste:trefliste; inwert:integer):boolean; {Rückgabe true, falls die übergebene Liste ein Element mit info-komponente inwert enthält, sonst false} b) Implementieren Sie eine Prozedur Tausche, die in einer übergebenen Liste das Element mit der info-komponente 0 sucht und die mit diesem Element beginnende Restliste nur durch Ändern der Verkettung aushängt und an den Beginn der Liste einfügt. Sie können davon ausgehen, dass die 0 in der Liste genau einmal vorkommt. Ist das Element mit info-komponente 0 das erste, so ist nichts zu tun. Verwenden Sie folgenden Prozedurkopf: procedure Tausche(var iorefanfang: trefliste); Ein Beispiel: Vor dem Aufruf: iorefanfang Danach: -9-7 0-13 -1 30 iorefanfang -9-7 0-13 -1 30

Seite: 7 Name: Matrikelnummer:

Seite: 8 Kurs 1612 Konzepte imperativer Programmierung

Seite: 9 Name: Matrikelnummer:

Seite: 10 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 3 (5+2 Punkte) Gegeben sei folgende Typdeklaration: type trefdvliste = ^tdvliste; tdvliste = record info: integer; prev, next:trefdvliste end; Mit Hilfe dieses Typs wird eine so genannte doppelt verkettete Liste gebildet. Im Gegensatz zu den im Kurs betrachteten einfach verketteten linearen Listen besitzt hier ein Listenelement neben einem Zeiger next auf seinen Nachfolger auch einen Zeiger prev auf seinen Vorgänger. So wie der next-zeiger des letzten Elementes zeigt der prev-zeiger des ersten Elementes auf nil. Eine solche Liste werde unverändert über einen Anfangszeiger angesprochen, der das erste Element referenziert. Die folgende Skizze zeigt ein Beispiel einer solchen doppelt verketteten Liste aus vier Elementen. iorefanfang prev next next next next 10-5 prev prev 2 1 prev a) Implementieren Sie eine Prozedur loeschen, die das erste Element mit einem zu übergebenden info-wert in der Liste sucht und es aus der Liste löscht. Sie dürfen dabei davon ausgehen, dass das zu löschende Element in der Liste vorkommt. Die folgende Skizze zeigt z.b. das Ergebnis, wenn aus oben abgebildeter Liste das Element mit Info 2 gelöscht wurde. iorefanfang prev next next next 10-5 prev prev 1

Seite: 11 Name: Matrikelnummer: Benutzen Sie folgenden Prozedurkopf: procedure loeschen(var iorefanfang: trefdvliste; insuch:integer); {Loescht das erste Listenelement mit Info insuch. Es muss ein solches Element existieren!} b) Vergleicht man obige Typdeklaration zur Bildung doppelt verketteter Listen mit der z.b. in Aufgabe 4 gegebenen Typdeklaration zur Bildung binärer Bäume, so stellt man fest, dass beide strukturell identisch sind und sich nur in Bezeichnern unterscheiden. Erklären Sie, warum derselbe Typ sowohl zur Bildung von Bäumen als auch zur Bildung von doppelt verketteten Listen verwendet werden kann, obwohl doch beides unterschiedliche Datenstrukturen sind! Tipp: Überlegen Sie sich, was genau die Typen tdvliste bzw. tbinbaum sowie trefdvliste bzw. trefbinbaum beschreiben.

Seite: 12 Kurs 1612 Konzepte imperativer Programmierung

Seite: 13 Name: Matrikelnummer:

Seite: 14 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 4 (3+1 Punkte) Gegeben sei folgende Typdeklaration zur Bildung eines binären Baumes: type trefbinbaum = ^tbinbaum; tbinbaum = record info: integer; links, rechts:trefbinbaum end; a) Implementieren Sie rekursiv eine Prozedur spiegeln, die einen beliebigen übergebenen Baum aus Knoten des Typs trefbinbaum spiegelt, indem für jeden Knoten des Baumes die beiden Nachfolger vertauscht werden. Sollte der eingegebene Baum sortiert sein, so wird durch diese Spiegelung übrigens die Sortierung umgekehrt, d.h. aus einem aufsteigend sortierten Baum würde ein absteigend sortierter und umgekehrt. Verwenden Sie den folgenden Prozedurkopf, wobei an der mit?? gekennzeichneten Stelle die Übergabeart geeignet zu ergänzen ist: procedure spiegeln(??refwurzel: trefbinbaum); b) Handelt es sich hier um eine sinnvolle Anwendung der Rekursion? Begründen Sie Ihre Antwort. (Eine unbegründete Antwort wie Ja oder Nein wird nicht bewertet!)

Seite: 15 Name: Matrikelnummer:

Seite: 16 Kurs 1612 Konzepte imperativer Programmierung

Seite: 17 Name: Matrikelnummer:

Seite: 18 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 5 (3 Punkte) Die Funktion quersumme soll die Quersumme einer eingegebenen natürlichen Zahl berechnen, also die Summe all ihrer Ziffern. Typdefinition und Funktion seien wie folgt gegeben. type tnatzahl = 0..maxint; function quersumme (inzahl : tnatzahl): tnatzahl; {berechnet die Quersumme von inzahl} var qs, rest : tnatzahl; begin qs:=0; rest:=inzahl div 10; while rest > 0 do begin qs := qs + rest mod 10; rest := rest div 10 end; {while} quersumme:=qs; end; {quersumme} Ermitteln Sie die Testfälle für den boundary-interior Pfadtest (interior-test für genau zwei Schleifendurchläufe) der Funktion quersumme. Sie brauchen nicht die zu den Testfällen gehörenden Pfade im Kontrollflussgraphen anzugeben.

Seite: 19 Name: Matrikelnummer:

Seite: 20 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 6 (4+3+3) Das folgende Programm Aufgabe6 bestimmt die Summe aller geraden Zahlen von 2 bis X. Formal lässt sich das gewünschte Ergebnis durch folgende Nachbedingung spezifizieren: Sie sollen zeigen, dass das Programm Aufgabe6 bezüglich der Spezifikation { P } S { Q sum = (X 2 + 2X)/4} für ein von Ihnen geeignet zu wählendes Prädikat P partiell korrekt ist. program Aufgabe6; const X =?; var sum, z : integer; begin sum := 0; z := 2; while z < (X+2) do begin sum := sum + z; z := z + 2 end end. a) Zeigen Sie zunächst, dass Q sum = -------------------- + 2X 4 X 2 INV sum= z2 ---------------- 2z 4 ( z X + 2 ) X g z g eine Invariante der while-schleife des Programms Aufgabe6 ist, wobei X g (bzw. z g ) kurz für das Prädikat X ist gerade (bzw. z ist gerade ) stehe.

Seite: 21 Name: Matrikelnummer: b) Bestimmen Sie ein geeignetes Prädikat P, so dass die folgende Programmformel PF b gültig wird: {P} sum := 0; z:=2 {INV} Beweisen Sie die Gültigkeit von PF b. c) Beweisen Sie nun die partielle Korrektheit von Aufgabe6 bezüglich der Spezifikation {P} S {Q}, wobei Sie die Gültigkeit von PF b und die Invarianteneigenschaft von INV voraussetzen dürfen. Wichtig: Geben Sie in allen Teilaufgaben die von Ihnen verwendeten Hoare-Regeln explizit an!

Seite: 22 Kurs 1612 Konzepte imperativer Programmierung

Seite: 23 Name: Matrikelnummer:

Seite: 24 Kurs 1612 Konzepte imperativer Programmierung

Seite: 25 Name: Matrikelnummer:

Seite: 26 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 7 (4 Punkte) Zeigen Sie, dass das Programm Aufgabe6 terminiert, indem Sie eine Funktion τ angeben und beweisen, dass τ eine Terminierungsfunktion der while-schleife ist.

Seite: 27 Name: Matrikelnummer:

Seite: 28 Kurs 1612 Konzepte imperativer Programmierung Aufgabe 8 (3+2+2+2 Punkte) Beantworten Sie die folgenden Fragen und begründen Sie jeweils Ihre Antworten! a) Erläutern Sie kurz die wesentliche Gemeinsamkeit von Verifikation und Test eines Programms sowie die beiden wesentlichen Unterschiede zwischen ihnen. b) Nehmen Sie Stellung zu folgender Behauptung: Das Verfahren zur Prüfung, ob ein Element mit einem vorgegebenen info-wert in einem binären Suchbaum existiert, ist sinnvollerweise rekursiv zu implementieren. (Anmerkung: Wenn wir vom info-wert eines Elementes sprechen, beziehen wir uns auf eine Typdeklaration für Binärbäume, wie sie z.b. in Aufgabe 4 gegeben ist. ) c) Terminiert ein total korrektes Programm für jede mögliche Eingabe (also auch für Eingaben, die nicht der Programmspezifikation entsprechen)? (Eine nicht begründete Antwort wie nur Ja oder Nein wird nicht bewertet.) d) Gegeben sei folgende Repeat-Schleife: repeat S repeat until B Mit Hilfe einer aussagekräftigen Invariante INV konnte die Gültigkeit folgender Programmformel bewiesen werden: {INV B} S repeat {INV B} Was können Sie über die Anzahl der Schleifendurchläufe aussagen?

Seite: 29 Name: Matrikelnummer:

Seite: 30 Kurs 1612 Konzepte imperativer Programmierung

Seite: 31 Name: Matrikelnummer:

Seite: 32 Zusammenfassung der Muss-Regeln 1. Selbstdefinierte Konstantenbezeichner bestehen nur aus Großbuchstaben. Bezeichner von Standardkonstanten wie z.b. maxint sind also ausgenommen 2. Typbezeichnern wird ein t vorangestellt. Bezeichner von Zeigertypen beginnen mit tref. Bezeichner formaler Parameter beginnen mit in, io oder out. 3. Jede Anweisung beginnt in einer neuen Zeile; begin und end stehen jeweils in einer eigenen Zeile 4. Anweisungsfolgen werden zwischen begin und end um eine konstante Anzahl von 2-4 Stellen eingerückt. begin und end stehen linksbündig unter der zugehörigen Kontrollanweisung, sie werden nicht weiter eingerückt. 5. Anweisungsteile von Kontrollanweisungen werden genauso eingerückt. 6. Im Programmkopf wird die Aufgabe beschrieben, die das Programm löst. 7. Jeder Funktions- und Prozedurkopf enthält eine knappe Aufgabenbeschreibung als Kommentar. Ggf. werden zusätzlich die Parameter kommentiert. 8. Die Parameter werden sortiert nach der Übergabeart: Eingangs-, Änderungs- und Ausgangsparameter. 9. Die Übergabeart jedes Parameters wird durch Voranstellen von in, io oder out vor den Parameternamen gekennzeichnet. 10. Das Layout von Funktionen und Prozeduren entspricht dem von Programmen. 11. Jede von einer Funktion oder Prozedur benutzte bzw. manipulierte Variable wird als Parameter übergeben. Es werden keine globalen Variablen manipuliert. Einzige Ausnahme sind Modul-lokale Variablen, die in den Parameterlisten der exportierten Prozeduren und Funktionen des Moduls nicht auftauchen, selbst wenn sie von diesen geändert werden. 12. Jeder nicht von der Prozedur veränderte Parameter wird als Wertparameter übergeben. Lediglich Felder können auch anstatt als Wertparameter als Referenzparameter übergeben werden, um den Speicherplatz für die Kopie und den Kopiervorgang zu sparen. Der Feldbezeichner beginnt aber stets mit dem Präfix in, wenn das Feld nicht verändert wird. 13. Funktionsprozeduren werden wie Funktionen im mathematischen Sinne benutzt, d.h. sie besitzen nur Wertparameter. Wie bei Prozeduren ist eine Ausnahme nur bei Feldern erlaubt, um zusätzlichen Speicherplatz und Kopieraufwand zu vermeiden. 14. Wertparameter werden nicht als lokale Variable mißbraucht. 15. Die Schlüsselworte unit, interface und implementation werden ebenso wie begin und end des Initialisierungsteils linksbündig positioniert. Nach dem Schlüsselwort unit folgt ein Kommentar, der die Aufgabe beschreibt, welche die Unit löst. 16. Für die Schnittstelle gelten dieselben Programmierstilregeln wie für ein Programm. Dies betrifft Layout und Kommentare. Nach dem Schlüsselwort interface folgt im Normalfall kein Kommentar. 17. Für den Implementationsteil gelten dieselben Programmierstilregeln wie für ein Programm. Nach dem Schlüsselwort implementation folgt nur dann ein Kommentar, wenn die Realisierung einer Erläuterung bedarf (z.b. wegen komplizierter Datenstrukturen und/oder Algorithmen). 18. In Programmen oder Moduln, die andere Moduln importieren ( benutzen ), wird das Schlüsselwort uses auf dieselbe Position eingerückt wie die Schlüsselworte const, type, var usw. 19. Die Laufvariable wird innerhalb einer for-anweisung nicht manipuliert. 20. Die Grundsätze der strukturierten Programmierung sind strikt zu befolgen.

Seite: 33 Kurs 1612 Konzepte imperativer Programmierung Hoare-Regeln 1. Konsequenzregel 1 Konsequenzregel 2 {P} S {R}, R Q {P} S {Q} P R, {R} S {Q} {P} S {Q} 2. Nullaxiom {P} {P} 3. Zuweisungaxiom {P<x expr>} x:=expr {P} 4. Sequenzregel {P} S 1 {R}, {R} S 2 {Q} {P} S 1 ; S 2 {Q} 5. Zusammensetzungsregel {P} S {Q} {P} begin S end {Q} 6. Bedingungsregel 1 {P B} S 1 {Q}, {P B} S 2 {Q} {P} if B then S 1 else S 2 {Q} Bedingungsregel 2 {P B} S {Q}, (P B ) Q {P} if B then S {Q} 7. while-regel 8. repeat-regel {P B} S {P} {P} while B do S {P B} {P} S {Q}, (Q B) P {P} repeat S until B {Q B}

Seite: 34 Terminierungsfunktion Definition Eine Abbildung τ heißt Terminierungsfunktion der while-schleife while B do S, wenn sie die Bedingungen w1) bis w3) erfüllt: w1) Seien v 1,..., v r die in B und S vorkommenden Variablen und Konstanten. Dann ist τ: Z r Z mit τ(v 1,..., v r ) Z. w2) Ist vor einem Schleifendurchlauf τ(v 1,..., v r ) = t erfüllt, dann ist nach dem Schleifendurchlauf τ(v 1,..., v r ) < t erfüllt. w3) Es existiert ein Wert t* Z, so dass vor jedem Schleifendurchlauf τ(v 1,..., v r ) t* gilt. Bemerkung i) Beachten Sie, dass S nur dann ausgeführt wird, wenn INV B erfüllt ist. Diese Voraussetzung muss man gewöhnlich ausnutzen, um die Eigenschaften w2) und w3) einer Terminierungsfunktion beweisen zu können. ii) Eine Invariante INV, mit der sich die Terminierung einer Schleife beweisen lässt, ist (leider) oft nicht identisch mit einer pk-geeigneten Invarianten, mit der sich die partielle Korrektheit zeigen lässt. Haben wir eine solche t-geeignete Invariante INV gefunden und bewiesen, dass die Schleife unter dieser Invarianten terminiert, müssen wir außerdem noch zeigen, dass INV auch tatsächlich erfüllt ist, wenn die Programmabarbeitung die Schleife erreicht.