--- author: Florian Fischer lang: de theme: metropolis aspectratio: 169 header-includes: | \usepackage{tabulary} \let\tightlist\relax --- ## Wiederholung - Operationen ![](img/operation.jpg){.center} ```{.include} ../LogischeOperationen/slides-operationen.md ``` ## Wiederholung - Parkgebühren Parkgebühren sind in der Regel zeitabhängig. Entwerfe einen Algorithmus, der abhängig von der **Parkdauer** den **Preis** ausgibt. Übertrage deinen Algorithmus in ein `Snap!` Programm. Verwende logische Operationen um die Ausgabe zu bestimmen. Folgende Preisstaffelung gilt: \begin{tabular}{l l} Parkdauer & Preis \\ bis zu 1 Stunde & 1€ \\ bis zu 2 Stunden & 3€ \\ bis zu 4 Stunden & 5€ \\ Tageskarte & 8€ \\ \end{tabular} [**Zusatz:**]{.underline} Wenn die Eingabe keine Zahl ist gib "Ungültige Parkdauer!" aus. ## \faIcon{lightbulb} Waren unsere Anweisungen genau genug? Kann ein Mensch/Roboter/Computer folgende Anweisungen ausführen? :::{.block} ### Beispiele >- "Falte die langen Kanten des Blatts aufeinander" >- "Schalte die Ampel auf rot" >- ![](img/ask_parking_time.png){height=1cm} ::: \pause \boldred{Nicht ohne weiteres!} \pause Die Anweisungen bestehen eigentlich aus noch weiteren Anweisungen. ## Methoden Als Methoden bezeichnet man in der Informatik [benannte]{.underline} \textit{"Unterprogramme"}. \pause \vspace{0.2cm} ### Gut. Aber warum? \pause Methoden können Algorithmen vereinfachen, da sie erlauben ganze Sequenzen mehrmals wieder zu verwenden. \pause ### Beispiel - Rückwärtsgehen ![](img/move_backwarts.png){height=4cm} ## Methoden {.t} Methoden bestehen aus zwei Teilen: ::: columns :::: {.column width=50%} \begin{itemize} \item<1-> Einem \boldred{Methodenkopf} der den Namen und die Eigenschaften der Methode festlegt \vspace{0.5cm} \item<2-> Einem \boldred{Methodenrumpf} der die Anweisungen der Methode enthält \end{itemize} :::: :::: {.column width=50%} \begin{tikzpicture} \node[circle, draw, minimum size=1cm] (head) {}; \node[align=left] at ($(head) + (2cm, 0)$) {\textcolor{red}{Methodenkopf} \\ \textit{GeheRueckwaerts}}; \only<2-> { \coordinate (shoulders) at ($(head) - (0, 1.2cm)$); \coordinate (hip) at ($(shoulders) - (0, 2cm)$); \draw (head) -- (shoulders); \draw (shoulders) -- ($(shoulders) + (0.5cm, 0.5cm)$); \draw (shoulders) -- ($(shoulders) + (-0.5cm, 0.5cm)$); \draw (shoulders) -- (hip); \draw (hip) -- ($(hip) - (0.5cm, 0.5cm)$); \draw (hip) -- ($(hip) - (-0.5cm, 0.5cm)$); \node[align=left] at ($(shoulders) + (2cm, -1cm)$) {\textcolor{red}{Methodenrumpf} \\ Drehe 180 Grad \\ Gehe 10 Schritte \\ Drehe 180 Grad}; } \end{tikzpicture} :::: ::: ## Methoden in `Snap!` In `Snap!` kannst du Methoden als neue Blöcke erzeugen. ![](img/make_a_block.png){.center height=75%} ## \faIcon{desktop} Arbeitsauftrag - 10 min * Erstelle eine Methode `ZeichneDreieck` die ein gleichseitiges Dreieck mit Seitenlänge 50 zeichnet. ::: {.columns align=center} :::: {.column width=40%} ![](img/triangles.png){.center} :::: :::: {.column width=60%} * Verwende deine Methode um das oder ein ähnliches Bild zu zeichnen: :::: ::: ## Methoden und Parameter Ähnlich zu mathematischen Funktionen kann man Methoden Werte, sogenannte \boldred{Parameter}, übergeben. \pause Der als Parameter übergebene Wert ist innerhalb der Methode wie eine Variable benutzbar. \pause **In `Snap!`** kannst du Parameter einer Methode erzeugen in dem du in ihrem **Head-Block** das \textit{plus}-Symbol klickst. ![](img/move_backwarts_n.png){height=3.8cm} ## \faIcon{desktop} Arbeitsauftrag Würfel - 20min * Erstelle eine Methode `ZeichneKreis`, die annäherungsweise einen Kreis mit einem Parameter Schrittlänge zeichnet. * Erstelle eine Methode `ZeichneWuerfel`, die als Parameter die Augenzahl erhält und die entsprechende Würfelseite zeichnet ```\begin{tcolorbox}[colframe=gray]```{=latex} * \faIcon{earlybirds} **Für Schnelle**: Lasse deine Funktion `ZeichneWuerfel` auch die Umrandung zeichnen * \faIcon{earlybirds} **Für Schnelle**: Erstelle ein Script, das eine zufällige Würfelseite zeichnet * \faIcon{earlybirds} **Für ganz Schnelle**: Erstelle ein einfaches Würfelspiel, bei dem abwechselnd geworfen und die Gesamt-Augenzahl aufgeschrieben wird. ```\end{tcolorbox}```{=latex}