\documentclass{schulein}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}

% Dieses Dokument ist in der Zusammenarbeit von Informatikreferendaren und
% ehemaligen Informatikreferendaren der Studienseminare (heute ZfsL) Arnsberg,
% Hamm und Solingen entstanden.
%
% Das Dokument steht unter der Lizenz: Creative Commons by-nc-sa Version 4.0
% http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
%
% Nach dieser Lizenz darf das Dokument beliebig kopiert und bearbeitet werden,
% sofern das Folgeprodukt wiederum unter gleichen Lizenzbedingungen vertrieben
% und auf die ursprünglichen Urheber verwiesen wird.
% Eine kommerzielle Nutzung ist ausdrücklich ausgeschlossen.
%
% Die Namensnennung durch einen Verweis und die Lizenzangabe der ursprünglichen
% Urheber auf den Materialien für Schülerinnen und Schüler ist erforderlich.
%
% Die Sammlung der Dokumente steht unter
% http://ddi.uni-wuppertal.de/material/materialsammlung/
% zur Verfügung.
%
% Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht
% unter  http://www.ctan.org/pkg/schule
% zur Verfügung.

\usepackage[pdfauthor={Referendare der Informatikfachseminare Arnsberg, Hamm und Solingen}]{hyperref}
\includexmp{lizenz}
\cclizenz{byncsaeu}
\footerQRLink{materialsammlung_qr_url.pdf}

\svnid{$Id: info_02_verzweigungen.tex 626 2014-05-22 21:36:50Z pieper $}

\dokName{Verzweigungen}
\jahrgang{EF}

%%%%Speziell
\lstset{language=Java}

\begin{document}

\section*{Verzweigungen}

Algorithmen sind nicht immer lineare Abfolgen von Anweisungen, sondern können auch Wahlmöglichkeiten enthalten (Vgl. Definition auf Informationsblatt Algorithmen und Struktogrammen: "`Hierbei sind Wahlmöglichkeiten zugelassen. Nur muss dann genau festliegen, wie die Auswahl einer Möglichkeit erfolgen soll."'). 

Man spricht hier üblicherweise von \textit{Verzweigungen}. Eine Verzweigung gibt abhängig von einer Bedingung an, welcher von zwei Algorithmenabschnitten im Folgenden durchlaufen werden soll.

\subsection*{Darstellung in Struktogrammen}
Eine beispielhafte Verwendung einer Verzweigung beim Algorithmus \textit{koche Kaffee} würde in etwa wie folgt aussehen. Ist die Bedingung (Sind die Kaffeetrinker müde?) erfüllt, so wird der linke Abschnitt abgearbeitet, ansonsten der Rechte. Danach wird unabhängig von der Entscheidung bei der Verzweigung auf jeden Fall noch die letzte Anweisung (Drücke auf den Start-Knopf) ausgeführt.

\begin{center}
	\begin{struktogramm}(130,38)[koche Kaffee]
		\assign{Fülle 1L Wasser in die Kaffekanne}
		\assign{Gieße das Wasser in den Wasserbehälter}
		\assign{Lege eine Filtertüte in den Filter}
		\ifthenelse{5}{5}{Sind die Kaffeetrinker müde?}{Ja}{Nein}
			\assign{Gib 6 Löffel Pulver hinein}
		\change
			\assign{Gib 5 Löffel Pulver hinein}
		\ifend
		\assign{Drücke auf den Start-Knopf}
	\end{struktogramm} \\
\end{center}

\subsection*{Syntax in Java} 
In Java dienen die Schlüsselwörter \sffamily \textbf{if} \rmfamily und \sffamily \textbf{else} \rmfamily zur Beschreibung einer Verzweigung. Die auszuwählenden Abschnitte werden durch geschweifte Klammern in Blöcke zusammengefasst. Dieses kann man am folgenden Syntaxdiagramm und dem Beispielprogramm sehen.

\begin{tikzpicture}[syntaxdiagramm, node distance=5mm and 2mm]
	\node {};
	\node [terminal] {if};
	\node [terminal] {(};
	\node [nonterminal] {Bedingung};
	\node [terminal] {)};
	\node [terminal] {\{};
	\node (start1) [point] {};
	\node (end1)[point,xshift=20mm] {};
	\node [terminal] {\}};
	\node [terminal] {else};
	\node [terminal] {\{};
	\node (start2) [point] {};
	\node (end2)[point,xshift=20mm] {};
	\node [terminal] {\}};
 	\node [endpoint] {};

	{[start chain=1]
		\chainin (start1);
		\node [point, below=of start1] {};
		\node [nonterminal] {Anw.-F.};
		\node [point, below=of end1] {};
 		\node [endpoint, on chain=going above] {};
	}
	{[start chain=2]
		\chainin (start2);
		\node [point, below=of start2] {};
		\node [nonterminal] {Anw.-F.};
		\node [point, below=of end2] {};
 		\node [endpoint, on chain=going above] {};
	}
\end{tikzpicture} 

\textit{Anw.-F.} steht hier für Anweisungsfolgen der Form \sffamily Anweisung1; Anweisung2; \dots


\begin{lstlisting}
public void istPositiv(int pZahl) {
	if(pZahl > 0)	{
		System.out.println(pZahl + " ist positiv");
	}	else	{
		System.out.println(pZahl + " ist nicht positiv");
	}
}
\end{lstlisting}

\end{document}