|
8 | 8 | Die Kombination von Parametertypen und Rückgabetyp bildet die Signatur einer Funktion. |
9 | 9 | Parameter sind Werte, die der Funktion übergeben werden, zum Beispiel das $x$ in $f(x)$. |
10 | 10 | Für eine Funktion \cppinline{my_func}, die $x^n$ berechnen soll, könnte eine Signatur so aussehen: |
11 | | - |
12 | | -\begin{center} |
13 | | - \cppinline{double my_func(double x, int n)} |
14 | | -\end{center} |
15 | | - |
16 | | -%Signatur Diagramm von Koebi? Ich kriege nichts schönes hin |
| 11 | +\[ |
| 12 | + \smashoperator{\mathop{\underbrace{\text{\cppinline{double}}}}_{\text{Rückgabetyp}}}\quad |
| 13 | + \smashoperator{\mathop{\overbrace{\text{\cppinline{my_func}}}}^{\text{Name}}} |
| 14 | + (\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Paramter 1}}},\ |
| 15 | + \smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Paramter 2}}}}) |
| 16 | +\] |
| 17 | +%sorry etwas hässlich |
17 | 18 |
|
18 | 19 | Diese Signatur besteht also aus einem Datentypen, der den Rückgabetypen der Funktion bestimmt, direkt gefolgt von dem Namen der Funktion, der beliebig gewählt werden kann. |
19 | 20 | Und dahinter in Klammern werden die einzelnen Paramter durch Komma getrennt angeben, wobei ein Paramter immer aus dem Datentyp des Paramters und einem beliebigen Namen für den Paramter besteht. |
|
57 | 58 |
|
58 | 59 | \inputcpp{funktion.cpp} |
59 | 60 |
|
60 | | -\textbf{Praxis:} |
| 61 | +\textbf{Praxis:}\footnote{In dieser Lektion gibt es ein paar mehr Aufgaben als in anderen Lektionen, lasst euch davon nicht entmutigen!} |
61 | 62 | \begin{enumerate} |
62 | 63 | \item Verändert das Programm in \texttt{funktion.cpp} so, dass es nicht die einzelnen Zahlen \texttt{x1}, \texttt{x2} und \texttt{x3}, sondern die Summe dieser ausgibt. |
63 | 64 | %Wirkt wie Kinderkram nicht zum Funktionskapitel, möchte aber nochmal den Unterschied zwischen Ausgabe und Rückgabe dadurch nochmal klarer machen |
64 | 65 | \item Kompiliert das angepasste Programm und lasst es im debugger Schritt für Schritt durchlaufen, setzt dafür wieder einen breakpoint für die \texttt{main}-Funktion. |
65 | 66 | Sobald der debugger euch anzeigt, als nächstes die Funktion ausführen zu wollen, \texttt{step} statt \texttt{next} aufrufen, sodass der debugger in die Funktion hineinspringt. |
66 | 67 | \item Schreibt eine Funktion die ein \texttt{double} entgegen nimmt und das Quadrat davon zurück gibt. |
| 68 | + (Hierbei sollt ihr keine Pakete wie \texttt{math.h} oder \texttt{cmath} benutzen.) |
67 | 69 | \end{enumerate} |
68 | 70 |
|
69 | 71 | \textbf{Spiel:} |
70 | 72 | \begin{enumerate} |
71 | 73 | \item Schreibt eine Funktion (nach der Funktion \texttt{collatz} und vor \texttt{main}), die einen \texttt{int} entgegen nimmt und die Anzahl der Schritte bestimmt bis die Folge bei der 1 angekommen ist und diese als \texttt{int} zurückgibt. |
72 | | - (Die Funktion sollte also die Signatur \cppinline{int schritte(int x)}.) |
73 | | - Benutzt dafür die bereits vorhandene Funktion \texttt{collatz}. |
74 | | - \item Schreibt euer Programm so um, dass es eine Zahl von der Nutzerin entgegen nimmt und die Anzahl der Schritte ausgibt, bis diese Zahl zu einer 1 wird. |
| 74 | + (Die Funktion sollte also die Signatur \cppinline{int schritte(int x)} haben.) |
| 75 | + Probiert die Funktion aus. |
| 76 | + \item Versucht jetzt zwei Zahlen von der Nutzerin entgegen zu nehmen und vergleicht mithilfe von der gerade geschriebenen Funktion, welche Zahl mehr Schritte bis zur 1 braucht. |
75 | 77 | \item Was passiert, wenn ihr in einer Funktion den \texttt{return}-Ausdruck vor dem Ende eurer Funktion benutzt? |
76 | 78 | \item Vertauscht in \texttt{funktion.cpp} die Funktion \texttt{collatz} mit der Funktion \texttt{main} (verschiebt also die gesamte Funktion \texttt{collatz} an das Ende der Datei). |
77 | 79 | Versucht, die Datei zu kompilieren. |
78 | 80 | Was ist die Fehlermeldung des Compilers? |
79 | 81 | \item Verschiebt die Funktion \texttt{collatz} \emph{in} die \texttt{main}-Funktion (also irgendwo nach der öffnenden geschweiften Klammern, aber vor die dazu gehörige schließende). |
80 | 82 | Versucht, die Datei zu kompilieren. Was ist die Fehlermeldung des Compilers? |
81 | 83 | \item Implementiert die Funktion, die $x^n$ umsetzt, ignoriert dabei zunächst negative Exponenten. \\ |
82 | | - (\emph{Tipp:} Die Signatur ist bereits oben gegeben, für den Funktionsrumpf könnten sich Schleifen eignen.) |
83 | | - \item Eure Funktion kann sich auch selbst aufrufen. Versucht damit eure Funktion auf negative Exponenten zu erweitern, indem ihr benutzt, dass gilt $x^{-n} = \frac{1.0}{x^n}$. |
| 84 | + (Wie in Praxis 3, sollt ihr auch hier keine vorgefertigten Pakete benutzen. \emph{Tipp:} Die Signatur ist bereits oben gegeben, für den Funktionsrumpf könnten sich Schleifen eignen.) |
| 85 | + \item Eure Funktion kann sich auch selbst aufrufen. Versucht damit eure Funktion auf negative Exponenten zu erweitern, indem ihr benutzt, dass gilt $x^{-n} = \Bigl(\frac{1.0}{x}\Bigr)^n$. |
84 | 86 | \item Schaut euch eure bisherigen Lösungen an. |
85 | 87 | Findet ihr noch häufiger Stellen, an denen ihr einzelne Teilprogramme in Funktionen auslagern könnt? |
86 | 88 | \end{enumerate} |
0 commit comments