|
11 | 11 | \[ |
12 | 12 | \smashoperator{\mathop{\underbrace{\text{\cppinline{double}}}}_{\text{Rückgabetyp}}}\quad |
13 | 13 | \smashoperator{\mathop{\overbrace{\text{\cppinline{my_func}}}}^{\text{Name}}} |
14 | | - (\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Paramter 1}}},\ |
| 14 | + (\smashoperator{\mathop{\underbrace{\text{\cppinline{double x}}}}_{\text{Paramter 1}}},\ |
15 | 15 | \smashoperator{\mathop{\overbrace{\text{\cppinline{int n}}}^{\text{Paramter 2}}}}) |
16 | 16 | \] |
17 | 17 | %sorry etwas hässlich |
|
43 | 43 | \[ |
44 | 44 | x_n = |
45 | 45 | \begin{cases} |
46 | | - \frac{x_{n-1}}{2} & x_{n-1} \text{ ist gerade} \\ |
| 46 | + \frac{x_{n-1}}{2} & x_{n-1} \text{ ist gerade} \\ |
47 | 47 | 3 \cdot x_{n-1} + 1 & x_{n-1} \text{ ist ungerade} |
48 | 48 | \end{cases} |
49 | 49 | \] |
50 | 50 | dass jeder Startwert $x_1$ aus den natürlichen Zahlen nach endlich vielen Schritten bei der $1$ angelangt. |
51 | 51 | Zum Beispiel für den Startwert $x_1 = 42$: |
52 | 52 |
|
53 | 53 | \[ |
54 | | - 42 \mapsto 21 \mapsto 64 \mapsto 32 \mapsto 16 \mapsto 8 \mapsto 4 \mapsto 2 \mapsto 1 \mapsto 4 \mapsto 2 \mapsto 1 \mapsto \ldots |
| 54 | + 42 \mapsto 21 \mapsto 64 \mapsto 32 \mapsto 16 \mapsto 8 \mapsto 4 \mapsto 2 \mapsto 1 \mapsto 4 \mapsto 2 \mapsto 1 \mapsto \ldots |
55 | 55 | \] |
56 | 56 |
|
57 | 57 | Wenn nun die Frage aufkommt was die nächsten Folgenglieder von verschiedenen Zahlen sind, wäre ein möglicher Lösungsweg eine Funktion zu schreiben, die der Nutzerin die nächste Zahl in dieser Folge zurückgibt. |
58 | 58 |
|
59 | 59 | \inputcpp{funktion.cpp} |
60 | 60 |
|
61 | | -\textbf{Praxis:}\footnote{In dieser Lektion gibt es ein paar mehr Aufgaben als in anderen Lektionen, lasst euch davon nicht entmutigen!} |
62 | | -\begin{enumerate} |
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. |
64 | | -%Wirkt wie Kinderkram nicht zum Funktionskapitel, möchte aber nochmal den Unterschied zwischen Ausgabe und Rückgabe dadurch nochmal klarer machen |
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. |
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. |
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.) |
69 | | -\end{enumerate} |
| 61 | +\begin{praxis}\footnote{In dieser Lektion gibt es ein paar mehr Aufgaben als in anderen Lektionen, lasst euch davon nicht entmutigen!} |
| 62 | + \begin{enumerate} |
| 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. |
| 64 | + %Wirkt wie Kinderkram nicht zum Funktionskapitel, möchte aber nochmal den Unterschied zwischen Ausgabe und Rückgabe dadurch nochmal klarer machen |
| 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. |
| 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. |
| 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.) |
| 69 | + \end{enumerate} |
| 70 | +\end{praxis} |
70 | 71 |
|
71 | | -\textbf{Spiel:} |
72 | | -\begin{enumerate} |
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. |
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. |
77 | | - \item Was passiert, wenn ihr in einer Funktion den \texttt{return}-Ausdruck vor dem Ende eurer Funktion benutzt? |
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). |
79 | | - Versucht, die Datei zu kompilieren. |
80 | | - Was ist die Fehlermeldung des Compilers? |
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). |
82 | | - Versucht, die Datei zu kompilieren. Was ist die Fehlermeldung des Compilers? |
83 | | - \item Implementiert die Funktion, die $x^n$ umsetzt, ignoriert dabei zunächst negative Exponenten. \\ |
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$. |
86 | | - \item Schaut euch eure bisherigen Lösungen an. |
87 | | - Findet ihr noch häufiger Stellen, an denen ihr einzelne Teilprogramme in Funktionen auslagern könnt? |
88 | | -\end{enumerate} |
| 72 | +\begin{spiel} |
| 73 | + \begin{enumerate} |
| 74 | + \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. |
| 75 | + (Die Funktion sollte also die Signatur \cppinline{int schritte(int x)} haben.) |
| 76 | + Probiert die Funktion aus. |
| 77 | + \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. |
| 78 | + \item Was passiert, wenn ihr in einer Funktion den \texttt{return}-Ausdruck vor dem Ende eurer Funktion benutzt? |
| 79 | + \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). |
| 80 | + Versucht, die Datei zu kompilieren. |
| 81 | + Was ist die Fehlermeldung des Compilers? |
| 82 | + \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). |
| 83 | + Versucht, die Datei zu kompilieren. Was ist die Fehlermeldung des Compilers? |
| 84 | + \item Implementiert die Funktion, die $x^n$ umsetzt, ignoriert dabei zunächst negative Exponenten. \\ |
| 85 | + (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.) |
| 86 | + \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$. |
| 87 | + \item Schaut euch eure bisherigen Lösungen an. |
| 88 | + Findet ihr noch häufiger Stellen, an denen ihr einzelne Teilprogramme in Funktionen auslagern könnt? |
| 89 | + \end{enumerate} |
| 90 | +\end{spiel} |
0 commit comments