20.07.2013 Aufrufe

Einführung in die Programmierung - Hochschule Niederrhein

Einführung in die Programmierung - Hochschule Niederrhein

Einführung in die Programmierung - Hochschule Niederrhein

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Speicherverwaltung<br />

Für <strong>die</strong> lokalen Variablen und Argumente e<strong>in</strong>er Funktion wird erst<br />

beim Aufruf der Funktion Speicherplatz reserviert.<br />

Nach Beenden der Funktion wird der Speicherplatz wieder<br />

freigegeben.<br />

ma<strong>in</strong><br />

SP<br />

fkt1<br />

ma<strong>in</strong><br />

SP<br />

fkt2<br />

fkt1<br />

ma<strong>in</strong><br />

SP<br />

fkt1<br />

ma<strong>in</strong><br />

E<strong>in</strong> CPU-Register (SP: Stack Po<strong>in</strong>ter) enthält <strong>die</strong> Adresse des<br />

nächsten freien Speicherplatzes.<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Speicherverwaltung 9 / 41<br />

Speicherverwaltung<br />

Vorsicht: Zeiger auf lokale Variablen als Rückgabewert e<strong>in</strong>er<br />

Funktion liefern ke<strong>in</strong>en def<strong>in</strong>ierten Wert!<br />

char* <strong>in</strong>tToStr<strong>in</strong>g(<strong>in</strong>t a) {<br />

char s[10];<br />

<strong>in</strong>t i, t;<br />

}<br />

for (t = 1; t < a; t *= 10)<br />

;<br />

for (t /= 10, i = 0; t > 0; t/= 10, i++)<br />

s[i] = (a / t) % 10 + ’0’;<br />

s[i] = ’\0’;<br />

return s;<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Speicherverwaltung 11 / 41<br />

Übersicht<br />

<strong>die</strong> ma<strong>in</strong>-Funktion<br />

Speicherverwaltung<br />

Rekursive Funktionen<br />

Gültigkeitsbereiche<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Rekursive Funktionen 13 / 41<br />

Fakultät – C-Code<br />

#<strong>in</strong>clude <br />

<strong>in</strong>t fact(<strong>in</strong>t n) {<br />

if (n max)<br />

max = a[i];<br />

}<br />

res[0] = max;<br />

res[1] = m<strong>in</strong>;<br />

return res;<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Speicherverwaltung 12 / 41<br />

Rekursive Funktionen<br />

Rekursion <strong>in</strong> der Mathematik:<br />

B<strong>in</strong>omialkoeffizienten:<br />

<br />

n n − 1 n − 1<br />

= + mit<br />

k k − 1 k<br />

Fibonacci-Zahlen:<br />

<br />

n<br />

= 1 und<br />

n<br />

Fn = Fn−1 + Fn−2 mit F0 = 0 und F1 = 1<br />

<br />

n<br />

= 1<br />

0<br />

Determ<strong>in</strong>ante: Die Adjunkte Aik ist <strong>die</strong> Determ<strong>in</strong>ante<br />

(n − 1)ter Ordnung, <strong>die</strong> durch Streichen der i-ten Zeile und<br />

k-ten Spalte, multipliziert mit (−1) i+k entsteht.<br />

Entwickeln nach der i-ten Zeile:<br />

n<br />

D(aij) =<br />

k=1<br />

aikAik<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Rekursive Funktionen 14 / 41<br />

Fakultät – Programmablauf<br />

Aufrufe Rückgabe<br />

fact(4)<br />

= 4 * fact(3)<br />

fact(3)<br />

= 3 * fact(2)<br />

= 3 * 2 = 6<br />

fact(2)<br />

= 2 * fact(1) = 2 * 1 = 2<br />

fact(1) = 1<br />

= 4 * 6 = 24<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> <strong>Programmierung</strong> Rekursive Funktionen 16 / 41

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!