\section{Parameter und Variablen}
	
In diesem Kapitel lernst du, was ein \textcolor{magenta}{\textbf{Parameter}} ist, \textcolor{magenta}{\textbf{Variablen}} zu deklarieren und zu nutzen.

\subsection{Was ist ein Parameter?}

Beim Befehl \begin{scratch}\move{x}\end{scratch} darf für \textcolor{blue}{\textbf{x}} eine Zahl eingesetzt werden. Diese Zahl, die man für x einsetzt, legt fest, wie viele Schritte die Figur gehen soll. Bei \begin{scratch}\turnl{winkel}\end{scratch}, wählt man für \textcolor{blue}{\textbf{winkel}} eine Zahl und gibt an, um wie viel Grad sich die Figur nach links drehen soll. Den Namen \textcolor{blue}{\textbf{x}} in \begin{scratch}\move{x}\end{scratch} oder \textcolor{blue}{\textbf{winkel}} in \begin{scratch}\turnl{winkel}\end{scratch} nennt man einen \textcolor{magenta}{\textbf{Parameter}}. Der Zahlenwert, den man dabei einsetzt, heißt \textcolor{magenta}{\textbf{Wert des Parameters}}. Die Werte eines Parameters dürfen auch andere Objekte als Zahlen sein: Ein Parameter kann für eine Farbe stehen, dann ist der Wert des Parameter ein Farbname.

\subsection{Variablen}

Mit Parametern kann man mit einem einzigen Befehl, je nach Parameterwert, unterschiedliche Tätigkeiten ausführen lassen. Zum Beispiel genügt ein Befehl, um eine Anzahl an Schritten zu gehen.\\
Aus Computersicht ist ein Parameter ein Speicherplatz mit einem bestimmten Namen. Alle Parameter eines Befehls bilden eine Tabelle und immer wenn der Computer den Wert eines Parameters benötigt, liest er den Wert aus dieser Tabelle aus. Er arbeitet anschließend mit dem Wert, der im Speicherplatz x (oder winkel) abgelegt ist. Dieses Konzept von Parametern verallgemeinern wir zu \textcolor{magenta}{\textbf{Variablen}}.\\
Parameter nutzen wir um Werte unter einem Namen zu speichern und später wieder zu verwenden. Bei \textcolor{magenta}{\textbf{Variablen}} kommt hinzu, dass die Werte während der Ausführung des Programms geändert werden können und die geänderten Werte beim Zeichnen, Rechnen, ... zu nutzen.\\
Variablen werden in Scratch über den Button "`neue Variable"' angelegt. 

\begin{bsp}
	Wir möchten eine Spirale zeichnen. Die Figur soll jede Linie ein wenig länger als die vorherige zeichnen. Dies ist eine einfache Übung, wird aber sehr umfangreich, wenn die Spirale aus 50 oder mehr Seiten bestehen soll. Von den vielen notwendigen Blöcken ist nur ein kleiner Teil abgebildet.
	\\
	Das Programm wiederholt immer wieder die gleichen Befehle: \begin{scratch}\turnl{90}\end{scratch} und \begin{scratch}\move{\variable{länge}}\end{scratch}. Nur die Schrittweite wird geändert.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.25\linewidth]{images/spirale1}
		\label{fig:spirale1}
	\end{figure}
	Dieses Programm soll nun mit einer Schleife programmiert werden und der Computer soll so viel Arbeit übernehmen wie es geht. Das sieht dann so aus:
	\begin{multicols}{2}
		\begin{figure}[H]
			\centering
			\includegraphics[width=0.7\linewidth]{images/spirale2}
			\label{fig:spirale2}
		\end{figure}
		\columnbreak
		Zu Beginn wird der Startwert der Variable "`länge"' auf $10$ festgelegt und die Figur auf eine Startposition bewegt.\\
		Anschließend wird die Schleife 50-mal durchlaufen.\\
		Der Befehl am Ende der Schleife erhöht bei jeder Wiederholung den Wert der Variable "`länge"' um 5.
		\newline
		\vspace{1cm}
		\textbf{Lege die Variable "`länge"' an und zeichne die Spirale.}
	\end{multicols}
	\label{bsp:spirale}
\end{bsp}
\begin{aufgabe}
	Ändere das Programm aus Beispiel \ref{bsp:spirale} so ab, dass es eine Spirale mit folgenden Eigenschaften zeichnet:
	\begin{itemize}
		\setlength\itemsep{0.0em}
		\item Die erste Seite hat die Länge $6$.
		\item Jede weitere Seite ist um $2$ länger.
		\item Die Spirale hat 36 Seiten.
	\end{itemize}
\end{aufgabe}
\begin{aufgabe}
	Entwickle ein Programm, dass eine Spirale von außen nach innen zeichnet. Die Spirale hat folgende Eigenschaften:
	\begin{itemize}
		\setlength\itemsep{0em}
		\item Lege eine geeignete Startposition fest.
		\item Die erste Seite hat die Länge $200$.
		\item Jede weitere Seite ist um $3$ kürzer.
		\item Die Spirale hat insgesamt 50 Seiten.
		\end{itemize}
\end{aufgabe}
\begin{aufgabe}
	Ändere das Programm in Beispiel \ref{bsp:spirale} so, dass eine sechseckige Spirale entsteht. Die Länge der ersten Seite ist 10. Die Seite wird immer um das $0,1$-fache der aktuellen Länge geändert. Die Schleife wird 18 Mal wiederholt.\\
	Lösung:
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.25\linewidth]{"images/spirale3"}
		\caption{Lösung Aufgabe sechseckige Spirale}
		\label{fig:spirale-losung}
	\end{figure}
\end{aufgabe}
\begin{aufgabe}
	Schreibe ein Programm, das eine sechseckige Spirale zeichnet (siehe Abb. \ref{fig:spirale4}). Das Programm soll die Variablen "`Anzahl"' und "`Länge"' verwenden. Der Parameter Anzahl gibt die Anzahl der gezeichneten Seiten an und Länge beschreibt die Weite der ersten Seite. Während des Zeichenvorgangs soll die Länge der Seite immer um 3 erhöht.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.25\linewidth]{images/spirale4}
		\caption{Schema Spirale}
		\label{fig:spirale4}
	\end{figure}	
\end{aufgabe}

\subsection{Neue Befehle}
\begin{center}
	\begin{tabular}{|m{5cm}|m{8cm}|c}
		\hline
		\tabbild[width=\linewidth]{"images/befehl new var"} & Legt eine neue Variable an. Eine Variable ist ein Speicherplatz mit einem Namen. In einer Variablen kann immer genau ein Wert gespeichert werden. \\
		\hline
		\tabbild[width=\linewidth]{"images/befehl var set"} & Legt den Wert einer Variablen fest. \\
		\hline
		\tabbild[width=\linewidth]{"images/befehl var change"} & Erhöht den Wert der Variablen um den angegebenen Wert. Um den Wert der Variablen zu verringern können negative Werte eingetragen werden. \\
		\hline
	\end{tabular}
\end{center}

\subsection{Zusammenfassung}
\textcolor{magenta}{\textbf{Variablen}} heißen so, weil sich ihr Wert während der Ausführung verändern (variieren) darf. Variablen, deren Wert zu Beginn eines Programms festgelegt werden und danach nicht mehr verändern, heißen \textcolor{magenta}{\textbf{Parameter}}. Mit den Blöcken \begin{scratch}\setvar{meine Variable}{10}\end{scratch} und \begin{scratch} \changevar{meine Variable}{5}\end{scratch} kann man den Wert einer Variablen festlegen bzw. ändern.\\
Bei jeder Programmausführung legt der Computer eine Tabelle an, in der zu jeder Variablen ihr Wert steht. Ist die Variable in der Tabelle noch nicht vorhanden, so wird sie der Tabelle mit ihrem Wert hinzugefügt. Existiert die Variable bereits, wird der Wert der Variablen geändert.\\
Computer speichern immer nur den aktuellen Wert der Variablen, alte Werte werden nicht gespeichert.
\pagebreak
\subsection{Teste dich selbst}
\subsubsection*{Wissensfragen}
\begin{enumerate}
	\item Was ermöglichen Variablen, was Parameter alleine nicht können?
	\notes[10pt]{1}{\textwidth}
	\item Warum nennt man eine Variable "`Variable"'?
	\notes[10pt]{1}{\textwidth}
	\item Was ist der Unterschied zwischen einer Variable und einem Parameter?
	\notes[10pt]{1}{\textwidth}
	\item Woher weiß der Computer, welchen Wert eine Variable hat? Wie kann sich der Computer die Werte aller Variablen merken?
	\notes[10pt]{1}{\textwidth}
	\item Mit welchem Befehl kannst du den Wert einer Variablen um eine feste Zahl erhöhen?
	\notes[10pt]{2}{\textwidth}
	\item Mit welcher Kombination aus Befehlen kannst du den Wert einer Variablen verdoppeln?
	\notes[10pt]{2}{\textwidth}
\end{enumerate}