Hilfe zur Klausuraufgabe Klausur SS 2014 (Sep 2014)

Ort
Rhein-Main-Gebiet
Hochschulabschluss
Bachelor of Science
2. Hochschulabschluss
Master of Science
Studiengang
M.Sc. Wirtschaftswissenschaft
ECTS Credit Points
60 von 120
Wie immer alle Angaben ohne Gewähr.

Aufgabe 1:
F (KE1, S. 60), R (KE1, S. 60), R (KE1 S. 9), F (?), F (KE1, S. 15)
F (KE1, S. 16), R (KE1, S. 62), R (KE1, S. 6), F (KE1, S. 148), F (KE1 S. 31)

Aufgabe 2a):
Code:
PROCEDURE init (VARIABLE anrufQueue:CALLQUEUE; VARIABLE versArt:VERSICHERUNGSART);
BEGIN
   anrufQueue[versArt].first:=NIL;
   anrufQueue[versArt].last:=NIL;
   anrufQueue[versArt].anzElem:=0;
END init;

Aufgabe 2b):
Versucht einen neues Element in die Schlange einzufügen, Rückgabe, ob erfolgreich
Prüfung, ob neues Element in die Schlange passt
Neues Element im Speicher anlegen
Inhalt in neuen Eintrag einfügen
Schlange vorher leer
Bisher letztes Element zeigt jetzt auf neues Element
Neues Element ist jetzt letztes Element der Schlange

Aufgabe 2c):
anz:INTEGER;
berat.beratungsart
anrufQueue[lauf].anzElem (anzElem fehlt)
anrufQueue[lauf].anzElem (lauf statt art)
ENDFOR
anrufQueue[art].first.next;

Aufgabe 2d):
FIFO: Entnahme nur am Schlangenanfang, Einfügen nur am Schlangenende (oder umgekehrt)
LIFO: Entnahme und Einfügen nur an einem Schlangenende

Aufgabe 3a):
R R F R R R R F F F F R

Aufgabe 3b):
F (% geht nur bei int), R, R, R, F (Wahrheitswert struct nicht zu ermitteln), R

Aufgabe 3c):
z = 1 Aufrufe: f(4,0), f(5,1), f(6,2), f(7,3)

Aufgabe 3d): KE3 S. 73f.
 
Aufg 2c)

anrufQueue[lauf].anzElem (lauf statt art)

@Kiomi
Wieso ist "art" hier falsch, es wurde doch zuvor "art := lauf" gesetzt?

Ich habe als Fehler noch:
DATA --> VARIABLE fehlt (?)
IF lauf IN berat.beratungsart --> IN? Müsste das nicht "=" sein?
nach IF (anz>=0) THEN fehlt NEW(anrufZgr)
(sind aber insgesamt 7 geworden wenn man "= berat.beratungsart" als einen Fehler zählt)
 
Wieso ist "art" hier falsch, es wurde doch zuvor "art := lauf" gesetzt?
Die Schleife läuft über lauf, daher muss m.E. nach anrufQueue[lauf] geprüft werden. art wurde initial auf TypL gesetzt, so dass die IF-Bedingung nur bei art = TypL erfüllt werden würde. art:=lauf wird gesetzt, wenn herausgefunden wurde, welche art von anrufQueue übergeben wurde,
DATA --> VARIABLE fehlt (?)
So ganz habe ich das System noch nicht durchschaut, wann VARIABLE benutzt wird und wann nicht. Auch die ";" werden für mich nich logisch gesetzt.
IF lauf IN berat.beratungsart --> IN? Müsste das nicht "=" sein?
IN kann mit IF verwendet werden, s. KE1 S. 45)
nach IF (anz>=0) THEN fehlt NEW(anrufZgr)
Der Auftrag wurde schon angelegt. Er muss nur zugewiesen werden, daher kein NEW erforderlich.
 
Aufg 3b) letzter Punkt - müsste es nicht F sein (p2 ist Variable von struct p und kein Pointer)?
Meiner Meinung nach sollte das passen. p2 wird als Struktuerelement des Typs P deklariert und P ist als Strukturtyp p definiert (s. typedef).
 
Die Schleife läuft über lauf, daher muss m.E. nach anrufQueue[lauf] geprüft werden. art wurde initial auf TypL gesetzt, so dass die IF-Bedingung nur bei art = TypL erfüllt werden würde. art:=lauf wird gesetzt, wenn herausgefunden wurde, welche art von anrufQueue übergeben wurde,

Kann sein, dass ich mich täusche, aber ich denke, art wird zu Beginn zwar := TypL gesetzt, aber nur zwecks Initialisierung. In der Schleife werden die lauf Werte mit dem in der Parameterliste übergebenen Wert verglichen und der Treffer für art gesetzt. Die Schleife läuft durch und am Ende hat die Variable lauf immer den Wert TypL,

Mit VARIABLE blicke ich auch nicht ganz durch, denke es geht darum, dass ohne die Kennung als CONST definiert wird bzw. nur einmalig ein Wert zugewiesen wird.

Mit NEW(...) und IN hast du Recht!
 
Zuletzt bearbeitet:
Kann sein, dass ich mich täusche, aber ich denke, art wird zu Beginn zwar := TypL gesetzt, aber nur zwecks Initialisierung. In der Schleife werden die lauf Werte mit dem in der Parameterliste übergebenen Wert verglichen und der Treffer für art gesetzt. Die Schleife läuft durch und am Ende hat die Variable lauf immer den Wert TypL,
Genau und deswegen hat art den Wert TypL. Wenn dann die IF-Bedingung erfüllt ist, wird immer die Anzahl von TypL ausgelesen, egal welchen Wert lauf hat, weil art erst in der nachfolgenden Anweisung auf lauf gesetzt wird. Deswegen muss m.E. anzQueue[lauf].anzElem ausgelesen werden.

p1 wird als P Typ deklariert und ist somit ein Zeiger -> passt. p2 ist aber nur als struct (klein) p deklariert und ist kein Zeiger.
In KE1 auf S. 81 gibt es einen Beispielcode. Da wird ein Zeiger *pgeb_tag auf den Strukturtyp datum deklariert. Des Weiteren wird eine Variable geb_tag_2 des Strukturyps datum deklariert. Später wird geb_tag_2 = *pgeb_tag als gültige Zuweisung vorgestellt. Daher hatte ich meine Beurteilung R geschlossen.
 
"lauf"!!! Habs endlich kapiert.

Das *pgeb_tag Bsp. liefert keine Anweisung wie im Klausurbeispiel - die Variable geb_tag_2 nimmt den Zgr-Wert von *geb_tag auf, das ist richtig. Geb_tag_2 ist aber kein Zeiger und wird auch nicht als solcher verwendet (kein (*geb_tag_2 Statement)). p2 in der Klausur ist analog und kann aus meiner Sicht nicht als (*p2).... genutzt werden.
 
Das *pgeb_tag Bsp. liefert keine Anweisung wie im Klausurbeispiel - die Variable geb_tag_2 nimmt den Zgr-Wert von *geb_tag auf, das ist richtig. Geb_tag_2 ist aber kein Zeiger und wird auch nicht als solcher verwendet (kein (*geb_tag_2 Statement)). p2 in der Klausur ist analog und kann aus meiner Sicht nicht als (*p2).... genutzt werden.
Diese Zeiger-Geschichten treiben mich noch in den Wahnsinn :paperbag:
Mit *p1 wird doch auf den Inhalt eines Strukturelements p zugegriffen. Da p2 ein Struktruelement ist, kann doch der Inhalt, auf den p1 zeigt in p2 zugewiesen werden. Ich bleibe bei R.
 
Das *pgeb_tag Bsp. liefert keine Anweisung wie im Klausurbeispiel - die Variable geb_tag_2 nimmt den Zgr-Wert von *geb_tag auf, das ist richtig. Geb_tag_2 ist aber kein Zeiger und wird auch nicht als solcher verwendet (kein (*geb_tag_2 Statement)). p2 in der Klausur ist analog und kann aus meiner Sicht nicht als (*p2).... genutzt werden.
Diese Zeiger-Geschichten treiben mich noch in den Wahnsinn :paperbag:
Mit *p1 wird doch auf den Inhalt eines Strukturelements p zugegriffen. Da p2 ein Struktruelement ist, kann doch der Inhalt, auf den p1 zeigt in p2 zugewiesen werden. Ich bleibe bei R.
 
:ohyeah:
@Kiomi
Alles klar jetzt - wir reden aneinander vorbei!!!
Du beziehst deine Argumentation auf das 4. Statement: p2 = *p1 --> das ist richtig;
ich rede vom letzten 6. Statement: (*p2).a ist F, da p2 keine Zeigervariable ist p2.a wäre OK.
 
Ah, jetzt kann ich Dir folgen.
 
ich wollte mich mal ganz unqualifiziert zur Lösung von 2c äußern :paperbag:

1. Fehler: anz : VERSICHERUNGSART;
1. Korrektur: anz : INTEGER;
2. Fehler: IF lauf IN berat.kompetenz AND anrufQueue[lauf] > anz THEN
2. Korrektur: IF lauf IN berat.beratungsart AND anrufQueue[lauf].anzElem > anz THEN
3. Fehler: anz := anrufQueue[art].anzElem;
3. Korrektur: anz := anrufQueue[lauf].anzElem;
4. Fehler: ENDIF
4. Korrektur: ENDFOR;
5. Fehler: IF(anz >= 0) THEN
5. Korrektur: IF(anz > 0) THEN
6. Fehler: berat.aktAnruf := anrufZgr.anrufID;
6. Korrektur: berat.aktAnruf := anrufzgr.anrufID;
7. Fehler: DISPOSE(anrufZgr);
7. Korrektur: DISPOSE(anrufzgr);
 
Laut Klausurbogen werden aber nur 6 Fehler gesucht :confused:
 
Zurück
Oben