Docsity
Docsity

Prüfungen vorbereiten
Prüfungen vorbereiten

Besser lernen dank der zahlreichen Ressourcen auf Docsity


Download-Punkte bekommen.
Download-Punkte bekommen.

Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo


Leitfäden und Tipps
Leitfäden und Tipps

Programmierung Prof. Giesl Musterlösung, Übungen von Programmierung

Musterlösung - Übung Programmierung Prof. Giesl

Art: Übungen

2019/2020

Hochgeladen am 10.04.2020

Eva_Keller
Eva_Keller 🇩🇪

4.2

(17)

1 / 12

Toggle sidebar

Diese Seite wird in der Vorschau nicht angezeigt

Lass dir nichts Wichtiges entgehen!

bg1
RHEINISCH-
WESTF¨
ALISCHE
TECHNISCHE
HOCHSCHULE
AACHEN
LEHR- UND FORSCHUNGSGEBIET INFORMATIK 2
RWTH Aachen ·D-52056 Aachen ·GERMANY
http://programmierung.rwth-aachen.de/
Prof. Dr. J¨
urgen Giesl
LuFG
Informatik II
Prof. Dr. J¨
urgen Giesl
Carsten Fuhs, Peter Schneider-Kamp, Stephan Swiderski
Pr¨
asenz¨
ubung
Programmierung
9. 1. 2008
Vorname:
Nachname:
Matrikelnummer:
Studiengang (bitte ankreuzen):
Informatik Bachelor Informatik Diplom Informatik Lehramt
Mathematik Bachelor Mathematik Diplom
CES Bachelor CES Diplom
Werkstoffinformatik Computermathematik
Sonstige:
Schreiben Sie bitte auf jedes Blatt Vorname,Name und Matrikelnummer.
Geben Sie Ihre Antworten bitte in lesbarer und verst¨
andlicher Form an. Schreiben Sie bitte nicht
mit roten Stiften oder mit Bleistiften.
Bitte beantworten Sie die Aufgaben auf den Aufgabenbl¨
attern. Benutzen Sie ggf. auch die
R¨
uckseiten der zur jeweiligen Aufgabe geh¨
orenden Aufgabenbl¨
atter.
Antworten auf anderen Bl¨
attern k¨
onnen nur ber¨
ucksichtigt werden, wenn Name, Matrikelnum-
mer und Aufgab ennummer deutlich darauf erkennbar sind.
Was nicht bewertet werden soll, kennzeichnen Sie bitte durch Durchstreichen.
Werden T¨
auschungsversuche beobachtet, so wird die Klausur mit 0 Punkten bewertet.
Geben Sie bitte am Ende der Klausur alle Bl¨
atter zusammen mit den Aufgabenbl¨
attern ab.
Anzahl Punkte Erreichte Punkte
Aufgabe 1 14
Aufgabe 2 12
Aufgabe 3 14
Aufgabe 4 26
Summe 66
Prozentzahl
pf3
pf4
pf5
pf8
pf9
pfa

Unvollständige Textvorschau

Nur auf Docsity: Lade Programmierung Prof. Giesl Musterlösung und mehr Übungen als PDF für Programmierung herunter!

RHEINISCH-WESTF¨ALISCHE TECHNISCHEHOCHSCHULE AACHEN

LEHR- UND FORSCHUNGSGEBIET INFORMATIK 2 RWTH Aachen · D-52056 Aachen · GERMANY http://programmierung.rwth-aachen.de/ Prof. Dr. J¨urgen Giesl

LuFG Informatik II

Prof. Dr. J¨urgen Giesl Carsten Fuhs, Peter Schneider-Kamp, Stephan Swiderski

Pr¨asenz¨ubung

Programmierung

Vorname:

Nachname:

Matrikelnummer:

Studiengang (bitte ankreuzen):

◦ Informatik Bachelor ◦ Informatik Diplom ◦ Informatik Lehramt ◦ Mathematik Bachelor ◦ Mathematik Diplom ◦ CES Bachelor ◦ CES Diplom ◦ Werkstoffinformatik ◦ Computermathematik

◦ Sonstige:

  • Schreiben Sie bitte auf jedes Blatt Vorname, Name und Matrikelnummer.
  • Geben Sie Ihre Antworten bitte in lesbarer und verst¨andlicher Form an. Schreiben Sie bitte nicht mit roten Stiften oder mit Bleistiften.
  • Bitte beantworten Sie die Aufgaben auf den Aufgabenbl¨attern. Benutzen Sie ggf. auch die R¨uckseiten der zur jeweiligen Aufgabe geh¨orenden Aufgabenbl¨atter.
  • Antworten auf anderen Bl¨attern k¨onnen nur ber¨ucksichtigt werden, wenn Name, Matrikelnum- mer und Aufgabennummer deutlich darauf erkennbar sind.
  • Was nicht bewertet werden soll, kennzeichnen Sie bitte durch Durchstreichen.
  • Werden T¨auschungsversuche beobachtet, so wird die Klausur mit 0 Punkten bewertet.
  • Geben Sie bitte am Ende der Klausur alle Bl¨atter zusammen mit den Aufgabenbl¨attern ab.

Anzahl Punkte Erreichte Punkte Aufgabe 1 14 Aufgabe 2 12 Aufgabe 3 14 Aufgabe 4 26 Summe 66 Prozentzahl

2

Aufgabe 1 (Programmanalyse, 8 + 6 Punkte)

a) Geben Sie die Ausgabe des Programms f¨ur den Aufruf java M an. Schreiben Sie hierzu jeweils die ausgegebenen Zeichen hinter den Kommentar “OUT:”.

public class A { public static double x = 1; public A() { this(4); } public A(double x) { A.x += x; } public void f(double x) { x += 2*x; } }

public class B extends A { public int y = 3; public B(int x) { super(); y++; } public void f(int x) { A.x += x; } public void f(double x) { A.x -= x; y--; } }

public class M { public static void main(String[] args) { A a = new A(A.x); System.out.println(a.x); // OUT: a.f(10); System.out.println(a.x); // OUT: B b = new B(10); System.out.println(b.x+" "+b.y); // OUT: b.f(10); System.out.println(b.x); // OUT: a = b; a.f(1.0); System.out.println(a.x+" "+b.y); // OUT: a.f(10); System.out.println(a.x); // OUT: } }

4

Aufgabe 2 (Verifikation, 10 + 2 Punkte)

Der Algorithmus P berechnet f¨ur ein Array a der L¨ange n die Summe

∑n− 1 k=0 2

k (^) ∗ a[k], wobei a

aus den Zahlen a[0],... , a[n − 1] besteht.

a) Vervollst¨andigen Sie die folgende Verifikation des Algorithmus P im Hoare-Kalk¨ul, indem Sie die unterstrichenen Teile erg¨anzen. Hierbei d¨urfen zwei Zusicherungen nur dann direkt untereinander stehen, wenn die untere aus der oberen folgt. Hinter einer Programmanwei- sung darf nur eine Zusicherung stehen, wenn dies aus einer Regel des Hoare-Kalk¨uls folgt.

Algorithmus: P Eingabe: Ein Array a der L¨ange n, das die Zahlen a[0],... , a[n − 1] enth¨alt Ausgabe: res Vorbedingung: n ≥ 0 Nachbedingung: res =

∑n− 1 k=0 2

k (^) ∗ a[k]

〈 n ≥ 0 〉

〈 〉

i = 0; 〈 〉

res = 0; 〈 〉

z = 1; 〈 〉

〈 〉

while (n > i) { 〈 〉

〈 〉

res = res + z ∗ a[i]; 〈 〉

z = z ∗ 2; 〈 〉

i = i + 1; 〈 〉

} 〈 〉

〈 res =

∑n− 1 k=0 2 k (^) ∗ a[k] 〉

5

b) Beweisen Sie die Terminierung des Algorithmus P.

7

8

b) Implementieren Sie in Java eine Methode saubereOefen. Die Methode bekommt als Pa- rameter ein Array von ¨Ofen und einen double-Wert maxCO (^) ¨ubergeben. Sie soll ein Array von denjenigen ¨Ofen aus dem gegebenen Array zur¨uckliefern, die keine Abgase haben oder deren Abgase einen CO-Anteil haben, der h¨ochstens maxCO ist. Das ¨ubergebene Array soll dabei nicht modifiziert werden. Das Array, das Sie zur¨uckgeben, soll keine null-Werte enthalten. Gehen Sie dabei davon aus, dass das ¨ubergebene Array nicht der null-Wert ist, dass es keine null-Werte enth¨alt und dass f¨ur alle Attribute geeignete Selektoren existieren. Verwenden Sie f¨ur den Zugriff auf die ben¨otigten Attribute die passenden Selektoren und kennzeichnen Sie die Methode mit dem Schl¨usselwort ”

static“, falls angebracht.

10

a) Die Methode loesche der Klasse Graph l¨oscht einen Knoten aus dem Graphen. Danach kann es vorkommen, dass einige Knoten vom Wurzelknoten aus nicht mehr erreichbar sind, so dass diese ebenfalls automatisch gel¨oscht sind. Sie brauchen diese nicht mehr erreichbaren Knoten nicht manuell zu l¨oschen. Beachten Sie, dass, wenn der Wurzelknoten gel¨oscht wird, der Graph danach leer sein muss. Nutzen Sie bei der Implementierung aus, dass die Nachbarschaftsbeziehung symmetrisch ist. (Sie m¨ussen daher den zu l¨oschenden Knoten nicht im Graph suchen, sondern Sie k¨onnen direkt vom zu l¨oschenden Knoten ausgehen und von dort aus seine Nachbarn erreichen.) Implementieren Sie die Methode loesche mit der Signatur public void loesche(Knoten knoten) in der Klasse Graph.

11

b) Die Methode anwenden der Klasse Graph wendet einen Besucher auf den Graph an. Ein Besucher ist ein Objekt einer Klasse, welche das Interface Besucher implementiert.

public interface Besucher { void besuche(Knoten knoten); }

Die Methode besuche des Besuchers soll durch die Methode anwenden auf jeden Knoten genau einmal angewendet werden. Sie k¨onnen hier das Attribut besucht der Klasse Knoten verwenden, indem Sie es bei einem besuchten Knoten auf true setzen. Sie k¨onnen davon ausgehen, dass das Attribut besucht vor dem Aufruf von anwenden in jedem Knoten des Graphen auf false steht. Sorgen Sie daf¨ur, dass das Attribut besucht jedes Knotens nach Verlassen der Methode anwenden wieder auf false steht. Implementieren Sie die Methode anwenden mit der Signatur public void anwenden(Besucher besucher) in der Klasse Graph. Verwenden Sie dabei ausschließlich Rekursion. Sie d¨urfen aber eine for-Schleife verwenden, um ein Array zu durchlaufen.