|
1 | 1 | \lesson{Funktionen} |
2 | 2 |
|
3 | | -Aus der Mathematik kennt ihr bereits Funktionen, wie zum Beispiel $f(x) = 4x^3 - 8x^2 + 16x - 12$. |
4 | | -Eine wichtige Idee dahinter ist es einfach $f(3)$ zu schreiben, wenn man eigentlich $4 \cdot 3^3 - 8 \cdot 3^2 + 16 \cdot 3 - 12$ meint. |
5 | | -Da dies häufig vorteilhaft ist, wurde diese Funktionalität in die meisten Programmiersprachen übernommen. |
| 3 | +Aus der Mathematik kennt ihr bereits Funktionen, wie zum Beispiel $f(x) = x^2$. |
| 4 | +Eine wichtige Idee dahinter ist es, einfach $f(2.5)$ zu schreiben, wenn man eigentlich $2.5^2$ meint. |
| 5 | +In diesem simplen Beispiel bilden wir einfach eine reelle Zahl ab und erhalten als Ergebnis wieder eine reelle Zahl. |
| 6 | +So ähnlich findet sich das Konzept von Funktionen auch in Programmiersprachen wie \Cpp wieder. |
6 | 7 |
|
7 | 8 | Eine Funktion in \Cpp besteht aus zwei Teilen: der \emph{Signatur} und dem \emph{Funktionsrumpf}. |
8 | 9 | Die Kombination von Parametertypen und Rückgabetyp bildet die Signatur einer Funktion. |
|
16 | 17 | \] |
17 | 18 | %sorry etwas hässlich |
18 | 19 |
|
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. |
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. |
| 20 | +\begin{itemize} |
| 21 | + \item Rückgabetyp: Bestimmt welchen Datentyp die Rückgabe der Funktion hat |
| 22 | + \item Name: Ein frei wählbarer Name für die Funktion |
| 23 | + \item Parameter: Besteht aus dem Datentype des Parameters und dem beliebig wählbaren Parameternamen. \\Mehrere Parameter können angegeben werden, indem man diese durch Kommata voneinander trennt. |
| 24 | +\end{itemize} |
| 25 | + |
21 | 26 | In diesem Fall ist also \texttt{double} der Rückgabewert, \cppinline{my_func} der Name, \cppinline{x} ein Parameter mit dem Typ \texttt{double} und \cppinline{n} ein Paramter mit dem Typ \texttt{int}. |
22 | 27 | Damit können dann Werte an die Funktion in der Form \cppinline{my_func(1.41, 2)} übergeben werden. |
23 | 28 |
|
24 | | -An dieser Stelle ist der Unterschied zwischen Rückgabe und Ausgabe wichtig: Eine Ausgabe (gekennzeichnet durch \cppinline{std::cout}) gibt Informationen auf dem Bildschirm für die Nutzerin aus, eine Rückgabe (gekennzeichnet durch \texttt{return}) gibt hingegen ein bestimmtes Ergebnis an einen anderen Teil des Programmes zurück, damit dieser dort in einer Variable gespeichert oder direkt weiter verarbeitet werden kann. |
| 29 | +An dieser Stelle ist der Unterschied zwischen Rückgabe und Ausgabe wichtig: Eine Ausgabe (gekennzeichnet durch \cppinline{std::cout}) gibt Informationen auf dem Bildschirm für die Nutzerin aus, eine Rückgabe (gekennzeichnet durch \texttt{return}) gibt hingegen ein bestimmtes Ergebnis an einen anderen Teil des Programms zurück, damit dieser dort in einer Variable gespeichert oder direkt weiter verarbeitet werden kann. |
| 30 | + |
| 31 | +Der Funktionsrumpf beinhaltet den Code, der beim Funktionsaufruf tatsächlich ausgeführt wird. |
| 32 | +Dieser wird wie in einer Schleife von \mintinline{c++}|{| und \mintinline{c++}|}| umschlossen. |
| 33 | +Innerhalb dieser Klammern kann dann beliebiger Code ausgeführt werden, wie auch in der \texttt{main}-Funktion. |
| 34 | +Dabei kann auf die Parameter einfach mit dem in der Signatur definierten Namen zugegriffen werden. |
| 35 | +Also in unserem Beispiel mit \cppinline{x} und \cppinline{n}. |
| 36 | +Vor dem Ende des Funktionsrumpfes muss eine Rückgabe mit \texttt{return} ausgeführt werden.\\ |
| 37 | +\newpage |
| 38 | +Eine Funktion, die $ x^n $ berechnet und ein paar mal aufgerufen wird, könnte dann wie folgt aussehen: |
| 39 | + |
| 40 | +\inputcpp{beispielfunktion.cpp} |
| 41 | + |
| 42 | +Unsere Funktion wird in diesem Beispiel 4-mal aufgerufen. |
| 43 | +Das erste mal werden konkrete Werte als Parameter übergeben.\\ |
| 44 | +Beim zweiten Aufruf übergeben wir eine Variable, anstelle eines konkreten Werts.\\ |
| 45 | +Und dann? In Zeile 14 rufen wir \cppinline{my_func} mit dem Ergebnis eines weiteren Funktionsaufrufs auf, ohne dieses zuerst in einer Variablen zwischenzuspeichern. |
25 | 46 | Dabei kann man sich vorstellen, dass der Funktionsaufruf nach dem die Funktion ausgeführt wurde durch den Rückgabewert ersetzt wird. |
26 | | -Dies könnte für die Funktion \cppinline{my_func} folendermaßen aussehen: |
| 47 | +Dies könnte für die Funktion \cppinline{my_func} folgendermaßen aussehen: |
27 | 48 |
|
28 | 49 | \begin{center} |
29 | 50 | \cppinline{f(5.0 + f(3.0, 2), 3)} $\mapsto$ \cppinline{f(5.0 + 9.0, 3)} $\mapsto$ \cppinline{f(14.0, 3)} $\mapsto$ \cppinline{2744} |
30 | 51 | \end{center} |
31 | 52 |
|
32 | 53 |
|
33 | | -Der Funktionsrumpf beinhaltet den Code, der beim Funktionsaufruf tatsächlich ausgeführt wird. |
34 | | -Dieser wird wie in einer Schleife von \mintinline{c++}|{| und \mintinline{c++}|}| umschlossen. |
35 | | -Innerhalb dieser Klammern kann dann beliebiger Code ausgeführt werden, wie auch in der \texttt{main}-Funktion. |
36 | | -Dabei kann auf die Parameter einfach mit dem in der Signatur definierten Namen zugegriffen werden. |
37 | | -Also in unserem Beispiel mit \cppinline{x} und \cppinline{n}. |
38 | | -Vor dem Ende des Funktionsrumpfes muss eine Rückgabe mit \texttt{return} ausgeführt werden. |
39 | | -Das kann zum Beispiel so \texttt{return x;} oder so \texttt{return 5;} aussehen. |
| 54 | + |
40 | 55 |
|
41 | 56 | Funktionen werden beispielsweise benötigt, wenn bestimmte Programmteile häufiger mit verschiedenen Parametern ausgeführt werden sollen. |
42 | 57 | Die Collatz-Vermutung\footnote{\url{https://de.wikipedia.org/wiki/Collatz-Vermutung}} besagt für die Folge: |
|
0 commit comments