Skip to content

Commit 3ade605

Browse files
f-elserjenuk
andauthored
Funktionen (#109)
* Beispiel für Funktion mit Aufruf * Kapitel zu Funktionen mit Beispiel versehen * Apply suggestions from code review Co-authored-by: Jonas Müller <jonasjmueller@googlemail.com> Co-authored-by: Felix <felix@elsermail.com> Co-authored-by: Jonas Müller <jonasjmueller@googlemail.com>
1 parent 8a71c91 commit 3ade605

2 files changed

Lines changed: 45 additions & 14 deletions

File tree

basics/funktionen.tex

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
\lesson{Funktionen}
22

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.
67

78
Eine Funktion in \Cpp besteht aus zwei Teilen: der \emph{Signatur} und dem \emph{Funktionsrumpf}.
89
Die Kombination von Parametertypen und Rückgabetyp bildet die Signatur einer Funktion.
@@ -16,27 +17,41 @@
1617
\]
1718
%sorry etwas hässlich
1819

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+
2126
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}.
2227
Damit können dann Werte an die Funktion in der Form \cppinline{my_func(1.41, 2)} übergeben werden.
2328

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.
2546
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:
2748

2849
\begin{center}
2950
\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}
3051
\end{center}
3152

3253

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+
4055

4156
Funktionen werden beispielsweise benötigt, wenn bestimmte Programmteile häufiger mit verschiedenen Parametern ausgeführt werden sollen.
4257
Die Collatz-Vermutung\footnote{\url{https://de.wikipedia.org/wiki/Collatz-Vermutung}} besagt für die Folge:

files/beispielfunktion.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
double my_func(double x, int n) {
2+
int ergebnis = x;
3+
int i = 1;
4+
while (i <= n) {
5+
ergebnis = ergebnis * x ;
6+
i = i + 1;
7+
}
8+
return ergebnis;
9+
}
10+
11+
int main() {
12+
double ergebnis1 = my_func(3.142, 4);
13+
double ergebnis2 = my_func(ergebnis1, 2);
14+
double ergebnis3 = my_func(5.0 + my_func(3.0, 2), 3);
15+
return 0;
16+
}

0 commit comments

Comments
 (0)