• Keine Ergebnisse gefunden

Fachbereich Informatik INF FernUniversität in Hagen

N/A
N/A
Protected

Academic year: 2022

Aktie "Fachbereich Informatik INF FernUniversität in Hagen"

Copied!
37
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

INF

FERNUNIVERSITÄT Gesamthochschule

D-58084 Hagen

Fachbereich Informatik Kurs:

Korrektur: Datum:

©2005 FernUniversität - Gesamthochschule in Hagen

Hörerstatus:

( ) Vollzeitstudent ( ) Teilzeitstudent ( ) Zweithörer ( ) Gasthörer

Klausurort:

Postanschrift: FernUniversität D - 58084 Hagen Name, Vorname

Straße, Nr.

PLZ, Wohnort

1612 "Konzepte imperativer Programmierung"

Hauptklausur am 5. März 2005

( ) Berlin ( ) Bochum ( ) Frankfurt ( ) Hamburg ( ) Karlsruhe ( ) Köln ( ) München ( ) Bregenz ( ) Wien

( ) . . .

Aufgabe 1 2 3 4 5 6 7 8 Summe

erreichbare Punktzahl 6 7 5 9 5 10 4 8 54

bearbeitet

erreichte Punktzahl

(2)
(3)

INF

FERNUNIVERSITÄT Gesamthochschule

D-58084 Hagen

Fachbereich Informatik Kurs:

Korrektur: Datum:

©2005 FernUniversität - Gesamthochschule in Hagen

Hörerstatus:

( ) Vollzeitstudent ( ) Teilzeitstudent ( ) Zweithörer ( ) Gasthörer

Klausurort:

Postanschrift: FernUniversität D - 58084 Hagen Name, Vorname

Straße, Nr.

PLZ, Wohnort

1612 "Konzepte imperativer Programmierung"

Hauptklausur am 5. März 2005

( ) Berlin ( ) Bochum ( ) Frankfurt ( ) Hamburg ( ) Karlsruhe ( ) Köln ( ) München ( ) Bregenz ( ) Wien

( ) . . .

Aufgabe 1 2 3 4 5 6 7 8 Summe

erreichbare Punktzahl 6 7 5 9 5 10 4 8 54

bearbeitet

erreichte Punktzahl

(4)
(5)

Ihre Nachricht vom Mein Zeichen

Auskunft erteilt I. Schulz-Gerlach Telefon 02331 987-2553 Telefax 02331 987-317

E-Mail Kurs1612@FernUni-Hagen.de Hausanschrift Universitätsstr. 1

58084 Hagen Datum

Telefonzentrale 02331 987-01 Zentraler Telefaxeingang 02331 987-316

Internet http://www.FernUni-Hagen.de

Buslinien 515

Haltestelle FernUniversität

BESCHEINIGUNG (zur Vorlage beim Finanzamt) Hiermit wird bescheinigt, dass

Herr / Frau _______________________________

Matrikel-Nr. _____________________

am 5. März 2005 in der Zeit von 10.00 bis 13.00 Uhr in _______________________________

an der Klausur zum Kurs 1612 “Konzepte imperativer Programmierung”

teilgenommen hat.

05.03.2005

(6)
(7)

Wintersemester 2004/2005 Hinweise zur Bearbeitung der Klausur

zum Kurs 1612 “Konzepte imperativer Programmierung”

Wir begrüßen Sie zur Klausur "Konzepte imperativer Programmierung". Lesen Sie sich die- se 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, hef- ten 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 Terminie- rungsfunktion finden Sie im Anschluss an die Aufgabenstellung.

6. Es sind maximal 54 Punkte erreichbar. Sie haben die Klausur sicher dann bestanden, wenn Sie mindestens 27 Punkte erreicht haben.

Wir wünschen Ihnen bei der Bearbeitung der Klausur viel Erfolg!

(8)

Aufgabe 1 (6 Punkte)

Zu einer Fernsehshow haben sich 50 Kandidaten gemeldet. Nach einem „Zufallsprinzip“ sollen einige für die Show ausgewählt werden. Dazu stellen sich zunächst alle Kandidaten in einer Reihe auf. Die Auswahl geschieht nun nach folgendem Verfahren:

• In einem ersten Durchlauf tritt jeder Kandidat einen Schritt vor.

• Im zweiten Durchgang tritt jeder zweite Kandidat, also die Kandidaten mit den Nummern 2, 4, 6, 8 usw., wieder einen Schritt zurück.

• Danach tritt jeder dritte Kandidat (3, 6, 9, 12 usw.) einen Schritt vor, falls er hinten steht, und einen Schritt zurück, falls er vorne steht.

• Als nächstes tritt jeder 4. Kandidat (4, 8, 12, 16 usw.) einen Schritt vor, falls er hinten steht, und einen Schritt zurück, falls er vorne steht.

• Dieses Verfahren wird bis zum 50. Durchgang fortgesetzt. Es tritt also beim Durchlauf i jeder i-te Kandidat (i, 2i, 3i, 4i usw.) einen Schritt vor, falls er hinten steht, und einen Schritt zurück, falls er vorne steht.

• Alle Kandidaten, die nach dem 50. Durchlauf vorne stehen, dürfen an der Show teilnehmen.

Da es zu teuer ist, alle 50 Kandidaten nur für das Auswahlverfahren anreisen zu lassen, soll ein entspre- chendes Programm zur Simulation implementiert werden. Dazu werden alle Kandidaten von 1 bis 50 durchnumeriert. Unter Beachtung der angegebenen Typdeklarationen sollen Sie untenstehende Prozedur BerechneZustand an den mit ?? gekennzeichneten Stellen ergänzen.

Hinweis: Sie werden dazu zwei Schleifen verschachteln müssen: Die äußere Schleife steuert die 50 Durchläufe des Verfahrens, und im i-ten Durchlauf (i = 1, 2, ..., 50) ist mit einer inneren Schleife jeweils der i-te, der 2i-te, der 3i-te u.s.w. Kandidat zu bestimmen, welcher seinen Zustand ändern soll. Überlegen Sie sich vorab, welcher Schleifentyp für die äußere und welcher für die innere Schleife jeweils am besten geeignet ist.

const

MAXKANDIDAT = 50;

type

tNatZahl = 1..maxint;

tZustand = (vorn, hinten);

tKandidatenBereich = 1..MAXKANDIDAT;

tKandidaten = array [tKandidatenBereich] of tZustand;

(9)

procedure BerechneZustand (?? ??Feld : tKandidaten);

{ berechnet die zugelassenen und abgelehnten Kandidaten } var

i: tKandidatenBereich; {Durchlauf-Zaehler}

j: tNatZahl; {Im i-ten Durchlauf koennen hiermit die

Kandidaten (Vielfache von i) abgezaehlt werden}

begin

{ Initialisierung: alle Kandidaten stehen „hinten“ } for i:= 1 to MAXKANDIDAT do

outFeld[i] := hinten;

{ Durchlaeufe starten... }

??

end; { BerechneZustand }

(10)
(11)
(12)

Aufgabe 2 (7 Punkte)

Schreiben Sie eine PASCAL-Funktion ListenMerge, die zwei lineare Listen mit integer-Zahlen nach dem aus dem Straßenverkehr bekannten „Reißverschlussverfahren“ nur durch Änderung der Ver- kettung zu einer einzigen Liste zusammenfasst. Als Rückgabewert wird der Zeiger auf das erste Element der Ergebnisliste geliefert. Dabei soll das erste Element von Liste 1 an den Listenanfang kommen, wie im folgenden Beispiel gezeigt ist (die gestrichelten Pfeile deuten die Änderung der Verkettung an):

Sie können davon ausgehen, dass die beiden Listen nicht-leer und gleich lang sind. Benutzen Sie fol- gende Typdefinitionen sowie den angegebenen Funktionskopf von ListenMerge:

type

tRefElement = ^tElement;

tElement = record

info : integer;

next : tRefElement end;

function ListenMerge ( inListe1,

inListe2 : tRefElement) : tRefElement;

{ fasst die Elemente der nicht-leeren und gleich langen Listen

inListe1 und inListe2 mit dem Reissverschlussverfahren durch Aenderung der Verkettung zu einer einzigen Liste zusammen und gibt einen Zeiger auf den Anfang der Ergebnisliste zurueck }

2 4 1

3

5 3

2 5 4 3 1 3

Liste 1:

Liste 2:

Resultierende Liste:

(13)
(14)
(15)
(16)

Aufgabe 3 (5 Punkte)

Gegeben ist folgende Typdeklaration für eine lineare Liste:

type

tRefElement = ^tElement;

tElement = record

info : integer;

next : tRefElement end;

Es soll eine Prozedur NachVorn implementiert werden, die ein Element mit einem als Parameter über- gebenen Info-Wert (vom Typ integer) sucht und dieses an den Anfang der Liste nur durch Ändern der Verkettung einfügt.

Es darf dabei vorausgesetzt werden, dass ein solches Element in der Liste vorkommt!

Benutzen Sie untenstehenden Prozedurkopf und ergänzen Sie auch die Parameterübergabearten.

procedure NachVorn( ?? ??Wert: integer;

?? ??ioRefAnfang: tRefElement);

??

(17)
(18)

Aufgabe 4 (7+2 Punkte)

Gegeben sei ein (nicht sortierter) binärer Baum und ein Zeiger (inRefWurzel) auf die Wurzel des Bau- mes. Die Funktion countLeaf soll die Anzahl der Blätter in dem Baum bestimmen. Im Fall eines lee- ren Baumes soll der Wert 0 zurückgegeben werden.

Beispiel: Wird der Funktion countLeaf ein Zeiger auf die Wurzel des Baumes der folgenden Abbil- dung übergeben, so liefert sie als Ergebnis den Wert 3.

a) Ihre Aufgabe ist es, die Funktion countLeaf zu implementieren. Gehen Sie dabei von den unten gegebenen Typdefinitionen und der Funktionsdeklaration aus.

Wählen Sie eine rekursive Lösung!

b) Zeichnen Sie für die Menge {36, 11, 18, 3, 37, 25, 8, 21} einen degenerierten und einen vollstän- digen Suchbaum.

type

tNatZahl = 0..maxint;

tRefBinBaum = ^tBinBaum;

tBinBaum = record

info : tNatZahl;

links,

rechts : tRefBinBaum end;

(19)

function countLeaf(??): ??;

{ ?? } ...

(20)
(21)
(22)

Aufgabe 5 (5 Punkte)

Die Funktion MaxZiffer soll die größte Ziffer der Dezimaldarstellung der nicht-negativen ganzen Zahl inZahl bestimmen.

type

tZiffer = 0..9;

tNatZahl = 0..maxint;

function MaxZiffer (inZahl:tNatZahl): tZiffer;

{ bestimmt die größte Ziffer von inZahl}

var

rest : tnatZahl;

maxi,

ziffer: tZiffer;

begin

rest := inZahl;

maxi := 2;

while rest > 0 do begin

ziffer := rest mod 10;

if ziffer > maxi then maxi := ziffer;

rest := rest div 10 end;

MaxZiffer := maxi end; { MaxZiffer }

Ermitteln Sie die Testfälle für den boundary-interior Pfadtest (interior-Test mit n=2) der Funktion Ma- xZiffer. Sie brauchen nicht die zu den Testfällen gehörenden Pfade im Kontrollflussgraphen anzuge- ben.

(23)
(24)

Aufgabe 6 (6 + 4 Punkte)

Gegeben sei das folgende Programm Quadrat, das die quadratische Funktion y = x2 + x +1 (x > 0) implementiert.

program Quadrat;

const X = ?;

var i,

y : integer;

{P ≡ X > 0}

begin i := 1;

y := 2;

while i < X do begin

i := i + 1;

y := y + i end

end.

{Q ≡ y= X2 + X + 1}

a) Zeigen Sie, dass

INV ≡ 2y = i2 + i + 2

eine Invariante der while-Schleife des Programms Quadrat ist. Geben Sie die verwendeten Hoa- re-Regeln explizit an (siehe Anhang).

b) INV ist zwar eine Invariante, jedoch keine pk-geeignete1 Invariante.

Genau eines der vier angegebenen Prädikate A, B, C oder D ist eine pk-geeignete Invarinate INV’

der while-Schleife.

A ≡ INV ∧ i < X B ≡ INV ∧ i ≤ X C ≡ INV ∧ i = X D ≡ INV ∧ i > X

1. Als „pk-geeignet“ bezeichnen wir eine zum Beweis der partiellen Korrektheit geeignete Invariante.

1- 2

1- 2

1- 2

1- 2

(25)

Wählen Sie die pk-geeignete Invariante aus und beweisen Sie die partielle Korrektheit des Pro- gramms Quadrat. Dabei können Sie die Invarianteneigenschaften von INV’ als bewiesen vor- aussetzen. Geben Sie die benutzten Hoare-Regeln explizit an.

(26)
(27)
(28)

Aufgabe 7 (4 Punkte)

Zu einer Schleife, in der r Variablen und Konstanten v1 bis vr auftreten, wurde eine Terminierungsfunk- tion τ : ZZr→ZZ bestimmt und damit bewiesen, dass die Schleife terminiert.

Da τ die Bedingung w3) aus der Definition einer Terminierungsfunktion erfüllt, existiert eine untere Schranke t*∈ZZ.

Welche der folgenden Aussagen sind wahr, welche falsch? Begründen Sie Ihre Antworten.

a) Falls nach einem Schleifendurchlauf τ(v1, ..., vr) < t* gilt, bricht die Schleife ab.

b) Nach Abbruch der Schleife gilt τ(v1, ..., vr) < t*.

(29)
(30)

Aufgabe 8 (8 Punkte)

Welche der folgenden Aussagen sind wahr, welche falsch? Begründen Sie Ihre Antworten.

a) Ist die Terminierung eines Programmes bewiesen, deckt ein boundary interior Test keinen Pro- grammfehler mehr auf.

b) Nicht nur für die Verifikation, sondern auch bei jedem Testen eines Programms wird eine Pro- grammspezifikation benötigt.

c) {false} x := x + 1 {x=5} ist eine gültige Programmformel.

d) Zwei Schleifen mit derselben Invariante haben stets dieselbe Semantik.

(31)
(32)
(33)
(34)
(35)

1. Selbstdefinierte Konstantenbezeichner bestehen nur aus Großbuchstaben. Bezeichner von Standard- konstanten 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 wer- den 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 Ausgangsparame- ter.

9. Die Übergabeart jedes Parameters wird durch Voranstellen von in, io oder out vor den Parame- ternamen 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 Kom- mentar.

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.

(36)

1. Konsequenzregel 1

2. Nullaxiom

4. Sequenzregel

6. Bedingungsregel 1 3. Zuweisungaxiom

7. while-Regel

{P} S {R}, R ⇒ Q {P} S {Q}

P ⇒ R, {R} S {Q}

{P} S {Q}

{P} {P}

{P<x←expr>} x:=expr {P}

{P} S1 {R}, {R} S2 {Q}

{P} S1; S2 {Q}

{P ∧ B} S1 {Q}, {P ∧ ¬B} S2 {Q}

{P} if B then S1

{P ∧ B} S {Q}, (P ∧ ¬B ) ⇒ Q {P} if B then S {Q}

{P ∧ B} S {P}

{P} while B do S {P ∧ ¬B}

{P} S {Q}, (Q ∧ ¬B) ⇒ P {P} repeat S until B {Q ∧ B}

else S2 {Q}

5. Zusammensetzungsregel {P} S {Q}

{P} begin S end {Q}

8. repeat-Regel Konsequenzregel 2

Bedingungsregel 2

(37)

Definition

Eine Abbildung τ heißt Terminierungsfunktion der while-Schleife while B do S, wenn sie die Bedingungen w1) bis w3) erfüllt:

w1) Seien v1, ..., vr die in B und S vorkommenden Variablen und Kon- stanten. Dann ist τ: ZZ r → ZZ mit τ(v1, ..., vr) ∈ZZ.

w2) Ist vor einem Schleifendurchlauf τ(v1, ..., vr) = t erfüllt, dann ist nach dem Schleifendurchlauf τ(v1, ..., vr) < t erfüllt.

w3) Es existiert ein Wert t*∈ZZ, so dass vor jedem Schleifendurchlauf τ(v1, ...,vr)≥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 Eigen- schaften w2) und w3) einer Terminierungsfunktion beweisen zu können.

ii) Eine Invariante INV, mit der sich die Terminierung einer Schleife be- weisen lässt, ist (leider) oft nicht identisch mit einer pk-geeigneten Inva- rianten, mit der sich die partielle Korrektheit zeigen lässt.

Haben wir eine solche t-geeignete Invariante INV gefunden und bewie- sen, 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.

Referenzen

ÄHNLICHE DOKUMENTE

Aus diesem Grund ist unsere Krippenarbeit noch immer im Wachstum, sie wird hinterfragt und auch Eltern werden von der Gesellschaft in den Fokus genommen, welche ihre Kinder in

Die problematische Situation von Patienten mit Schmerzen ohne „fassbaren“ organischen Befund demonstrierte Diplom-Psychologin Hanne Seemann vom Institut für Medizinische

Bei Interesse richten Sie Ihre Bewerbung bitte an Büro für Sozialmanagement und Integration Westwall 8a, 47608 Geldern oder per E-Mail an bsi@bdbg.de Telefonische Rückfragen unter 0

Schon die Tat- sache, dass man fast 30 Jahre nach Portugals Beitritt zur damaligen Europäi- schen Wirtschaftsgemeinschaft immer noch über solche Beträge streitet, spricht nicht

auf wie: „So schnell lasse ich mich nicht von ihr/ihm abwimmeln.“ Viele Stalker können das Ende einer Bezie- hung aufgrund ihrer frühkindlichen, negativen Erfahrungen (zum Beispiel

Eine offene Beratung zum Wiedereinstieg in den Beruf bietet die Agentur für Arbeit. Ludwigshafen am

Anders als noch in den Jahren zuvor werden mit der Saison 2021/22 alle Dauerkarten in ein Dauerkarten-Abonnement überführt, sodass sich Ihre Dauerkarte in den folgenden Saisons

Der Bund Naturschutz (BN) begrüßt den Managementplan Bär des Bayerischen Umweltministeriums, der heute im Landtag vorgestellt werden soll.. Er ist ein guter Einstieg