Aufgabe 1 Wissensfragen (7 Punkte)

Werbung
TECHNISCHE UNIVERSITÄT
UNIVERSITÄT SOFIA
TECHNISCHE
SOFIA
Fakultät für deutsche Ingenieur- und Betriebswirtschaftsausbildung
Fakultät für deutsche Ingenieur- und Betriebswirtschaftsausbildung
Doz. Dr.- Ing. St. Maleshkov
Doz. Dr. - Ing. D. Jetchev
Informatik II
WS03/04
Klausur Februar
Klausurblatt
06.02.2004
Dauer 60 Minuten, Punkte: max 60 (davon 55 von dem Klausulblatt und 5 Bonuspunkte von der
Hausarbeit)
Aufgabe 1
Wissensfragen
(7 Punkte)
richtig falsch Behauptung
X
Die Komplexität eines Problems ist bestimmt durch den Algorithmus, der
das Problem mit dem geringsten Aufwand löst
X
Bei schwach typisierten Programmsprachen werden Typfehler zur
Laufzeit des Programms nicht erkannt
X
Mit dem Modifikator protected versehene Java-Methoden sind nur in der
Klasse verwendbar, in der sie definiert wurden
X
Eine Klasse kann mehrere Methoden mit gleichem Namen und
verschiedenen Parametern haben
X
Eine Klasse kann Konstruktoren mit unterschiedlichen Namen haben
X
Der Konstruktor einer Klasse darf nicht den Konstruktor einer anderen
Klasse aufrufen
X
Nach einer implements-Klausel folgt der Name einer Schnittstelle
X
Abstrakte Klassen können nicht instantiert werden
X
Ein Objekt kann als Objekt einer abstrakten Klasse deklariert werden
X
Die Höhe eines Knotens entspricht der minimalen Anzahl der Kanten des
Pfades zu einem von diesem Knoten aus erreichbaren Blatt
X
Threads können den Adressraum mit anderen Threads nicht teilen.
X
Threads werden in Java durch Objekte der Klasse java.lang.Thread
realisiert.
X
Die Grundformen vom Datenaustausch bei Interaktion zwischen
Prozessen sind: Kommunikation und Kanal.
X
Die Grundformen der Kommunikation bei Interaktion zwischen Prozessen
sind: Kanal und Tor.
Aufgabe 2 Algorithmus, Programm
(8 Punkte)
In den Übungen wurde ein Paket für geometrische Figuren vorbereitet. Zu der abstrakten
Klasse GeometrischesObjekt wurden die Subklassen Dreieck, Viereck, Rechteck, Ellipse, Neck
geschrieben. Um die Objekte zu zeichnen, wurde ein Inteface ZeichnenGO implementiert, wo nur
die Methode paint(Graphics g) definiert wurde. Bei der konkreten Klasse ZeichnenNeck extends
Neck implements ZeichnenGO wurde die Methode paint(Graphics g) geschrieben, wo auf Basis
der Information für die Koordinaten der Punkte in eckpunkteZ[] zwei neue Reihungen int mx[] und
my[] definiert wurden und das Zeichnen mit der Methode g.drawPolygon(mx, my, anzahl)
ausgeführt wurde.
Schreiben Sie eine Methode paint(Graphics g) der neuen Klasse ZeichnenNstern extends
Nstern implements ZeichnenGO, um einen Stern mit n-Eckpunkten zeichnen zu können.
Regel: Jeder Eckpunkt wird nicht mit
dem nächsten Eckpunkt verbunden (wie
bei den n-Ecken), sondern immer mit
dem übernächsten. Es ist ein
Unterschied beim Zeichen, wenn die
Anzahl der Eckpunkte eine gerade oder eine
ungerade Zahl ist.
Musterlösung:
public void paint(Graphics g)
int mx[], my[], i, j;
mx = new int[anzahl];
my = new int[anzahl];
if(anzahl % 2 == 1) {
j=-2;
for (i=0; i<anzahl; i++) {
j=j+2;
if(j>anzahl)
j=1;
mx[i] = eckpunkteZ[j].x;
my[i] = eckpunkteZ[j].y;
}
g.drawPolygon(mx, my, anzahl);
}else
{
j=-2;
int anz=anzahl/2;
for (i=0; i<anz; i++) {
j=j+2;
mx[i] = eckpunkteZ[j].x;
my[i] = eckpunkteZ[j].y;
}
g.drawPolygon(mx, my, anz);
j=-1;
for (i=0; i<anz; i++) {
j=j+2;
mx[i] = eckpunkteZ[j].x;
my[i] = eckpunkteZ[j].y;
}
g.drawPolygon(mx, my, anz);
}
}
{
Aufgabe 3 Verifikation
( 6 Punkte)
Gegeben ist der Programmabschnitt:
if(a<b)
{
c=a; a=b; b=c;
}
System.out.println("Der Wert “+a+“ist > als "+b) ;
Definieren Sie den logischen Ausdruck für die Nachbedingung. Machen Sie den wp-Kalkül und
definieren Sie die Vorbedingung für den Programmabschnitt.
Musterlösung:
Nachbedingung: a>b
wp(if a<b then {c=a; a=b; b=c}, a>b)
=
(a<b ⇒wp({c=a; a=b; b=c},a>b)) ∧ (a≥b ⇒ a>b) =
(a<b ⇒wp({c=a; a=b},wp(b=c, a>b))) ∧ a>b
=
(a<b ⇒wp({c=a; a=b},a>c)) ∧ a>b
=
(a<b ⇒ wp({c=a},wp(a=b,a>c))) ∧ a>b =
(a<b ⇒ wp(c=a,b>c)) ∧ a>b
=
(a<b ⇒ b>a) ∧ a>b =
a<b ∧ a>b =
a≠b
2
Oder:
Nachbedingung: a>b
wp(if a<b then {c=a; a=b; b=c}, a>b)
=
[a<b ∧wp({c=a; a=b; b=c},a>b)] ∨ [a≥b ∧ a>b] =
[a<b ∧wp({c=a; a=b},wp(b=c, a>b))] ∨ [a>b]
=
[a<b ∧wp({c=a; a=b},a>c)] ∨ [a>b]
=
[a<b ∧ wp({c=a},wp(a=b,a>c))] ∨ [a>b]
=
[a<b ∧ wp(c=a,b>c)] ∨ [a>b]
=
[a<b ∧ b>a] ∨ [a>b] =
(a<b ∧ a>b) =
a≠b
Aufgabe 4 Aufwandschätzung
(6 Punkte)
a) Matrix c ist Produkt von den Matricies a und b. Im Allgemeinfall ist Matrix a[n,k], Matrix
b[k,m], Matrix c[n,m]. Jedes Element der Matrix c bekommt man als Summe:
k
ci , j   ai ,l .bl , j
l 1
Bestimmen Sie die Anzahl der Schritte T(p) für die Berechnung der ganzen Matrix c. Wie wird p
definiert?
Geben Sie eine möglichst niedrige obere Schranke im O-Kalkül für die Funktion.
b) Ein Programm besteht aus 5 logisch nacheinderfolgenden Teilen, dessen Aufwand mit den
Funktionen ausgedrückt wird:
g1(n)=n+log2n
g2(n)=n2+n
g3(n)=2n
g4(n)= n.log2n
g5(n)=3n2.
Sortieren Sie die Teile dem Aufwand nach. Geben Sie eine möglichst niedrige obere Schranke für
das ganze Programm.
Musterlösung :
a) Die Berechnung hängt von den 3 Parametern n, m, k ab. Der Parameter p wird gleich dem
maximalen von den drei definiert.
Die Berechnung von einem Element ist: T(p)= 2.p
Die Berechnung der ganzen Matrix erfordert T(p)= 2.p3
Dann in O-Notation: 2.p3 = O(p3)
b) Sortierung:
g1(n) ≤ g4(n) ≤ g2(n) ≤ g5(n) ≤ g3(n)
Für das ganze Programm gilt:
g1(n) + g2(n) + g3(n) + g4(n) + g5(n)
Es ist zulässig, O-Notation auf die einzelne Programmteile zu definieren:
g1(n)=n+log2n = O(2n)
g2(n)=n2+n = O(n2)
g3(n)=2n
= O(2n)
g4(n)= n.log2n = O(n1.5)
g5(n)=3n2
= O(n2)
Dann: O(2n + n2 + 2n + n1.5 + n2) = O(2n)
Aufgabe 5 Graphen
(6 Punkte)
Es ist ein Graph mit Kantengewichten gegeben.
V
13
5
A
B
8
2
1
3
D
C
4
3
Berechnen Sie für den Knoten V die kürzesten Pfade zu allen anderen Knoten nach dem
Algorithmus von Dijkstra. Bei jedem Schritt werden der besuchte Knoten und die bis zu diesem
Moment bekannten Längen bestimmt. Füllen Sie die nachfolgende Tabelle.
Musterlösung:
Schritt Ausgewählter Bereits besuchte Pfadlänge zum Knoten im aktuellen Schritt
Knoten
Knoten
V
A
B
C
D
1
V
0
5
13
∞
∞
2
A
{V}
0
5
13
8
13
3
C
{V, A}
0
5
10
8
12
4
B
{V, A, C}
0
5
10
8
11
5
D
{V, A, C, B}
0
5
10
8
11
Aufgabe 6 Datenstrukturen, Implementierung
(12 Punkte)
Für Bearbeitung von Warteschlangen wird verketttete Liste benützt. Die Implementierung wird
einfacher als die in den Vorlesungen und Übungen erläuterte LinkedList gemacht, da die
notwendigen Grundoperationen sind:
- Erstellen einer neuen Schlange
- Einfügen eines neuen Elements nur am Anfang der Schlange
- Entfernen eines Elements nur am Ende der Schlange
- Überprüfen, ob die Schlange leer ist.
Schreiben Sie die Java-Programme für :
a. Die Klasse Entry mit Klassenvariablen element und next und mit einem Konstruktor mit
Parametern element und next
b. Die Klasse Schlange , Deklaration nur von header
c. ----- Der Konstruktor : leer
d. ----- Die Methode addAnfang(Object o), die ein Objekt o am Anfang einfügt
e. ----- Die Methode get(), die Endelement von der Schlange entfernt und zurückgibt.
f. ----- Die Methode isEmpty(), die die Überprüfung macht, ob die Schlange leer ist.
Musterlösung:
import java.util.*;
public class Schlange
{
// Aufgabe 6a
private static class Entry
{
Object element;
Entry next;
Entry (Object element, Entry next) {
this.element = element;
this.next = next ;
}
}
// Aufgabe 6b, c
private Entry header = new Entry(null, null);
public Schlange() {
}
// Aufgabe 6d
public boolean addAnfang(Object o)
{
Entry newEntry=new Entry(o, header.next);
header.next=newEntry;
return true;
}
4
//Aufgabe 6e
public Object get () {
Entry p1, p2;
Object o=null;
if (!isEmpty()) {
p1=header;
p2=p1.next;
if(p2.next==null) {
o=p2.element;
header.next=p2.next;
}else
{
for (; p2.next != null; ) {
p1=p1.next; p2=p2.next;
}
o=p2.element;
p1.next=p2.next;
}
}
return o;
}
// oder mit einem Entry
public Object get1 () {
Entry p;
Object o=null;
if (!isEmpty()) {
p=header;
if(p.next.next==null) {
o=p.next.element;
header.next=p.next.next;
}else
{
for (; p.next.next != null; ) {
p=p.next;
}
o=p.next.element;
p.next=p.next.next;
}
}
return o;
}
//Aufgabe 6f
public boolean isEmpty() {
return header.next==null;
}
}
5
Aufgabe 7 Objektorientierte Programmierung - UML
Auftrag
Empfangsdatum
istVorausbezahlt
anzahl: String
preis: Geld
*
(10 Punkte )
Kunde
1
name
adresse
Kreditwürdigkeit():String
ausführen()
abschließen()
1
Firmenkunde
Privatkunde
kreditkartennr
unternehmensname
kreditwürdigkeit
kreditlimit
erinnern()
forderungenImMonat(Integer)
Positionen
*
Verkäufer
Antragsteller
Auftragsposition
menge: Integer
preis: Geld
istGeliefert: Boolean
IMF
Uni Karlsruhe
*
0..1
*
1
Quelle:[FowSco-98]
Produkt
RPK
Uni Karlsruhe
Auf dem Bild oben ist ein UML Diagram dargestellt. Beantworten Sie die Fragen:
a. Nennen Sie die Art dieses UML Diagramms.
b. Was wird mit diesem Diagramm beschrieben?
c. Was stellt „Kunde“dar?
d. Nennen Sie die Attribute des “Auftrag“.
e. In welcher Beziehung stehen „Firmenkunde“ und „Privatkunde“ zu „Kunde“?
f. Womit ist die Assoziation zwischen Auftrag und Kunde beschrieben. Erläutern Sie den
Sinn dieser Beschreibung.
Musterlösung:
a. Das ist ein Klassendiagramm.
b. Das Digramm beschreibt die Assoziationen zwischen Produkt –
Auftragpositionen – Auftrag einerseits und Verkäufer – Firmenkunde –
Privatkunde – Kunde andererseits. Oben ist die Assotion Auftrag – Kunde.
Das Diagramm beschreibt die Auftragsbearbeitung.
c. “Kunde” ist ein Klassenname.
d. Die Attribute des “Auftrags” sind: Empfangsdatum, istVorausbezahlt, anzahl
(String?), preis (Geld).
e. “Privatkunde” und “Firmenkunde” vererben “Kunde”.
f. Die Assotion Auftrag – Kunde ist mit der Kardinalität *:n beschrieben.
Bedeutung: * - von einem Kunden können viele Aufträge ausgehen; 1 – ein
Auftrag stammt genau von einem Kunden.
6
Quelle:[FowSco -98]
: Auftragserfassungsfenster
1: bereiteVor ()
: Auftrag
5: erfordertNachbestellung
:= nachbestellungErforderlich ()
2: [für jede Auftragsposition]: bereiteVor ()
3: imLagerVorhanden := check()
4: [imLagerVorhanden ]:entferne()
SchraubePosition : Auftragsposition
7: [imLagerVorhanden ]: new
: Lieferartikel
IMF
Uni Karlsruhe
SchraubeImLager : Lagerartikel
6: [erfordert
Nachbestellung]: new
: Nachbestellartikel
RPK
Uni Karlsruhe
Auf dem Bild oben ist ein weiteres UML Diagram dargestellt. Beantworten Sie die
Fragen:
a. Nennen Sie die Art dieses UML Diagramms.
b. Was wird mit diesem Diagramm beschrieben?
c. Wie wird der zeitliche Verlauf der Verarbeitung der einzelnen Objekte dargestellt?
d. Unter welchen Bedingungen und was für Nachrichten werden dem Objekt
„SchraubeImLager“ gesendet?
Musterlösung:
a. Das ist ein Kollabarationsdiagramm.
b. Das Diagramm beschreibt die Verarbeitung eines Auftrags:
Das Auftragserfassungsfenster sendet eine Nachricht “bereiteVor” an einen
Auftrag.
Der Auftrag sendet dann “bereiteVor” an jede Auftragsposition des Auftrags.
Jede Auftragsposition prüft den angegebenen Lagerartikel.
c. Der zeitliche Verlauf wird mit dem Pfeil beschrieben.
d. Beim Prüfen der Auftragposition ”Schraube” ist festgestellt, dass die Menge
der Lagerartikel unter die Bestellgrenze gafallen ist. Dann wird die Nachricht
gesendet: “Nachbestellung erforderlich”.
7
Herunterladen