\documentclass[loesungseite]{schulekl}
\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: klausur_01_datenstrukturen_java.tex 1339 2015-09-15 16:53:44Z humbert $}

\klausurname{Informatik Q1 / I}
\datum{TT.MM.JJJJ}

%Doppelstunde

\klausurergebnisangabe{2}{4}{3}{1}{0}{0}

\lstset{% 
breaklines=true, % Zeilenumbrüche
language=Java, % Sprache
basicstyle=\ttfamily,
breakindent=1pt,
breakatwhitespace=true,
breakautoindent=false,
tabsize=2,
numbers=left, numberstyle=\footnotesize,  numbersep=5pt,
}

\begin{document}

\aufgabensec{Datenstrukturen}

\begin{alphaEnum}
	\punkteitem{8} In der Informatik gibt es oft die Bezeichnungen FiFo (First in, First out) und LiFo (Last in, First out). Geben Sie an, welche Datenstrukturen nach diesen Prinzipien arbeiten und erklären Sie ihren Aufbau.
	\punkteitem{4} In einen Info-LKW, dessen Ladefläche nur von hinten zugänglich ist, passen immer zwei I-Paletten nebeneinander. Begründen Sie, dass sich die Realisierung des LKWs in einer Klasse am einfachsten mit zwei Stapeln bewerkstelligen lässt.
	\punkteitem{12} Realisieren Sie die Klasse, indem Sie den entsprechenden Java-Code angeben. Beachten Sie dabei auch die Klassenbeschreibung im Anhang. Sie dürfen davon ausgehen, dass die Klasse IPalette bereits definiert ist.
	\punkteitem{12} Ein Mitarbeiter in einem Büro möchte zum Verwalten seiner Aufgaben ein Programm schreiben. Er möchte dazu auf eine der vier Datenstrukturen Liste, Schlange, Prioritätsschlange oder Stapel zurückgreifen. Bewerten Sie die Eignung der Datenstrukturen für diese Aufgabe.
\end{alphaEnum}

\loesung{
	\begin{alphaEnum}
		\punkteitem{8} Die Schlange arbeitet nach dem FiFo-Prinzip. An einem Ende werden neue Elemente hinzufügt, am anderen Ende die Elemente entnommen. Der Stapel arbeitet nach dem LiFo-Prinzip. Es können Elemente nur an einem Ende Elemente hinzugefügt und wieder entfernt werden. Ein Vertauschen von Plätzen ist in beiden Fällen nicht möglich.

		(2x 2P Zuordnung 2P Aufbau)
		\punkteitem{4} Da die linke und die rechte Seite unabhängig voneinander sind, ist jeder ein eigener Stapel. Durch die Be- und Entladung nur an einer Seite wird das Stapelprinzip realisiert.
		\punkteitem{12} \lstinputlisting{klausur_InfoLKW.java}
		\punkteitem{12} Der Stapel ist ungeeignet, weil bei vielen Aufgaben solche die tiefer im Stapel liegen sehr lange nicht zur Bearbeitung kommen. Insgesamt ist die Schlange geeignet, da alle Aufgaben in der Reihenfolge des Eingangs bearbeitet werden. Sie wird aber den Fällen nicht gerecht, in denen Aufgaben dringender bearbeitet werden müssen. Daher ist in diesem Fall die Prioritätsschlange vorzuziehen. Mit der Liste lässt sich eine solche Organisation realisieren, sie bietet nicht die entsprechenden Methoden, um die einfach die Aufgaben nach Dringlichkeit zu sortieren. (4x 3P)
	\end{alphaEnum}

}

\section*{Anhang}

\subsubsection*{Dokumentation der Klasse InfoLKW}
\begin{klassenDokumentation}
	\methodenDokumentation{Konstruktor}{InfoLKW()}{Erzeugt einen neuen LKW mit zwei leeren Stapeln.}
	\methodenDokumentation{Auftrag}{void einladen(IPallette palette, boolean links)}{Fügt eine Palette dem LKW hinzu. Dabei gibt \lstinline|links| an, ob dieses in den linken oder rechten Stapel geschehen soll.}
	\methodenDokumentation{Auftrag}{void umstellen(int anz, boolean links)}{Lädt eine angegebene Anzahl von Paletten, falls vorhanden, beim Zutreffen des zweiten Parameters von links nach rechts. Sonst wird von rechts nach links umgestellt. Ist die Anzahl der vorhandenen Paletten kleiner, werden entsprechend weniger umgestellt.}
	\methodenDokumentation{Anfrage}{IPalette ausladen(boolean links)}{Entfernt eine Palette, sofern vorhanden, aus dem linken oder rechten Stapel. Sie liefert \lstinline|null| falls keine entsprechende Palette mehr vorhanden ist.}
\end{klassenDokumentation}

\end{document}
