Hilfe zur Klausuraufgabe Klausur SS 2011 (Sep 2011)

Ort
Rhein-Main-Gebiet
Hochschulabschluss
Bachelor of Science
2. Hochschulabschluss
Master of Science
Studiengang
M.Sc. Wirtschaftswissenschaft
ECTS Credit Points
60 von 120
Hier meine Ergebnisse ohne Gewähr.

Aufgabe 1:
R (KE1, S. 11f.), R (KE1, S. 9), F (KE1, S. 11), F (KE1, S. 21), R (KE1, S. 23f.)
F (KE1, S. 28), F (KE1, S. 31), R (KE1, S. 67), F (KE1, S. 79), R (KE2, S. 6)

Aufgabe 2a):
ok:BOOLEAN;
plast|.pn:=curr;
pfirst:=curr;
RETURN status;

Aufgabe 2b):
FUNCTION(...r:INTEGER)
nvorhd:=nvorhd+1;
den Rest suche ich noch...

Aufgabe 3a): ja, ja, nein, nein, nein, nein

Aufgabe 3b) :
(a <= 0) || (a >= 9)
a * (++b)
(d + (e * z)) <= c
((a ^ b) && ((c & d) ^ e)) || z
a = (z += (d += e))
a += (b ? c : z)
((!a) % b) != (c / z)

Aufgabe 3c):
c = crest;
z[i ] = crest / a[i ];
nc += z[i ];
if ( crest != 0)
printf("....", a[i ], z[i ]);

Aufgabe 3d): a1 = 5, a2 = 4, a3 = 3, c = 2, Bedingung: c ist Vielfaches eines der Münzwerte a
 
Danke für deine Lösung. Ohne dich würde ich hier ziemlich im dunkeln tappen.

Bei 1 c) (Festlegung der Sprache zum Ende des Entwurfs) hätte ich den von dir angegebenen Abschnitt auf S. 11 so ausgelegt, dass man hier "richtig" ankreuzen müsste. Kann mich aber auch irren...

Bei 2 a) habe ich:
FUNCTION einfuegeElement( VARIABLE pfirst APTR; plast: APTR; arec: ADAT) : INTEGER;
plast|.pn:=curr;
pfirst:=curr;
RETURN status;

Begründung: in der ersten Zeile fehlt nach pfirst ein Doppelpunkt. In der Aufgabenstellung wird ja eigentlich nach logischen Fehlern gefragt, aber ich würde diesen syntaktischen Fehler einfach mal mit dazu zählen... Die Zeile "ok : BOOLEAN;" sollte doch eigentlich in Ordnung sein, oder?

Bei 2 b) habe ich leider auch nicht mehr gefunden als du.

Bei 3a) habe ich: ja, ja, nein, ja, nein, nein
Begründung: War auch überrascht, aber die Zeile wurde bei mir ohne Fehler kompiliert und die Werte korrekt ausgegeben.

Bei 3b) habe ich alles so wie du, lediglich "a += b ? c : z" hätte ich zu zu "if(b) a +=c; else a += z;" umgeformt, aber bei solchen Aufgabenstellungen hört es bei mir sowieso auf... wer Ausdrücke wie "a ^ b && c & d ^ e || z" allen Ernstes in einem tatsächlichen Programm schreibt, gehört meiner Meinung nach erschossen ;)

Bei 3c) Habe ich mir wieder die Mühe gemacht und das Programm abgetippt und so lange verändert, bis alles richtig funktioniert hat. Wie ich das allerdings in der Klausur ohne Rechner und unter Zeitdruck schaffen soll, ist mir leider noch völlig unklar...
Fehler 1: "printf("\nGeldbetrag (>0, ganzzahlig) c = "), scanf("%u", &c);"
Verbesserung: "printf("\nGeldbetrag (>0, ganzzahlig) c = "); scanf("%u", &crest);"
Anmerkung: Semikolon statt Komma und crest statt c. Dann passt das auch weiter unten mit "c = crest". Dadurch finde ich aber insgesamt nur 5 Fehler...

Fehler 2: "for (i = 1; i < n; i++)"
Verbesserung: "for (i = n; i > 0; i--)"
Anmerkung: stand in der Aufgabenstellung, dass die Münzen von groß nach klein abgeglichen werden sollen

Fehler 3: "z[i-1] = crest / a[i-1];"
Verbesserung: "z = crest / a;"

Fehler 4: "nc += z[i - 1];"
Verbesserung: "nc += z;"

Fehler 5: "if(crest == 0)"
Verbesserung: "if(crest != 0)"

Tjoa, vielleicht bringt es ja jemandem etwas.
 
Danke für deine Lösung. Ohne dich würde ich hier ziemlich im dunkeln tappen.
Gern geschehen. Ich bin bei vielen Fragen auch unsicher und freue mich über Diskussionen :-)
Bei 1 c) (Festlegung der Sprache zum Ende des Entwurfs) hätte ich den von dir angegebenen Abschnitt auf S. 11 so ausgelegt, dass man hier "richtig" ankreuzen müsste. Kann mich aber auch irren...
Wenn ich das jetzt noch mal so lese, ja, R sollte wohl eher passen :paperbag:
in der ersten Zeile fehlt nach pfirst ein Doppelpunkt.
Oh, das hatte ich übersehen. Guter Hinweis. Ich hatte das ok: BOOLEAN genannt, weil diese Variable deklariert aber nicht benutzt wird.
Bei 3a) habe ich: ja, ja, nein, ja, nein, nein
Ich hatte deswegen nein, weil b = a +0.91 eine Anweisung aber keine Vereinbarung ist (s. KE1, S. 10).
Wie ich das allerdings in der Klausur ohne Rechner und unter Zeitdruck schaffen soll, ist mir leider noch völlig unklar...
Dito, wie beruhigend :thumbsup:
Für mich ist c der Geldbetrag und daher habe ich die Zuweisung weiter unten als Fehler gewertet. Vermutlich geht beides. Der sechste Fehler ist für mich das vorletzte printf. Vielleicht komme ich beim nächsten Durchlauf ja auf andere Ideen :-D
 
Ich hatte deswegen nein, weil b = a +0.91 eine Anweisung aber keine Vereinbarung ist (s. KE1, S. 10).
Uff, dir fallen ja Sachen auf... :thumbsup: Stimmt, wenn man es genau nimmt stehen da eine Vereinbarung und eine Anweisung. Ich hatte gedacht, der Lehrstuhl zielt mit der Aufgabe darauf ab, dass a quasi "inline" mit einer anderen Variablen definiert wird und dabei selbst wieder verwendet wird (klingt etwas komisch, aber ich hoffe du weißt, worauf ich hinaus will^^)
 
Aufgabe 2b):
FUNCTION(...r:INTEGER)
nvorhd:=nvorhd+1;
den Rest suche ich noch...
einfuegeElement gibt ja eigentlich einen INTEGER zurück, d.h. das wäre eine falsche Anweisung. Aber ich sehe keinen INTEGER, der damit gefüllt werden könnte. Müsste dann einer deklariert werden?
 
Müsste dann einer deklariert werden?

Du hast Recht damit, dass der Rückgabewert von einfuegeElement nicht genutzt wird. Es gibt Programmiersprachen die das Ignorieren von Rückgabewerten erlauben, jedoch bin ich mir nicht sicher wie sich da unser großartiger Pseudocode verhält... Ich denke, wenn dies einen Fehler darstellen soll, hätte man von Seiten des Lehrstuhls evtl bei den VARIABLE Definitionen eine zusätzliche Integer Variable (als Hinweis) bereitstellen können. Bei den bisherigen Alt-Klausuren hatte ich glaub ich noch nie den Fall, dass eine Variablendefinition gefehlt hat. Kann mich aber auch täuschen...

Im Funktionskopf ist noch ein Fehler und zwar wird pfirst vom Typ ADAT als Parameter angegeben, obwohl pfirst vom Typ APTR sein müsste.

Hast du noch was finden können?
 
Hast du noch was finden können?
IF nvorhd <= 2 OR nvorhd+r > 365 THEN --> ich hätte nvorhd < 2 geprüft, da laut Aufgabentext n>=2 zulässig ist
nprog:=0; --> müsste bei 1 fangen, wenn ich das richtig verstanden habe

Das reicht aber immer noch nicht für 6 Fehler :-(
 
Hey ihr 2, bei mir kommt für 2b folgendes raus:
1. FUNCTION(...pfirst: APTR,...)
2. ad: ADAT
3. curr := curr|.pn
4. nvorhd := nvorhd + 1
5. IF nvorhd < 2
6. nprog := 1
 
Zurück
Oben