Seite 4 von 4

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 16:52
von phil
hm kann sein das ichs falsch sehe aber:

ws07_A aufgabe 6 c

die for schleife wird dir so nichts bringen wenn du sie bei i=0 starten lässt.
im ersten durchlauf wird dann res= res*i also res=1*0 gerechnet.
danach ist res dann 0 und wird sich durch erhöhen von i auch nicht mehr ändern.
also entweder i=1 setzen oder aber das ganze als while schleife schreiben
habs so gemacht:

int fak(int n)
{int res=1;
while(n>=1)
{
res*=n;
n--;
}
return res;
}

kommt sich im endeffekt bei nem i=1 aufs gleiche raus ;)

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 17:04
von phil
ebenfalls in ws07_a
aufgabe 8 d
nach deiner if abfrage müsstest du noch
item->last = NULL
setzen da es ja an erster stelle ist.

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 18:26
von bob10
elly hat geschrieben:vielleicht wird in diesem falle der stack quasi zweckentfremdet und nicht mehr per push und pop angesprochen ,sondern per eindeutiger addressierung wie man es auf den folien sieht?
Das ist richtig. Die Adressierung passiert intern mit dem EBP und einem Offset, um auf lokale Variablen in einer Funktion zuzugreifen.

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 18:38
von sat1911
WS07_B aufgabe 4)
sicher dass das b in zeile 9 über das argument (zeile 6) "deklariert" wurde ?
ich wage es zeile 11 vorzuschlagen :)

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 20:45
von Manuelito
Hey,

Da ich keine Lust mehr habe, die Sachen neu einzuscannen, kommentier ich es hier kurz:

WS07_A Aufg. 6c
Das ist natürlich richtig, *= 0 beim ersten Schleifendurchlauf würde den Algorithmas relativ wirksam zerstören.

WS07_A Aufg. 8d
Da ich davon ausgegangen bin, dass die beiden Zeiger von item schon bei der Erstellung mit 0 initialisiert werden, habe ich das hier weggelassen/vergessen. Aber du hast Recht, sicherer ist es, man schreibt das noch da rein.

WS07_B Aufg. 4
Bin mir ziemlich sicher, dass der hier das b aus Zeile 6 nimmt.
Wenn du zum Beispiel folgende Funktion schreibst:
int a(int b) {
return b;}
wird wohl kein Compiler auf die Idee kommen, irgendwo anders nach einem b zu suchen, er wird das Übergebene wieder zurückgeben. Und nicht anders verstehe ich auch die Aufgabe. Außerdem ist in Zeile 11 keine Deklaration sondern nur die Definition. Deklariert wird die Funktion b() (die in keinerlei Zusammenhang zu der Variable b steht, sie teilen sich nur unglücklicherweise den Namen) in Zeile 2.
Anders sieht es in Zeile 22 aus, da in der Funktion c nirgendwo eine Variable b deklariert wird (und es auch keine globale Variable b gibt). Hier fehlen jedoch für mein Verständnis die Klammern () hinter dem b, damit der Compiler die Funktion b zu Rate zieht und nicht irgendwo nach einer Variablen b sucht.

Edit: Ich habe gerade mal den Code so abgetippt und mit ein bisschen Leben gefüllt. Unter anderem habe ich in Zeile 22 "i = b;" geschrieben (also ohne Klammern hinter dem b). Da der Compiler keine Fehlermeldung gibt, er würde b nicht finden, scheint er sich doch der Funktion zu bedienen. Weiter habe ich das aber jetzt nicht ausgebaut, ich habe also nicht überprüft, ob wirklich alle Werte so benutzt werden, wie ich es vorgeschlagen hab, dazu fehlt mir gerade die Motivation.

Re: Klausurlösungen sammeln

Verfasst: Do 11. Mär 2010, 22:52
von sat1911
ok danke für die erklärung und der dahintersteckenden arbeit ^^

Re: Klausurlösungen sammeln

Verfasst: Di 16. Mär 2010, 20:01
von beafraid88
besten dank D
auch wenns "nur" inoffizielle lösungen sind scheints zum größten teil richtig zu sein ^