## \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%} ## 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{pencil-alt} Arbeitsauftrag - 15 min * Recherchiere was es mit der B-Sprache auf sich hat. * Entwerfe einen Algorithmus der eine beliebige Zeichenfolge in die B-Sprache übersetzt. ## \faIcon{desktop} Arbeitsauftrag - 10min * Übertrage deinen Algorithmus der eine Zeichenfolge in die B-Sprache übersetzt in ein `Snap!`-Programm * Erstelle eine Methode `SagInBSprache`, die eine Zeichenfolge als Parameter übergeben bekommt und das Wort in B-Sprache ausgibt. * Du brauchst die Operatoren `join`, `length of` und `letter of`.