diff --git a/presentations/Programmieren-Tutorium/.gitignore b/presentations/Programmieren-Tutorium/.gitignore new file mode 100644 index 0000000..7f7d9e9 --- /dev/null +++ b/presentations/Programmieren-Tutorium/.gitignore @@ -0,0 +1,34 @@ +*.aux +*.bbl +*.blg +*.dvi +*.fdb_latexmk +*.glg +*.glo +*.gls +*.idx +*.ilg +*.ind +*.ist +*.lof +*.log +*.lot +*.nav +*.nlo +*.out +*.pdfsync +*.ps +*.snm +*.synctex.gz +*.toc +*.vrb +*.maf +*.mtc +*.mtc0 +*.pdf +*.mp4 +*.mpg +logos/kitlogo* +templates/*kit*.sty +templates/semirounded.sty +templates/tikzuml.sty diff --git a/presentations/Programmieren-Tutorium/Misc/Stilfragen.tex b/presentations/Programmieren-Tutorium/Misc/Stilfragen.tex new file mode 100644 index 0000000..37ba3c4 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Misc/Stilfragen.tex @@ -0,0 +1,25 @@ +\section{Stilfragen} +\subsection{So nicht} +\begin{frame}{So nicht} + \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=pi.c, fontsize=\tiny]{c}{pi.c} + Quelle: \href{http://www.cise.ufl.edu/~manuel/obfuscate/obfuscate.html}{Obfuscated C Code} +\end{frame} + +\subsection{Aber so} +\begin{frame}{Aber so} + \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=pi-good.c]{c}{pi-good.c} + + Nur halt in Java (Ich will keine C Abgaben sehen! In dem + Modul "`Programmieren"' wird ausschließlich Java behandelt.) +\end{frame} + +\subsection{Hinweise zu gutem Programmierstil} +\begin{frame}{Hinweise zu gutem Programmierstil} + \begin{itemize} + \item Sinnvolle Modellierung ("`ist ein"' bzw. "`hat"') + \item Aussagekräftige Namen (Klassen, Methoden, Variablen) + \item JavaDoc + \item Hilfreiche Kommentare (für die Abschlussaufgabe: lieber zu viele) + \item Kurze Funktionseinheiten + \end{itemize} +\end{frame} diff --git a/presentations/Programmieren-Tutorium/Misc/tutoriumTermine.py b/presentations/Programmieren-Tutorium/Misc/tutoriumTermine.py new file mode 100755 index 0000000..03c51aa --- /dev/null +++ b/presentations/Programmieren-Tutorium/Misc/tutoriumTermine.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import datetime + +tmpDay = datetime.date.today() # von +lastday = datetime.date(2014,2,10) # bis (Vorlesungsende?) + +while tmpDay < lastday: + if tmpDay.weekday() == 0: + print tmpDay.strftime('%d.%m.%Y') + tmpDay += datetime.timedelta(days=1) diff --git a/presentations/Programmieren-Tutorium/README.md b/presentations/Programmieren-Tutorium/README.md new file mode 100644 index 0000000..b942e7a --- /dev/null +++ b/presentations/Programmieren-Tutorium/README.md @@ -0,0 +1,18 @@ +programmieren-tutorium +====================== + +Folien für mein Programmieren-Tutorium am KIT + +Struktur der Tutorien +--------------------- +* Quiz +* Fehlerbesprechung (letztes Übungsblatt) +* Kurzwiederholung des Vorlesungsstoffs +* Praxis / Übungsaufgaben +* Hinweise zum neuen Übungsblatt + + +Hinweise +-------- +Die Dateien in den Ordnern `logos` und `templates` darf ich nicht +veröffentlichen! diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Bash.sh b/presentations/Programmieren-Tutorium/Tutorium-01/Bash.sh new file mode 100644 index 0000000..551bf3a --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Bash.sh @@ -0,0 +1,8 @@ +user@pc:~$ ls +HelloWorld.java +user@pc:~$ javac HelloWorld.java +user@pc:~$ ls +HelloWorld.class HelloWorld.java +user@pc:~$ java HelloWorld +Hallo Welt! +user@pc:~$ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Day.java b/presentations/Programmieren-Tutorium/Tutorium-01/Day.java new file mode 100644 index 0000000..afb852d --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Day.java @@ -0,0 +1,4 @@ +public enum Day { + SUNDAY, MONDAY, TUESDAY, WEDNESDAY, + THURSDAY, FRIDAY, SATURDAY +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/HelloWorld.java b/presentations/Programmieren-Tutorium/Tutorium-01/HelloWorld.java new file mode 100644 index 0000000..bca3a5e --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/HelloWorld.java @@ -0,0 +1,5 @@ +public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hallo Welt!"); + } +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Makefile b/presentations/Programmieren-Tutorium/Tutorium-01/Makefile new file mode 100644 index 0000000..e5bfe05 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Makefile @@ -0,0 +1,11 @@ +SOURCE = tutorium-01 + +make: + #latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex + pdflatex email-liste.tex -output-format=pdf + pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt + pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Leaf.java b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Leaf.java new file mode 100644 index 0000000..748b7d1 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Leaf.java @@ -0,0 +1,4 @@ +public class Leaf { + /** Is this leaf connected to the tree or is it fallen? */ + boolean isAlive; +} \ No newline at end of file diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Nature.java b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Nature.java new file mode 100644 index 0000000..8691815 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Nature.java @@ -0,0 +1,13 @@ +public class Nature { + + /** + * Dies ist ein leerer Kommentar. Bitte so nicht! + * + * @param args + */ + public static void main(String[] args) { + // TODO Auto-generated method stub + + } + +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Root.java b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Root.java new file mode 100644 index 0000000..6e328c2 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Root.java @@ -0,0 +1,5 @@ +public class Root { + Root mainRoot; + Root leftRoot; + Root rightRoot; +} \ No newline at end of file diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Tree.java b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Tree.java new file mode 100644 index 0000000..fcb734d --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Tree.java @@ -0,0 +1,24 @@ +public class Tree { + /* + * Usually, you would use an array for this, but I wanted to keep it simple. + */ + + /** A leaf of this tree */ + Leaf leaf1; + + /** Theoretically, you should make those comments over every line */ + Leaf leaf2; + Leaf leaf3; + Leaf leaf4; + Root mainRoot; + + /** age in years */ + int age; + + /** name of this tree in English */ + String name; + + /** scientific name of this type of tree in Latin */ + String scientificName; + +} \ No newline at end of file diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/SomeClass.java b/presentations/Programmieren-Tutorium/Tutorium-01/SomeClass.java new file mode 100644 index 0000000..43d3222 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/SomeClass.java @@ -0,0 +1,7 @@ +public class SomeClass { + public static void main(String[] args) { + Day currentDay; + currentDay = Day.MONDAY; + System.out.println(currentDay); + } +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png new file mode 100755 index 0000000..e24f540 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png new file mode 100755 index 0000000..85b9413 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png new file mode 100755 index 0000000..d94e51b Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png new file mode 100755 index 0000000..be699cc Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/email-liste.tex b/presentations/Programmieren-Tutorium/Tutorium-01/email-liste.tex new file mode 100644 index 0000000..bc52d87 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/email-liste.tex @@ -0,0 +1,104 @@ +\documentclass[a4paper,landscape,9pt]{scrartcl} +\usepackage[ngerman]{babel} +\usepackage[utf8]{inputenc} +\usepackage{amssymb,amsmath,amsfonts} +\usepackage{multicol} +\usepackage{dsfont} +\usepackage[landscape]{geometry} +\usepackage{graphicx} +\usepackage{underscore} +\usepackage[parfill]{parskip} % No intendation for new paragraphs +\usepackage{wasysym} +\usepackage{booktabs}% http://ctan.org/pkg/booktabs +\usepackage{array}% http://ctan.org/pkg/array +\usepackage{tabularx}% http://ctan.org/pkg/tabularx +\usepackage{calc} + +\geometry{a4paper,left=10mm,right=10mm, top=1cm, bottom=2cm} + +\usepackage{fancyhdr} +\pagestyle{fancy} +\lhead{Email-Liste} +\rhead{Tutorium 10, Martin Thoma} + +\newcommand\lineHeight{0.7cm} + +\begin{document} + \title{Email-Liste} + \author{Martin Thoma} + + \begin{tabularx}{\linewidth}{l|cc|X|X|X|X} + &\mars & \venus & Vorname Nachname & Matrikelnummer & Studiengang & E-Mail Adresse\\ + \hline + \hline + 0 & \CheckedBox & \Square & Martin Thoma & 1633521 & Informatik (BA) & info@martin-thoma.de\\ + \hline + 1 & \Square & \Square & & & & \\[\lineHeight] + \hline + 2 & \Square & \Square & & & & \\[\lineHeight] + \hline + 3 & \Square & \Square & & & & \\[\lineHeight] + \hline + 4 & \Square & \Square & & & & \\[\lineHeight] + \hline + 5 & \Square & \Square & & & & \\[\lineHeight] + \hline + 6 &\Square & \Square & & & & \\[\lineHeight] + \hline + 7 & \Square & \Square & & & & \\[\lineHeight] + \hline + 8 & \Square & \Square & & & & \\[\lineHeight] + \hline + 9 & \Square & \Square & & & & \\[\lineHeight] + \hline + 10 & \Square & \Square & & & & \\[\lineHeight] + \hline + 11 & \Square & \Square & & & & \\[\lineHeight] + \hline + 12 & \Square & \Square & & & & \\[\lineHeight] + \hline + 13 & \Square & \Square & & & & \\[\lineHeight] + \hline + 14 & \Square & \Square & & & & \\[\lineHeight] + \hline + 15 & \Square & \Square & & & & \\[\lineHeight] + \end{tabularx} + + \begin{tabularx}{\linewidth}{l|cc|X|X|X|X} + &\mars & \venus & Vorname Nachname & Matrikelnummer & Studiengang & E-Mail Adresse\\ + \hline + \hline + 0 & \CheckedBox & \Square & Martin Thoma & 1633521 & Informatik (BA) & info@martin-thoma.de\\ + \hline + 16 & \Square & \Square & & & & \\[\lineHeight] + \hline + 17 & \Square & \Square & & & & \\[\lineHeight] + \hline + 18 & \Square & \Square & & & & \\[\lineHeight] + \hline + 19 & \Square & \Square & & & & \\[\lineHeight] + \hline + 20 & \Square & \Square & & & & \\[\lineHeight] + \hline + 21 & \Square & \Square & & & & \\[\lineHeight] + \hline + 22 & \Square & \Square & & & & \\[\lineHeight] + \hline + 23 & \Square & \Square & & & & \\[\lineHeight] + \hline + 24 & \Square & \Square & & & & \\[\lineHeight] + \hline + 25 & \Square & \Square & & & & \\[\lineHeight] + \hline + 26 & \Square & \Square & & & & \\[\lineHeight] + \hline + 27 & \Square & \Square & & & & \\[\lineHeight] + \hline + 28 & \Square & \Square & & & & \\[\lineHeight] + \hline + 29 & \Square & \Square & & & & \\[\lineHeight] + \hline + 30 & \Square & \Square & & & & \\[\lineHeight] + \end{tabularx} + +\end{document} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/java-download.png b/presentations/Programmieren-Tutorium/Tutorium-01/java-download.png new file mode 100755 index 0000000..e01279d Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/java-download.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/pi-good.c b/presentations/Programmieren-Tutorium/Tutorium-01/pi-good.c new file mode 100644 index 0000000..9c8bf5c --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/pi-good.c @@ -0,0 +1,7 @@ +#define PI 3.14159265359 + +main(){ + // Ausgabe der mathematischen Konstante "pi" auf 3 + // Nachkommastellen + printf("%1.3f\n", PI); +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/pi.c b/presentations/Programmieren-Tutorium/Tutorium-01/pi.c new file mode 100644 index 0000000..4f25288 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/pi.c @@ -0,0 +1,22 @@ + +#define _ F-->00 || F-OO--; +long F=00,OO=00; +main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}F_OO() +{ + _-_-_-_ + _-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ +_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_-_-_-_ + _-_-_-_-_-_-_-_-_ + _-_-_-_ +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.png b/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.png new file mode 100644 index 0000000..d6da167 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.xcf b/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.xcf new file mode 100644 index 0000000..94e0d79 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.xcf differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png b/presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png new file mode 100755 index 0000000..531eab4 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/tutorium-01.tex b/presentations/Programmieren-Tutorium/Tutorium-01/tutorium-01.tex new file mode 100644 index 0000000..8427caa --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-01/tutorium-01.tex @@ -0,0 +1,612 @@ +\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer} + +% use KIT-Theme +% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen +%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback +\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}} +\usefonttheme{professionalfonts} + +\usepackage{hyperref} +\usepackage{lmodern} +\usepackage{listings} +\usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions +\usepackage[utf8]{inputenc} % this is needed for german umlauts +\usepackage[ngerman]{babel} % this is needed for german umlauts +\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf +\usepackage{verbatim} +\usepackage{relsize} +\usepackage{subfigure} +\usepackage{algorithm,algpseudocode} +\usepackage{minted} % needed for the inclusion of source code +\usepackage{tikz} +\usetikzlibrary{shapes,snakes,calc,patterns} +\usepackage{xcolor} +\usepackage{menukeys} +\usepackage{braket} +\usepackage{ulem} +\usepackage{../templates/myStyle} + +\newcommand\tutor{Martin Thoma} +\newcommand\tutNR{10} +\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{}} +\institute{Fakultät für Informatik} + +\hypersetup{pdftitle={\titleText}} +\beamertemplatenavigationsymbolsempty + +\newcommand\InsertToC[1][]{ + \begin{frame}{Outline} + \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1] + \end{frame} +} + +\begin{document} +\title{\titleText} +\subtitle{Einführung in Java, Eclipse} +\author{\tutor} +\date{\today} +\subject{Programmieren} + +\frame{\titlepage} + +\frame{ + \frametitle{Inhaltsverzeichnis} + \setcounter{tocdepth}{1} + \tableofcontents + \setcounter{tocdepth}{2} +} + +%\AtBeginSection[]{ +% \InsertToC[sections={\thesection}] % shows only subsubsections of one subsection +%} + +\section{Allgemeines} +\subsection{Formalien} +\begin{frame}{Formalien} + \begin{itemize} + \item Die Folien werden online gestellt $ \Rightarrow $ + \textbf{Mitschreiben nicht nötig} + \item $\rightarrow$ \href{http://martin-thoma.com/programmieren-tutorium}{martin-thoma.com/programmieren-tutorium} + \item Fragen immer sofort stellen – und traut euch!\\ + Wenn nicht hier, wo dann? + \end{itemize} +\end{frame} + +\subsection{Vorstellung} +\begin{frame} + \frametitle{Das bin ich} + \begin{itemize} + \item Martin Thoma (\href{mailto:info@martin-thoma.de}{info@martin-thoma.de}) $\rightarrow$ \href{http://www.martin-thoma.de/about.htm}{CV} + \item 22 Jahre alt + \item komme aus Augsburg + \item 3. Semester, Informatik + \item Programmieren + \begin{itemize} + \item \textbf{2005}: Angefangen mit PHP (\& HTML, CSS, JavaScript, (My)SQL) + \item \textbf{2009}: Liebe zu Python entdeckt \\ + (\href{http://martin-thoma.com/challenge-websites/}{HackIts und Challenges} auf ProjectEuler, Brightshadows) + \item \textbf{Selten}: C, C++ (z.B. für ein größeres Forschungsprojekt) + \item \textbf{2011}: Java am KIT gelernt + \item BwInf, Online-Projekte wie z.B. \href{http://world-of-dungeons.net/}{world-of-dungeons} + \end{itemize} + \end{itemize} + \textbf{Und wer seid ihr?} +\end{frame} + +\subsection{Websites} +\begin{frame} + \frametitle{Websites und Links} + \begin{itemize} + \item \href{http://martin-thoma.com/programmieren-tutorium}{martin-thoma.com/programmieren-tutorium}:\\ + Alle Links, Folien, Hinweise und viele weitere Inhalte + \item \href{https://praktomat.info.uni-karlsruhe.de/}{praktomat.info.uni-karlsruhe.de}:\\ + Forum; Abgabe der Übungsaufgaben; Klausur + \item \href{https://webinscribe.ira.uka.de/}{webinscribe.de}: Anmeldung für das Tutorium + \item \href{http://verialg.iti.kit.edu/english/583.php}{tinyurl.com/prog2012}: Website von Prof. Dr. Sinz + \item \href{http://docs.oracle.com/javase/7/docs/}{docs.oracle.com}: Manual $\rightarrow$ \href{http://docs.oracle.com/javase/7/docs/api/}{API} + \item \href{http://stackoverflow.com/}{stackoverflow.com}: Weitergehende Fragen + \end{itemize} +\end{frame} + +\subsection{Tutorium, Übung, Vorlesung} +\begin{frame} + \frametitle{Tutorium, Übung, Vorlesung} +\begin{tikzpicture}[% + auto, + example/.style={ + rectangle, + draw=blue, + thick, + fill=blue!20, + text width=4.5em, + align=center, + rounded corners, + minimum height=2em + }, + longName/.style={ + text width=12em, + align=center, + minimum height=2em + }, + algebraicName/.style={ + text width=7em, + align=center, + minimum height=2em + }, + explanation/.style={ + text width=10em, + align=left, + minimum height=3em + } + ] +\pgfdeclarepatternformonly{north east lines wide}% + {\pgfqpoint{-1pt}{-1pt}}% + {\pgfqpoint{10pt}{10pt}}% + {\pgfqpoint{9pt}{9pt}}% + { + \pgfsetlinewidth{3pt} + \pgfpathmoveto{\pgfqpoint{0pt}{0pt}} + \pgfpathlineto{\pgfqpoint{9.1pt}{9.1pt}} + \pgfusepath{stroke} + } + + + % Big background + \draw[fill=lime!20,lime!20, rounded corners] (-1.8, 0.60) rectangle (10,-5); + + \draw[fill=purple!20,purple!20, rounded corners] (0.55, -3.1) rectangle (3.5,-3.9); + \draw[fill=purple!20,purple!20, rounded corners] (4.55, -3.1) rectangle (7.5,-3.9); + + \draw[fill=blue!20,blue!20, rounded corners] (-1.45,-1.4) rectangle (1.5,-0.6); + \draw[fill=blue!20,blue!20, rounded corners] (2.55,-1.4) rectangle (5.5,-0.6); + \draw[fill=blue!20,blue!20, rounded corners] (6.55,-1.4) rectangle (9.5,-0.6); + + \draw (2, 0) node[longName] (A) {Modul: Programmieren} + (6, 0) node[explanation] (X) { + \begin{minipage}{0.9\textwidth} + \tiny + \begin{itemize} + \item 5 ECTS + \end{itemize} + \end{minipage} + } + (0,-1) node[algebraicName] (B) {Tutorium} + (4,-1) node[algebraicName] (C) {Übung} + (8,-1) node[algebraicName] (D) {Vorlesung} + (0,-2) node[algebraicName] (E) {Student} + (4,-2) node[algebraicName] (F) {Mitarbeiter} + (8,-2) node[algebraicName] (G) {Dozent} + (2,-3.5) node[algebraicName, purple] (H) {Übungsschein} + (1.8,-4.35) node[explanation] (X) { + \begin{minipage}{\textwidth} + \tiny + \begin{itemize} \itemsep-0.2em + \item Muss bestanden werden + \item Keine Note + \item keine Bonuspunkte + \end{itemize} + \end{minipage} + } + (6,-3.5) node[algebraicName, purple] (I) {Klausur} + (5.8,-4.3) node[explanation] (X) { + \begin{minipage}{\textwidth} + \tiny + \begin{itemize} \itemsep-0.2em + \item Muss bestanden werden + \item Abschlussnote ergibt Modulnote + \end{itemize} + \end{minipage} + }; + + \draw[blue, thick, rounded corners] ($(B.north west)$) rectangle ($(B.south east)$); + \draw[blue, thick, rounded corners] ($(C.north west)$) rectangle ($(C.south east)$); + \draw[blue, thick, rounded corners] ($(D.north west)$) rectangle ($(D.south east)$); + + \draw[purple, thick, rounded corners] ($(H.north west)$) rectangle ($(H.south east)$); + \draw[purple, thick, rounded corners] ($(I.north west)$) rectangle ($(I.south east)$); + + \draw[lime, thick, rounded corners] ($(B.north west)+(-0.1,0.1)$) rectangle ($(E.south east)+(0.1,-0.1)$); + \draw[lime, thick, rounded corners] ($(C.north west)+(-0.1,0.1)$) rectangle ($(F.south east)+(0.1,-0.1)$); + \draw[lime, thick, rounded corners] ($(D.north west)+(-0.1,0.1)$) rectangle ($(G.south east)+(0.1,-0.1)$); +\end{tikzpicture} +\end{frame} + +\subsection{Was ist der Job eines Tutors?} +\begin{frame} + \frametitle{Was ist der Job eines Tutors?} + \begin{itemize} + \item Fragen zum Stoff beantworten + \begin{itemize} + \item Gerne auch \emph{etwas} darüber hinaus + \end{itemize} + \item Fragen zur Vorlesung beantworten + \begin{itemize} + \item z.B. Klausurmodalitäten + \end{itemize} + \item Übungsblätter korrigieren + \end{itemize} +\end{frame} + +\subsection{Was ist nicht der Job eines Tutors?} +\begin{frame} + \frametitle{Was ist \underline{nicht} der Job eines Tutors?} + \begin{itemize} + \item Vorlesung wiederholen + \item Bespaßung im Tutorium + \item Jeden durch die Klausur bringen + \item \dots oder die Korrektur der Klausur + \end{itemize} +\end{frame} + +\subsection{Für was ist der Student verantwortlich?} +\begin{frame} + \frametitle{Für was ist der Student verantwortlich?} + Der Student ist für sich selbst verantwortlich, also \dots + \begin{itemize} + \item \dots die rechtzeitige Übungsblattabgabe + \item \dots die Vor- und Nachbereitung der Vorlesung + \item \dots das Lernen der Inhalte + \item \dots die rechtzeitige Klausuranmeldung + \item \dots das Finden relevanter Informationen + \end{itemize} +\end{frame} + +\subsection{Warnung!} + +\subsection{Erinnerungen} +\begin{frame}{Erinnerungen} + +\begin{block}{Praktomat-Anmeldung} +\url{https://praktomat.info.uni-karlsruhe.de/praktomat\_2012\_WS/} +\begin{itemize} +\item Deadline: \textbf{Freitag, 02. November 2012} +\end{itemize} +\end{block} + +\begin{block}{Disclaimer: \href{http://tinyurl.com/prog-disclaimer}{tinyurl.com/prog-disclaimer}} +\begin{itemize} +\item PDF im VAB +\item Abgabe in den Briefkasten der Vorlesung Programmieren\\(Gebäude 50.34, Keller) +\item Deadline: \textbf{Freitag, 02. November 2012} +\end{itemize} +\end{block} + +\begin{block}{Übungsschein \href{studium.kit.edu}{http://studium.kit.edu}} +\begin{itemize} +\item Anmeldung für den Übungsschein +\item Deadline: \textbf{Sonntag, 31. März 2013} +\end{itemize} +\end{block} +\end{frame} + +\subsection{Nicht abschreiben!} +\begin{frame}{Nicht abschreiben!} +\begin{alertblock}{Warnung!} +\begin{itemize} +\item \emph{\textbf{Nicht abschreiben!}} +\item Schon bei \textbf{einmaligem} Nachweis verwirkt man die Chance auf den \textbf{Übungsschein} +\item Ohne Schein darf man die \textbf{Abschlussaufgabe} nicht schreiben +\item Nur mit beidem besteht man das \textbf{Modul Programmieren} +\item Programmieren ist Teil der \textbf{Orientierungsprüfung} +\item Ohne bestandene Orientierungsprüfung bis zum 3. Semester \textbf{fällt man aus dem Studium} und darf bundesweit das Studienfach nicht mehr belegen! +\end{itemize} +\end{alertblock} +\end{frame} + +\subsection{Praktomat} +\begin{frame}{Praktomat} + \begin{itemize} + \item Ihr könnt beliebig häufig Lösungen hochladen! + \item Ladet Teillösungen hoch + \begin{itemize} + \item[$\Rightarrow$] Sicherungskopie für euch + \item[$\Rightarrow$] Eine vergessene Deadline ist nicht ganz so ärgerlich + \end{itemize} + \item Rechnet nicht mit der Erreichbarkeit des Praktomaten + kurz vor der Deadline + \item \textbf{Disclaimer nicht vergessen!} + \end{itemize} +\end{frame} + +\section{Was ist Programmieren?} +\subsection{Algorithmen} +\begin{frame} + \frametitle{Algorithmen} + \begin{block}{Allgemeines} + \begin{itemize} + \item Modul des 2. Semesters + \item 6 ECTS + \end{itemize} + \end{block} + \begin{block}{Themen} + \begin{itemize} + \item Sortieralgorithmen + \item Suchalgorithmen + \item Speicherplatz- und Laufzeitkomplexität + \item Weiterführende Datenstrukturen (Stack, Heap, B-Bäume, \dots) + \end{itemize} + \end{block} +\end{frame} + +\subsection{SWT - Softwaretechnik} +\begin{frame} + \frametitle{SWT - Softwaretechnik} + oder auch "`Programmieren im Großen"' + \begin{block}{Allgemeines} + \begin{itemize} + \item Modul des 2. Semesters + \item 6 ECTS + \end{itemize} + \end{block} + \begin{block}{Themen} + \begin{itemize} + \item Wie gehe ich die Entwicklung von Software an? + \item Wie strukturiere ich Programme? + \item Wie entwickle ich \emph{leicht} wartbare Software? + \item Entwurfsmuster + \item Wasserfallmodell, Scrum, V-Modell + \end{itemize} + \end{block} +\end{frame} + +\subsection{Programmieren} +\begin{frame} + \frametitle{Programmieren} + oder auch "`Programmieren im Kleinen"' + \begin{block}{Allgemeines} + \begin{itemize} + \item Modul des 1. Semesters + \item 5 ECTS + \item Teil der Orientierungsprüfung + \end{itemize} + \end{block} + \begin{block}{Themen} + \begin{itemize} + \item \textbf{Allgemeines}: Was ist eine if-Abfrage, was eine for- bzw. while-Schleife? + \item Wie mache ich meinen Code wartbar? + \item \textbf{Objektorientierung}: Was ist eine Klasse, was ein Objekt? + \item Modellierung von Problemen + \item \textbf{Elementare Datenstrukturen und -typen}: int, String, Array + \end{itemize} + \end{block} +\end{frame} + +\section{Java} +\subsection{Begriffe} +\begin{frame}{Begriffe} + \begin{block}{JDK} + Das Java Development Kit (JDK) ist eines der von + Java-Entwicklern meistgenutzten Java-SDKs.\\ + $[\dots]$ Nun wird eine angepasste freie Version als ihr nunmehr + offizieller Nachfolger unter dem Namen OpenJDK weitergeführt. + \end{block} + + \begin{block}{JRE} + Die Java-Laufzeitumgebung (englisch: Java Runtime Environment, kurz JRE) + ist die Laufzeitumgebung der Java-Technik. Mit ihr werden + Programme (Java-Anwendungen) weitgehend unabhängig vom + darunter liegenden Betriebssystem ausgeführt. + \end{block} + + Quelle: Wikipedia +\end{frame} + +\subsection{Workflow} +\framedgraphic{Workflow}{schaubild-java-workflow.png} + +\section{System einrichten} +\subsection{Linux} +\begin{frame}{Java unter Linux} + \begin{itemize} + \item Ubuntu: \href{http://wiki.ubuntuusers.de/Java/Installation}{UbuntuUsers.de}\\ + \myCode{\$ sudo apt-get install openjdk-7-jre openjdk-7-jdk} + \item Arch: \href{https://wiki.archlinux.de/title/Java}{archlinux.de}\\ + \myCode{\$ pacman -S jre7-openjdk} + \end{itemize} +\end{frame} + +\subsection{Windows} +\begin{frame}{Windows} + \begin{itemize} + \item \href{http://java.com/de/download/index.jsp}{java.com/download} + \end{itemize} + \includegraphics[width=100mm]{java-download.png} +\end{frame} + +\begin{frame}{Windows - 32 oder 64 Bit Version?} + \menu{Start > Systemsteuerung} oder \keys{Windows + Pause} + \includegraphics{windows-systemsteuerung.png} +\end{frame} + +\begin{frame}{Windows - cmd} + \begin{itemize} + \item Ausführen: \myCode{cmd} + \item \myCode{> javac -version} + \item \myCode{javac 1.7.0\_09} $\rightarrow$ hat geklappt + \item Sonst: javac zu PATH hinzufügen + \begin{enumerate} + \item Wo liegt "`javac.exe"'?\\(z.B. \directory{C:/Program Files/Java/jdk1.7.0\_09/bin/javac.exe}) + \item Systemsteuerung (\keys{Windows + Pause})\\ + \menu{Systemsteuerung > Erweiterte Systemeinstellungen > Umgebungsvariablen} + \item Zu "`Path"' durch \myCode{;} getrennt hinzufügen + \end{enumerate} + \end{itemize} +\end{frame} + +\subsection{Java testen} +\begin{frame}{Java testen} + \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=HelloWorld.java]{java}{HelloWorld.java} + \inputminted[linenos=false]{console}{Bash.sh} +\end{frame} + +\subsection{Eclipse: Allgemeines} +\begin{frame}{Eclipse: Allgemeines} + \begin{itemize} + \item Sehr komfortable Java-IDE: + \begin{itemize} + \item Syntaxhighlighting und Code-Vervollständigung + \item Automatisch korrektes Einrücken mit \keys{\ctrl + \shift + F}) + \end{itemize} + \item Sehr groß (RAM \& HDD) + \item Startet Langsam + \item Müsst ihr in SWT verwenden + \item Download: \href{http://www.eclipse.org/}{eclipse.org} + \end{itemize} +\end{frame} + +\subsection{Eclipse: Einrichten} +\begin{frame}{Eclipse: Einrichten} + \begin{itemize} + \item \menu{Window > Open Perspective > Java} + \item \menu{Window > Show Toolbar} + \item \menu{Window > Preferences > General > Editors > Text Editors} + \begin{itemize} + \item Show line numbers + \item Print margin column: 120 + \end{itemize} + \end{itemize} +\end{frame} + +\framedgraphic{Zwischenstand}{eclipse-einrichten.png} + +\subsection{Eclipse: Erstes Projekt} +\begin{frame}{Eclipse: Erstes Projekt} + \begin{itemize} + \item \menu{File > New > Java}: Projektname: HelloWorld + \item \menu{File > New > Class}: Name: HelloWorld + \end{itemize} +\end{frame} + +\framedgraphic{Zwischenstand}{eclipse-projekt.png} + +\section{Wiederholung} +\subsection{Begriffe} +\begin{frame}{Begriffe} + Welche Begriffe habt ihr in der Vorlesung kennen gelernt? +\end{frame} + +\begin{frame}{Begriffe} + \begin{itemize} + \item \textbf{Objekt}: Exemplar eines bestimmten Datentyps + \item \textbf{Klasse}: abstraktes Modell für eine Reihe von ähnlichen Objekten + \item \textbf{Variable}: Behälter für Werte + \item \textbf{Konstante}: Wert, der sich während der Laufzeit des Programms nicht ändern kann + \item \textbf{Attribut}: Eigenschaft eines konkreten Objekts + \item \textbf{Funktion}: Programmkonstrukt mit Parametern und Rückgabewert + \item \textbf{Methode}: Funktion in einem Objekt + \item \textbf{Datentyp}: Zusammenfassung von Objektmengen mit den darauf definierten Operationen + \item int, Integer + \item String + \item \dots + \end{itemize} +\end{frame} + +\subsection{Beispiel für eine Klasse} +\begin{frame}{Beispiel für eine Klasse} + \begin{block}{Schal} + \begin{itemize} + \item hat eine Farbe + \item besteht aus einem Stoff + \item hat eine Länge + \item kann warm halten + \end{itemize} + \end{block} +\end{frame} + +\subsection{Java: Primitive Datentypen} +\begin{frame}{Java: Primitive Datentypen} + \begin{tabular}{l|l|l} + Datentyp & Werte & Länge\\ + \hline + \hline + boolean & \texttt{true} oder \texttt{false} & 1 Byte\\ + char & 16-Bit Unicode Zeichen & 2 Byte\\ + \hline + byte & $-2^7 =-128 \dots 2^7-1$ & 1 Byte\\ + short & $-2^{15}=-32\,768 \dots 2^{15}-1$ & 2 Byte\\ + int & $-2^{31}\approx-2 \cdot 10^9 \dots 2^{31}-1$ & 4 Byte\\ + long & $-2^{63}=-9\cdot 10^{18} \dots 2^{63}-1$ & 8 Byte\\ + \hline + float & single-precision 32-bit IEEE 754 floating point & 4 Byte\\ + double & double-precision 64-bit IEEE 754 floating point & 8 Byte\\ + \end{tabular} + \\ + Quelle: \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html}{docs.oracle.com} +\end{frame} + +\subsection{Java: Enum} +\begin{frame}{Java: Enum} + \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Day.java]{java}{Day.java} + Quelle: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html}{docs.oracle.com} + \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=SomeClass.java]{java}{SomeClass.java} +\end{frame} + +\subsection{Java: String} +\begin{frame}{Java: String} + \begin{itemize} + \item \textbf{Klasse} für Zeichenketten + \item UTF-16 + \item max. $2^{31}-1 = 2\,147\,483\,647$ Zeichen (siehe \href{http://stackoverflow.com/a/816152/562769}{stackoverflow.com}) + \begin{itemize} + \item King James Bible: $4\,397\,206$ Zeichen\\ + (\href{http://printkjv.ifbweb.com/\#downloads}{Quelle} \& \myCode{wc -w file.txt}) + \end{itemize} + \item weitere Informationen: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html}{docs.oracle.com} + \end{itemize} +\end{frame} + +\subsection{Java: Naming Conventions} +\begin{frame}{Java: Naming Conventions} + \begin{itemize} + \item \myCode{camelCase} für Variablen und Attribute + \item \myCode{BIG\_AND\_FAT} für Konstanten + \item Typische Variablen- und Methodennamen: + \begin{itemize} + \item isSomething: Meist für \texttt{boolean} + \item hasSomething: Meist Methode mit Rückgabewert \texttt{boolean} + \item getValue: Getter, Wrapper für Attribut "`value"' + \item setValue: Setter, Wrapper für Attribut "`value"' + \end{itemize} + \item Genauer: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{orcacle.com}, ab S. 15 + \end{itemize} +\end{frame} + +\subsection{Aufgabenstellung} +\begin{frame}{Aufgabenstellung} + \begin{alertblock}{Bitte achtet auf folgendes:} + \begin{itemize} + \item Einsatz sinnvoller Datentypen + \item aussagekräftige Attributnamen + \item Einrückungen, Namenskonventionen, Dokumentation + \end{itemize} + \end{alertblock} +\end{frame} + +\section{Abspann} +\subsection{Hinweise zum Übungsblatt} + \begin{frame}{Hinweise zum Übungsblatt} + \begin{itemize} + \item Aufgaben online im \textbf{Praktomaten} oder im \textbf{VAB} + \item Abgabetermin: Montag, der \textbf{5. November 2012, 13 Uhr} + \item Abgabe online im Praktomaten\\ + Uni-Netz oder VPN erforderlich! + \item min. \textbf{50 \% der Gesamtpunktzahl} zum Bestehen des Scheins\\ + (ca. 60 Punkte) + \item \textbf{keine Bibliotheken} verwenden, die im Übungsblatt nicht explizit zugelassen wurden + \item keine ungewollte Funktionalität einbauen – es gilt die Devise:\\ \textbf{Einfache Fragen erfordern einfache Antworten!} + \end{itemize} +\end{frame} + +\subsection{Dropbox Space Race} + \begin{frame}{Dropbox Space Race} + \begin{itemize} + \item Hat nichts mit Programmieren zu tun + \item Bei \href{https://www.dropbox.com/spacerace}{dropbox.com} anmelden + \item KIT ist auf Platz 3, RWTH Aachen und TU München vor uns + \end{itemize} +\end{frame} + +\subsection{Comic} +\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/Teach-yourself-C++-in-21-days.png} + +\end{document} diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png b/presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png new file mode 100755 index 0000000..c0ea66f Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png b/presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png new file mode 100755 index 0000000..66ad758 Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Baby-02.java b/presentations/Programmieren-Tutorium/Tutorium-02/Baby-02.java new file mode 100644 index 0000000..1c24429 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Baby-02.java @@ -0,0 +1,28 @@ +public class Baby { + /** + * Write something in the constructor + * @param weight set weight in gramm + * @param size the size in cm + * @param loudness the loudnes in dB + */ + public Baby(int weight, int size, float loudness) { + super(); + this.name = name; + this.weight = weight; + this.size = size; + this.loudness = loudness; + } + + /** Der Vor- und Nachname des Babys */ + public String name; + + /** Gewicht in Gramm */ + public int weight; + + /** Größe in cm */ + public int size; + + /** Lautstärke in dB */ + public float loudness; +} + diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Baby.java b/presentations/Programmieren-Tutorium/Tutorium-02/Baby.java new file mode 100644 index 0000000..d8cd01f --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Baby.java @@ -0,0 +1,14 @@ +public class Baby { + /** Der Vor- und Nachname des Babys */ + public String name; + + /** Gewicht in Gramm */ + public int weight; + + /** Größe in cm */ + public int size; + + /** Lautstärke in dB */ + public float loudness; +} + diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Bool-02.java b/presentations/Programmieren-Tutorium/Tutorium-02/Bool-02.java new file mode 100644 index 0000000..254011f --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Bool-02.java @@ -0,0 +1,11 @@ +public class Bool { + public static void main(String[] v) { + int x = 42; + + if (x = x + 42) { + System.out.println("Das Leben"); + } else { + System.out.println("Das Universum"); + } + } +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Bool.java b/presentations/Programmieren-Tutorium/Tutorium-02/Bool.java new file mode 100644 index 0000000..e87fcc1 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Bool.java @@ -0,0 +1,21 @@ +public class Bool { + public static void main(String[] v) { + boolean a = true; + boolean b = false; + boolean c = true; + int d = 0; + boolean e = false; + + if (a && b && c) { + System.out.println("Alpha"); + } + + if (d) { + System.out.println("Beta"); + } + + if (a||b && b||e) { + System.out.println("Gamma"); + } + } +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Makefile b/presentations/Programmieren-Tutorium/Tutorium-02/Makefile new file mode 100644 index 0000000..61b58f8 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Makefile @@ -0,0 +1,10 @@ +SOURCE = tutorium-02 + +make: + #latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex + pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt + pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Math.java b/presentations/Programmieren-Tutorium/Tutorium-02/Math.java new file mode 100644 index 0000000..8b96999 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Math.java @@ -0,0 +1,9 @@ +public final class Math { + private Math() {} + + public static final double E = 2.7182818284590452354; + + public static final double PI = 3.14159265358979323846; + + // [..] +} diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Shark-constructor.java b/presentations/Programmieren-Tutorium/Tutorium-02/Shark-constructor.java new file mode 100644 index 0000000..5c27cdb --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Shark-constructor.java @@ -0,0 +1,11 @@ +public class Shark { + private int size; + + // constructor + public Shark(int size) { + this.size = size; + } +} + +// initializes object +Shark erik = new Shark(25); diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/Shark.java b/presentations/Programmieren-Tutorium/Tutorium-02/Shark.java new file mode 100644 index 0000000..02bb49a --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/Shark.java @@ -0,0 +1,17 @@ +public class Shark { + // attributes + private Laser laserAttachedToHead; + + // methods + public void attack(Enemy e) { + this.laserAttachedToHead.fire(e); + } + + private void eat() { + // rawr! + } +} + +// invoke method +Shark erik = new Shark(); +erik.attack(somalianPirate); diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/String-01.java b/presentations/Programmieren-Tutorium/Tutorium-02/String-01.java new file mode 100644 index 0000000..98ae262 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/String-01.java @@ -0,0 +1,3 @@ +String myVar = "Hallo"; // String mit Inhalt +String myVar2 = new String(); // leerer String +String myVar3 = ""; // auch ein leerer String diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/String-02.java b/presentations/Programmieren-Tutorium/Tutorium-02/String-02.java new file mode 100644 index 0000000..39bda1f --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/String-02.java @@ -0,0 +1,6 @@ +String myVar = "Hallo"; +String myVar2 = "Welt"; + +// Verknuepfen von Strings +String result1 = myVar + " " + myVar2 ; +String result2 = myVar2 + "+" + myVar2 ; diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/String-03.java b/presentations/Programmieren-Tutorium/Tutorium-02/String-03.java new file mode 100644 index 0000000..75bdd3f --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/String-03.java @@ -0,0 +1 @@ +String = "Hallo \"Welt\""; diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/String-04.java b/presentations/Programmieren-Tutorium/Tutorium-02/String-04.java new file mode 100644 index 0000000..e5c3ea8 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/String-04.java @@ -0,0 +1 @@ +String = "Hallo \n Welt"; diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/String-05.java b/presentations/Programmieren-Tutorium/Tutorium-02/String-05.java new file mode 100644 index 0000000..ba8060f --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/String-05.java @@ -0,0 +1 @@ +String = "Hallo \\ Welt"; diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/comparisons.js b/presentations/Programmieren-Tutorium/Tutorium-02/comparisons.js new file mode 100644 index 0000000..c0827c0 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/comparisons.js @@ -0,0 +1,12 @@ +'' == '0' // false +0 == '' // true +0 == '0' // true + +false == 'false' // false +false == '0' // true + +false == undefined // false +false == null // false +null == undefined // true + +' \t\r\n ' == 0 // true diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/eclipse-icon.png b/presentations/Programmieren-Tutorium/Tutorium-02/eclipse-icon.png new file mode 100644 index 0000000..a8cf04a Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-02/eclipse-icon.png differ diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/index.htm b/presentations/Programmieren-Tutorium/Tutorium-02/index.htm new file mode 100644 index 0000000..58cb095 --- /dev/null +++ b/presentations/Programmieren-Tutorium/Tutorium-02/index.htm @@ -0,0 +1,47 @@ + + + + Snake + + +

+
+
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/static-01.java b/presentations/Programmieren-Tutorium/Tutorium-02/static-01.java
new file mode 100644
index 0000000..c531111
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-02/static-01.java
@@ -0,0 +1,7 @@
+int var = Jeep.ANZAHLRAEDER ; // Zugriff wie er sein sollte
+
+Jeep myJeep = new Jeep ( ) ; // Objekterzeugung
+
+int var2 = myJeep.ANZAHLRAEDER ; // Zugriff wie er nicht sein sollte
+// ... geth aber
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/syntax-error.png b/presentations/Programmieren-Tutorium/Tutorium-02/syntax-error.png
new file mode 100644
index 0000000..299c74a
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-02/syntax-error.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-02/tutorium-02.tex b/presentations/Programmieren-Tutorium/Tutorium-02/tutorium-02.tex
new file mode 100644
index 0000000..a7e7c4e
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-02/tutorium-02.tex
@@ -0,0 +1,276 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{xcolor}
+\usepackage{tabularx}
+\usepackage{wrapfig}
+\usepackage{../templates/myStyle}
+
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}
+
+\begin{document}
+\title{\titleText}
+\subtitle{TODO: Subtitle setzen!}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Bool.java, fontsize=\tiny]{java}{Bool.java}
+    \begin{itemize}
+        \item Was ist die Ausgabe?
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+    \end{itemize}
+\end{frame}
+
+\subsection{Compiler-Fehler}
+\begin{frame}{Compiler-Fehler}
+    \begin{itemize}[<+->]
+        \item Treten bei "`offensichtlichen"' Fehlern auf
+        \item Eclipse beschwert sich: \includegraphics{eclipse-icon.png}.\\
+            Häufige Fehler:
+            \begin{itemize}
+                \item \myCode{[foo] cannot be resolved to a type}: Klassenname nicht definiert? Falsch geschrieben?
+                \item \myCode{[foo] cannot be resolved}: Die Variable \myCode{foo} wurde nicht deklariert
+            \end{itemize}
+        \item Es kann kein gülter Java Byte-Code erstellt werden
+    \end{itemize}
+\end{frame}
+
+\subsection{Syntax-Fehler}
+\begin{frame}{Syntax-Fehler}
+    \begin{itemize}[<+->]
+        \item Eclipse beschwert sich: \includegraphics{syntax-error.png}
+        \item Eine Klasse von Compiler-Fehlern
+    \end{itemize}
+\end{frame}
+
+\subsection{Laufzeit-Fehler}
+\begin{frame}{Laufzeit-Fehler}
+    \begin{itemize}[<+->]
+        \item Schwer(er) zu finden
+        \item Gültiger Byte-Code kann erzeugt werden
+        \item Muss nicht immer auftreten
+        \item Eclipse beschwert sich nicht
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Bool.java, fontsize=\tiny]{java}{Bool-02.java}
+    \begin{itemize}
+        \item Was ist die Ausgabe?
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+    \end{itemize}
+\end{frame}
+
+\subsection{Java vs. JavaScript}
+\begin{frame}{Java vs. JavaScript}
+    \begin{tabularx}{\textwidth}{X|X}
+        Java                & JavaScript \\
+        \hline
+        \hline
+        Keine Scriptsprache & Definitiv Scriptsprache\\
+        statisch typisiert  & dynamisch typisiert\\
+        Klassen             & Prototypen\\
+        Blockbasiertes Scoping & Funktionsbasiertes Scoping\\
+        \dots               & \dots
+    \end{tabularx}
+\end{frame}
+
+\subsection{Java vs. JavaScript}
+\begin{frame}{Java vs. JavaScript}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=comparisons.js, fontsize=\tiny]{javascript}{comparisons.js}
+\end{frame}
+
+\subsection{Snake}
+\begin{frame}{Snake}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=comparisons.js, fontsize=\tiny,firstline=9,firstnumber=9]{javascript}{index.htm}
+\end{frame}
+
+\section{Wiederholung}
+\subsection{String erzeugen}
+\begin{frame}{String erzeugen}
+  \myCode{String} ist eine Java-Klasse, aber \dots:
+  \inputminted[linenos, numbersep=5pt, tabsize=4]{java}{String-01.java}
+\end{frame}
+
+\subsection{String konkatenieren}
+\begin{frame}{String konkatenieren}
+  String ist kein primitiver Datentyp! Trotzdem kann man "`rechnen"':
+  \inputminted[linenos, numbersep=5pt, tabsize=4]{java}{String-02.java}
+\end{frame}
+
+\subsection{String und Escape-Zeichen}
+\begin{frame}{String und Escape-Zeichen}
+  String mit Inhalt \myCode{Hallo "Welt"'}:
+  \inputminted[linenos, numbersep=5pt, tabsize=4]{java}{String-03.java}
+  \vspace{6 mm}
+  \visible<2->{
+        String mit Zeilenumbruch:
+        \inputminted[linenos, numbersep=5pt, tabsize=4]{java}{String-04.java}
+   }
+  \vspace{6 mm}
+  \visible<3->{
+        String mit Inhalt \myCode{Hallo \textbackslash{} Welt}:
+        \inputminted[linenos, numbersep=5pt, tabsize=4]{java}{String-05.java}
+   }
+\end{frame}
+
+\subsection{Methoden}
+\begin{frame}{Methoden}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Shark.java, fontsize=\tiny]{java}{Shark.java}
+    {\tiny Quelle: \href{http://kit.trvx.org/build/tutorial-02.html\#/7}{kit.trvx.org}}
+    \newline
+    \newline
+    Wie kann man Erik auffordern zu essen?
+\end{frame}
+
+\subsection{Konstruktoren}
+\begin{frame}{Konstruktoren}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Shark.java, fontsize=\tiny]{java}{Shark-constructor.java}
+    {\tiny Quelle: \href{http://kit.trvx.org/build/tutorial-02.html\#/8}{kit.trvx.org}}
+    \newline
+    \newline
+    \begin{itemize}
+        \item Was ist die Konstruktorsignatur?
+        \item Was ist shadowing und warum benutzt man 'this'?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Konstruktoren}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Shark.java, fontsize=\tiny]{java}{Shark-constructor.java}
+    {\tiny Quelle: \href{http://kit.trvx.org/build/tutorial-02.html\#/8}{kit.trvx.org}}
+    \newline
+    \newline
+    \begin{itemize}
+        \item Konstruktorsignatur $\rightarrow$ \myCode{public Shark(int size)}
+        \item Shadowing und 'this' $\rightarrow$ Variable \myCode{size} verbirgt das Attribut \myCode{size}
+              $\Rightarrow$ das Attribut wird über \myCode{this.size aufgerufen}
+    \end{itemize}
+\end{frame}
+
+\subsection{static}
+\begin{frame}{static}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Math.java, fontsize=\tiny]{java}{Math.java}
+    {\tiny Quelle: \href{http://www.docjar.com/html/api/java/lang/Math.java.html}{docjar.com}}
+    \newline
+    \newline
+  \visible<2->{
+     \inputminted[linenos, numbersep=5pt, tabsize=4, frame=leftline, fontsize=\tiny]{java}{static-01.java}
+   }
+\end{frame}
+
+\section{Werbeblock}
+\subsection{Bundeswettbewerb Informatik}
+\begin{frame}{Bundeswettbewerb Informatik}
+    \begin{itemize}[<+->]
+        \item Unbedingt Teilnehmen:
+          \begin{itemize}
+             \item Spielerische Einführung ins Lösen algorithmischer Probleme
+             \item Sehr lehrreich
+             \item Preise (Sachpreise, Fahrt zur Endrunde, Geld, Studienstiftung)
+             \item Kontakte
+          \end{itemize}
+        \item "`Insider-Hinweise"' auf \href{http://martin-thoma.com/bundeswettbewerb-informatik/}{martin-thoma.com}
+        \item Offizielles und Aufgaben unter \href{http://www.bundeswettbewerb-informatik.de/}{bundeswettbewerb-informatik.de}
+    \end{itemize}
+\end{frame}
+
+\section{Praxis}
+\subsection{Aufgabe 1a)}
+\begin{frame}{Aufgabe 1a)}
+    Entwerfen Sie eine Klasse Baby mit den Attributen Name, Gewicht, 
+    Größe und Lautstärke (eventuell fallen Ihnen weitere sinnvolle 
+    Attribute ein).
+\end{frame}
+
+\subsection{Aufgabe 1a) - Lösung}
+\begin{frame}{Aufgabe 1a) - Lösung}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Baby.java, fontsize=\tiny]{java}{Baby.java}
+\end{frame}
+
+\subsection{Aufgabe 1b)}
+\begin{frame}{Aufgabe 1b)}
+    Schreiben Sie einen Konstruktor für ihre Baby-Klasse. Der Name
+    soll nicht in den Konstruktur.
+\end{frame}
+
+\subsection{Aufgabe 1b) - Lösung}
+\begin{frame}{Aufgabe 1b) - Lösung}
+    \inputminted[linenos, numbersep=5pt, tabsize=4, frame=lines, label=Baby.java, fontsize=\tiny]{java}{Baby-02.java}
+\end{frame}
+
+\subsection{Aufgabe 1c)}
+\begin{frame}{Aufgabe 1c)}
+    Schreiben Sie eine \texttt{main}-Methode und instanzieren Sie Babies.
+\end{frame}
+
+\subsection{Aufgabe 1d)}
+\begin{frame}{Aufgabe 1d)}
+    Erweitern Sie die Klasse \texttt{Baby} um ein Attribut "`Geschlecht"'.\\
+
+    Jedes Mädchen ohne Taufe ({\tiny also ohne weitere Namenszuweisung}) 
+    soll  bei der Geburt ({\tiny also der Objekterstellung}) den Namen "`Anna"'
+    bekommen, jeder Junge den Namen "`Bob"'.
+\end{frame}
+
+\section{Abspann}
+\subsection{Kontrolle}
+\begin{frame}{Kontrolle}
+    Habt ihr \dots
+    \begin{itemize}
+        \item[\dots] den Disclaimer abgegeben? {\tiny Deadline: Freitag, 02. November 2012}
+        \item[\dots] euch für die Klausur angemeldet? {\tiny vernünftige Deadline: Noch dieses Jahr!}
+        \item[\dots] das Übungsblatt angefangen? {\tiny Deadline: Montag, 05. November 2012, 13 Uhr}
+    \end{itemize}
+\end{frame}
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/hello-world-cartoon.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/JavaDoc.java b/presentations/Programmieren-Tutorium/Tutorium-03/JavaDoc.java
new file mode 100644
index 0000000..889d1e4
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/JavaDoc.java
@@ -0,0 +1,22 @@
+/**
+ * Sets the tool tip text.
+ *
+ * @param text  the text of the tool tip
+ */
+public void setToolTipText(String text) {
+}
+
+/**
+ * Registers the text to display in a tool tip.   The text 
+ * displays when the cursor lingers over the component.
+ *
+ * @param text  the string to display.  If the text is null, 
+ *              the tool tip is turned off for this component.
+ */
+public void setToolTipText(String text) {
+}
+
+int level, size;
+
+int level; // indentation level
+int size;  // size of table
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/Kontrollstrukturen.java b/presentations/Programmieren-Tutorium/Tutorium-03/Kontrollstrukturen.java
new file mode 100644
index 0000000..a9e3416
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/Kontrollstrukturen.java
@@ -0,0 +1,49 @@
+if () {
+    // Anweisung für ' ist wahr'
+} else {
+    // Anweisung für ' ist falsch'
+}
+
+if () {
+    // Anweisung für ' ist wahr'
+} else if () {
+    // Anweisung für ' ist wahr'
+} else {
+    // Anweisung für ' ist falsch'
+}
+
+public class World {
+    public static void main(String[] a) {
+        int monat = 12;
+        switch (monat) {
+        case 1:
+            System.out.println("Es ist Januar!");
+            break;
+        case 2:
+            System.out.println("Es ist Februar!");
+            break;
+        case 3:
+            System.out.println("Es ist März!");
+            break;
+        default:
+            // Anweisung, wenn monat keinen angegebener Wert angenommen hat.
+            System.out.println("Es ist Weihnachten!");
+        }
+    }
+}
+
+while(true) {
+    System.out.println("It's true!");
+}
+
+for (int i = 0; i < 10; i++) {
+    System.out.println(i);
+}
+
+while (bedingung) {
+    // Anweisungen werden ausgeführt, solange bedingung == true
+}
+
+do {
+    // Anweisungen werden ausgeführt, solange bedingung == true
+} while (bedingung);
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/Makefile b/presentations/Programmieren-Tutorium/Tutorium-03/Makefile
new file mode 100644
index 0000000..33a86f5
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-03
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/Quiz-Answer.sh-session b/presentations/Programmieren-Tutorium/Tutorium-03/Quiz-Answer.sh-session
new file mode 100644
index 0000000..063ca0f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/Quiz-Answer.sh-session
@@ -0,0 +1,5 @@
+user@pc:~/Tutorium-03$ javac Quiz.java 
+Quiz.java:5: variable b might not have been initialized
+        if (a == b) {
+                 ^
+1 error
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/Quiz.java b/presentations/Programmieren-Tutorium/Tutorium-03/Quiz.java
new file mode 100644
index 0000000..8938fc8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/Quiz.java
@@ -0,0 +1,11 @@
+public class Quiz {
+    public static void main(String[] args) {
+        String a = "";
+        String b;
+        if (a == b) {
+            System.out.println("Nyan Cat");
+        } else {
+            System.out.println("42");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/QuizIf.java b/presentations/Programmieren-Tutorium/Tutorium-03/QuizIf.java
new file mode 100644
index 0000000..c9b53f0
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/QuizIf.java
@@ -0,0 +1,13 @@
+public class QuizIf {
+    public static void main(String[] a) {
+        int monat = 12;
+
+        if (monat == 12) {
+            System.out.println("12");
+        } else if (monat / 2 == 6) {
+            System.out.println("6");
+        } else {
+            System.out.println("2");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/Visibility.java b/presentations/Programmieren-Tutorium/Tutorium-03/Visibility.java
new file mode 100644
index 0000000..4e65cd7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/Visibility.java
@@ -0,0 +1,39 @@
+public class Student {
+    // die Attribute sind nun nach außen nicht mehr sichtbar
+    private String name;
+    private int semester;
+    private int matriculationNumber;
+
+    public Student(String name, int semester, int matriculationNumber) {
+        // hier wird wie gewohnt alles initialisiert
+    }
+}
+
+public class Main {
+    public static void main(String[] args) {
+        Student maxMustermann = new Student("Max Mustermann", 3, 1234567);
+        // hier bekommt man nun einen Compilerfehler
+        maxMustermann.matriculationNumber = 3141592;
+        // ...
+    }
+}
+
+public class Student {
+    // ... Attribute, Konstruktor usw. ...
+
+
+    // die getter-Methode für das Attribute 'name'
+    public String getName() {
+        return this.name;
+    }
+    // ... weitere getter-Methoden usw. ...
+}
+
+public class Main {
+    public static void main(String[] args) {
+        Student maxMustermann = new Student("Max Mustermann", 3, 1234567);
+        // liest den Namen und gibt ihn aus
+        System.out.println(maxMustermann.getName());
+        // ...
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/eclipse-getter-setter.png b/presentations/Programmieren-Tutorium/Tutorium-03/eclipse-getter-setter.png
new file mode 100644
index 0000000..8899bb7
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-03/eclipse-getter-setter.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-03/singleLines.java
new file mode 100644
index 0000000..09ff829
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/singleLines.java
@@ -0,0 +1,6 @@
+int[] myArray; // Integer-Array
+int[] myArray = new int[3]; // Array mit 3 int-Werten
+int[] myArray = {5, 3, 1}; // Definiere die Werte des Arrays
+// -> Größe ist implizit gegeben
+String[] myStringArray;
+String myStringArray[];
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/stringly-typed.jpg b/presentations/Programmieren-Tutorium/Tutorium-03/stringly-typed.jpg
new file mode 100644
index 0000000..6d9bcce
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-03/stringly-typed.jpg differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/tutorium-03.tex b/presentations/Programmieren-Tutorium/Tutorium-03/tutorium-03.tex
new file mode 100644
index 0000000..3667ea0
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-03/tutorium-03.tex
@@ -0,0 +1,462 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{xcolor}
+\usepackage{menukeys}
+\usepackage{../templates/myStyle}
+
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Eclipse, Arrays, Kontrollstrukturen und Konventionen}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Quiz.java}
+    \begin{itemize}
+        \item Was ist die Ausgabe?
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz: Antwort}
+\begin{frame}{Quiz: Antwort}
+    Ein Compiler-Fehler:
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{console}{Quiz-Answer.sh-session}
+\end{frame}
+
+
+
+\section{Eclipse}
+\subsection{Frühere Folien}
+\begin{frame}{Frühere Folien}
+    \begin{itemize}
+        \item Installation (für Windows): \href{http://www.eclipse.org/}{eclipse.org}
+        \item \menu{Window > Open Perspective > Java}
+        \item \menu{Window > Show Toolbar}
+        \item \menu{Window > Preferences > General > Editors > Text Editors}
+            \begin{itemize}
+                \item Show line numbers
+                \item Print margin column: 120
+            \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\subsection{Checkstyle: Installation}
+\begin{frame}{Checkstyle: Installation}
+    \begin{itemize}
+        \item Internetverbindung wird benötigt!
+        \item \menu{Help > Install New Software}
+        \item Work with: \myCode{http://eclipse-cs.sf.net/update/}
+        \item Klick auf \menu{Add...}
+        \item Name: "`Checkstyle"'
+        \item Warten
+        \item Nun sollten zwei Einträge erscheinen
+        \item "`Checkstyle"' auswählen
+        \item auf \menu{Next} klicken (und dann nochmal)
+        \item "`I accept the terms of the licence agreement"'
+        \item auf \menu{Finish} klicken und dann herunterladen lassen
+        \item "`Warning: You are installing software [...]"' $\rightarrow$ klick auf \menu{OK}
+        \item Eclipse neustarten lassen (Klick auf \menu{Yes})
+    \end{itemize}
+\end{frame}
+
+\subsection{Checkstyle: Einrichten}
+\begin{frame}{Checkstyle: Einrichten}
+    \begin{itemize}
+        \item "`Checkstyle.xml"' herunterladen: \href{https://raw.github.com/MartinThoma/prog-ws1213/master/Dokumente/whitespace-checks.xml}{tinyurl.com/checkstyle-ws}
+    \end{itemize}
+    Bei jeden Java-Projekt wieder:
+    \begin{itemize}
+        \item \menu{Project > Properties > Checkstyle}
+        \item Check "`checkstyle active for this project"'
+        \item Reiter \menu{Local Check Configurations}
+        \item \menu{New\dots}
+          \begin{itemize}
+            \item Type: "`Internal Configuration"'
+            \item Name: "`KIT Checkstyle"'
+            \item \menu{Import} $\rightarrow$ "`checkstyle.xml"' auswählen
+            \item \menu{OK} klicken
+          \end{itemize}
+        \item Reiter \menu{Main} auswählen
+        \item "`KIT Checkstyle - (Local)"' auswählen
+        \item \menu{OK} klicken
+        \item "`The project needs to be rebuild [...]"' $\rightarrow$ \menu{Yes}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Checkstyle: Einrichten}
+    Nochmal mit Screenshots: \href{http://martin-thoma.com/checkstyle/}{martin-thoma.com/checkstyle}
+\end{frame}
+
+\section{Arrays}
+\subsection{Was sind Arrays ...}
+\begin{frame}{Was sind Arrays ...}
+    ... und wozu braucht man sie?
+    \begin{itemize}
+        \item viele Werte in einem Variablennamen
+        \item Elemente haben alle den selben Typ
+        \item[$\Rightarrow$] zu jeden Typen gibt es Arrays
+    \end{itemize}
+\end{frame}
+
+\subsection{Visualisierung}
+\begin{frame}{Visualisierung}
+    \includegraphics[height=30mm]{array.pdf}
+    \begin{itemize}
+        \item Indices: 0, 1, 2, 3, 4
+        \item Länge des Arrays: 5
+        \item Erstes Element: d
+    \end{itemize}
+\end{frame}
+
+\subsection{Minimalbeispiele}
+\begin{frame}{Minimalbeispiele}
+Deklarieren:
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=1, lastline=1, fontsize=\small]{java}{singleLines.java}
+\vspace{5 mm}
+Deklarieren und instanziieren:
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=2, lastline=2, fontsize=\small]{java}{singleLines.java}
+\vspace{5 mm}
+Deklarieren und initialisieren:
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=3, lastline=4, fontsize=\small]{java}{singleLines.java}
+\end{frame}
+
+\subsection{Konvention}
+\begin{frame}{Konvention}
+    \begin{itemize}
+        \item[(A)] Geht, soll man aber nicht machen:
+                   \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=6, lastline=6, fontsize=\small]{java}{singleLines.java}
+        \item[(B)] So ist es gut:
+                   \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=5, lastline=5, fontsize=\small]{java}{singleLines.java}
+    \end{itemize}
+
+    \only<2->{
+        Warum ist Variante (B) besser?
+        \begin{itemize}
+            \item<3-> Der Entwicker kann sofort den Typen sehen
+            \item<4-> \href{http://stackoverflow.com/q/13175193/562769}{Konvention}
+        \end{itemize}
+    }
+\end{frame}
+
+\subsection{Ressourcen}
+\begin{frame}{Ressourcen}
+  \begin{itemize}
+    \item \href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{JLS 7}: Ab S. 291
+    \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html}{Java 7 API}
+    \item \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html}{Java Tutorial}
+  \end{itemize}
+\end{frame}
+
+\section{Random Style Guide}
+\subsection{Antipattern: Yoda-Conditions}
+\begin{frame}{Antipattern: Yoda-Conditions}
+    \includegraphics[width=60mm]{yoda-condition.png}\\
+    \begin{quote}
+        Using \myCode{if(constant == variable)} instead of 
+        \myCode{if(variable == constant)}, like \myCode{if(4 == foo)}. 
+        Because it's like saying ``if blue is the sky'' or ``if tall 
+        is the man''.
+    \end{quote}
+    Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}\\
+
+    Bitte nicht machen!
+\end{frame}
+
+\subsection{Deklarationen}
+\begin{frame}{Deklarationen}
+    \begin{itemize}
+        \item 1 $\frac{\text{Deklaration}}{\text{Zeile}}$\\
+              \vspace{4mm}
+              Nicht so:
+              \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=19, lastline=19]{java}{JavaDoc.java}
+              \vspace{4mm}
+              Sondern so:
+              \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=21, lastline=22]{java}{JavaDoc.java}
+        \item Variablen immer dort initialisieren, wo sie deklariert werden\\
+              Ausnahme: Initialisierungswert ist von vorherigen Berechnungen abhängig
+    \end{itemize}
+\end{frame}
+
+\subsection{Antipattern: Stringly Typed}
+\begin{frame}{Antipattern: Stringly Typed}
+\begin{wrapfigure}{r}{3.1cm}
+    \includegraphics[width=3cm]{stringly-typed.jpg}
+\end{wrapfigure}
+
+Used to describe an implementation that \\
+needlessly relies on strings.\\
+\vspace{2cm}
+Excessively stringly typed code is usually\\
+a pain to understand and detonates at \\
+runtime with errors that the compiler would \\
+normally find.
+
+Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}
+\end{frame}
+
+\section{Getter/Setter}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Getter und Setter sind \dots
+    \begin{itemize}[<+->]
+        \item \dots Methoden
+        \item \dots ein "`Interface"'
+        \item \dots \href{http://de.wikipedia.org/wiki/Zugriffsfunktion}{Zugriffsfunktionen} zur Abfrage und Änderung
+    \end{itemize}
+\end{frame}
+
+\subsection{Warum Getter/Setter?}
+\begin{frame}{Warum Getter/Setter?}
+    Vorteile von Getter und Setter-Methoden sind \dots
+    \begin{itemize}[<+->]
+        \item \dots (später auftretende) Nebenbedingungen beim get / set
+        \item \dots Validierung bei set
+        \item \dots Verbergen der Implementierung $\rightarrow$ Geheimnisprinzip
+    \end{itemize}
+\end{frame}
+
+\subsection{Modifikatoren}
+\begin{frame}{Modifikatoren}
+  \begin{block}{Zugriffsmodifikatoren}
+    Mit Hilfe von \textbf{Zugriffsmodifikatoren} (access modifiers) lassen sich die
+    \textbf{Sichtbarkeiten} von Programmteilen regeln:
+    \begin{itemize}
+        \item \textbf{public} Element: Element ist für alle Klassen sichtbar
+        \item<2-> \textbf{private} Element: Element ist nur innerhalb seiner Klasse sichtbar
+        \item<3-> \textbf{protected} Element: Element ist nur innerhalb seiner Klasse, deren
+              Subklassen und allen Klassen im selben Paket sichtbar
+              $\rightarrow$ später mehr dazu
+        \item<4-> \textbf{kein Modifier}: Element ist nur innerhalb seiner Klasse und der
+              Klassen im selben Paket sichtbar
+              $\rightarrow$ hier nicht so wichtig
+    \end{itemize}
+  \end{block}
+\only<5->{
+  Ab nun: 
+  \begin{itemize}
+    \item Attribute sind (fast) immer private
+    \item Methoden können auch private sein
+  \end{itemize}
+}
+\end{frame}
+
+\subsection{Modifikatoren: Beispiel}
+\begin{frame}{Modifikatoren: Beispiel}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=1, lastline=10]{java}{Visibility.java}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Main.java, firstline=12, lastline=19]{java}{Visibility.java}
+\end{frame}
+
+\subsection{Modifikatoren: Beispiel}
+\begin{frame}{Modifikatoren: Beispiel}
+  \begin{alertblock}{Neues Problem}
+    Jetzt können wir Namen, Semester und Matrikelnummer von außen gar nicht mehr
+    auslesen!
+  \end{alertblock}
+  \only<2->{
+    \begin{block}{Auch hierzu gibt es aber eine Lösung:}
+        Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute 
+        wieder erlauben.
+    \end{block}
+  }
+\end{frame}
+
+\subsection{Modifikatoren: Beispiel}
+\begin{frame}{Modifikatoren: Beispiel}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=21, lastline=30]{java}{Visibility.java}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=32, lastline=39]{java}{Visibility.java}
+\end{frame}
+
+\subsection{Eclipse-Tipp}
+\begin{frame}{Eclipse-Tipp}
+    \menu{Source > Generate Getters and Setters\dots}\\
+    \includegraphics[width=62mm]{eclipse-getter-setter.png}
+\end{frame}
+
+\section{Konventionen}
+\subsection{Kommentare}
+\begin{frame}{Kommentare}
+    Typen:
+    \begin{itemize}
+        \item Implementierungskommentare: \item \myCode{/* blah */} und \myCode{// blah}
+        \item Dokumentationskommentare: \myCode{/** blah */}
+    \end{itemize}
+
+    \begin{quote}
+        Comments should not be enclosed in large boxes drawn with asterisks or other characters.
+        Comments should never include special characters such as form-feed and backspace.
+    \end{quote}
+    Source: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Java Code Conventions}, S. 7 - 9
+\end{frame}
+
+\subsection{JavaDoc: Verwendung}
+\begin{frame}{JavaDoc: Verwendung}
+  Soll fast überall benutzt werden:
+  \begin{itemize}
+    \item Über jeder Klasse
+    \item Über jedem Attribut
+    \item Über jeder Methode (mit Annotations)
+  \end{itemize}
+\end{frame}
+
+\subsection{JavaDoc: Annotations}
+\begin{frame}{JavaDoc: Annotations}
+  Es gibt folgende Annotations
+  \begin{itemize}
+    \item \myCode{@param}: Für die Parameter aller Methoden
+    \item \myCode{@return}: Für den Rückgabewert vom Methoden
+    \item \myCode{@author}: Nur für \myCode{class} und \myCode{interface}, erforderlich
+  \end{itemize}
+  \vspace{0.5cm}
+  Weitere Annotations:
+  \begin{itemize}
+    \item \myCode{@throws}: Angabe möglicher Fehlermeldungen
+  \end{itemize}
+\end{frame}
+
+\subsection{JavaDoc: Negativ-Beispiel}
+\begin{frame}{JavaDoc: Negativ-Beispiel}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=6]{java}{JavaDoc.java}
+
+  \begin{itemize}
+    \item Was ist hier schlecht?
+    \item Wie könnte man es verbessern?
+  \end{itemize}
+\end{frame}
+
+\subsection{JavaDoc: Positiv-Beispiel}
+\begin{frame}{JavaDoc: Positiv-Beispiel}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=16]{java}{JavaDoc.java}
+\end{frame}
+
+\section{Kontrollstrukturen}
+\subsection{if-Abfragen}
+\begin{frame}{if-Abfragen}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=5]{java}{Kontrollstrukturen.java}
+
+  KEINE Schleife! $\rightarrow$ \href{http://if-schleife.de/}{if-schleife.de}
+\end{frame}
+
+\subsection{if-Abfragen: else if}
+\begin{frame}{if-Abfragen: else if}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=7, lastline=13]{java}{Kontrollstrukturen.java}
+\end{frame}
+
+\subsection{if-Abfragen: Quiz}
+\begin{frame}{if-Abfragen: Quiz}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, frame=lines]{java}{QuizIf.java}
+\end{frame}
+
+\subsection{for-Schleifen}
+\begin{frame}{for-Schleifen}
+  \begin{itemize}
+    \item Syntax: \myCode{for ([INITIALISIERUNG; BEDINGUNG; UPDATE]) \{ \dots \}}
+  \end{itemize}
+
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=39, lastline=41]{java}{Kontrollstrukturen.java}
+\end{frame}
+
+\subsection{while-Schleifen}
+\begin{frame}{while-Schleifen}
+  \begin{itemize}
+    \item Syntax: \myCode{while ([BEDINGUNG]) \{ \dots \}}
+  \end{itemize}
+
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=35, lastline=37]{java}{Kontrollstrukturen.java}
+\end{frame}
+
+\subsection{do-while-Schleifen}
+\begin{frame}{do-while-Schleifen}
+  \begin{itemize}
+    \item Syntax: \myCode{do \{ \dots \} while ([BEDINGUNG]);}
+    \item Wo ist der Unterschied zu \myCode{while}?
+  \end{itemize}
+
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=43, lastline=49]{java}{Kontrollstrukturen.java}
+\end{frame}
+
+\subsection{Switch-Anweisung}
+\begin{frame}{Switch-Anweisung}
+  \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, firstline=15, lastline=33, label=World.java]{java}{Kontrollstrukturen.java}
+\end{frame}
+
+\section{Praxis}
+\subsection{Praxis}
+\begin{frame}{Praxis}
+  Falls noch Zeit bleibt \dots
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[11.] 05.11.2012
+    \item[10.] 12.11.2012
+    \item[9.] 19.11.2012
+    \item[8.] 26.11.2012
+    \item[7.] 03.12.2012
+    \item[6.] 10.12.2012
+    \item[5.] 17.12.2012: Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013
+    \item[0.] 04.02.2013
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-10.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-03/yoda-condition.png b/presentations/Programmieren-Tutorium/Tutorium-03/yoda-condition.png
new file mode 100644
index 0000000..0a81240
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-03/yoda-condition.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode-interessant.txt b/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode-interessant.txt
new file mode 100644
index 0000000..6d4e18b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode-interessant.txt
@@ -0,0 +1,27 @@
+Compiled from "SimpleLoop.java"
+public class SimpleLoop extends java.lang.Object{
+public SimpleLoop();
+  Code:
+   0:	aload_0
+   1:	invokespecial	#1; //Method java/lang/Object."":()V
+   4:	return
+
+public static void main(java.lang.String[]);
+  Code:
+   0:	bipush	-5
+   2:	istore_1    /* Speichere einen int-Wert in das Array der lokalen Variablen */
+   3:	iload_1     /* Lade den int-Wert einer lokalen Variablen auf den Operandenstapel */
+   4:	bipush	15  /* lege 15 auf den Operandenstapel */
+   6:	if_icmpge	46  /* if_icmpge pops the top two ints off the stack 
+        and compares them. If value2 is greater than or equal to value1, 
+        execution branches to the address (pc + branchoffset), where pc 
+        is the address of the if_icmpge opcode in the bytecode and branchoffset 
+        is a 16-bit signed integer parameter following the if_icmpge opcode in 
+        the bytecode. If value2 is less than value1, execution continues at the 
+        next instruction.*/
+   9-37:	/* String erstellen, i*i berechnen, String ausgeben */
+   40:	iinc	1, 1 /* iinc   increments the int held in the local variable  by  */
+   43:	goto	3
+   46:	return
+
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode.txt b/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode.txt
new file mode 100644
index 0000000..4a68784
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Bytecode.txt
@@ -0,0 +1,34 @@
+Compiled from "SimpleLoop.java"
+public class SimpleLoop extends java.lang.Object{
+public SimpleLoop();
+  Code:
+   0:	aload_0
+   1:	invokespecial	#1; //Method java/lang/Object."":()V
+   4:	return
+
+public static void main(java.lang.String[]);
+  Code:
+   0:	bipush	-5
+   2:	istore_1
+   3:	iload_1
+   4:	bipush	15
+   6:	if_icmpge	46
+   9:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
+   12:	new	#3; //class java/lang/StringBuilder
+   15:	dup
+   16:	invokespecial	#4; //Method java/lang/StringBuilder."":()V
+   19:	iload_1
+   20:	invokevirtual	#5; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
+   23:	ldc	#6; //String : 
+   25:	invokevirtual	#7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
+   28:	iload_1
+   29:	iload_1
+   30:	imul
+   31:	invokevirtual	#5; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
+   34:	invokevirtual	#8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
+   37:	invokevirtual	#9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
+   40:	iinc	1, 1
+   43:	goto	3
+   46:	return
+
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Euler28-fast.java b/presentations/Programmieren-Tutorium/Tutorium-04/Euler28-fast.java
new file mode 100644
index 0000000..0c9e1d2
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Euler28-fast.java
@@ -0,0 +1,15 @@
+public class Euler28 {
+    public static void main(String[] args) {
+        int sum1 = 0, sum2 = 0;
+        int n = 3;
+        int m = 2;
+        for (int i = 0; i < 500; i++) {
+            sum1 += (n * n) + ((n * n) - (n - 1));
+            n += 2;
+
+            sum2 += (((m * m) + 1) + ((m * m) - (m - 1)));
+            m += 2;
+        }
+        System.out.println("result: " + (sum1 + sum2 + 1));
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Euler28.java b/presentations/Programmieren-Tutorium/Tutorium-04/Euler28.java
new file mode 100644
index 0000000..5b80162
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Euler28.java
@@ -0,0 +1,86 @@
+public class Euler28 {
+    private static void printArray(int[][] spiral, int N) {
+        for (int i = 0; i < N; i++) {
+            for (int j = 0; j < N; j++) {
+                System.out.print(spiral[i][j] + " ");
+            }
+            System.out.println("");
+        }
+    }
+
+    private static int getSum(int[][] array, int N) {
+        int sum = 0;
+        // Summe berechnen
+        for (int i = 0; i < N; i++) {
+            sum += array[i][i]; // Diagonale 1, links oben nach rechts unten
+            sum += array[N - 1 - i][i]; // Diagonale 2, rechts oben nach links
+            // unten
+        }
+        sum -= 1; // die 1 liegt auf beiden Diagonalen
+        return sum;
+    }
+
+    enum Direction {
+        RECHTS, UNTEN, OBEN, LINKS
+    }
+
+    public static void main(String[] args) {
+        final int N = 5;
+
+        // initialise variables
+        int[][] spiral = new int[N][N];
+        Direction direction = Direction.RECHTS;
+        int posX = N / 2;
+        int posY = N / 2;
+        int steps = 1;
+        int number = 1;
+
+        // fill array with spiral values
+        while (number <= N * N) {
+            for (int j = 0; j < steps; j++) {
+
+                spiral[posX][posY] = number;
+
+                switch (direction) {
+                case RECHTS:
+                    posX++;
+                    break;
+                case UNTEN:
+                    posY++;
+                    break;
+                case LINKS:
+                    posX--;
+                    break;
+                case OBEN:
+                    posY--;
+                    break;
+                }
+
+                number++;
+                if (number > N * N) {
+                    break;
+                }
+            }
+
+            switch (direction) {
+            case RECHTS:
+                direction = Direction.UNTEN;
+                break;
+            case UNTEN:
+                direction = Direction.LINKS;
+                steps++;
+                break;
+            case LINKS:
+                direction = Direction.OBEN;
+                break;
+            case OBEN:
+                direction = Direction.RECHTS;
+                steps++;
+                break;
+            }
+        }
+
+        printArray(spiral, N);
+        System.out.println("Diagonal-Summe: " + getSum(spiral, N));
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-1.java b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-1.java
new file mode 100644
index 0000000..a8a1543
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-1.java
@@ -0,0 +1,15 @@
+public boolean isStreetLegal() {
+    if(bell==true && light==true) { //Wenn das Fahrrad eine Klingel und ein Licht hat...
+        legal = true; //dann ist es auf der Straße zugelassen
+    }
+    else { //wenn es keine Beleuchtung und/oder Licht hat, ...
+        legal = false; // dann ist es nicht zugelassen
+    }
+    return legal; //Zurückgabe des Attributs ob es zugelassen ist
+}
+
+public int getPriceFull(){ //Methode zur Berechnung des Gesamtpreises des Fahrrades
+    int priceFull = shift.getPrice() + price + wheels.getPrice(); /*
+    Berechnung des Preises durch Addition der Einzelpreise*/
+    return priceFull; //Zurückgabe des Gesamtpreises
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-2.java b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-2.java
new file mode 100644
index 0000000..f438b7b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-2.java
@@ -0,0 +1,16 @@
+//Konstuktor 
+/** erzeugt ein neues Objekt und initialisiert die Attribute */
+Gears(byte chainwheel0, byte rearsprocket0, int price0) {
+    chainwheel = chainwheel0;
+    rearsprocket = rearsprocket0;
+    price = price0;
+}
+
+// Methode
+/** gibt die Anzahl der Gänge zurück */
+short getNumberOfGears() {
+    short numbergears;
+    
+    numbergears =  (short) (rearsprocket * chainwheel);
+    return numbergears;
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-3.java b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-3.java
new file mode 100644
index 0000000..12d3b87
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-3.java
@@ -0,0 +1,10 @@
+/**
+ * Methode, die ein neues Stadtrad erstellt.
+ * @return neues Stadtrad
+ */
+public Bike createCityBike() {        //Methodensignatur der Methode createCityBike
+    Wheels cityWheels = new Wheels(559,50f,10000);        //Räder des Stadtrads erstellen
+    Gears cityGears = new Gears(3,1,5000);                //Gangschaltung des Stadtrads erstellen
+    Bike newCityBike = new Bike(cityGears, cityWheels, "Stahl", "CB105", true, true, 30000); //Stadtrad erstellen
+    return newCityBike;        //Stadtrad zurückgeben
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Makefile b/presentations/Programmieren-Tutorium/Tutorium-04/Makefile
new file mode 100644
index 0000000..8e8c52e
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-04
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-1.java b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-1.java
new file mode 100644
index 0000000..bd98c79
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-1.java
@@ -0,0 +1,11 @@
+public class QuizIf {
+    public static void main(String[] a) {
+        float a = 0.1;
+        float b = 0.1;
+        if (0.01 == a * b) {
+            System.out.println("Alpha");
+        } else {
+            System.out.println("Beta");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-2.java b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-2.java
new file mode 100644
index 0000000..643f30e
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-2.java
@@ -0,0 +1,11 @@
+public class QuizIf {
+    public static void main(String[] a) {
+        float a = 0.1f;
+        float b = 0.1f;
+        if (0.01 == a * b) {
+            System.out.println("Alpha");
+        } else {
+            System.out.println("Beta");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-3.java b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-3.java
new file mode 100644
index 0000000..c2573a0
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-3.java
@@ -0,0 +1,11 @@
+public class QuizIf {
+    public static void main(String[] args) {
+        float a = 0.1f;
+        float b = 0.1f;
+        if (0.01 == a * b) {
+            System.out.println("Alpha");
+        } else {
+            System.out.println("Beta");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor-2.java b/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor-2.java
new file mode 100644
index 0000000..4ca43c3
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor-2.java
@@ -0,0 +1,9 @@
+public class QuizFor {
+    public static void main(String[] args) {
+        int i = 0;
+        for (;;) {
+            System.out.println(i + " bottles of beer");
+            i++;
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor.java b/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor.java
new file mode 100644
index 0000000..681c44c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/QuizFor.java
@@ -0,0 +1,9 @@
+public class QuizFor {
+    public static void main(String[] args) {
+        int i = 10;
+        for (; i < 10; i++) {
+            System.out.println(i);
+        }
+        System.out.println("end");
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/README.md b/presentations/Programmieren-Tutorium/Tutorium-04/README.md
new file mode 100644
index 0000000..9d03cfb
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/README.md
@@ -0,0 +1,6 @@
+Aufgaben
+========
+
+ * Tut04_Loops.pdf  : For-Loops
+ * ProjectEuler     : For-Loops + Arrays
+ * Matrix-Multiplikation
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/SimpleLoop.java b/presentations/Programmieren-Tutorium/Tutorium-04/SimpleLoop.java
new file mode 100755
index 0000000..d41e95c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/SimpleLoop.java
@@ -0,0 +1,8 @@
+public class SimpleLoop {
+    public static void main(String[] args) {
+        for (int i = -5; i < 15; ++i) {
+            System.out.println(i + ": " + i * i);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-Baby.java b/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-Baby.java
new file mode 100644
index 0000000..5a2c06f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-Baby.java
@@ -0,0 +1,9 @@
+public class Baby {
+    public String name;
+    public static int size;
+
+    public Baby(String name) {
+        this.name = name;
+        size = 46;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-World.java b/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-World.java
new file mode 100644
index 0000000..325157c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-World.java
@@ -0,0 +1,12 @@
+public class World {
+    public static void main(String[] args) {
+        Baby alice = new Baby("Alice");
+        alice.size = 42;
+
+        Baby bob = new Baby("Bob");
+        bob.size = 56;
+
+        System.out.println("Alice: " + alice.size);
+        System.out.println("Bob: " + bob.size);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/bash.sh b/presentations/Programmieren-Tutorium/Tutorium-04/bash.sh
new file mode 100644
index 0000000..8469157
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/bash.sh
@@ -0,0 +1 @@
+javap -c SimpleLoop
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png b/presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png
new file mode 100644
index 0000000..c81ebb2
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/euler28.py b/presentations/Programmieren-Tutorium/Tutorium-04/euler28.py
new file mode 100644
index 0000000..2643268
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/euler28.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+def printArr(a):
+    for line in a:
+        print(line)
+
+def initialise(n):
+    array = [[0  for j in xrange(0,n)] for i in xrange(0,n)]
+    return array
+
+def spiralFill(a):
+    n = len(a)
+    x = y = n/2
+    number = 1
+            # r      u       l      o
+    order = [(1,0), (0,1), (-1,0), (0,-1)]
+    iOrder = 0
+    length = 1
+    a[y][x] = number
+    while not (x == (n-1) and y == 0):
+        for j in xrange(0, length):
+            xAdd, yAdd = order[iOrder]
+            x += xAdd
+            y += yAdd
+            number += 1
+            a[y][x] = number
+            if x == (n-1) and y==0:
+                break
+        if iOrder == 1 or iOrder == 3:
+            length += 1
+        iOrder = (iOrder+1) % 4
+    return a
+
+def diagonalSum(a):
+    n = len(a)
+    sum = -1 # you will have the element in the middle (1) twice
+    for i in xrange(0, n):
+        sum += a[i][i]
+        sum += a[n-i-1][i]
+    return sum
+
+if __name__ == "__main__":
+    import argparse
+ 
+    parser = argparse.ArgumentParser(description="ProjectEuler: 28")
+    parser.add_argument("-n", metavar='N', type=int,
+                        help="length of the spiral", required=True)
+    parser.add_argument("-d", action="store_true",default=False,
+                        help="display the spiral")
+    args = parser.parse_args()
+    array = initialise(args.n)
+    array = spiralFill(array)
+    if args.d:
+        printArr(array)
+    print diagonalSum(array)
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/java-6-javadoc.png b/presentations/Programmieren-Tutorium/Tutorium-04/java-6-javadoc.png
new file mode 100644
index 0000000..18ca376
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-04/java-6-javadoc.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/java-7-javadoc.png b/presentations/Programmieren-Tutorium/Tutorium-04/java-7-javadoc.png
new file mode 100644
index 0000000..7d5eb59
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-04/java-7-javadoc.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/javadoc.sh-session b/presentations/Programmieren-Tutorium/Tutorium-04/javadoc.sh-session
new file mode 100644
index 0000000..2c21415
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/javadoc.sh-session
@@ -0,0 +1,82 @@
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01$ ls
+README.md  student-solution
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01$ mkdir javadoc
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01$ ls
+javadoc  README.md  student-solution
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01$ cd student-solution/
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01/student-solution$ ls
+BikeFactory.java  Bike.java  doc  Frame.java  Gears.java  test  Wheels.java
+moose@pc07:~/Downloads/prog-ws1213/Blatt-01/student-solution$ javadoc -d ../javadoc/ *
+Loading source file BikeFactory.java...
+Loading source file Bike.java...
+Loading source file Frame.java...
+Loading source file Gears.java...
+Loading source file Wheels.java...
+Wheels.java:4: warning: unmappable character for encoding UTF8
+ * Der Felgendurchmesser und die ReifenstXrke modellieren
+                                         ^
+Wheels.java:5: warning: unmappable character for encoding UTF8
+ * die RXder eines Fahrrads. 
+        ^
+Wheels.java:6: warning: unmappable character for encoding UTF8
+ * Der Felgendurchmesser betrXgt maximal 700mm
+                             ^
+Wheels.java:7: warning: unmappable character for encoding UTF8
+ * und die ReifenstXrke betrXgt maximal 60mm.
+                   ^
+Wheels.java:7: warning: unmappable character for encoding UTF8
+ * und die ReifenstXrke betrXgt maximal 60mm.
+                            ^
+Wheels.java:18: warning: unmappable character for encoding UTF8
+	 * Konstruktor fXr "Wheels".
+	                ^
+Wheels.java:44: warning: unmappable character for encoding UTF8
+		    + "als Wert ungXltig. Maximaler Feldendurschmeeser " +
+		                   ^
+Wheels.java:45: warning: unmappable character for encoding UTF8
+		      "betrXgt 700mm. Bitte Wert Xndern.");
+		           ^
+Wheels.java:45: warning: unmappable character for encoding UTF8
+		      "betrXgt 700mm. Bitte Wert Xndern.");
+		                                 ^
+Wheels.java:58: warning: unmappable character for encoding UTF8
+			+ " als Wert ungXltig. Maximalee ReifenstXrke " +
+			                ^
+Wheels.java:58: warning: unmappable character for encoding UTF8
+			+ " als Wert ungXltig. Maximalee ReifenstXrke " +
+			                                         ^
+Wheels.java:59: warning: unmappable character for encoding UTF8
+			  "betrXgt 60mm. Bitte Wert Xndern.");
+			       ^
+Wheels.java:59: warning: unmappable character for encoding UTF8
+			  "betrXgt 60mm. Bitte Wert Xndern.");
+			                            ^
+Loading source files for package doc...
+javadoc: warning - No source files for package doc
+Loading source files for package test...
+Constructing Javadoc information...
+javadoc: warning - No source files for package doc
+javadoc: warning - No source files for package test
+Standard Doclet version 1.6.0_24
+Building tree for all the packages and classes...
+Generating ../javadoc/Velo/Bike.html...
+Generating ../javadoc/Velo/BikeFactory.html...
+Generating ../javadoc/Velo/Frame.html...
+Generating ../javadoc/Velo/Gears.html...
+Generating ../javadoc/Velo/Wheels.html...
+Generating ../javadoc/Velo/package-frame.html...
+Generating ../javadoc/Velo/package-summary.html...
+Generating ../javadoc/Velo/package-tree.html...
+Generating ../javadoc/constant-values.html...
+Building index for all the packages and classes...
+Generating ../javadoc/overview-tree.html...
+Generating ../javadoc/index-all.html...
+Generating ../javadoc/deprecated-list.html...
+Building index for all classes...
+Generating ../javadoc/allclasses-frame.html...
+Generating ../javadoc/allclasses-noframe.html...
+Generating ../javadoc/index.html...
+Generating ../javadoc/help-doc.html...
+Generating ../javadoc/stylesheet.css...
+16 warnings
+moose@pc07:~/Downloads/prog-ws1213$ 
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-04/singleLines.java
new file mode 100644
index 0000000..a06bb20
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/singleLines.java
@@ -0,0 +1,33 @@
+boolean hasLicense();
+boolean canEvaluate();
+boolean shouldAbort = false;
+
+boolean bell;
+boolean light;
+
+boolean hasBell;
+boolean hasLight;
+
+public class TestBoolean {
+    private boolean isActive;
+
+    public boolean isActive() {
+        return isActive;
+    }
+}
+
+
+int i = 42;
+int k = (i * i) / (42 % 3);
+for (int j = 12; j < i; i++) {
+
+}
+
+int[] liste = new int[7];
+liste[5] = 5;
+
+int[][] tabelle = new int[20][30];
+tabelle[1][2] = 1;
+
+int[][][] quader = new int[5][7][2];
+quader[0][0][0] = 0;
diff --git a/presentations/Programmieren-Tutorium/Tutorium-04/tutorium-04.tex b/presentations/Programmieren-Tutorium/Tutorium-04/tutorium-04.tex
new file mode 100644
index 0000000..49c8a95
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-04/tutorium-04.tex
@@ -0,0 +1,542 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{xcolor}
+\usepackage{menukeys}
+\usepackage{wasysym}
+\usepackage{braket} % needed for \Set
+\usepackage{tikz}
+% w/o following space!
+\newcommand{\quem}{\tikz[baseline=(wi.base)]{\node[fill=black,rotate=45,inner sep=1.5mm] {};%
+\node[ font=\color{white}] (wi) {?};}}
+\usepackage{../templates/myStyle}
+
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Javadoc, Bytecode}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz: Teil 1}
+\begin{frame}{Quiz: Teil 1}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Quiz.java, frame=lines]{java}{Quiz-float-1.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz: Teil 2}
+\begin{frame}{Quiz: Teil 2}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Quiz.java, frame=lines]{java}{Quiz-float-2.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz: Teil 3}
+\begin{frame}{Quiz: Teil 3}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Quiz.java, frame=lines]{java}{Quiz-float-3.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\section{Nachbesprechung: 1. ÜB}
+\subsection{Gleitkomma vs. Ganzzahl}
+\begin{frame}{Gleitkomma vs. Ganzzahl}
+    Welche Vorteile bieten Ganzzahl-Variablen im Vergleich zu
+    Gleitkomma-Variablen?
+    \begin{itemize}[<+->]
+        \item \textbf{Speicherplatz}? \onslide<4->{Nein, vgl. \myCode{long} und \myCode{float}}
+        \item \textbf{Geschwindigkeit}? \onslide<5->{Kommt drauf an: Wenn keine weitere Umrechnung nötig ist und die Gleitkommazahl nicht kleiner ist, eher ja.}
+        \item \textbf{Genauigkeit}? \onslide<6->{Ja.\\
+        Beispiel: $(0,1)_{10} = (0,0\overline{0011})_2$\\
+        vgl. Java-Puzzle}
+    \end{itemize}
+\end{frame}
+
+\subsection{Variablennamen}
+\begin{frame}{Variablennamen}
+    Bitte nur alphanumerische Zeichen für Namen (Pakete, Methoden, Variablen, \dots).\\
+    Soll heißen:
+    \begin{itemize}[<+->]
+        \item abcdefghijklmnopqrstuvwxyz sind erlaubt
+        \item ABCDEFGHIJKLMNOPQRSTUVWXYZ sind erlaubt
+        \item 0123456789 sind erlaubt
+        \item Unterstrich - also "`\_"' ist nur in Kostanten erlaubt
+        \item Der Rest ist verboten und gibt Punktabzug! Keine Umlaute!
+    \end{itemize}
+\end{frame}
+
+\subsection{Kommentare}
+\begin{frame}{Kommentare}
+    \begin{block}{Regel}
+        Kommentiert, was ihr macht. \\
+        Nicht wie ihr es macht.
+    \end{block}
+
+    \begin{itemize}[<+->]
+        \item Gut zu kommentieren ist schwer
+        \item Viel (fremden) Code ansehen hilft
+        \item Eigenen Code nach Jahren ansehen hilft
+        \item JEDER Kommentar ist für Java-Entwickler gedacht
+        \item[$\Rightarrow$] Kommentare à la "`Methode"' oder 
+              "`Methodensignatur"' sind nutzlos!\\
+        \item Javadoc-Kommentare sind für Entwickler, die nichts von 
+              eurem Code sehen können, ihn aber dennoch nutzen wollen
+    \end{itemize}
+\end{frame}
+
+\subsection{Kommentare: Beispiel 1}
+\begin{frame}{Kommentare: Beispiel 1}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Kommentare-1.java}
+
+    \only<2->{
+        \begin{itemize}
+            \item An sich gute Kommentare
+            \item Wäre besser als Javadoc direkt über der Methode
+        \end{itemize}
+    }
+\end{frame}
+
+\subsection{Kommentare: Beispiel 2}
+\begin{frame}{Kommentare: Beispiel 2}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Kommentare-2.java}
+\end{frame}
+
+\begin{frame}{Kommentare: Beispiel 2}
+    \begin{itemize}
+        \item Zeile 1 \& 2 bieten einem Entwickler nicht mehr Informationen 
+              $\Rightarrow$ nutzlos
+        \item Sonst okay
+        \item Bitte nicht \myCode{chainwheel0}, sondern \myCode{chainwheel}
+              und später \myCode{this}-Operator nutzen\\
+              Gibt in Zukunft -0,5 Punkte
+        \item Gute Zeilenlänge \smiley
+    \end{itemize}
+\end{frame}
+
+\subsection{Kommentare: Beispiel 3}
+\begin{frame}{Kommentare: Beispiel 3}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Kommentare-3.java}
+    \only<2->{
+        \begin{itemize}
+            \item Javadoc ist okay
+            \item "`Methodensignatur"'-Kommentar in Z. 5 ist nutzlos
+            \item Kommentare in Z. 7 - 9 sind nutzlos
+            \item Z. 8 ist arg lang $\rightarrow$ den Kommentar hätte
+                  man einfach über die Zeile schreiben können.
+        \end{itemize}
+    }
+\end{frame}
+
+\subsection{Namenskonventionen für booleans}
+\begin{frame}{Namenskonventionen für booleans}
+    \begin{block}{Regel}
+        Der Präfix "`is"' sollte für boolesche Variablen und Methoden
+        mit dem Rückgabewert \myCode{boolean} genutzt werden.
+    \end{block}
+
+    \onslide<2->{
+        \begin{exampleblock}{Beispiele}
+            isSet, isVisible, isFinished, isFound, isOpen
+        \end{exampleblock}
+    }
+
+    \onslide<3->{
+        Auch okay sind "`has"', "`should"' oder ähnliche Präfixe.
+    }
+
+    \onslide<4->{
+        \begin{exampleblock}{Beispiele}
+            \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=3]{java}{singleLines.java}
+        \end{exampleblock}
+    }
+\end{frame}
+
+\subsection{booleans: Positiv- und Negativbeispiel}
+\begin{frame}{booleans: Positiv- und Negativbeispiel}
+    \begin{exampleblock}{Negativbeispiel: So nicht!}
+            \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=5, lastline=6]{java}{singleLines.java}
+    \end{exampleblock}
+
+    \onslide<2->{
+        \begin{exampleblock}{Positivbeispiel: Aber so}
+                \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=8, lastline=9]{java}{singleLines.java}
+        \end{exampleblock}
+    }
+
+    \onslide<3->{
+        In Zukunft: -0,5 Punkte
+    }
+\end{frame}
+
+\subsection{Boolean: Was ist mit Gettern/Settern?}
+\begin{frame}{Boolean: Was ist mit Gettern/Settern?}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, firstline=11, lastline=17]{java}{singleLines.java}
+    \begin{block}{Hinweis}
+    Es ist okay, wenn ein Attribut genauso heißt wie eine Methode
+    \end{block}
+\end{frame}
+
+\subsection{Kombinatorik}
+\begin{frame}{Kombinatorik}
+    Wenn man 3 Gänge vorne und 7 hinten hat, wie viele Gänge gibt es?
+    \vspace{1.0cm}
+    \onslide<2->{
+        \textbf{Antwort:} $3 \cdot 7 = 21$\\
+    }
+    \vspace{0.5cm}
+    \onslide<3->{\textbf{Erklärung}:
+        Sei $\Set{a, b, c}$ die Menge der vorderen Gänge und
+        $\Set{1, 2, 3, 4, 5, 6, 7}$ die Menge der hinteren Gänge.\\
+    }
+    \vspace{0.2cm}
+    \onslide<4->{
+        Dann gibt es folgende Kombinationen:\\
+        a1, a2, a3, a4, a5, a6, a7\\
+        b1, b2, b3, b4, b5, b6, b7\\
+        c1, c2, c3, c4, c5, c6, c7
+    }
+
+\end{frame}
+
+\subsection{Formatierung}
+\begin{frame}{Formatierung}
+    Mit Eclipse:
+    \begin{itemize}
+        \item Alles markieren: \keys{\ctrl+A}
+        \item Formatieren: \keys{\ctrl+\shift+F}
+    \end{itemize}
+    Falsche Formatierung gibt in Zukunft pro Fehler -0,5 Punkte.\\
+    Auch Folgefehler geben Punktabzug!
+\end{frame}
+
+\subsection{Aussagekräftige Variablen!}
+\begin{frame}{Aussagekräftige Variablen!}
+    In Zukunft:
+        -1 P. bis -5 P. für Variablennamen wie "`Kr"' für Kettenräder oder 
+        "`Pr"' für Preis!
+\end{frame}
+
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \begin{table}[ht]
+    \begin{tabular}{p{0.4\linewidth}l}
+    \begin{minipage}[b]{0.8\linewidth}\centering
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Baby.java, frame=lines]{java}{Static-Quiz-Baby.java}
+    \end{minipage}
+    &
+    \begin{minipage}[b]{0.5\linewidth}
+    \centering
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=World.java, frame=lines]{java}{Static-Quiz-World.java}
+    \end{minipage}
+    \end{tabular}
+    \end{table}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz: Antwort}
+\begin{frame}{Quiz: Antwort}
+    Ausgabe:
+    \begin{itemize}
+      \item Alice: 56
+      \item Bob: 56
+    \end{itemize}
+    \vspace{0.5cm}
+    Warum?
+    \begin{itemize}[<+->]
+      \item \myCode{static} macht ein Attribut zu einem "`\textbf{Klassenattribut}"'
+      \item Das Attribut gehört dann nicht mehr den einzelnen Objekten
+      \item Und sollte auch nicht über Objecte aufgerufen werden!
+      \item Schlecht: \myCode{alice.size;}
+      \item Auch schlecht: \myCode{alice.getSize();}
+      \item Besser: \myCode{Baby.size;} oder \myCode{Baby.getSize();}
+      \item In Zukunft: min. -2 P. für falsche \myCode{static}-Verwendung
+    \end{itemize}
+\end{frame}
+
+\section{Exkurs}
+\subsection{Exkurs: Bytecode}
+\begin{frame}{Exkurs: Bytecode}
+    \begin{alertblock}{Hinweis}
+        Das folgende ist nicht Prüfungsrelevant!\\
+        Also zurücklehnen und genießen :-)
+    \end{alertblock}
+
+    \vspace{1cm}
+    Mit dem Befehl
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, firstline=1, lastline=1]{bash}{bash.sh}
+    könnt ihr euch den Java-Bytecode ansehen.
+\end{frame}
+
+\begin{frame}{Exkurs: SimpleLoop Java Code}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, label=SimpleLoop.java, frame=lines]{java}{SimpleLoop.java}
+\end{frame}
+
+\begin{frame}{Bytecode von SimpleLoop.java}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bytecode.txt}
+\end{frame}
+\begin{frame}{Bytecode von SimpleLoop.java: Anfang}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, firstline=1, lastline=7, fontsize=\tiny]{java}{Bytecode.txt}
+    \begin{itemize}
+        \item \textbf{aload\_0}: Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel. (\href{http://www.javaseiten.de/jvmisa.html\#aload\_0}{Quelle})
+        \item \textbf{iload\_1}: Lade den int-Wert einer lokalen Variablen auf den Operandenstapel. (\href{http://www.javaseiten.de/jvmisi.html\#iload_1}{Quelle})
+        \item \textbf{invokespecial [method-spec]}: invoke method belonging to a specific class (\href{https://www.vmth.ucdavis.edu/incoming/Jasmin/ref--33.html}{Quelle})
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Bytecode von SimpleLoop.java: Ende}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, firstline=9, lastline=32, fontsize=\tiny]{java}{Bytecode.txt}
+\end{frame}
+
+\begin{frame}{Interessanter Teil des Bytecodes}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bytecode-interessant.txt}
+\end{frame}
+
+\subsection{Javadoc}
+\framedgraphic{Offizielle \href{http://docs.oracle.com/javase/6/docs/api/}{Java 6 API} Javadoc}{java-6-javadoc.png}
+\framedgraphic{Offizielle \href{http://docs.oracle.com/javase/7/docs/api/}{Java 7 API} Javadoc}{java-7-javadoc.png}
+
+\subsection{Javadoc erzeugen}
+\begin{frame}{Javadoc erzeugen}
+    \begin{itemize}
+        \item Order erstellen, in dem die Javadoc landen soll
+        \item In den Ordner mit euren Quelldateien wechseln
+        \item Befehl \myCode{javadoc -d ../pfad/zum/javadoc/ordner/ *}
+    \end{itemize}
+\end{frame}
+\begin{frame}{Javadoc erzeugen}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, firstline=1, lastline=30, fontsize=\tiny]{console}{javadoc.sh-session}
+\end{frame}
+\begin{frame}{Javadoc erzeugen}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, firstline=31, firstnumber=31, lastline=59, fontsize=\tiny]{console}{javadoc.sh-session}
+\end{frame}
+\begin{frame}{Javadoc erzeugen}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, firstline=60, firstnumber=60, lastline=82, fontsize=\tiny]{console}{javadoc.sh-session}
+\end{frame}
+\begin{frame}{Javadoc: Codierung}
+    \begin{itemize}[<+->]
+        \item \quem{} ist ein sicheres Zeichen, dass was bei der 
+              Zeichenkodierung schief ging.
+        \item Bitte verwendet \textbf{immer} UTF-8!
+        \item Eclipse: \menu{Window > Preferences > General > Workspace > Text file encoding > UTF-8}
+    \end{itemize}
+\end{frame}
+
+\section{Dies und Das}
+\subsection{Konvention: Leerzeichen}
+\begin{frame}{Konvention: Leerzeichen}
+Keine Whitespaces nach
+    \begin{itemize}
+        \item ~ (Bitweises Komplement)
+        \item ! (Logisches Komplement)
+        \item ++ (Präfix-Inkrementierung, z.B. ++i;)
+        \item -- (Präfix-Dekrementierung, z.B. --i;)
+        \item . (Punkt)
+        \item - (Unäres Minus, z.B. -5)
+        \item + (Unäres Plus, z.B. +4)
+    \end{itemize}
+    Und
+    \begin{itemize}
+        \item Exakt eines vor und nach "`="'
+        \item Um Operatoren herum:
+    \end{itemize}
+
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=20, lastline=24]{java}{singleLines.java}
+\end{frame}
+
+\subsection{Mehrdimensionale Arrays}
+\begin{frame}{Mehrdimensionale Arrays}
+    Vorstellung:
+    \begin{itemize}
+        \item 1D: Vektor, Liste
+        \item 2D: Matrix, Tabelle
+        \item 3D: Quader
+        \item 4D: Hyperwürfel (falls quadratisch)
+    \end{itemize}
+
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=26, lastline=33]{java}{singleLines.java}
+\end{frame}
+
+\subsection{Wrap-Up: Was ihr können solltet}
+\begin{frame}{Wrap-Up: Das Programmierer $1 \cdot 1$}
+    \textbf{Was ihr können solltet}:
+    \begin{itemize}
+        \item \textbf{Einfache Probleme modellieren}:\\
+              Welche Klassen / Methoden brauche ich?
+        \item \textbf{Konstrollstrukturen}:
+          \begin{itemize}
+            \item \myCode{if () \{ \dots \}} 
+            \item \myCode{while () \{ \dots \}}
+            \item \myCode{for (, , ) \{\dots\}}
+            \item \myCode{switch () \{case :\}}
+          \end{itemize}
+        \item \textbf{Arrays}: 1D- und 2D
+        \item \textbf{Kommentare}
+        \item \textbf{Koventionen}: Javadoc, Leerzeichen-Setzung
+        \item \textbf{Debuggen}: Einfache Fehler in eurem Code finden
+    \end{itemize}
+
+    \textbf{Was ihr hier noch lernt}:
+    \begin{itemize}
+        \item Verwendung der Java Standardbibliothek
+        \item Eingabe von Daten
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz: For-Schleifen}
+\begin{frame}{Quiz: For-Schleifen (1/2)}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizFor.java, frame=lines]{java}{QuizFor.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: For-Schleifen (1/2) - Antwort}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizFor.java, frame=lines]{java}{QuizFor.java}
+    Ausgabe: \myCode{end}, da die Bedingung auch am Anfang überprüft wird
+\end{frame}
+
+\begin{frame}{Quiz: For-Schleifen (2/2)}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizFor.java, frame=lines]{java}{QuizFor-2.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: For-Schleifen (2/2) - Antwort}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizFor.java, frame=lines]{java}{QuizFor-2.java}
+    Ausgabe: Endlosschleife\\
+        \myCode{0 bottles of beer}\\
+        \myCode{1 bottles of beer}\\
+        \myCode{2 bottles of beer}\\
+        \vdots
+\end{frame}
+
+\section{Hinweise zum ÜB 2}
+\subsection{Allgemeine Hinweise}
+\begin{frame}{Allgemeine Hinweise}
+    \begin{alertblock}{Hinweise}
+        \begin{itemize}[<+->]
+            \item Auf \href{http://baldur.iti.kit.edu/programmieren/}{offizieller Lösung} aufbauen (Verpflichtend!)
+            \item Auf Leerzeichen, gute Variablennamen und Konventionen achten
+            \item Wird eine Bedinung von einem Setter-Parameter nicht eingehalten, schreibt ihr den Wert nicht
+            \begin{itemize}
+                \item Stattdessen: Fehlermeldung per \myCode{System.out.println("dies und das ist falsch");} ausgeben
+                \item Das ist nur eine Hilfslösung, weil ich noch keine Exceptions hattet
+                \item Später: (Fast) immer Exceptions!
+            \end{itemize}
+            \item Genauigkeit:
+            \begin{itemize}
+                \item Positiv bedeutet: $> 0$
+                \item Negativ bedeutet: $< 0$
+                \item nicht-negativ bedeutet: $\geq 0$
+            \end{itemize}
+        \end{itemize}
+    \end{alertblock}
+\end{frame}
+
+\subsection{Wie werde ich besser?}
+\begin{frame}{Wie werde ich besser?}
+    \begin{itemize}
+        \item \href{http://projecteuler.net/}{ProjectEuler.net}: 
+              401 Aufgaben jeder Schwierigkeitsstufe
+        \item Anderen Code anschauen
+        \item Probleme am PC lösen
+    \end{itemize}
+\end{frame}
+
+\section{Praxis}
+\subsection{ProjectEuler 28: Aufgabe}
+\framedgraphic{ProjectEuler 28: Aufgabe}{euler-28.png}
+
+\begin{frame}{ProjectEuler 28: Lösung mit Aufbau der Spirale}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Euler28.java, frame=lines]{java}{Euler28.java}
+\end{frame}
+
+\begin{frame}{ProjectEuler 28: Lösung ohne Aufbau der Spirale}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Euler28.java, frame=lines]{java}{Euler28-fast.java}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[10.] 12.11.2012
+    \item[9.] 19.11.2012
+    \item[8.] 26.11.2012
+    \item[7.] 03.12.2012
+    \item[6.] 10.12.2012
+    \item[5.] 17.12.2012: Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\subsection{Comic}
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/xkcd-good_code.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/AverageCalculation.java b/presentations/Programmieren-Tutorium/Tutorium-05/AverageCalculation.java
new file mode 100644
index 0000000..b97be73
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/AverageCalculation.java
@@ -0,0 +1,14 @@
+public class AverageCalculation {
+    public static float getAverage(int[] numbers) {
+        float sum = 0.0f;
+        for (int i = 0; i < numbers.length; i++) {
+            sum += numbers[i];
+        }
+        return sum / numbers.length;
+    }
+
+    public static void main(String[] args) {
+        int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+        System.out.println(getAverage(numbers));
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/Bilder.java b/presentations/Programmieren-Tutorium/Tutorium-05/Bilder.java
new file mode 100644
index 0000000..2ceba0b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/Bilder.java
@@ -0,0 +1,9 @@
+public static int getAverageColor(int[][] image) {
+    int sum = 0;
+    for (int x = 0; x < image.length; x++) {
+        for (int y = 0; y < image[0].length; y++) {
+            sum += image[x][y];
+        }
+    }
+    return sum / (image.length * image[0].length);
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame-bad.java b/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame-bad.java
new file mode 100644
index 0000000..008a499
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame-bad.java
@@ -0,0 +1,28 @@
+public class ConnectFourGame implements Cloneable {
+    private Color[][] board = new Color[7][6];
+    private Color lastMove;
+    private Color winner;
+    private boolean isFinished = false;
+
+    //[...]
+
+    public void printBoard() {
+        for (byte y = 5; y >= 0; y--) {
+            System.out.print(y + " ");
+            for (byte x = 0; x < 7; x++) {
+                if (board[x][y] == null) {
+                    System.out.print(" ");
+                } else if (board[x][y] == Color.RED) {
+                    System.out.print("r");
+                } else {
+                    System.out.print("w");
+                }
+            }
+            System.out.println("");
+        }
+        System.out.print("  ");
+        for (byte x = 0; x < 7; x++) {
+            System.out.print(x);
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame.java b/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame.java
new file mode 100644
index 0000000..79ba4cb
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame.java
@@ -0,0 +1,32 @@
+public class ConnectFourGame implements Cloneable {
+    public static final int BOARD_HEIGHT = 6;
+    public static final int BOARD_WIDTH = 7;
+    public static final int WINNING_NR = 4;
+
+    private Color[][] board = new Color[BOARD_WIDTH][BOARD_HEIGHT];
+    private Color lastMove;
+    private Color winner;
+    private boolean isFinished = false;
+
+    //[...]
+
+    public void printBoard() {
+        for (byte y = BOARD_HEIGHT - 1; y >= 0; y--) {
+            System.out.print(y + " ");
+            for (byte x = 0; x < BOARD_WIDTH; x++) {
+                if (board[x][y] == null) {
+                    System.out.print(" ");
+                } else if (board[x][y] == Color.RED) {
+                    System.out.print("r");
+                } else {
+                    System.out.print("w");
+                }
+            }
+            System.out.println("");
+        }
+        System.out.print("  ");
+        for (byte x = 0; x < BOARD_WIDTH; x++) {
+            System.out.print(x);
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-2.java b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-2.java
new file mode 100644
index 0000000..2fb062c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-2.java
@@ -0,0 +1,15 @@
+public class IataCode {
+    public static void printIATACodes(String[] myArray) {
+        for (int i = 0; i < myArray.length; i++) {
+            System.out.println(myArray[myArray.length - i - 1]);
+        }
+    }
+
+    public static void main(String[] args) {
+        String[] iataCodes = new String[4];
+        iataCodes[0] = "MUC";
+        iataCodes[1] = "BER";
+        iataCodes[2] = "AGB";
+        printIATACodes(iataCodes);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-3.java b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-3.java
new file mode 100644
index 0000000..93f0448
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode-3.java
@@ -0,0 +1,13 @@
+public class IataCode {
+    public static void printIATACodes(String[] myArray) {
+        for (int i = 0; i < myArray.length; i += 3) {
+            System.out.println(myArray[i]);
+        }
+    }
+
+    public static void main(String[] args) {
+        String[] iataCodes = { "MUC", "BER", "AGB", "ABC", "DEF",
+                "GIH", "JKL", "MNO", "PQR", "STU", "VWX", "YZ" };
+        printIATACodes(iataCodes);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/IataCode.java b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode.java
new file mode 100644
index 0000000..06dfe9d
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/IataCode.java
@@ -0,0 +1,18 @@
+public class IataCode {
+    public static void printIATACodes(String[] myArray) {
+        for (int i = 0; i < myArray.length; i++) {
+            System.out.println(myArray[i]);
+        }
+    }
+
+    public static void main(String[] args) {
+        String[] iataCodes = new String[4];
+        // Flughafen München
+        iataCodes[0] = "MUC";
+        // Flughafen Berlin Brandenburg
+        iataCodes[1] = "BER";
+        // Flughafen Augsburg
+        iataCodes[2] = "AGB";
+        printIATACodes(iataCodes);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/Makefile b/presentations/Programmieren-Tutorium/Tutorium-05/Makefile
new file mode 100644
index 0000000..1d5df9b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-05
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray-solution.java b/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray-solution.java
new file mode 100644
index 0000000..d18a91c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray-solution.java
@@ -0,0 +1,25 @@
+public class QuizArray {
+    private static String[] deepCopy(String[] original) {
+        String[] copy = new String[original.length];
+        for (int i = 0; i < original.length; i++) {
+            copy[i] = original[i];
+        }
+        return copy;
+    }
+
+    public static void main(String[] args) {
+        String[] myArray1 = { " geh ", "du", "alter", "esel" };
+        String[] myArray2 = deepCopy(myArray1);
+        myArray2[3] = "sack";
+
+        System.out.print("myArray1: ");
+        for (int i = 0; i < myArray1.length; i++) {
+            System.out.print(myArray1[i] + " ");
+        }
+
+        System.out.print("\nmyArray2: ");
+        for (int i = 0; i < myArray2.length; i++) {
+            System.out.print(myArray2[i] + " ");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray.java b/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray.java
new file mode 100644
index 0000000..69385eb
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/QuizArray.java
@@ -0,0 +1,17 @@
+public class QuizArray {
+    public static void main(String[] args) {
+        String[] myArray1 = { " geh ", "du", "alter", "esel" };
+        String[] myArray2 = myArray1;
+        myArray2[3] = "sack";
+
+        System.out.print("myArray1: ");
+        for (int i = 0; i < myArray1.length; i++) {
+            System.out.print(myArray1[i] + " ");
+        }
+
+        System.out.print("\nmyArray2: ");
+        for (int i = 0; i < myArray2.length; i++) {
+            System.out.print(myArray2[i] + " ");
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/Sieve_of_Eratosthenes_animation.gif b/presentations/Programmieren-Tutorium/Tutorium-05/Sieve_of_Eratosthenes_animation.gif
new file mode 100644
index 0000000..cd385ee
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/Sieve_of_Eratosthenes_animation.gif differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/SwitchContinue.java b/presentations/Programmieren-Tutorium/Tutorium-05/SwitchContinue.java
new file mode 100644
index 0000000..02975c3
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/SwitchContinue.java
@@ -0,0 +1,18 @@
+public class SwitchContinue {
+    enum Direction {
+        RECHTS, UNTEN, OBEN, LINKS
+    }
+
+    public static void main(String[] args) {
+        Direction direction = Direction.RECHTS;
+
+        switch (direction) {
+        case RECHTS:
+            direction = Direction.UNTEN;
+            continue;
+        case UNTEN:
+            direction = Direction.LINKS;
+            break;
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/eclipse-export-project.png b/presentations/Programmieren-Tutorium/Tutorium-05/eclipse-export-project.png
new file mode 100644
index 0000000..21327d0
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/eclipse-export-project.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy.dia b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy.dia
new file mode 100644
index 0000000..7b87f19
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy.dia differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy~ b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy~
new file mode 100644
index 0000000..059512a
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy~ differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy.dia b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy.dia
new file mode 100644
index 0000000..059512a
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy.dia differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy~ b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy~
new file mode 100644
index 0000000..cec2390
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy~ differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1.dia b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1.dia
new file mode 100644
index 0000000..cec2390
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1.dia differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1~ b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1~
new file mode 100644
index 0000000..cec2390
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/so-obj1~ differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/tutorium-05.tex b/presentations/Programmieren-Tutorium/Tutorium-05/tutorium-05.tex
new file mode 100644
index 0000000..ce5fdf8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-05/tutorium-05.tex
@@ -0,0 +1,280 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{menukeys}
+\usepackage{xcolor}
+\usepackage{graphicx}
+\usepackage{wrapfig}
+\usepackage{../templates/myStyle}
+
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Coding Style, Arrays}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizArray.java, frame=lines]{java}{QuizArray.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{block}{Quelltext}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizArray.java}
+    \end{block}
+
+    \begin{block}{Ausgabe}
+        myArray1:  geh  du alter sack\\
+        myArray2:  geh  du alter sack 
+    \end{block}
+\end{frame}
+
+\begin{frame}{Shallow copy und deep copy}
+    \includegraphics*[height=5cm,angle=-90]{so-obj1.pdf}
+
+    \begin{minipage}[b]{0.45\linewidth}
+    \begin{figure}[htb]
+        \includegraphics*[height=5cm,angle=-90]{so-obj1-shallow-copy.pdf}
+        \caption{shallow copy}
+        \label{UploadForm}
+    \end{figure}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+    \begin{figure}[htb]
+        \includegraphics*[height=5cm,angle=-90]{so-obj1-deep-copy.pdf}
+        \caption{deep copy}
+        \label{UploadForm}
+    \end{figure}
+    \end{minipage}
+
+    \tiny{Weitere infos auf \href{http://stackoverflow.com/a/9835954/562769}{stackoverflow.com}}
+\end{frame}
+
+\begin{frame}{Shallow copy und deep copy}
+    \begin{itemize}
+        \item Java macht standardmäßig eine "`shallow copy"'
+        \item Wenn ihr eine "`deep copy"' wollt, müsst ihr das selbst machen
+    \end{itemize}
+    \begin{alertblock}{Lehre aus dem Quiz}
+        Beim kopieren von Objekten (alles außer \myCode{boolean}, \myCode{byte},
+        \myCode{int}, \myCode{long}, \myCode{float}, \myCode{double} -
+        oder einfacher, alles was mit einem Großbuchstaben beginnt) 
+        ist Vorsicht geboten.
+    \end{alertblock}
+\end{frame}
+
+\begin{frame}{Shallow copy und deep copy}
+    Deep copy sieht im Beispiel so aus:
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=QuizArray.java, frame=lines]{java}{QuizArray-solution.java}
+\end{frame}
+
+\section{Coding Style}
+\subsection{Magic Numbers}
+\begin{frame}{Magic Numbers}
+    \begin{alertblock}{Definition: Magic numbers}
+        Unique values with unexplained meaning or multiple occurrences 
+        which could (preferably) be replaced with named constants.
+    \end{alertblock}
+
+    Warum sind Konstanten besser als magic numbers?
+    \begin{itemize}
+        \item Code wird lesbarer
+        \item Code wird leichter erweiterbar
+        \item Kein (nennenswerter) Geschwindigkeits- oder Speicherplatznachteil
+    \end{itemize}
+
+    \begin{block}{Faustregel}
+        Alle Zahlen, bis auf \myCode{0}, \myCode{1} und \myCode{-1}
+        sollten mittels Konstanten verwendet werden.
+    \end{block}
+\end{frame}
+
+\begin{frame}{Magic Numbers: Beispiel mit magic numbers}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame-bad.java}
+\end{frame}
+
+\begin{frame}{Magic Numbers: Beispiel mit magic Konstanten}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame.java}
+\end{frame}
+
+\section{Praxis}
+\subsection{Durchschnitt}
+\begin{frame}{Durchschnitt: Aufgabe}
+    Schreiben Sie eine Methode \myCode{float getAverage(int[] numbers) \{ \dots \}},
+    die den Durchschnitt der Zahlen im Array \myCode{numbers} berechnet.
+\end{frame}
+
+\begin{frame}{Durchschnitt: Lösung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{AverageCalculation.java}
+\end{frame}
+
+\subsection{Flughafenkürzel}
+\begin{frame}{Flughafenkürzel: Aufgabe}
+    Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und 
+    möchten den Inhalt auf der Konsole ausgeben.
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Lösung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode.java}
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Ausgabe}
+    Kein Compiler- oder Laufzeitfehler, obwohl \myCode{iataCodes[3]}
+    nicht initialisiert ist!
+
+    \begin{block}{Ausgabe}
+    MUC\\
+    BER\\
+    AGB\\
+    null
+    \end{block}
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge}
+    Modifiziere das Programm so, dass die Kürzel in umgekehrter 
+    Reihenfolge ausgegeben werden.
+    \begin{block}{Lösung von vorhin}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
+    \end{block}
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge - Lösung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-2.java}
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Jumping}
+    Modifiziere das Programm so, dass nur jedes dritte Element 
+    ausgegeben wird.
+    \begin{block}{Lösung von vorhin}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
+    \end{block}
+\end{frame}
+
+\begin{frame}{Flughafenkürzel: Jumping - Lösung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-3.java}
+\end{frame}
+
+\subsection{Praxis: Bilder}
+\begin{frame}{Praxis: Bilder}
+    Gegeben ist ein Schwarz-Weiß Bild \myCode{int[][] image}.
+    \begin{enumerate}
+        \item Was repräsentiert \myCode{image[2][42]}?
+        \item Schreiben Sie eine Methode, die die durchschnittliche
+              Farbe von \myCode{image} berechnet und zurückgibt.
+    \end{enumerate}
+\end{frame}
+
+\begin{frame}{Praxis: Bilder - Lösung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bilder.java}
+
+    Mögliche Probleme:
+    \begin{itemize}
+        \item Ein \myCode{int} für \myCode{sum} ist eventuell zu klein
+        \item 255 Grauwerte, \myCode{int} hat maximalwert von 2.147.483.64
+        \item[$\Rightarrow$] $\frac{2147483647}{255} \approx 8.4 \cdot 10^6$
+        \item[$\Rightarrow$] maximal 8.4 Millionen Pixel
+        \item[$\Rightarrow$] $\sqrt{8.4 \cdot 10^6} \approx 2900$
+        \item[$\Rightarrow$] maximale Auflösung von $2900 \times 2900$ Pixel
+        \item Eventuell \myCode{int[][] image = new int[0][0];}
+    \end{itemize}
+\end{frame}
+
+\subsection{Praxis: Sieb des Erasthostenes}
+\begin{frame}{Praxis: Sieb des Erasthostenes}
+    Implementieren Sie das Sieb des Erasthostenes.
+\end{frame}
+
+\section{Allgemeine Hinweise zu ÜB}
+\subsection{Praktomat}
+\begin{frame}{Praktomat}
+    \begin{itemize}
+        \item Fragen frühzeitig stellen!
+        \item Wenn ihr Pakete verwendet, am Anfang eurer Dateien 
+              also \myCode{package AB\_2;} oder ähnliches steht,
+              müsst ihr die korrekte Ordnerstruktur in den Praktomat 
+              hochladen
+        \item In Eclipse im Fenster "`Navigation"' den Ordner "`src"'
+              auswählen
+        \item \menu{File > Export\dots > File system}
+        \item Zip-Datei aus dem exportiertem src-Ordner erstellen
+        \item Zip-Datei hochladen
+    \end{itemize}
+\end{frame}
+
+\framedgraphic{Projekt mit Eclipse exportieren}{eclipse-export-project.png}
+
+\begin{frame}{Allgemeines}
+    \begin{itemize}
+        \item Eclipse-Warnungen beherzigen und die Ursache dafür beseitigen
+        \item Formattieren: \keys{Strg + A} und \keys{Strg + \shift + F}
+        \item Encoding: \menu{Project > Properties > Ressource > Text file encoding > UTF-8}
+    \end{itemize}
+\end{frame}
+
+\section{Hinweise zum ÜB 3}
+\subsection{ÜB 3}
+\begin{frame}{ÜB 3}
+    \begin{itemize}
+        \item A1:
+        \begin{itemize}
+            \item Pro Aufgabe jeweils eine Textdatei(\myCode{A1.txt}, \myCode{B1.txt})
+            \item Schaut euch meinen Artikel \href{http://martin-thoma.com/java-puzzle-1-pre-and-postincrement/}{Java Puzzle \#1: Pre- and Postincrement} an
+        \end{itemize}
+        \item A2: Buchstaben "`d"' und "`f"' nicht verwenden
+    \end{itemize}
+\end{frame}
+
+\section{Abspann}
+\subsection{Comic}
+\framedgraphic{Abgaben um 11:55 Uhr}{ub-2-abgabge.png}
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-01-commenting.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-05/ub-2-abgabge.png b/presentations/Programmieren-Tutorium/Tutorium-05/ub-2-abgabge.png
new file mode 100644
index 0000000..89acdae
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-05/ub-2-abgabge.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/Camera.java b/presentations/Programmieren-Tutorium/Tutorium-06/Camera.java
new file mode 100644
index 0000000..a577eb7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/Camera.java
@@ -0,0 +1,89 @@
+/**
+ * This class represents a digital camera with an autofocus feature.
+ *
+ * @author Markus Iser, Martin Thoma
+ *
+ */
+public class Camera {
+    /** This epsilon is used for internal float comparisons. */
+    private static final double EPSILON = 1E-6;
+
+    /** The objective that is currently used by the camera. */
+    private final Objective objective;
+
+    /**
+     * The constructor for objective.
+     *
+     * @param objective
+     *            an objective
+     */
+    public Camera(final Objective objective) {
+        this.objective = objective;
+    }
+
+    /**
+     * Check two doubles for equality.
+     *
+     * @param fp1 first floating point number
+     * @param fp2 second floating point number
+     * @return {@code true} if both floats are equal, otherwise {@code false}
+     */
+    private boolean fpEquals(final double fp1, final double fp2) {
+        return Math.abs(fp1 - fp2) < EPSILON;
+    }
+
+    /**
+     * Determine if the contrast on the left is higher than on the current
+     * position.
+     *
+     * @param objective the objective you are manipulating
+     * @return {@code true} the contrast on the left of the current position is
+     *         higher, otherwise {@code false}
+     */
+    private boolean isLeftContrastHigher(Objective objective) {
+        double contrast = objective.getContrast();
+        objective.stepLeft();
+        double contrastNew = objective.getContrast();
+        objective.stepRight();
+
+        // check if the contrast - according to our EPSILON - is the same
+        if (fpEquals(contrast, contrastNew)) {
+            return false;
+        }
+
+        return contrastNew > contrast;
+    }
+
+    /**
+     * Adjust objective to get the optimum focus. The optimum focus is
+     * determined by the highest contrast.
+     */
+    public void autofocus() {
+        boolean stepLeft;
+        double contrast = objective.getContrast();
+
+        // determine direction
+        stepLeft = isLeftContrastHigher(objective);
+
+        // loop until optimum passed
+        while (objective.getContrast() > contrast
+                && !fpEquals(contrast, objective.getContrast())) {
+            contrast = objective.getContrast();
+            if (stepLeft) {
+                objective.stepLeft();
+            } else {
+                objective.stepRight();
+            }
+        }
+
+        // optional correction-move back
+        if (!fpEquals(contrast, objective.getContrast())) {
+            if (stepLeft) {
+                objective.stepRight();
+            } else {
+                objective.stepLeft();
+            }
+        }
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/Gears.java b/presentations/Programmieren-Tutorium/Tutorium-06/Gears.java
new file mode 100644
index 0000000..1a57b8b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/Gears.java
@@ -0,0 +1,67 @@
+/**
+ * This class models the gears. It is restricted to derailleur gears.
+ *
+ * @author Markus Iser, Martin Thoma
+ * @version 1.0
+ */
+
+public class Gears {
+    public static final int MIN_FRONT_SPROCKETS = 1;
+    public static final int MAX_FRONT_SPROCKETS = 3;
+    public static final int MIN_REAR_SPROCKETS = 1;
+    public static final int MAX_REAR_SPROCKETS = 10;
+
+    private int frontSprockets;
+    private int rearSprockets;
+
+    /** Price in cents. */
+    private final int price;
+
+    Gears(int frontSprockets, int rearSprockets, int price) {
+        setSprockets(frontSprockets, rearSprockets);
+        this.price = price;
+    }
+
+    /**
+     * Sets the sprocket numbers.
+     * Uses default-values if consisteny criteria are not met.
+     * @param sprockets
+     * @param rearSprockets
+     */
+    void setSprockets(int sprockets, int rearSprockets) {
+        this.frontSprockets = sprockets;
+        this.rearSprockets = rearSprockets;
+
+        if (!(this.frontSprockets >= 1)) { // A.1
+            this.frontSprockets = 1;
+        } else if (!(this.frontSprockets < 4)) { // A.2
+            this.frontSprockets = 3;
+        }
+
+        // B.1, B.2
+        if (this.rearSprockets < 1 || this.rearSprockets > 9) { 
+            this.rearSprockets = this.frontSprockets * 3;
+        }
+
+        if (this.rearSprockets < this.frontSprockets) { // C.1
+            this.rearSprockets = this.frontSprockets;
+        } else if (this.rearSprockets > 3 * this.frontSprockets) { // C.2
+            this.rearSprockets = 3 * this.frontSprockets;
+        }
+    }
+
+    /**
+     * @return the number of gears as the number of sprocket-combinations
+     */
+    int getNumberOfGears() {
+        return frontSprockets * rearSprockets;
+    }
+
+    /**
+     * @return the price of the gears
+     */
+    int getPrice() {
+        return price;
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/Gleitkommazahlen.png b/presentations/Programmieren-Tutorium/Tutorium-06/Gleitkommazahlen.png
new file mode 100644
index 0000000..b9f3272
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-06/Gleitkommazahlen.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/Makefile b/presentations/Programmieren-Tutorium/Tutorium-06/Makefile
new file mode 100644
index 0000000..3bf1b36
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-06
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/String.java b/presentations/Programmieren-Tutorium/Tutorium-06/String.java
new file mode 100644
index 0000000..b24d345
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/String.java
@@ -0,0 +1,8 @@
+public class String {
+
+    java.lang.String content;
+
+    public String(java.lang.String content) {
+        this.content = content;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/World.java b/presentations/Programmieren-Tutorium/Tutorium-06/World.java
new file mode 100644
index 0000000..963507e
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/World.java
@@ -0,0 +1,6 @@
+public class World {
+    public static void main(String[] args) {
+        String a = new String("Lorem ipsum");
+        System.out.println(a);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/foreach.java b/presentations/Programmieren-Tutorium/Tutorium-06/foreach.java
new file mode 100644
index 0000000..c73d973
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/foreach.java
@@ -0,0 +1,15 @@
+public class World {
+    public static void main(String[] args) {
+        int[] myArray = { 1, 5, 6, 23, 4, 2, -1, 4 };
+
+        // for-Schleife
+        for (int i = 0; i < myArray.length; i++) {
+            System.out.println(myArray[i]);
+        }
+
+        // foreach-Schleife
+        for (int element : myArray) {
+            System.out.println(element);
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/new-package.png b/presentations/Programmieren-Tutorium/Tutorium-06/new-package.png
new file mode 100644
index 0000000..f893ff9
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-06/new-package.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-06/tutorium-06.tex b/presentations/Programmieren-Tutorium/Tutorium-06/tutorium-06.tex
new file mode 100644
index 0000000..990c5ae
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-06/tutorium-06.tex
@@ -0,0 +1,375 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{menukeys}
+\usepackage{xcolor}
+\usepackage{pifont}% http://ctan.org/pkg/pifont
+\newcommand{\cmark}{\ding{51}}%
+\newcommand{\xmark}{\ding{55}}%
+\usepackage{../templates/myStyle}
+
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Pakete}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=String.java, frame=lines]{java}{String.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=World.java, frame=lines]{java}{World.java}
+    \end{minipage}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Ergebnis}
+    \myCode{Exception in thread "main" java.lang.NoSuchMethodError: main}\\
+    Es gibt nun keine \\
+    \myCode{public static void main(java.lang.String[] args) \{}\\
+    \begin{block}{Lehre}
+        Keine Java-internen Typen umschreiben.
+    \end{block}
+\end{frame}
+
+
+\section{ÜB 2}
+\subsection{Nachbesprechung ÜB 2}
+\begin{frame}{Allgmeines}
+    \begin{block}{Musterlösung}
+        Inoffizielle Musterlösung von Simon und mir ist unter 
+        \href{http://goo.gl/BfA6i}{http://goo.gl/BfA6i} erhältlich.\\
+        Bitte dort anschauen.
+    \end{block}
+\end{frame}
+
+\begin{frame}{Allgmeines}
+  \begin{block}{Stil}
+    \begin{itemize}[<+->]
+        \item Niemals \myCode{if (variable == true)}, sondern \myCode{if (variable)}
+        \item "`Dead Code"' - also Code der niemals erreicht wird - wird bestraft
+        \item Große Probleme ($\rightarrow$ lange Methoden) aufsplitten
+    \end{itemize}
+  \end{block}
+
+    \begin{itemize}[<+->]
+        \item Die bereitgestellten Code-Vorlagen sind keine Musterlösungen!
+        \item Kein "`TODO"' in Abgaben
+        \item Aufgabe B1 (Histogramm) war fehlerhaft: Natürlich muss der Kontrast nur "`nicht-negativ"' sein und nicht "`positiv"'
+        \item Laufvariablen müssen nicht immer \myCode{i} und \myCode{j} heißen
+        \item Schaut euch die hochgeladeten Dateien im Praktomat an
+        \item Redundanter Code ist schlecht $\Rightarrow$ Besser: Neue Methode anlegen
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Allgemeines}
+    \begin{block}{Genau lesen}
+      \begin{itemize}[<+->]
+        \item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie 
+              den Konstruktor der Klasse Bike, indem Sie aus der 
+              Signatur das Argument, nach dem bisher der Preis 
+              gesetzt wird, entfernen."'
+        \item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den 
+              Konstruktor so um,  dass er die Methode setSprockets 
+              benutzt, um einen  konsistenten Anfangszustand zu 
+              garantieren."'
+        \item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die 
+              siebenunddreißigste Tribonacci-Zahl auf der Konsole 
+              aus."'
+        \item[$\Rightarrow$] Es werden automatische Tests durchgeführt.
+              Stimmt die Ausgabe nicht exakt - also jedes einzelne 
+              (Leer)zeichen -, schlägt der Test fehl.
+      \end{itemize}
+    \end{block}
+\end{frame}
+
+\begin{frame}{Tipp für BikeShop}
+   \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/System.html\#arraycopy(java.lang.Object, int, java.lang.Object, int, int)}{System.arraycopy(warehouse, 0, newStock, 0, warehouse.length);}}
+\end{frame}
+
+\begin{frame}{setSprockets}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Gears.java, frame=lines, firstline=25, lastline=51]{java}{Gears.java}
+\end{frame}
+
+\begin{frame}{Einheiten}
+  Einheiten \textbf{immer} angeben, da \dots
+  \begin{itemize}[<+->]
+    \item nie klar ist, welche Einheit gemeint ist
+    \item es ein richtig ärgerlicher Fehler ist
+    \item fehlende Einheiten viel Geld kosten können ($\rightarrow$ \href{http://www.youtube.com/watch?v=q2L5\_swAT5A}{Video: NASA Measuring Failure} - Mars Orbiter)
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Attribute}
+  \begin{alertblock}{Attribute}
+    \begin{itemize}
+      \item Attribute sind Eigenschaften eines Objekts oder einer Klasse
+      \item Attribute sind keine Hilfsvariablen
+    \end{itemize}
+  \end{alertblock}
+\end{frame}
+
+\begin{frame}{Vergleiche mit floats}
+    Nicht jede Zahl kann als Gleitkomma-Zahl dargestellt werden:
+    \includegraphics[height=50mm]{Gleitkommazahlen.png}\\
+    \tiny{Quelle: \href{http://de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}{de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}}\\
+    
+
+\end{frame}
+
+\begin{frame}{Vergleiche mit floats}
+    Zusätzlich sollte man bei der Camera-Aufgabe von $\varepsilon = 10^6$ ausgehen.\\
+    Die Vergleiche müssen also etwa so aussehen:
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=24, firstline=24, lastline=33]{java}{Camera.java}
+\end{frame}
+
+\begin{frame}{Camera.java: isLeftContrastHigher}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=35, firstline=35, lastline=55]{java}{Camera.java}
+\end{frame}
+
+\begin{frame}{Camera.java: Eigentlicher Code}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=57, firstline=57, lastline=87]{java}{Camera.java}
+\end{frame}
+
+\begin{frame}{Gerüchteküche}
+  Bringt es einen Vorteil, eine schwere Aufgabe nicht zu bearbeiten?
+  \begin{itemize}[<+->]
+    \item Es gibt für jede Teilaufgabe ein Punktekontingent
+    \item Bearbeitet ihr eine Teilaufgabe nicht, ziehe ich alle Punkte ab
+    \item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe 
+          ich mindestens so viele Punkte ab, wie derjenige mit dem 
+          höchstem Abzug abgezogen bekommen hat
+    \item Wenn der Code nicht das tut, was gefordert wird, kann ich 
+          auch alles abziehen
+    \item[$\Rightarrow$] Nein, es bringt keinen Vorteil
+  \end{itemize}
+\end{frame}
+
+\section{Vorlesungsergänzungen}
+\subsection{Pakete}
+\begin{frame}{Pakete}
+    \begin{itemize}[<+->]
+      \item Dienen der Strukturierung des Quelltextes
+      \item Sollen Namenskonflikte vermeiden (z.B. Klasse \myCode{Person}
+            in einem Paket \myCode{uni} ist wohl anders als Klasse
+            \myCode{Person} im Paket \myCode{politik})
+      \item Können über \myCode{.jar}-Dateien eingebunden werden
+      \item Könnt ihr über \keys{\shift + Alt + N} und \menu{Package}
+            oder mit einem Rechtsklick in Eclipse erzeugen:
+        \includegraphics[height=30mm]{new-package.png}\\
+      \item Eine Klasse ist Teil eines Paketes, wenn sie \dots
+        \begin{itemize}
+            \item in dem Ordner mit dem Paketnamen liegt
+            \item sie \myCode{package ;} ganz am Anfang stehen hat
+        \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Pakete}
+    \begin{block}{Namenskonventionen}
+        \begin{itemize}
+            \item Pakete werden klein geschrieben
+            \item Pakete können "`Unterpakete"' haben. Dies wird durch
+                  einen Punkt angedeutet: 
+              \begin{itemize}
+                \item \href{http://docs.oracle.com/javase/7/docs/api/overview-summary.html}{Offizielle Pakete}:
+                \item \href{http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html}{java.io}
+                \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html}{java.lang} - hat z.B. \myCode{Byte}, \myCode{Integer}, \dots
+                \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/package-summary.html}{java.lang.annotation}
+              \end{itemize}
+        \end{itemize}
+    \end{block}
+\end{frame}
+
+\begin{frame}{Pakete: protected}
+    \begin{tabular}{l||c|c|c|c}
+        Modifier            & Class & Package   & Subclass  & World\\
+        \hline\hline
+        \myCode{public}     & \cmark & \cmark & \cmark & \cmark \\
+        \myCode{protected}  & \cmark & \cmark & \cmark & \xmark \\
+        no modifier         & \cmark & \cmark & \xmark & \xmark \\
+        \myCode{private}    & \cmark & \xmark & \xmark & \xmark 
+    \end{tabular}
+
+    \small{Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html}{Controlling Access to Members of a Class}}
+    \pause
+    \begin{block}{Tipp}
+        \myCode{private} macht fast immer Sinn. Wenn ihr nicht wisst,
+        ob ihr \myCode{private} oder \myCode{protected} nehmen sollt,
+        nehmt protected. Kein modifier macht selten Sinn. Das sieht 
+        so aus, als ob ihr es dem Zufall überlasst.
+    \end{block}
+\end{frame}
+
+\subsection{foreach-Schleife}
+\begin{frame}{foreach in Java: Allgemeines}
+    Foreach \dots
+    \begin{itemize}[<+->]
+        \item wird in Java-Kreisen manchmal auch "`Enhanced for loop"' genannt
+        \item geht alle Elemente einer 
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection} 
+              durch zu gehen (genauer: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable})
+        \item sollte verwendet werden, wenn man es verwenden kann
+        \item ist auch in der \href{http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html}{Dokumentation} (Nur in 1.5?)
+              und im \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html}{Tutorial}
+        \item ist in der \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.14.2}{JLS SE7} spezifiziert
+        \item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams} 
+              für das "`Programmer Language Certification"'
+    \end{itemize}
+\end{frame}
+\begin{frame}{foreach in Java: Beispiel}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=3, lastline=13]{java}{foreach.java}
+\end{frame}
+
+\section{ÜB 3}
+\subsection{Hinweise zu ÜB 3}
+\begin{frame}{Hinweise zu ÜB 3}
+  \begin{itemize}[<+->]
+    \item Nur Klassen und Methoden aus \myCode{java.lang} sind erlaubt
+    \item \textbf{Keine} Textausgabe und keine Schreibzugriffe auf Dateien
+    \item JavaDoc und Datenkapselung ($\rightarrow$ \myCode{private}) sind nun Pflicht
+    \item Pakete sollten nun verwendet werden
+    \item[$\Rightarrow$] Achtung beim Upload in den Praktomaten! vgl. tutorium-05.pdf, Folien 23-24
+    \item[A.1.1] Nur die \myCode{statements.csv} als Abgabe!
+    \item[A.2] \myCode{StrangeClass.java} soll wirklich \textbf{nirgends} "`f"' und kein "`d"' haben
+    \item[A.3] Levenshtein-Distanz $\rightarrow$ nächste Folie
+    \item[A.4] Geometrie $\rightarrow$ übernächste Folie
+    \item[B.1] Der Kommentar, warum ihr die Modifier (\myCode{private, public, protected})
+               verwendet, soll natürlich direkt zum jeweiligen modifier und NICHT in
+               eine extra Textdatei!
+  \end{itemize}
+\end{frame}
+
+\subsection{Levenshtein-Distanz}
+\begin{frame}{A.3 Levenshtein-Distanz}
+  \begin{itemize}[<+->]
+    \item Wer hat sichs angeschaut?
+    \item Verstanden? Falls nicht sind folgende Seiten einen Versuch wert:
+    \begin{itemize}
+        \item \href{http://oldfashionedsoftware.com/tag/levenshtein-distance/}{Guter Artikel}, aber nur bis "`Some Code, Finally"' relevant
+        \item \href{http://de.wikipedia.org/wiki/Levenshtein-Distanz}{de-Wikipedia}
+        \item \href{http://en.wikipedia.org/wiki/Levenshtein_Distance\#Computing_Levenshtein_distance}{en-Wiki} mit Pseudocode
+        \item \href{http://www-igm.univ-mlv.fr/~lecroq/seqcomp/node2.html}{eine Visualisierung}
+    \end{itemize}
+    \begin{alertblock}{Achtung!}
+      Der Algorithmus muss modifiziert werden. Durch die Modifikationen entspricht
+      der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen. 
+      Ohne diese Modifikationen kann ich euch keine Punkte geben!
+    \end{alertblock}
+  \end{itemize}
+\end{frame}
+
+\subsection{A.4 Geometrie}
+\begin{frame}{A.4 Geometrie}
+  \begin{itemize}[<+->]
+    \item Manhattan-Distanz:\\
+        \includegraphics[height=30mm]{ManhattanDistance.pdf}\\
+        \tiny{Quelle: \href{http://commons.wikimedia.org/wiki/File:Manhattan\_distance.svg}{commons.wikipedia.org/wiki/File:Manhattan\_distance.svg}}
+  \end{itemize}
+\end{frame}
+
+\section{Praxis}
+\subsection{Aufgaben}
+\begin{frame}{Aufgaben}
+    Siehe Blätter 5, 6 und 7 in \menu{prog-official > tut\_aufgaben\_ws1112}
+\end{frame}
+
+\section{Abspann}
+\subsection{Tutorium 7}
+\begin{frame}{Tutorium 7}
+    \begin{block}{ÜB 4: Achtung}
+      \begin{itemize}
+        \item Sehr große Aufgabe (viele Methoden / Klassen)
+        \item Die meisten Methoden benötigen nur ein bis vier Zeilen
+      \end{itemize}
+    \end{block}
+
+    \begin{block}{Themenvorschläge fürs nächste mal}
+      \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html}{Assertions}
+        \item Verkettete Listen
+        \item Allgemeine Übungsaufgaben
+      \end{itemize}
+    \end{block}
+\end{frame}
+
+\subsection{Nachhilfe}
+\begin{frame}{Nachhilfe}
+    \begin{itemize}[<+->]
+        \item Falls ihr Nachhilfe braucht, meldet euch bei mir oder
+              dem Übungsleiter (Florian Merz)
+        \item Euch wird dann ein Nachhilfelehrer vermittelt
+        \item Die Kosten müsst ihr mit dem Nachhilfelehrer aushandeln
+    \end{itemize}
+\end{frame}
+
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[8.] 26.11.2012
+    \item[7.] 03.12.2012
+    \item[6.] 10.12.2012
+    \item[5.] 17.12.2012: Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/programmers-users.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/Listenbeispiel.jpg b/presentations/Programmieren-Tutorium/Tutorium-07/Listenbeispiel.jpg
new file mode 100644
index 0000000..d4797d1
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-07/Listenbeispiel.jpg differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/Main.java b/presentations/Programmieren-Tutorium/Tutorium-07/Main.java
new file mode 100644
index 0000000..b1760fc
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/Main.java
@@ -0,0 +1,26 @@
+public class Main {
+    public static void main(String[] args) {
+        SinglyLinkedList list = new SinglyLinkedList();
+        list.printList();
+
+        // append new elements at the front of the list
+        list.append(12);
+        list.printList();
+        list.append(13);
+        list.printList();
+        list.append(14);
+        list.printList();
+        list.append(15);
+        list.printList();
+
+        // remove elements
+        list.remove(13);
+        list.printList();
+
+        // find elements
+        int numberA = list.find(14);
+        int numberB = list.find(13);
+        System.out.println(numberA + " " + numberB);
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/Makefile b/presentations/Programmieren-Tutorium/Tutorium-07/Makefile
new file mode 100644
index 0000000..50d42c1
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-07
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/Node.java b/presentations/Programmieren-Tutorium/Tutorium-07/Node.java
new file mode 100644
index 0000000..59f6c5b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/Node.java
@@ -0,0 +1,9 @@
+public class Node {
+    int container;
+    Node next;
+
+    public Node(int container) {
+        this.container = container;
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/ObjectDiagram.dia b/presentations/Programmieren-Tutorium/Tutorium-07/ObjectDiagram.dia
new file mode 100644
index 0000000..d5e748a
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-07/ObjectDiagram.dia differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/QuizString.java b/presentations/Programmieren-Tutorium/Tutorium-07/QuizString.java
new file mode 100644
index 0000000..1662459
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/QuizString.java
@@ -0,0 +1,20 @@
+public class QuizString {
+    public static void main(String[] args) {
+        String string1 = new String("Hallo");
+        String string2 = new String("Hallo");
+        if (string1 == string2) {
+            System.out.println("string1 und string2 sind das selbe Objekt.");
+        } else {
+            System.out.println("string1 und string2 sind verschiedene Objekte.");
+        }
+
+        String string3 = "Hallo";
+        String string4 = "Hallo";
+        if (string3 == string4) {
+            System.out.println("string3 und string4 sind das selbe Objekt.");
+        } else {
+            System.out.println("string3 und string4 sind verschiedene Objekte.");
+        }
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/Singly-linked-list.png b/presentations/Programmieren-Tutorium/Tutorium-07/Singly-linked-list.png
new file mode 100644
index 0000000..2fbc5dc
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-07/Singly-linked-list.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList-structure.java b/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList-structure.java
new file mode 100644
index 0000000..c047229
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList-structure.java
@@ -0,0 +1,20 @@
+public class SinglyLinkedList {
+
+    Node head;
+
+    public void append(int number) {
+
+    }
+
+    public void remove(int number) {
+
+    }
+
+    public int find(int number) {
+
+    }
+
+    public void printList() {
+
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList.java b/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList.java
new file mode 100644
index 0000000..06ec723
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/SinglyLinkedList.java
@@ -0,0 +1,70 @@
+public class SinglyLinkedList {
+
+    Node head;
+
+    private boolean isEqual(Node node, int content) {
+        return node.container == content;
+    }
+
+    private Node findNode(int number) {
+        Node currentNode = head;
+
+        while (!isEqual(currentNode, number) && currentNode.next != null) {
+            currentNode = currentNode.next;
+        }
+
+        if (isEqual(currentNode, number)) {
+            return currentNode;
+        } else {
+            return null;
+        }
+    }
+
+    public void append(int number) {
+        Node toInsert = new Node(number);
+        toInsert.next = head;
+        head = toInsert;
+
+        /*
+         * schlecht: Node currentNode = head;
+         *
+         * while (currentNode.next != null) { currentNode = currentNode.next; }
+         * currentNode.next = n;
+         */
+    }
+
+    public void remove(int number) {
+        Node previous = head;
+        Node currentNode = head;
+
+        while (!isEqual(currentNode, number) && currentNode.next != null) {
+            previous = currentNode;
+            currentNode = currentNode.next;
+        }
+
+        if (currentNode.next != null) {
+            previous.next = currentNode.next;
+        }
+    }
+
+    public int find(int number) {
+        Node node = findNode(number);
+
+        if (node == null) {
+            return 0;
+        } else {
+            return node.container;
+        }
+    }
+
+    public void printList() {
+        Node currentNode = head;
+        System.out.print("head -> ");
+        while (currentNode != null) {
+            System.out.print(currentNode.container + " -> ");
+            currentNode = currentNode.next;
+        }
+        System.out.println("null");
+    }
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-07/singleLines.java
new file mode 100644
index 0000000..a80dc8e
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/singleLines.java
@@ -0,0 +1,6 @@
+for (int i = 0; i < image.length; i++) {
+    for (int j = 0; j < image[i].length; j++) {
+        assert(0 <= image[i][j] && image[i][j] <= 255);
+        histogram[image[i][j]]++;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-07/tutorium-07.tex b/presentations/Programmieren-Tutorium/Tutorium-07/tutorium-07.tex
new file mode 100644
index 0000000..2ab9749
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-07/tutorium-07.tex
@@ -0,0 +1,275 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{String interning, Assertions, Einfach verkettete Listen}
+\author{\tutor}
+\date{3. Dezember 2012}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler? \xmark
+        \item Gibt es einen Laufzeit-Fehler? \xmark
+        \item Gibt es eine Ausgabe? \cmark{} Welche Ausgabe gibt es?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
+    \begin{itemize}
+        \item string1 und string2 sind verschiedene Objekte.
+        \item string3 und string4 sind das selbe Objekt.
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Erklärung}
+    \begin{itemize}[<+->]
+        \item Erstellt man einen String mit \myCode{String abc = new String("Hallo");}
+              wird ein neues Objekt angelegt
+        \item Erstellt man einen String mit \myCode{String abc = "Hallo";}
+              macht Java "`String interning"'
+    \end{itemize}
+    \pause[\thebeamerpauses]
+    \begin{alertblock}{Achtung}
+        Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so 
+        ist garantiert, dass ihr auf Gleichheit (und nicht nur auf
+        "`Selbstheit"' vergleicht).
+    \end{alertblock}
+\end{frame}
+
+\section{Assertions}
+\subsection{Allgemeines}
+\begin{frame}{Assertions}
+    \begin{itemize}[<+->]
+        \item Problem: Es tritt ein falsches Ergebnis auf, es ist
+              aber nicht klar warum.
+        \item Lösung: Man macht Zusicherungen (engl. assertions)
+        \item Man überlegt sich also, welche Variablen an 
+              krischen Stellen welche Werte oder Beziehungen 
+              zueinander haben sollen
+    \end{itemize}
+    \pause[\thebeamerpauses]
+    \begin{alertblock}{Wichtig: Assertions sind keine Exceptions!}
+        \begin{tabular}{l|l}
+            \textbf{Assertion}                  & \textbf{Exception}\\
+            \hline
+            muss man aktivieren                 & wird immer ausgeführt\\
+            dient zum Entdecken von Fehlern     & dient zum behandeln von Fehlern\\
+            z.B. (a < b), (a !=0), \dots        & z.B. \href{http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html}{IOException}\\
+        \end{tabular}
+    \end{alertblock}
+\end{frame}
+
+\begin{frame}{Beispiel}
+    \inputminted[linenos=false, tabsize=4, fontsize=\small]{java}{singleLines.java}
+\end{frame}
+
+\begin{frame}{Assertions aktivieren}
+    In Eclipse:
+    \begin{itemize}
+        \item \menu{Window > Preferences > Java > Installed JREs > Edit...}
+        \item Default VM Arguments: "`-enableassertions"' hinzufügen
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Weitere Materialien}
+    \begin{itemize}
+        \item docs.oracle.com: \href{http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html}{Programming With Assertions}
+        \item galileo openbook: \href{http://openbook.galileodesign.de/javainsel5/javainsel07_005.htm}{Java ist auch eine Insel}
+        \item Java Blog Buch: \href{http://www.java-blog-buch.de/0609-assertions/}{06.09 Assertions}
+    \end{itemize}
+\end{frame}
+
+\section{Einfach verkettete Listen}
+\subsection{Allgemeines}
+\begin{frame}{Einfach verkettete Listen}
+    \begin{block}{Szenario}
+      \begin{itemize}[<+->]
+        \item Ihr wollt euch Druckaufträge speichern
+        \item Funktioniert mit Array
+        \item Problem: 
+          \begin{itemize}
+            \item Ihr belegt immer konstant viel Speicher
+            \item Eventuell braucht ihr mehr, eventuell weniger Speicher
+          \end{itemize}
+        \item Lösung: Verkettete Listen
+      \end{itemize}
+    \end{block}
+\end{frame}
+
+\begin{frame}{Idee}
+    \begin{itemize}[<+->]
+        \item Man speichert sich nur einen Zeiger
+        \item Dieser Zeiger zeigt auf "`Knoten"'
+        \item Jeder Knoten hat wieder einen Zeiger
+        \item Jeder Knoten kann wieder auf einen Knoten zeigen
+    \end{itemize}
+    \only<\thebeamerpauses>{
+        \includegraphics[width=\linewidth]{Singly-linked-list.png}
+    }
+\end{frame}
+
+\framedgraphic{Weiteres Beispiel}{Listenbeispiel.jpg}
+
+\begin{frame}{Was wollen wir?}
+    \begin{itemize}[<+->]
+        \item Elemente hinzufügen
+        \item Elemente löschen
+        \item Elemente finden
+    \end{itemize}
+
+    \pause[\thebeamerpauses]
+    \begin{alertblock}{Wichtig}
+        Zwischenergebnisse ausgeben
+    \end{alertblock}
+\end{frame}
+
+\begin{frame}{Wie sieht das aus?}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Main.java, frame=lines]{java}{Main.java}
+\end{frame}
+
+\begin{frame}{Welche Klassen brauchen wir?}
+  \only<2>{
+    \includegraphics[width=0.7\textheight]{ObjectDiagram.pdf}
+  }
+\end{frame}
+
+\begin{frame}{Generics}
+  \begin{block}{Hinweis}
+    \begin{itemize}[<+->]
+        \item Noch erstellt ihr eine Liste für genau einen Datentyp
+        \item Eigentlich macht der Code immer das gleiche, ist also
+              vom Datentypen unabhängig
+        \item Das löst man später mit "`Generics"'
+    \end{itemize}
+  \end{block}
+
+  \pause[\thebeamerpauses]
+  \begin{block}{Hinweis 2}
+    Oder - z.B. bei den Abschlussaufgaben - man verwendet einfach Datentypen
+    aus \href{http://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html}{java.util}:
+    \begin{itemize}[<+->]
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html}{LinkedList}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap} /
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html}{HashSet} /
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html}{TreeSet}
+    \end{itemize}
+  \end{block}
+\end{frame}
+
+\subsection{Der Knoten}
+\begin{frame}{Teil 1: Der Knoten}
+    \begin{block}{Teil 1}
+        Erstelle die Klasse Node
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 1: Der Knoten}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Node.java, frame=lines]{java}{Node.java}
+\end{frame}
+
+\subsection{Die Liste}
+\begin{frame}{Teil 2.1: Die Struktur der Liste}
+    \begin{block}{Teil 2.1}
+        Erstelle die Klasse SinglyLinkedList (noch ohne Funktionalität)
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.1: Die Struktur der Liste}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SinglyLinkedList-structure.java]{java}{SinglyLinkedList-structure.java}
+\end{frame}
+
+\begin{frame}{Teil 2.2: printList()}
+    \begin{block}{Teil 2.2}
+        Erstelle die Methode "`printList"'
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.2: printList()}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=60, firstline=60, lastline=69]{java}{SinglyLinkedList.java}
+\end{frame}
+
+\begin{frame}{Teil 2.3: Hilfsmethoden}
+    \begin{block}{Teil 2.3}
+        Erstelle die Methoden \myCode{boolean isEqual(Node node, int content)}
+        und \myCode{Node findNode(int number)}
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.3: Hilfsmethoden}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=5, firstline=5, lastline=21]{java}{SinglyLinkedList.java}
+\end{frame}
+
+\begin{frame}{Teil 2.4: append}
+    \begin{block}{Teil 2.4}
+        Erstelle die Methode \myCode{append}
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.4: append}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=23, firstline=23, lastline=34]{java}{SinglyLinkedList.java}
+\end{frame}
+
+\begin{frame}{Teil 2.5: remove}
+    \begin{block}{Teil 2.5}
+        Erstelle die Methode \myCode{remove}
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.5: remove}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=36, firstline=36, lastline=48]{java}{SinglyLinkedList.java}
+\end{frame}
+
+\begin{frame}{Teil 2.6: find}
+    \begin{block}{Teil 2.6}
+        Erstelle die Methode \myCode{find}
+    \end{block}
+    \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
+\end{frame}
+
+\begin{frame}{Teil 2.6: find}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=50, firstline=50, lastline=58]{java}{SinglyLinkedList.java}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[7.] 03.12.2012: JUnit-Tests, \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString}, Vererbung
+    \item[6.] 10.12.2012: Generics?
+    \item[5.] 17.12.2012: Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-development-cycle.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/ACMEBicycle.java b/presentations/Programmieren-Tutorium/Tutorium-08/ACMEBicycle.java
new file mode 100644
index 0000000..4541b55
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/ACMEBicycle.java
@@ -0,0 +1,4 @@
+class ACMEBicycle implements Bicycle {
+    // remainder of this class 
+    // implemented as before
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Animal.java b/presentations/Programmieren-Tutorium/Tutorium-08/Animal.java
new file mode 100644
index 0000000..bc6be62
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Animal.java
@@ -0,0 +1,7 @@
+public class Animal {
+    private String sound;
+
+    public void roar() {
+        System.out.println(sound);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Bicycle.java b/presentations/Programmieren-Tutorium/Tutorium-08/Bicycle.java
new file mode 100644
index 0000000..ba35a37
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Bicycle.java
@@ -0,0 +1,11 @@
+interface Bicycle {
+
+    //  wheel revolutions per minute
+    void changeCadence(int newValue);
+
+    void changeGear(int newValue);
+
+    void speedUp(int increment);
+
+    void applyBrakes(int decrement);
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Cat.java b/presentations/Programmieren-Tutorium/Tutorium-08/Cat.java
new file mode 100644
index 0000000..afe8bb3
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Cat.java
@@ -0,0 +1,12 @@
+public class Cat extends Animal {
+    public String sound;
+
+    public Cat() {
+        String sound = "Maunz";
+    }
+
+    @Override
+    public void roar() {
+        System.out.println("Cat:" + sound);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-detailed-results.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-detailed-results.png
new file mode 100755
index 0000000..9c072d0
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-detailed-results.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-button.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-button.png
new file mode 100755
index 0000000..0294da0
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-button.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-result.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-result.png
new file mode 100755
index 0000000..87116ff
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-execution-result.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-filter-trace.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-filter-trace.png
new file mode 100755
index 0000000..375f480
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-filter-trace.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-test.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-test.png
new file mode 100755
index 0000000..6815c32
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-new-test.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-project-explorer.png b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-project-explorer.png
new file mode 100755
index 0000000..ef5f7e8
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Eclipse-JUnit-project-explorer.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Jungle.java b/presentations/Programmieren-Tutorium/Tutorium-08/Jungle.java
new file mode 100644
index 0000000..9bba8c4
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Jungle.java
@@ -0,0 +1,15 @@
+public class Jungle {
+    public static void main(String[] args) {
+        Animal tigger = new Tiger();
+        Animal felix = new Cat();
+        Cat ninja = new Cat();
+        Tiger diego = new Tiger();
+
+        tigger.roar();
+        felix.roar();
+        ninja.roar();
+        diego.roar();
+        diego.sound = "Hust hust";
+        diego.roar();
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Klassendiagramm.dia b/presentations/Programmieren-Tutorium/Tutorium-08/Klassendiagramm.dia
new file mode 100644
index 0000000..a757f32
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-08/Klassendiagramm.dia differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/LevenshteinCompilationTest.java b/presentations/Programmieren-Tutorium/Tutorium-08/LevenshteinCompilationTest.java
new file mode 100644
index 0000000..3bf7616
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/LevenshteinCompilationTest.java
@@ -0,0 +1,21 @@
+import levenshtein.Levenshtein;
+
+import org.junit.Test;
+import org.junit.runner.JUnitCore;
+import static org.junit.Assert.assertEquals;
+
+public class LevenshteinCompilationTest {
+
+    public LevenshteinCompilationTest() {
+    }
+
+    @Test(timeout = 10000)
+    public void runTest() {
+        Levenshtein levenshtein = new Levenshtein("nämlich", "dämlich");
+        assertEquals("Incorrect result comparing nämlich and dämlich", 1, levenshtein.getDistance());
+    }
+
+    public static void main(String[] args) throws Exception {                    
+        JUnitCore.main(LevenshteinCompilationTest.class.getName());            
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Makefile b/presentations/Programmieren-Tutorium/Tutorium-08/Makefile
new file mode 100644
index 0000000..b1bbbdc
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-08
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Node.java b/presentations/Programmieren-Tutorium/Tutorium-08/Node.java
new file mode 100644
index 0000000..7ad4c74
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Node.java
@@ -0,0 +1,13 @@
+public class Node {
+    public Bike element;
+    public Node next;
+
+    public Node(Bike element) {
+        this.element = element;
+    }
+
+    @Override
+    public String toString() {
+        return "Node[element=" + element + "]";
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/Tiger.java b/presentations/Programmieren-Tutorium/Tutorium-08/Tiger.java
new file mode 100644
index 0000000..299b724
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/Tiger.java
@@ -0,0 +1,3 @@
+public class Tiger extends Animal {
+    String sound = "ROAR";
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-08/tutorium-08.tex b/presentations/Programmieren-Tutorium/Tutorium-08/tutorium-08.tex
new file mode 100644
index 0000000..e470ade
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-08/tutorium-08.tex
@@ -0,0 +1,277 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{JUnit, Vererbung, toString(), Interfaces}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz: Vererbung}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
+        \begin{itemize}
+            \item Gibt es einen Compiler-Fehler?
+            \item Gibt es einen Laufzeit-Fehler?
+            \item Gibt es eine Ausgabe? Welche?
+        \end{itemize}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
+        \begin{itemize}
+            \item null
+            \item Cat:null
+            \item Cat:null
+            \item null
+            \item null
+        \end{itemize}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Erklärung}
+    \begin{itemize}
+        \item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine 
+              lokale Variable, kein Attribut
+        \item In Java werden nur Methoden vererbt
+            \begin{itemize}
+                \item Klassen: Signatur und Implementierung
+                \item Interfaces: Nur Signatur
+            \end{itemize}
+    \end{itemize}
+
+    Mehr dazu später
+\end{frame}
+
+\section{JUnit}
+\subsection{Allgemeines}
+\begin{frame}{JUnit: Allgemeines}
+    JUnit \dots
+    \begin{itemize}[<+->]
+        \item ist ein Java-Paket
+        \item ist ein Framework zum Testen von  Java-Programmen
+        \item ist SEHR verbreitet
+        \item dient der Erstellung von Unit-Tests
+        \item wurde von Erich Gamma und Kent Beck erstellt
+    \end{itemize}
+\end{frame}
+
+\subsection{Beispiel}
+\begin{frame}{JUnit: Beispiel}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=LevenshteinCompilationTest.java, frame=lines]{java}{LevenshteinCompilationTest.java}
+\end{frame}
+
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-test.png}
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-project-explorer.png}
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-button.png}
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-result.png}
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-detailed-results.png}
+\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-filter-trace.png}
+
+\subsection{Fehler}
+\begin{frame}{JUnit: Fehler}
+    \begin{alertblock}{Fehler}
+        The import org.junit cannot be resolved
+    \end{alertblock}
+    \begin{block}{Lösung}
+        \begin{itemize}
+            \item \href{https://github.com/KentBeck/junit/downloads}{Hier} junit-4.11.jar mit Hamcrest herunterladen
+            \item \menu{Project > Properties > Java Build Path > Libraries > Add External JARs...}
+            \item \texttt{junit-4.11.jar} auswählen
+            \item Auf OK klicken
+        \end{itemize}
+    \end{block}
+\end{frame}
+
+\section{Vererbung}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Vererbung \dots
+    \begin{itemize}[<+->]
+        \item ist ein Schlüsselelement der OOP
+        \item ist in Java eingeschränkt: Eine Klasse erbt in Java
+              von genau einer anderen Klasse
+            \begin{itemize}
+              \item alle Klassen erben von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html}{Object}
+            \end{itemize}
+        \item dient der Spezialisierung
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Beispiel}
+    Wo kann Vererbung nützlich sein?
+    \begin{itemize}[<+->]
+        \item Oberklasse Liste, Unterklassen SinglyLinkedList und 
+              DoubleLinkedList
+          \begin{itemize}
+            \item \myCode{contains()} ist gleich
+            \item \myCode{append()} ist unterschiedlich
+            \item \myCode{remove()} ist unterschiedlich
+          \end{itemize}
+        \item Oberklasse Animal, Unterklassen Säugetier, Tiger, Schlange, Bär, \dots
+        \item Brettspiele: 
+            \begin{itemize}
+                \item Klasse Spielbrett; Unterklassen: Schachbrett, Dame-Brett, Mensch-ärgere-dich-nicht
+                \item Klasse Spielfigur; Unterklassen: Bauer, Dame, Springer, Turm
+                \item Klasse Spiellogik; Unterklassen: DameLogik, SchachLogik
+            \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\framedgraphic{Beispiel}{Klassendiagramm.pdf}
+
+\begin{frame}{Vererbung: Beispiel in Java}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Allgemeines}
+    \begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html\#jls-8.4.8}{JLS 8.4.8}}
+    A class C inherits from its direct superclass and direct 
+    superinterfaces all abstract and non-abstract methods of the 
+    superclass and superinterfaces that are public, protected, or 
+    declared with default access in the same package as C, and are 
+    neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a 
+    declaration in the class.
+    \end{block}
+\end{frame}
+
+\section{toString()}
+\subsection{Allgemeines}
+\begin{frame}{toString()}
+    \begin{itemize}[<+->]
+        \item Jedes Objekt hat eine Methode \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString()}
+        \item Diese wird von \myCode{Object} vererbt
+        \item und \st{kann} sollte überschrieben werden
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Information aus den Javadoc}
+    Wie sollte toString() aussehen?
+    \begin{itemize}
+        \item Eine kurze textuelle Repräsentation des Objekts
+        \item Soll von Menschen gelesen werden
+        \item Per Standard: \myCode{getClass().getName() + '@' + Integer.toHexString(hashCode())}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Beispiel}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, label=Node.java, frame=lines]{java}{Node.java}
+\end{frame}
+
+\section{Interfaces}
+\subsection{Allgemeines}
+\begin{frame}{Interfaces: Allgemeines}
+    \begin{itemize}[<+->]
+        \item auf Deutsch: Schnittstelle
+        \item es werden nur Methodensignaturen vererbt
+        \item die Implementierung muss komplett selbst durchgeführt werden!
+        \item wird wie Klassen in einer eigenen "`MeinInterface.java"' Datei gespeichert
+    \end{itemize}
+    \pause[\thebeamerpauses]
+    \begin{block}{Namenskonvention}
+        Der Name einer Schnittstelle endet oft mit -able.
+    \end{block}
+\end{frame}
+
+\subsection{Beispiel}
+\begin{frame}{Interfaces: Beispiel}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Bicycle.java, frame=lines]{java}{Bicycle.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=ACMEBicycle.java, frame=lines]{java}{ACMEBicycle.java}
+    \small{Quelle: \href{http://docs.oracle.com/javase/tutorial/java/concepts/interface.html}{docs.oracle.com}: What Is an Interface?}\\
+    Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html}{docs.oracle.com}: Interfaces
+\end{frame}
+
+\subsection{Real World Examples}
+\begin{frame}{Real World Examples}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html}{Comperable}: Vergleichen mit \myCode{<}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html}{List}: Viele Listenoperationen
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable}: foreach
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html}{Serializable}: Speichern / verschicken übers Netzwerk
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}: Multithreading
+    \end{itemize}
+\end{frame}
+
+\subsection{Weitere Informationen}
+\begin{frame}{Interfaces: Weitere Informationen}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html}{JLS 7}
+        \item \href{http://openbook.galileodesign.de/javainsel5/javainsel06_010.htm}{Galileo openbook}
+    \end{itemize}
+\end{frame}
+
+\section{Nachbesprechung ÜB 3}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Lösungen sind \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-03}{hier} zu finden.
+\end{frame}
+\begin{frame}{Allgemeines}
+    \begin{itemize}[<+->]
+        \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}: 
+              Returns the char value at the specified index.
+        \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#matches(java.lang.String)}{public boolean matches(String regex)}}
+              Tells whether or not this string matches the given regular expression.
+        \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#substring(int, int)}{String substring(int beginIndex,
+               int endIndex)}} Returns a new string that is a substring of this string. 
+    \end{itemize}
+    \pause[\thebeamerpauses]
+    \begin{block}{Eclipse-Tipp}
+        Wenn Eclipse euch im Projektordner einen Fehler anzeigt, aber
+        keine Datei fehlerhaft ist, solltet ihr mal einen 
+        Blick in \menu{Window > Show View > Problem} werfen.
+    \end{block}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[5.] 17.12.2012: Generics?, Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Beware of physicist fathers}{../images/Beware-of-physicist-fathers.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Animal.java b/presentations/Programmieren-Tutorium/Tutorium-09/Animal.java
new file mode 100644
index 0000000..cb89f0b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Animal.java
@@ -0,0 +1,11 @@
+public class Animal {
+    private String sound;
+
+    public void setSound(String sound) {
+        this.sound = sound;
+    }
+
+    public String getSound() {
+        return this.sound;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Basket.java b/presentations/Programmieren-Tutorium/Tutorium-09/Basket.java
new file mode 100644
index 0000000..fb15976
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Basket.java
@@ -0,0 +1,11 @@
+public class Basket {
+    private E element;
+
+    public void setElement(E x) {
+        element = x;
+    }
+
+    public E getElement() {
+        return element;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Cat.java b/presentations/Programmieren-Tutorium/Tutorium-09/Cat.java
new file mode 100644
index 0000000..170e619
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Cat.java
@@ -0,0 +1,11 @@
+public class Cat extends Animal {
+    public String sound;
+
+    public Cat() {
+        sound = "Maunz";
+    }
+
+    public String getCatSound() {
+        return sound;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Fruit.java b/presentations/Programmieren-Tutorium/Tutorium-09/Fruit.java
new file mode 100644
index 0000000..c134499
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Fruit.java
@@ -0,0 +1,8 @@
+class Fruit {
+}
+
+class Apple extends Fruit {
+}
+
+class Orange extends Fruit {
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main.java b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main.java
new file mode 100644
index 0000000..1e49c35
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main.java
@@ -0,0 +1,3 @@
+Basket basket = new Basket();
+basket.setElement(new Apple());
+Apple apple = basket.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main2.java b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main2.java
new file mode 100644
index 0000000..eb5df27
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-quiz-main2.java
@@ -0,0 +1,3 @@
+Basket basket = new Basket();
+basket.setElement(new Apple());
+Orange orange = (Orange) basket.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Generics-singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-singleLines.java
new file mode 100644
index 0000000..40e2046
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Generics-singleLines.java
@@ -0,0 +1,9 @@
+public class SinglyLinkedList {
+    private Node head;
+
+    public void add(E object) {
+        Node newNode = new Node(object);
+        newNode.setNext(head);
+        head = newNode;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Jungle.java b/presentations/Programmieren-Tutorium/Tutorium-09/Jungle.java
new file mode 100644
index 0000000..86d3e4a
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Jungle.java
@@ -0,0 +1,7 @@
+public class Jungle {
+    public static void main(String[] args) {
+        Animal felix = new Cat();
+        System.out.println(felix.getCatSound());
+        System.out.println(felix.getSound());
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/LateBinding.java b/presentations/Programmieren-Tutorium/Tutorium-09/LateBinding.java
new file mode 100644
index 0000000..6d2dbe9
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/LateBinding.java
@@ -0,0 +1,8 @@
+import java.util.LinkedList;
+import java.util.List;
+
+public class Jungle {
+    public static void main(String[] args) {
+        List bikeStock = new LinkedList();
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Makefile b/presentations/Programmieren-Tutorium/Tutorium-09/Makefile
new file mode 100644
index 0000000..1ae41af
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-09
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Question04.java b/presentations/Programmieren-Tutorium/Tutorium-09/Question04.java
new file mode 100644
index 0000000..8d54f29
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Question04.java
@@ -0,0 +1,7 @@
+Basket b = new Basket();
+Basket b1 = new Basket();
+Basket b2 = new Basket();
+Basket b3 = new Basket();
+Basket b4 = new Basket();
+Basket b5 = new Basket();
+Basket b6 = new Basket();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/Question06.java b/presentations/Programmieren-Tutorium/Tutorium-09/Question06.java
new file mode 100644
index 0000000..6c8859f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/Question06.java
@@ -0,0 +1,5 @@
+Basket b = new Basket();
+Basket bA = b;
+Basket bO = b;
+bA.setElement(new Apple());
+Orange orange = bO.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SingleLines.java b/presentations/Programmieren-Tutorium/Tutorium-09/SingleLines.java
new file mode 100644
index 0000000..1ff1a01
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SingleLines.java
@@ -0,0 +1 @@
+List wordList = toke.tokenize();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/Node.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/Node.java
new file mode 100644
index 0000000..55698dc
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/Node.java
@@ -0,0 +1,46 @@
+public class Node {
+    private final E element;
+    private Node next;
+
+    /**
+     * Constructor.
+     *
+     * @param element the element you want to add
+     */
+    public Node(E element) {
+        this.element = element;
+    }
+
+    /**
+     * Getter for the content of this node.
+     *
+     * @return the element
+     */
+    public E getElement() {
+        return element;
+    }
+
+    /**
+     * @return the next
+     */
+    public Node getNext() {
+        return next;
+    }
+
+    /**
+     * @param next the next to set
+     */
+    public void setNext(Node next) {
+        this.next = next;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "Node[element=" + element + "]";
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/SinglyLinkedList.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/SinglyLinkedList.java
new file mode 100644
index 0000000..90a8d90
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Result/SinglyLinkedList.java
@@ -0,0 +1,90 @@
+public class SinglyLinkedList {
+    private Node head;
+
+    /**
+     * Add an object to the list.
+     *
+     * @param object the element you want to add
+     */
+    public void add(E object) {
+        Node newNode = new Node(object);
+        newNode.setNext(head);
+        head = newNode;
+    }
+
+    /**
+     * Check if object is in is in the SinglyLinkedList
+     *
+     * @param object the object you want to  search
+     * @return the bike, if you found it, otherwise {@code null}
+     */
+    public boolean contains(E object) {
+        Node currentNode = head;
+
+        while (currentNode != null && currentNode.getElement().equals(object)) {
+            currentNode = currentNode.getNext();
+        }
+
+        return currentNode != null;
+    }
+
+    /**
+     * Get a bike.
+     *
+     * @param bike the bike you want to get
+     * @return
+     */
+    public E get(E bike) {
+        if (contains(bike)) {
+            Node currentNode = head;
+            while (currentNode.getElement() != bike) {
+                currentNode = currentNode.getNext();
+            }
+            return bike;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Remove bike from the SinglyLinkedList, if it exists.
+     *
+     * @param bike the bike you want to search
+     * @return {@code bike} if it is in SinglyLinkedList, otherwise {@code null}
+     */
+    public E remove(E bike) {
+        if (!contains(bike)) {
+            return null;
+        } else if (head.getElement() == bike) {
+            head = head.getNext();
+            return bike;
+        } else {
+            // Knoten und Vorgängerknoten finden
+            Node previousNode = head;
+            Node currentNode = head;
+
+            while (currentNode.getElement() != bike) {
+                previousNode = currentNode;
+                currentNode = currentNode.getNext();
+            }
+
+            // Zeiger umbiegen
+            previousNode.setNext(currentNode.getNext());
+            return bike;
+        }
+    }
+
+    /**
+     * Print all bikes in SinglyLinkedList.
+     */
+    public void printBikes() {
+        Node currentNode = head;
+        System.out.print("start -> ");
+        while (currentNode != null) {
+            System.out.print(currentNode);
+            System.out.print(" -> ");
+            currentNode = currentNode.getNext();
+        }
+        System.out.println("null");
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Bike.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Bike.java
new file mode 100644
index 0000000..4b8db8b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Bike.java
@@ -0,0 +1,98 @@
+/**
+ * A bike model in Java.
+ *
+ * @author Markus Iser, Martin Thoma
+ * @version 1.0
+ */
+
+public class Bike {
+    private final Gears gears;
+    private final Wheels wheels;
+
+    enum Material {
+        ALU, STEEL, TITAN
+    }
+
+    private final Material material;
+
+    private final String modelId;
+
+    private final boolean hasBell;
+    private final boolean hasLights;
+
+    /** Price of the bike in cents. */
+    private int price;
+
+    Bike(String modelId) {
+        this.gears = null;
+        this.wheels = null;
+        this.material = Material.ALU;
+        this.modelId = modelId;
+        this.hasBell = true;
+        this.hasLights = true;
+    }
+
+    Bike(Gears gears, Wheels wheels, Material material,
+            String modelId, boolean bell, boolean lights) {
+        this.gears = gears;
+        this.wheels = wheels;
+        this.material = material;
+        switch (material) {
+        case ALU:
+            price = 20000;
+            break;
+        case STEEL:
+            price = 30000;
+            break;
+        case TITAN:
+            price = 40000;
+            break;
+        }
+        this.modelId = modelId;
+        this.hasBell = bell;
+        this.hasLights = lights;
+    }
+
+    /**
+     * Check if the bike is legal for usage on streets.
+     *
+     * @return {@code true} if the bike has a bell and has lights
+     */
+    public boolean isStreetLegal() {
+        return hasBell && hasLights;
+    }
+
+    /**
+     * Get the price of the bike.
+     *
+     * @return the sum of the bike's base-price and the price of the wheels and
+     *         gears
+     */
+    public int getPrice() {
+        return price + gears.getPrice() + wheels.getPrice();
+    }
+
+    /**
+     * @return the material of this bike
+     */
+    public Material getMaterial() {
+        return this.material;
+    }
+
+    /**
+     * @return the model id of this bike
+     */
+    public String getModelId() {
+        return this.modelId;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "Bike[" + modelId + "]";
+    }
+}
\ No newline at end of file
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/BikeStorage.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/BikeStorage.java
new file mode 100644
index 0000000..da121b7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/BikeStorage.java
@@ -0,0 +1,95 @@
+public class BikeStorage {
+    private Node head;
+
+    /**
+     * Add a bike to the BikeStorage.
+     *
+     * @param bike the bike you want to add
+     */
+    public void add(Bike bike) {
+        Node newNode = new Node(bike);
+        newNode.setNext(head);
+        head = newNode;
+    }
+
+    /**
+     * Check if bike is in the BikeStorage
+     *
+     * @param bike the bike you want to search
+     * @return the bike, if you found it, otherwise {@code null}
+     */
+    public boolean contains(Bike bike) {
+        // Normalerweise würde man hier nach einer Seriennummer
+        // oder ähnlichem - also "identifizierenden" Attributen
+        // von Bike - suchen und dann das gesamte Bike zurückgeben
+        Node currentNode = head;
+
+        // usually you you should implement .equals(),
+        // and not use != or == for objects
+        while (currentNode != null && currentNode.getElement() != bike) {
+            currentNode = currentNode.getNext();
+        }
+
+        return currentNode != null;
+    }
+
+    /**
+     * Get a bike.
+     *
+     * @param bike the bike you want to get
+     * @return
+     */
+    public Bike get(Bike bike) {
+        if (contains(bike)) {
+            Node currentNode = head;
+            while (currentNode.getElement() != bike) {
+                currentNode = currentNode.getNext();
+            }
+            return bike;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Remove bike from the BikeStorage, if it exists.
+     *
+     * @param bike the bike you want to search
+     * @return {@code bike} if it is in BikeStorage, otherwise {@code null}
+     */
+    public Bike remove(Bike bike) {
+        if (!contains(bike)) {
+            return null;
+        } else if (head.getElement() == bike) {
+            head = head.getNext();
+            return bike;
+        } else {
+            // Knoten und Vorgängerknoten finden
+            Node previousNode = head;
+            Node currentNode = head;
+
+            while (currentNode.getElement() != bike) {
+                previousNode = currentNode;
+                currentNode = currentNode.getNext();
+            }
+
+            // Zeiger umbiegen
+            previousNode.setNext(currentNode.getNext());
+            return bike;
+        }
+    }
+
+    /**
+     * Print all bikes in BikeStorage.
+     */
+    public void printBikes() {
+        Node currentNode = head;
+        System.out.print("start -> ");
+        while (currentNode != null) {
+            System.out.print(currentNode);
+            System.out.print(" -> ");
+            currentNode = currentNode.getNext();
+        }
+        System.out.println("null");
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Gears.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Gears.java
new file mode 100644
index 0000000..82a9fe7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Gears.java
@@ -0,0 +1,69 @@
+/**
+ * This class models the gears. It is restricted to derailleur gears.
+ *
+ * @author Markus Iser, Martin Thoma
+ * @version 1.0
+ */
+
+public class Gears {
+    public static final int MIN_FRONT_SPROCKETS = 1;
+    public static final int MAX_FRONT_SPROCKETS = 3;
+    public static final int MIN_REAR_SPROCKETS = 1;
+    public static final int MAX_REAR_SPROCKETS = 10;
+
+    private int frontSprockets;
+    private int rearSprockets;
+
+    /** Price in cents. */
+    private final int price;
+
+    Gears(int frontSprockets, int rearSprockets, int price) {
+        setSprockets(frontSprockets, rearSprockets);
+        this.price = price;
+    }
+
+    /**
+     * Sets the sprocket numbers. Uses default-values if consisteny criteria are
+     * not met.
+     *
+     * @param sprockets
+     * @param rearSprockets
+     */
+    void setSprockets(int sprockets, int rearSprockets) {
+        this.frontSprockets = sprockets;
+        this.rearSprockets = rearSprockets;
+
+        if (!(this.frontSprockets >= 1)) { // A.1
+            this.frontSprockets = 1;
+        } else if (!(this.frontSprockets < 4)) { // A.2
+            this.frontSprockets = 3;
+        }
+
+        if (this.rearSprockets < 1) { // B.1
+            this.rearSprockets = this.frontSprockets;
+        }
+        if (this.rearSprockets > 9) { // B.2
+            this.rearSprockets = this.frontSprockets * 3;
+        }
+
+        if (this.rearSprockets < this.frontSprockets) { // C.1
+            this.rearSprockets = this.frontSprockets;
+        } else if (this.rearSprockets > 3 * this.frontSprockets) { // C.2
+            this.rearSprockets = 3 * this.frontSprockets;
+        }
+    }
+
+    /**
+     * @return the number of gears as the number of sprocket-combinations
+     */
+    int getNumberOfGears() {
+        return frontSprockets * rearSprockets;
+    }
+
+    /**
+     * @return the price of the gears
+     */
+    int getPrice() {
+        return price;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Node.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Node.java
new file mode 100644
index 0000000..42dbcfe
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Node.java
@@ -0,0 +1,48 @@
+public class Node {
+    // Usually you would use "Generics" at this point to be able
+    // to hold arbitrary Objects, not only Bikes.
+    private final Bike element;
+    private Node next;
+
+    /**
+     * Constructor.
+     *
+     * @param element the element you want to add
+     */
+    public Node(Bike element) {
+        this.element = element;
+    }
+
+    /**
+     * Getter for the content of this node.
+     *
+     * @return the element
+     */
+    public Bike getElement() {
+        return element;
+    }
+
+    /**
+     * @return the next
+     */
+    public Node getNext() {
+        return next;
+    }
+
+    /**
+     * @param next the next to set
+     */
+    public void setNext(Node next) {
+        this.next = next;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "Node[element=" + element + "]";
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Wheels.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Wheels.java
new file mode 100644
index 0000000..6a8c86d
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/Wheels.java
@@ -0,0 +1,49 @@
+/**
+ * A bike model in Java. This class models the wheels.
+ *
+ * @author Markus Iser, Martin Thoma
+ * @version 1.0
+ */
+
+class Wheels {
+    public static final int MIN_DIAMETER = 150;
+    public static final int MAX_DIAMETER = 700;
+    public static final int MIN_WHEEL_SIZE = 20;
+    public static final int MAX_WHEEL_SIZE = 50;
+
+    /** The diameter is in range MIN_DIAMETER to MAX_DIAMETER. */
+    private int diameter = 559;
+
+    /** The wheelsSize is in range MIN_WHEEL_SIZE to MAX_WHEEL_SIZE. */
+    private double wheelsSize = 50;
+
+    /** Price measured in Euro-cents. */
+    private final int price;
+
+    Wheels(int diameter, double wheelSize, int price) {
+        this.diameter = diameter;
+        this.wheelsSize = wheelSize;
+        this.price = price;
+    }
+
+    /**
+     * @return the price of the wheels in cent
+     */
+    int getPrice() {
+        return price;
+    }
+
+    /**
+     * @return the diameter in mm
+     */
+    public int getDiameter() {
+        return this.diameter;
+    }
+
+    /**
+     * @return the size of the wheel in mm
+     */
+    public double getWheelsSize() {
+        return this.wheelsSize;
+    }
+}
\ No newline at end of file
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/World.java b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/World.java
new file mode 100644
index 0000000..e968e93
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SinglyLinkedList-Template/World.java
@@ -0,0 +1,28 @@
+public class World {
+    public static void main(String[] args) {
+        BikeStorage ladenLutz = new BikeStorage();
+
+        Bike a = new Bike("a");
+        Bike b = new Bike("b");
+        Bike c = new Bike("c");
+        Bike d = new Bike("d");
+
+        ladenLutz.printBikes();
+
+        ladenLutz.add(a);
+        ladenLutz.printBikes();
+        ladenLutz.add(b);
+        ladenLutz.printBikes();
+
+        ladenLutz.add(c);
+        System.out.println("c wurde hinzugefügt:");
+        ladenLutz.printBikes();
+        ladenLutz.remove(c);
+        System.out.println("c wurde entfernt:");
+        ladenLutz.printBikes();
+        ladenLutz.add(d);
+        ladenLutz.add(a);
+
+        ladenLutz.printBikes();
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SourceA.java b/presentations/Programmieren-Tutorium/Tutorium-09/SourceA.java
new file mode 100644
index 0000000..aee4d25
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SourceA.java
@@ -0,0 +1,3 @@
+Basket b5 = new Basket();
+b5.setElement(new Apple());
+Apple apple = (Apple) b5.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SourceB.java b/presentations/Programmieren-Tutorium/Tutorium-09/SourceB.java
new file mode 100644
index 0000000..ee5395c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SourceB.java
@@ -0,0 +1,3 @@
+Basket b = new Basket();
+b.setElement(new Apple());
+Apple apple = (Apple) b.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/SourceC.java b/presentations/Programmieren-Tutorium/Tutorium-09/SourceC.java
new file mode 100644
index 0000000..7443d03
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/SourceC.java
@@ -0,0 +1,3 @@
+Basket b1 = new Basket();
+b1.setElement(new Apple());
+Apple apple = (Apple) b1.getElement();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-09/tutorium-09.tex b/presentations/Programmieren-Tutorium/Tutorium-09/tutorium-09.tex
new file mode 100644
index 0000000..d7f897c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-09/tutorium-09.tex
@@ -0,0 +1,334 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Polymorphismus, Generics, Libraries}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz: Vererbung II}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
+        \vspace{1cm}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
+        \begin{itemize}
+            \item Gibt es einen Compiler-Fehler?
+            \item Gibt es einen Laufzeit-Fehler?
+            \item Gibt es eine Ausgabe? Welche?
+        \end{itemize}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
+        \vspace{1cm}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
+        \begin{itemize}
+            \item Compiler-Fehler
+            \item The method getCatSound() is undefined for the type Animal
+            \item Thema: "`Polymorphismus"'
+        \end{itemize}
+    \end{minipage}
+\end{frame}
+
+\section{Polymorphismus}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Motivation
+    \begin{itemize}
+        \item Eine Unterklasse kann alles, was die Oberklasse kann
+        \item[$\rightarrow$] sie hat die gleichen Methoden, wenn auch eventuell überschrieben
+        \item Eventuell ist uns die konkrete Klasse egal
+        \item oder wir benötigen einen Kontainter für viele verschiedene 
+              Objekte mit einer gemeinsamen Oberklasse
+    \end{itemize}
+
+    Was ist "`Polymorphismus'"?
+    \begin{itemize}
+        \item \myCode{Animal felix = new Cat();}
+        \item \myCode{Animal[] zoo = new Animal[10];}\\
+              \myCode{zoo[0] = felix;}
+    \end{itemize}
+\end{frame}
+
+\subsection{Beispiel}
+\begin{frame}{Beispiel}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{LateBinding.java}
+\end{frame}
+
+\subsection{Wann wird Polymorphismus verwendet?}
+\begin{frame}{Wann wird Polymorphismus verwendet?}
+    \begin{itemize}[<+->]
+        \item Man Benötigt eigentlich nur bestimmte Methoden (ein Interface)
+              \begin{itemize}[<+->]
+                \item Wenn ihr später aus einer LinkedList eine ArrayList macht, müsst ihr nur eine Zeile ändern!
+                \item[$\Rightarrow$] \myCode{List myList = new LinkedList();} anstelle von \myCode{LinkedList myList = new LinkedList();} schreiben
+              \end{itemize}
+        \item Man weiß zur Compile-Zeit die exakten Klassen noch nicht
+        \item Bei den Abschlussaufgaben
+    \end{itemize}
+\end{frame}
+
+\section{Generics}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    \begin{itemize}
+        \item Problem: Man schreibt genau eine verkettete Listen-Klasse
+              für genau eine Klasse (z.B. "`Bike"'), obwohl
+              die Logik (hinzufügen, entfernen, suchen) von der 
+              Klasse unabhängig ist
+        \item Lösung: Generics
+    \end{itemize}
+\end{frame}
+
+\subsection{Verwendung}
+\begin{frame}{Verwendung}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Generics-singleLines.java}
+    \begin{block}{Hinweis}
+        Ihr könnt den "`Generic-Parameter"' wie eine Variable für die
+        Bezeichnung einer Klasse verwenden.
+    \end{block}
+\end{frame}
+
+\subsection{Praxis}
+\begin{frame}{Praxis}
+    \begin{block}{Arbeitsauftrag}
+        Programmiert die Einfach-verkettete Liste um, sodass sie 
+        nirgends mehr "`Bike"' sondern nur noch Generics verwendet.
+    \end{block}{Arbeitsauftrag}
+
+    \begin{exampleblock}{Hinweis}
+        \begin{itemize}
+          \item URL für die Bike-Version: \href{http://goo.gl/RoiBC}{http://goo.gl/RoiBC}
+          \item Wer nur Zettel und Papier hat, implementiert die "`Node.java"' 
+                komplett neu und "`SinglyLinkedList.java"' mindestens mit "`add()"'
+        \end{itemize}
+    \end{exampleblock}
+\end{frame}
+
+\begin{frame}{Praxis: Node}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{SinglyLinkedList-Result/Node.java}
+\end{frame}
+
+\begin{frame}{Praxis: SinglyLinkedList}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=1, firstline=1, lastline=13]{java}{SinglyLinkedList-Result/SinglyLinkedList.java}
+\end{frame}
+
+\subsection{Blog-Artikel}
+\begin{frame}{Man kanns auch übertreiben}
+    Siehe Blog-Artikel "`\href{http://martin-thoma.com/java-generics/}{Java Generics}"'
+\end{frame}
+
+\subsection{Besonderheit}
+\begin{frame}{Besonderheit: ?}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=1, firstline=1, lastline=1]{java}{SingleLines.java}
+    Bedeutet:
+    \begin{itemize}[<+->]
+        \item Die Liste erwartet Objekte, deren Klasse \myCode{HasWord} erweitern
+        \item[$\rightarrow$] \myCode{HasWord} oder Kinder
+        \item \myCode{?} wird "`bounded wildcard"' genannt
+        \item \href{http://stackoverflow.com/a/3009779/562769}{SO 1} und \href{http://stackoverflow.com/a/1840022/562769}{SO 2}
+    \end{itemize}
+\end{frame}
+
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \begin{block}{Hinweis}
+        Das folgende Quiz stammt von \href{http://www.grayman.de/quiz/java-generics-en.quiz}{www.grayman.de}.
+        Danke für die Erlaubnis, es in meine Folien einbinden zu
+        dürfen!
+    \end{block}
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{block}{Frage}
+        Mit Generics hat der Compiler mehr Typ-Informationen. Explizite
+        Casts müssen als nicht so of benutzt werden.
+
+        Welche Bedeutung für die Laufzeit haben Generics?
+    \end{block}
+    
+    \begin{overprint}
+    \onslide<1>
+    \begin{itemize}
+        \item Der Compiler kann mit Generics den Code besser für
+              Typen optimieren. Das, und das Wegfallen der Casts sind
+              Gründe warum der kompilierte Code mit Generics
+              \textbf{schneller} läuft als ohne
+        \item Generics haben \textbf{keinen Einfluss} auf die Laufzeit
+        \item Die erhöhte Flexibilität und Typsicherheit bedeutet, 
+              dass der Compiler für jeden konkreten Typen Code aus
+              dem generischen Code erstellen mus. Das bedeutet,
+              die Programme sind \textbf{etwas langsamer}
+    \end{itemize}
+    \onslide<2>
+        Die Java Virtual Machine und der kompilierte Byte-Code sind
+        unabhängig von Generics. Der kompilierte Byte-Code mit Generics
+        unterscheidet sich nicht von Byte-Code ohne Generics. Generics
+        haben also \textbf{keinen Einfluss} auf die Laufzeit von Java-Programmen.
+    \end{overprint}
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{block}{Frage}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Basket.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny,]{java}{Fruit.java}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=In main, frame=lines]{java}{Generics-quiz-main.java}
+    \end{minipage}
+    \end{block}
+
+    \begin{overprint}
+    \onslide<1>
+    \begin{itemize}
+        \item Der source code ist OK. Es gibt weder Compiler-, noch Laufzeitfehler
+        \item Compiler-Fehler in Zeile 2
+        \item Compiler-Fehler in Zeile 3
+    \end{itemize}
+    \onslide<2>
+        \begin{itemize}
+            \item Zeile 2 ist ok
+            \item Zeile 3 verursacht einen Laufzeitfehler
+            \item Der Rückgabewert der Methode \myCode{getElement} 
+                 in \myCode{Basket} ist \myCode{Fruit}. 
+                 Man kann eine \myCode{Fruit}-Variable 
+                 keiner \myCode{Apple}-Variable ohne cast zuweisen.
+        \end{itemize}
+    \end{overprint}
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{block}{Frage}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=In main, frame=lines]{java}{Generics-quiz-main2.java}
+    \end{block}
+
+    \begin{overprint}
+    \onslide<1>
+    \begin{itemize}
+        \item Es gibt weder Laufzeit-, noch Compiler-Fehler
+        \item Compiler-Fehler in Zeile 2
+        \item Compiler-Fehler in Zeile 3
+        \item Eine \myCode{ClassCastException} tritt in Zeile 3 auf
+    \end{itemize}
+    \onslide<2>
+        \begin{itemize}
+            \item Sowohl \myCode{Apple} als auch \myCode{Orange} sind
+                  \myCode{Fruit} und können in \myCode{Basket}
+                  landen
+            \item[$\rightarrow$] Der Cast in Zeile 3 ist nötig
+            \item Die JVN überprüft während der Laufzeit den Cast in Zeile 3
+            \item[$\rightarrow$] Ein \myCode{ClassCastException} wird geworfen, da \myCode{Apple} keine \myCode{Orange} ist
+        \end{itemize}
+    \end{overprint}
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{block}{Frage}
+        Welche der folgenden Zeilen kann ohne Compiler-Fehler kompilieren?
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Question04.java}
+    \end{block}
+
+    \visible<2>{
+        \begin{itemize}
+            \item Generische Klassen können ohne spezifizierten Typ genutzt werden.
+        Allerdings sollte man das nicht machen und Eclipse warnt auch davor.
+            \item Korrekt sind: 1, 2, 3, 6
+            \item Grundsätzlich gilt: Rechts vom \myCode{=} darf man genauer sein als links
+        \end{itemize}
+    }
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{block}{Frage}
+        \begin{minipage}[b]{0.45\linewidth}
+            \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SourceA.java, frame=lines]{java}{SourceA.java}
+            \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SourceB.java, frame=lines]{java}{SourceB.java}
+        \end{minipage}
+        \hspace{0.5cm}
+        \begin{minipage}[b]{0.45\linewidth}
+            \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SourceC.java, frame=lines]{java}{SourceC.java}
+            Which of the following statements are true?
+        \end{minipage}
+    \end{block}
+
+    \begin{overprint}
+    \onslide<1>
+    \begin{enumerate}[(a)]
+        \item SourceA kompiliert nicht
+        \item SourceB kompiliert mit warning(s). Es gibt keine
+              Laufzeit-Fehler
+        \item SourceC kompiliert mit warning(s). Es gibt eine
+              \myCode{ClassCastException} zur Laufzeit
+    \end{enumerate}
+    \onslide<2>
+        \begin{itemize}
+            \item (a) und (b) sind richtig.
+            \item Der Compiler kennt nicht den Typ von Elementen in b5
+            \item[$\rightarrow$] Er kann nicht garantieren, dass ein
+                  Apfel in b5 eingefügt werden kann
+            \item Da \myCode{b5.setElement(..)} nicht erlaubt ist, kompiliert es nicht
+            \item SourceB wird so behandelt, als ob es pre-Java 1.5 Code wäre
+        \end{itemize}
+    \end{overprint}
+\end{frame}
+
+\begin{frame}{Frage}
+    Sollen wir die restlichen 9 Fragen auf \href{http://www.grayman.de/quiz/java-generics-en.quiz}{grayman.de} machen?
+\end{frame}
+
+\section{Einschub: Libraries}
+\subsection{Warum heißen Bibliotheken so?}
+\begin{frame}{Einschub: Libaries}
+    Warum heißen Programmbibliotheken "`Bibliotheken"'?
+
+
+    $\rightarrow$ \href{http://www.rrze.uni-erlangen.de/wir-ueber-uns/publikationen/das-rrze-der-film.shtml}{Video `"RRZE1973-MPEG-1.mpg'" der Uni Erlangen}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Frohe Weihnachten!}{../images/xkcd-incident.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Animal.java b/presentations/Programmieren-Tutorium/Tutorium-10/Animal.java
new file mode 100644
index 0000000..3f83666
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Animal.java
@@ -0,0 +1,24 @@
+public static class Animal {
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}
+public static class Rat extends Animal {}
+public static class Lion extends Animal {}
+public static class Cage {
+    /* above */
+}
+
+public static void main(String[] args) {
+    Cage animals = new Cage();
+    Cage lions = new Cage();
+
+    // OK to put a Rat into a Cage 
+    animals.add(new Rat()); 
+
+    lions.add(new Lion());
+
+    // invoke the super generic method
+    lions.transferTo(animals); 
+    animals.showAnimals();
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Apple.java b/presentations/Programmieren-Tutorium/Tutorium-10/Apple.java
new file mode 100644
index 0000000..8a833ec
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Apple.java
@@ -0,0 +1 @@
+public class Apple extends Fruit { }
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Cage.java b/presentations/Programmieren-Tutorium/Tutorium-10/Cage.java
new file mode 100644
index 0000000..556295a
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Cage.java
@@ -0,0 +1,18 @@
+public static class Cage { 
+    private Set pen = new HashSet();
+
+    public void add(T animal) {
+        pen.add(animal);
+    }
+
+    /* It's OK to put subclasses into a cage of 
+       super class 
+     */
+    public void transferTo(Cage cage) {
+        cage.pen.addAll(this.pen);
+    }
+
+    public void showAnimals() {
+        System.out.println(pen);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Fibonacci.java b/presentations/Programmieren-Tutorium/Tutorium-10/Fibonacci.java
new file mode 100644
index 0000000..cd1d6cb
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Fibonacci.java
@@ -0,0 +1,32 @@
+import java.util.HashMap;
+import java.util.Map;
+
+public class Fibonacci {
+    private final Map functionValues;
+
+    public Fibonacci() {
+        functionValues = new HashMap();
+        functionValues.put(0, 0);
+        functionValues.put(1, 1);
+    }
+
+    private int calculate(int x) {
+        return getFunctionValue(x - 1) + getFunctionValue(x - 2);
+    }
+
+    public int getFunctionValue(int x) {
+        if (x < 0) {
+            /* Exception werfen */
+            throw new IllegalArgumentException(
+                    "Fibonacci is not defined for negative values");
+        }
+
+        if (functionValues.containsKey(x)) {
+            return functionValues.get(x);
+        } else {
+            int functionValue = calculate(x);
+            functionValues.put(x, functionValue);
+            return functionValue;
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Fruit-Example-Problem.java b/presentations/Programmieren-Tutorium/Tutorium-10/Fruit-Example-Problem.java
new file mode 100644
index 0000000..9305961
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Fruit-Example-Problem.java
@@ -0,0 +1,6 @@
+LinkedList apples = new LinkedList();
+LinkedList fruits = apples;
+fruits.add(new Banana());
+
+// Safe at compile time, but it's a Banana!
+Apple apple = apples.getFirst();
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Fruit.java b/presentations/Programmieren-Tutorium/Tutorium-10/Fruit.java
new file mode 100644
index 0000000..4570fd3
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Fruit.java
@@ -0,0 +1 @@
+public class Fruit { }
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Disc.java b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Disc.java
new file mode 100644
index 0000000..83febec
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Disc.java
@@ -0,0 +1,28 @@
+/**
+ Represents a Disc with a certain size.
+
+ @author Tobi
+*/
+public class Disc {
+	private int size;
+	
+	/**
+	 Creates a {@code Disc} with a given size.
+	
+	 Size has to be a positive number, greater 0.
+	 @param size the size of the disc.
+	*/
+	public Disc(int size) {
+		if (size <= 0) {
+			throw new IllegalArgumentException("Invalid Disc-Size!");
+		}
+		this.size = size;
+	}
+	
+	/**
+	 Returns the size of the Disc.
+	*/
+	public int getSize() {
+		return size;
+	}
+}
\ No newline at end of file
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Hanoi.java b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Hanoi.java
new file mode 100644
index 0000000..d3f23a9
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Hanoi.java
@@ -0,0 +1,42 @@
+/**
+	This is an aotomatic Hanoi algorithm. It solves a given game.
+*/
+public class Hanoi {
+
+	public static void main (String[] args) {
+		Pole a = new Pole(3);
+		Pole b = new Pole(3);
+		Pole c = new Pole(3);
+		Disc d1 = new Disc(1);
+		Disc d2 = new Disc(2);
+		Disc d3 = new Disc(3);
+		
+		a.push(d3);
+		a.push(d2);
+		a.push(d1);
+		
+		System.out.println("from: \n" + a);
+		System.out.println("help: \n" + b);
+		System.out.println("to: \n" + c);
+		move(a, b, c);
+		System.out.println("from: \n" + a);
+		System.out.println("help: \n" + b);
+		System.out.println("to: \n" + c);
+	}
+	
+	public static void move(Pole from, Pole help, Pole to) {
+		if(from == null | to == null || help == null) {
+			throw new IllegalArgumentException("Pole is null");
+		}
+		
+		move(from.getSize(), from, help, to);
+	}
+
+	private static void move(int n, Pole from, Pole help, Pole to) {
+		if(n > 0) {
+			move(n - 1, from, to, help);
+			to.push(from.pop());
+			move(n - 1, help, from, to);
+		}
+	}
+}
\ No newline at end of file
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Pole.java b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Pole.java
new file mode 100644
index 0000000..ad6df02
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Hanoi/Pole.java
@@ -0,0 +1,101 @@
+/**
+ A Pole is a stick with Discs on it. The Discs have to be sorted ascending by their size, at all time.
+ Discs can be moved from one pole to another. Only the Disc on top of a pole can be accessed.
+*/
+public class Pole {
+	private Disc[] discs;
+	int currPop; //the index of the element, which has to be popped next.
+	
+	/**
+	 Creates a {@code Pole} with a given capacity.
+	 
+	 The capacity is a positive number. It indicates, how many Discs can be handeld by the Pole-Instance.
+	 @param capacity the capacity of the new pole
+	*/
+	public Pole(int capacity) {
+		if (capacity < 0) {
+			throw new IllegalArgumentException("Invalid capacity. Has to be >= 0!");
+		}
+		discs = new Disc[capacity];
+		currPop = -1;
+	}
+	
+	/**
+	 Pushes a given disc to the top of this pole.
+	 
+	 The result will be false, if the pole is full or the size of the given disc does not fit.
+	 @param d the disc to push onto this pole
+	 @param true of the operation has succeeded
+     @return true iff operation was successfull, otherwise false
+	*/
+	public boolean push(Disc d) {
+		if (d == null) {
+			throw new IllegalArgumentException("parameter was null");
+		} else if (getTopDisc() != null && getTopDisc().getSize() <= d.getSize()) {
+			return false; //size of d is too big.
+		} else if (currPop >= discs.length - 1) {
+			return false; //full
+		}
+		
+		currPop++;
+		discs[currPop] = d;
+		return true;
+	}
+	
+	/**
+	 Fetches the Disc of the top of the Pole, removes it from the pole and returns the disc.
+	 @return the top disc of the pole or null, if the pole is empty.
+	*/
+	public Disc pop() {
+		Disc result = getTopDisc();
+		if(result != null) { //if there is no top disc, there is no need of change of currPop.
+			discs[currPop] = null;
+			currPop--;
+		}
+		return result;
+	}
+	
+	public String toString() {
+		String result = "";
+		for(int i = discs.length - 1; i >= 0; i--) {
+			result += discToString(discs[i], discs.length) + "\n";
+		}
+		return result;
+	}
+	
+	private String discToString(Disc d, int width) {
+		String result = "";
+		int padWhitespace = width;
+		if(d == null) {
+			result = "|";
+		} else {
+			padWhitespace = (width - d.getSize());
+			for (int i = 0; i < d.getSize(); i++){
+				result += "+++";
+			}
+		}
+		//pad left/right
+		for(int i = 0; i < padWhitespace; i++) {
+			result = " " + result + " ";
+		}
+		
+		return result;
+	}
+	
+	/**
+	 Returns the number of discs on this pole.
+	 @return the number of discs
+	*/
+	public int getSize() {
+		return currPop + 1;
+	}
+	
+	/* Returns the disc on top (or null if empty), but doesn't pop it.*/
+	private Disc getTopDisc() {
+		if (currPop >= 0) {
+			return discs[currPop];
+		} else {
+			return null;
+		}
+	}
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Main-Fibonacci.java b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Fibonacci.java
new file mode 100644
index 0000000..28d6923
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Fibonacci.java
@@ -0,0 +1,22 @@
+public class Main {
+
+    /**
+     * @param args
+     */
+    public static void main(String[] args) {
+        Fibonacci f = new Fibonacci();
+        for (int i = 0; i < 10; i++) {
+            System.out.println(f.getFunctionValue(i));
+        }
+
+        /* Fehlerbehandlung */
+        try {
+            f.getFunctionValue(-2);
+        } catch (IllegalArgumentException e) {
+            System.out.println("Your Error: ");
+            System.out.println(e);
+        }
+    }
+
+}
+
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution.java b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution.java
new file mode 100644
index 0000000..8347717
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution.java
@@ -0,0 +1,14 @@
+import java.util.LinkedList;
+
+public class Main {
+    public static void main(String[] args) {
+        LinkedList apples = new LinkedList();
+        apples.add(new Apple());
+
+        // I can't get apples out
+        for (Object o : apples) {
+            Apple a = (Apple) o;
+            System.out.println(a);
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution2.java b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution2.java
new file mode 100644
index 0000000..20f5725
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Main-Quiz-solution2.java
@@ -0,0 +1,12 @@
+import java.util.LinkedList;
+
+public class Main {
+    public static void main(String[] args) {
+        LinkedList apples = new LinkedList();
+
+        // I can't get apples in
+        // this gives an error
+        apples.add(new Apple());
+        // In fact, you can only add null!
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Main.java b/presentations/Programmieren-Tutorium/Tutorium-10/Main.java
new file mode 100644
index 0000000..6ae1022
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Main.java
@@ -0,0 +1,18 @@
+import java.util.LinkedList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List myFruits = new LinkedList();
+        List myApples = new LinkedList();
+
+        myFruits.add(new Fruit());
+        myFruits.add(new Apple());
+
+        myApples.add(new Apple());
+
+        System.out.println(myFruits.getClass());
+        System.out.println(myApples.getClass());
+        myFruits = myApples;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/Makefile b/presentations/Programmieren-Tutorium/Tutorium-10/Makefile
new file mode 100644
index 0000000..0f32993
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-10
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/UniverseExplodeException.java b/presentations/Programmieren-Tutorium/Tutorium-10/UniverseExplodeException.java
new file mode 100644
index 0000000..dcac5b1
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/UniverseExplodeException.java
@@ -0,0 +1,5 @@
+public class UniverseExplodeException extends RuntimeException {
+    public UniverseExplodeException() {
+        super("The universe will explode!");
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/pokemon.jpg b/presentations/Programmieren-Tutorium/Tutorium-10/pokemon.jpg
new file mode 100644
index 0000000..349cbb6
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-10/pokemon.jpg differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-10/singleLines.java
new file mode 100644
index 0000000..1d1efdb
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/singleLines.java
@@ -0,0 +1,39 @@
+List myList = new LinkedList();
+myList.add(null); // ok
+myList.add(new Fruit()); // Compiler error
+
+try {
+    // your code
+} catch (Exception ex) {
+   // Gotcha!
+}
+
+/* *
+ * The foo method.
+ *
+ * @throws UniverseExplodeException when the universe
+ *         is going to explode
+ */
+public void foo() throws UniverseExplodeException {
+    if (true) {
+        throw new UniverseExplodeException();
+    }
+}
+
+/**
+ * Generic version of the Box class.
+ * 
+ * @param  the type of the value being boxed
+ */
+public class Box {
+    // T stands for "Type"
+    private T t;
+
+    public void set(T t) {
+        this.t = t;
+    }
+
+    public T get() {
+        return t;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-10/tutorium-10.tex b/presentations/Programmieren-Tutorium/Tutorium-10/tutorium-10.tex
new file mode 100644
index 0000000..1a3355f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-10/tutorium-10.tex
@@ -0,0 +1,365 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Wildcards, equals(), Exceptions}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Main.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Fruit.java, frame=lines, firstline=1, lastline=1]{java}{Fruit.java}
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Apple.java, frame=lines, firstline=1, lastline=1]{java}{Apple.java}
+        \begin{itemize}
+            \item Gibt es einen Compiler-Fehler?
+            \item Gibt es einen Laufzeit-Fehler?
+            \item Gibt es eine Ausgabe? Welche?
+        \end{itemize}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{block}{Compiler-Fehler}
+        Type mismatch: cannot convert from List to List
+    \end{block}
+
+    \begin{itemize}[<+->]
+        \item Ohne Zeile 16 gibt es folgende Ausgabe:\\
+              \myCode{class java.util.LinkedList}\\
+              \myCode{class java.util.LinkedList}
+        \item Sowohl \myCode{myFruits = myApples;} als auch \myCode{myApples = myFruits;}
+              geben einen Compiler-Fehler
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Problem}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Fruit-Example-Problem.java}
+\end{frame}
+
+\begin{frame}{Quiz: Lösung \#1}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Main-Quiz-solution.java}
+\end{frame}
+
+\begin{frame}{Quiz: Lösung \#2}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Main-Quiz-solution2.java}
+\end{frame}
+
+\begin{frame}{Beispiel}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cage.java, frame=lines]{java}{Cage.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+       \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Animal.java}
+    \end{minipage}
+
+    {\tiny Source: \href{http://stackoverflow.com/a/6828257/562769}{StackOverflow}}
+\end{frame}
+
+\section{Generics}
+\subsection{Wildcards}
+\begin{frame}{Wildcards}
+    \begin{itemize}[<+->]
+        \item Das \myCode{?} in \myCode{List myList} wird Wildcard
+              genannt
+        \item \myCode{?} steht immer nur in der Deklaration, nie in der Initialisierung
+        \item[$\Rightarrow$] \myCode{?} nur links vom \myCode{=}
+        \item \myCode{List myList} ist eine "`unbounded Wildcard"'
+            \begin{itemize}
+                \item \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, firstline=1, lastline=3]{java}{singleLines.java}
+                \item \myCode{?} ein bestimmter, aber nicht angegebener Parameter\\
+                \item[$\Rightarrow$] kann zur Compile-Zeit nicht überprüft werden\\
+                \item[$\Rightarrow$] Liste darf nicht modifiziert werden
+            \end{itemize}
+        \item \myCode{List myList} und \myCode{List myList} sind "`bounded Wildcards"'
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Bounded Wildcards: extends}
+    \begin{itemize}[<+->]
+        \item \myCode{List myList} kann als Elemente
+              \myCode{Fruit} und \myCode{Apple} haben, nicht jedoch
+              \myCode{Object}
+        \item Hinweis: "`extends"' ist hier nicht exakt das gleiche 
+              wie bei der Vererbung. Es kann entweder wirklich "`extends"'
+              oder "`implements"' bedeuten
+        \item Sowohl in \myCode{List} als auch in 
+              \myCode{List} können
+              \myCode{Fruit} und \myCode{Apple} beinhalten
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Bounded Wildcards: super}
+    \begin{itemize}[<+->]
+        \item \myCode{List myList} kann als Elemente
+              \myCode{Fruit} und \myCode{Object} haben, nicht jedoch
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Namenskonvetionen}
+    Für die Parameter sind folgende Bezeichnungen üblich:
+    \begin{itemize}
+        \item E - Element (used extensively by the Java Collections Framework)
+        \item K - Key
+        \item N - Number
+        \item T - Type
+        \item V - Value
+        \item S, U, V etc. - 2nd, 3rd, 4th types
+    \end{itemize}
+
+    z.B.
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, firstline=23, lastline=39]{java}{singleLines.java}
+\end{frame}
+
+\subsection{Generics und Polymorphismus}
+\begin{frame}{Generics und Polymorphismus}
+    \begin{itemize}
+        \item Polymorphismus: \myCode{Fruit myVariable = new Apple();}\\
+              {\tiny links allgemeiner als rechts}
+        \item Generics: \myCode{LinkedList myList = new LinkedList();}\\
+              {\tiny Compiler-Fehler: Type mismatch: cannot convert from LinkedList to LinkedList}
+    \end{itemize}
+\end{frame}
+
+\subsection{Fazit}
+\begin{frame}{Fazit}
+    \begin{itemize}
+        \item Wildcards sind schwer
+        \item Wildcards werdet ihr vermutlich bei den Abschlussaufgaben
+              nicht benötigen
+    \end{itemize}
+\end{frame}
+
+\subsection{Quellen und Ressourcen}
+\begin{frame}{Quellen und Ressourcen}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html}{JavaDoc Tutorial - Wildcards} 
+        \item \href{http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html}{JavaDoc Tutorial - Wildcards} (extra)
+        \item \href{http://stackoverflow.com/q/3009745/562769}{What does the question mark in Java generics' type parameter mean?}
+        \item \href{http://stackoverflow.com/q/12340808/562769}{What's the difference between List and List}
+        \item \href{http://stackoverflow.com/q/12348777/562769}{Java: Wildcards again}
+        \item \href{http://stackoverflow.com/q/14091771/562769}{Incompatible type with Arrays.asList()}
+        \item \href{http://stackoverflow.com/q/252055/562769}{Java Generics (Wildcards)}
+    \end{itemize}
+\end{frame}
+
+\section{equals}
+\subsection{Allgemein}
+\begin{frame}{Allgemein}
+    \begin{itemize}[<+->]
+        \item Man will ein beliebiges Objekt mit dem momentanen 
+              Objekt auf Gleichheit vergleichen
+        \item Dazu nutzt man \myCode{myObject.equals(otherObject);}
+        \item \myCode{myObject} muss dann die \myCode{equals(Object obj)} implementieren
+    \end{itemize}
+
+    Die Implementierung läuft fast immer gleich ab:
+    \begin{itemize}[<+->]
+        \item ist \myCode{obj == null} $\rightarrow$ \myCode{return false;}
+        \item ist \myCode{!(obj instanceof MyClass)} $\rightarrow$ \myCode{return false;}
+        \item other = (MyClass) obj;
+        \item vergleich der (relevanten) Attribute
+    \end{itemize}
+\end{frame}
+
+\subsection{Eclipse}
+\begin{frame}{Eclipse}
+    \begin{itemize}
+        \item Eclipse kann die equals()-Methode generieren
+        \item \menu{Source > Generate hashCode() and equals()...}
+        \item Felder auswählen, die für den vergleich wichtig sind
+        \item nochmals drüber schauen
+    \end{itemize}
+\end{frame}
+
+\section{Exceptions}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Exceptions \dots
+    \begin{itemize}[<+->]
+        \item \dots sind Objekte vom Typ Throwable
+        \item \dots unterbrechen den normalen Ablauf eines Programms
+        \item Mit dem Schlüsselwort \myCode{throw} werden Exceptions 
+              geworfen und mit \myCode{catch} kann man sie abfangen.
+    \end{itemize}
+
+    \pause[\thebeamerpauses]
+
+    \begin{exampleblock}{Beispiele für Exceptions}
+        \begin{itemize}
+            \item NullPointerException
+            \item ArrayIndexOutOfBoundsException
+            \item IllegalArgumentException
+            \item IllegalStateException
+            \item IOException
+            \item \dots
+        \end{itemize}
+    \end{exampleblock}
+\end{frame}
+
+\begin{frame}{Beispiel: Fibonacci.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Fibonacci.java}
+\end{frame}
+
+\begin{frame}{Beispiel: Main.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Main-Fibonacci.java}
+\end{frame}
+
+\subsection{Pokemon Exception Handling}
+\begin{frame}{Anti-Pattern: Pokémon Exception Handling}
+    \includegraphics[width=0.5\linewidth]{pokemon.jpg}
+
+    For when you just Gotta Catch 'Em All.
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, firstline=5, lastline=9]{java}{singleLines.java}
+\end{frame}
+
+\begin{frame}{Anti-Pattern: Pokémon Exception Handling}
+    Niemals Pokémon Exception Handling anwenden!
+    \begin{itemize}[<+->]
+        \item Die Fehlerbehandlung mit \myCode{catch} wird verwendet,
+              um den Programmablauf nach einem Fehler zu definieren
+        \item Bei unterschiedlichen Fehlern will man meist unterschiedlich
+              weiter machen, z.B.
+            \begin{itemize}
+                \item IOException: nochmals versuchen
+                \item NullPointerException: Fehlerbericht an den Entwickler schicken
+                \item IllegalArgumentException: Fehlerausgabe an den Nutzer
+            \end{itemize}
+        \item Durch die verschiedenen \myCode{catch}-Blöcke zeigst du,
+              dass du an die verschiedenen Fehlerarten gedacht hast
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Größe des try-Blocks}
+    \begin{block}{Wichtig}
+        Der try-Block sollte so klein wie möglich sein.
+    \end{block}
+
+    Gründe:
+    \begin{itemize}
+        \item Beim lesen eures Codes wird klarer, wo das Problem 
+              auftreten kann
+        \item Effizienz
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Eigene Exceptions}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=UniverseExplodeException.java, frame=lines]{java}{UniverseExplodeException.java}
+\end{frame}
+
+\begin{frame}{@throws und throws}
+    \begin{itemize}
+        \item Exceptions, die nicht von RuntimeException erben, müssen angekündigt werden
+        \item Ankündigen funktioniert über JavaDoc-Annotation \myCode{@throws} und Methodensignatur mit \myCode{throws}
+    \end{itemize}
+
+   \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=11, lastline=21]{java}{singleLines.java}
+\end{frame}
+
+\subsection{Literatur}
+\begin{frame}{Literatur}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html}{Catching and Handling Exceptions}
+        \item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.20}{JLS 7, Kapitel 14.20}
+    \end{itemize}
+\end{frame}
+
+\section{Praxis}
+\subsection{Türme von Hanoi}
+\begin{frame}{Türme von Hanoi: Beschreibung}
+    Das Spiel besteht aus drei Stäben A, B und C, auf die mehrere gelochte Scheiben gelegt werden,
+    alle verschieden groß.\\
+    Zu Beginn liegen alle Scheiben auf Stab A, der Größe nach geordnet, mit der
+    größten Scheibe unten und der kleinsten oben.\\
+    Ziel des Spiels ist es, den kompletten Scheiben-Stapel
+    von A nach C zu versetzen.\\
+    Bei jedem Zug darf die oberste Scheibe eines beliebigen Stabes auf einen
+    der beiden anderen Stäbe gelegt werden, vorausgesetzt, dort liegt nicht schon eine kleinere Scheibe.
+    Folglich sind zu jedem Zeitpunkt des Spieles die Scheiben auf jedem Feld der Größe nach geordnet.
+\end{frame}
+
+\begin{frame}{Aufgaben}
+    \begin{block}{Klasse "`Disc"'}
+        Schreiben Sie zunächst eine Klasse Disc, die eine gelochte 
+        Scheibe repräsentiert und als Attribut einen Durchmesser hat.
+    \end{block}
+
+    \begin{block}{Klasse "`Pole"'}
+        Schreiben Sie außerdem eine Klasse Pole, die einen Stab repräsentiert. Ein solcher Stab verwaltet eine
+        Menge von Discs (in einem fest dimensionierten Array) und hat als Attribut einen Namen. Die Klasse
+        Pole stellt dabei sicher, dass die Scheiben immer in geordneter Reihenfolge (wie oben beschrieben)
+        auf dem Stab liegen. Hierfür stellt die Klasse Pole die Methoden
+        \myCode{public boolean push(Disc d)} und
+        \myCode{public Disc pop()} zur Verfügung.
+    \end{block}
+\end{frame}
+
+\begin{frame}{Aufgaben}
+    \begin{block}{Methode push}
+        Die Methode push(Disc d) legt die Scheibe d auf den Stab, 
+        falls dieser noch nicht voll ist und
+        der Durchmesser der Scheibe d kleiner ist als der Durchmesser 
+        der obersten Scheibe des Stabes. Wird
+        die Scheibe erfolgreich auf den Stab gelegt, so ist der 
+        Rückgabewert der Methode true, andernfalls
+        false.
+    \end{block}
+
+    \begin{block}{Methode pop}
+        Die Methode pop() entfernt die oberste Scheibe des Stabes und 
+        liefert diese als Rückgabewert. Falls
+        der Stab leer ist, soll der Rückgabewert null sein.
+    \end{block}
+
+    Schreiben Sie, falls nötig, weitere Schnittstellen 
+    (z.B. eine Methode size()) und toString()-Methoden.
+\end{frame}
+
+\begin{frame}{Aufgaben}
+    Eine weitere Klasse Hanoi soll die main-Methode und eine Methode mit der Signatur
+    \myCode{public static void move(Pole from, Pole help, Pole to)}
+    erhalten. Die Methode \myCode{move(Pole from, Pole help, Pole to)} legt dabei alle Scheiben das
+    Stabes from mit Hilfe des Stabes help auf den Stab to. Implementieren Sie diese Methode rekursiv.
+    Erzeugen Sie dann in der main-Methode einen Stab A mit mehreren Scheiben und zusätzlich zwei leere
+    Stäbe B und C. Verwenden Sie dann die Methode move(), um die Scheiben von Stab A mit Hilfe des
+    Stabes B auf Stab C zu legen.
+\end{frame}
+
+\section{Abspann}
+\subsection{Klausuranmeldung}
+\begin{frame}{Klausuranmeldung}
+  Ist die Klausuranmeldung schon möglich? Bitte anmelden!
+\end{frame}
+
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/Teach-yourself-C++-in-21-days.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/ComparatorMain.java b/presentations/Programmieren-Tutorium/Tutorium-11/ComparatorMain.java
new file mode 100644
index 0000000..f53a2b8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/ComparatorMain.java
@@ -0,0 +1,21 @@
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List europe = new ArrayList();
+        europe.add(new Country(81903000,357121.41,"Germany"));
+        europe.add(new Country(64667000,668763, "France"));
+        europe.add(new Country( 4985900,385199, "Norway"));
+        europe.add(new Country( 9514406,450295, "Sweden"));
+        europe.add(new Country(47212990,504645, "Spain"));
+        europe.add(new Country( 8014000, 41285, "Switzerland"));
+        europe.add(new Country(   36371,     2.02, "Monaco"));
+        System.out.println(europe);
+        Collections.sort(europe);
+        System.out.println(europe);
+        Collections.sort(europe, new PopulationDensityComperator());
+        System.out.println(europe);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/Country-hashCode.java b/presentations/Programmieren-Tutorium/Tutorium-11/Country-hashCode.java
new file mode 100644
index 0000000..60273b7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/Country-hashCode.java
@@ -0,0 +1,33 @@
+public class Country {
+    int population;
+    double area;
+    String name;
+
+
+    @Override
+    public int hashCode() {
+        return 0;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Country other = (Country) obj;
+        if (Double.doubleToLongBits(area) != Double
+                .doubleToLongBits(other.area))
+            return false;
+        if (name == null) {
+            if (other.name != null)
+                return false;
+        } else if (!name.equals(other.name))
+            return false;
+        if (population != other.population)
+            return false;
+        return true;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/Main-Arrays-sort.java b/presentations/Programmieren-Tutorium/Tutorium-11/Main-Arrays-sort.java
new file mode 100644
index 0000000..e9f4333
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/Main-Arrays-sort.java
@@ -0,0 +1,16 @@
+import java.util.Arrays;
+
+public class Main {
+    public static void main(String[] args) {
+        String[] myStrings = new String[5];
+        myStrings[0] = "I";
+        myStrings[1] = "think";
+        myStrings[2] = "therefore";
+        myStrings[3] = "I";
+        myStrings[4] = "am";
+
+        System.out.println(Arrays.asList(myStrings));
+        Arrays.sort(myStrings);
+        System.out.println(Arrays.asList(myStrings));
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/Main-Collection-sort.java b/presentations/Programmieren-Tutorium/Tutorium-11/Main-Collection-sort.java
new file mode 100644
index 0000000..aab0d21
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/Main-Collection-sort.java
@@ -0,0 +1,18 @@
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+ 
+public class Main {
+    public static void main(String[] args) {
+        List myList = new LinkedList();
+        myList.add("I");
+        myList.add("think");
+        myList.add("therefore");
+        myList.add("I");
+        myList.add("am");
+
+        System.out.println(myList);
+        Collections.sort(myList);
+        System.out.println(myList);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/Makefile b/presentations/Programmieren-Tutorium/Tutorium-11/Makefile
new file mode 100644
index 0000000..3d839c7
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-11
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/PopulationDensityComperator.java b/presentations/Programmieren-Tutorium/Tutorium-11/PopulationDensityComperator.java
new file mode 100644
index 0000000..cada371
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/PopulationDensityComperator.java
@@ -0,0 +1,18 @@
+import java.util.Comparator;
+ 
+public class PopulationDensityComperator implements
+        Comparator {
+ 
+    @Override
+    public int compare(Country o1, Country o2) {
+        double o1Density = o1.population / o1.area;
+        double o2Density = o2.population / o2.area;
+ 
+        if (Math.abs(o1Density - o2Density) < 0.00001) {
+            return 0;
+        } else {
+            return o1Density - o2Density;
+        }
+    }
+ 
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/QuizMain.java b/presentations/Programmieren-Tutorium/Tutorium-11/QuizMain.java
new file mode 100644
index 0000000..266d91f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/QuizMain.java
@@ -0,0 +1,21 @@
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+public class Main {
+    public static void main(String[] args) {
+        List> myList = new LinkedList>();
+        List list1 = new LinkedList();
+        myList.add(list1);
+
+        list1.add("I");
+        list1.add("think");
+        list1.add("therefore");
+        list1.add("I");
+        list1.add("am");
+
+        System.out.println(myList);
+        Collections.sort(myList);
+        System.out.println(myList);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-11/singleLines.java
new file mode 100644
index 0000000..54c729f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/singleLines.java
@@ -0,0 +1,18 @@
+public final class Math {
+
+    /**
+     * Don't let anyone instantiate this class.
+     */
+    private Math() {}
+
+public class Main {
+    public static void main(String[] args) {
+        Apple myApple = new Apple();
+        if (myApple instanceof Fruit) {
+            System.out.println("It's true!");
+        }
+    }
+}
+
+if (this.getClass() != other.getClass())
+    return false;
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/tutorium-11.tex b/presentations/Programmieren-Tutorium/Tutorium-11/tutorium-11.tex
new file mode 100644
index 0000000..6899916
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/tutorium-11.tex
@@ -0,0 +1,455 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Sortieren, equals(), hashCode(), abstrakte Klassen, finale Klassen}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizMain.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=7, firstline=7, lastline=19, ]{java}{QuizMain.java}
+    \begin{block}{Compiler-Fehler}
+        {\small
+        Exception in thread "main" java.lang.Error: Unresolved compilation problem:\\
+        Bound mismatch: The generic method \myCode{sort(List)} of 
+        type Collections is not applicable for the arguments 
+        (\myCode{List>$}).\\
+        The inferred type \myCode{List} is not a valid substitute for 
+        the bounded parameter \myCode{>$}\\
+        at Main.main(Main.java:18)}
+    \end{block}
+\end{frame}
+
+\subsection{Altes Übungsblatt}
+\begin{frame}{Altes Übungsblatt}
+   \href{http://stackoverflow.com/q/14200941/562769}{Does it make sense to implement clone(), equals() or hashCode() for an abstract class?}
+
+    \begin{block}{Answer}
+        I wouldn't implement clone().
+
+        But it makes sense to implement \myCode{equals()}, 
+        \myCode{hashCode()}, and 
+        \myCode{toString()} to provide the default behavior for all subclasses. 
+        Children can choose to use it if they add no new class 
+        members or supplement as needed.
+    \end{block}
+\end{frame}
+
+\subsection{Generics}
+\begin{frame}{Generics}
+   \begin{block}{Übungsleiter}
+        generics werden wir für die Abschlussaufgaben vermeiden.
+    \end{block}
+\end{frame}
+
+\section{equals()}
+\subsection{instanceof vs. getClass()}
+\begin{frame}{instanceof vs. getClass()}
+    \begin{itemize}[<+->]
+        \item instanceof akzeptiert auf Untertypen:
+              \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, firstline=8, lastline=15]{java}{singleLines.java}
+        \item getClass nicht:
+              \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, firstline=17, lastline=18]{java}{singleLines.java}
+        \item[$\Rightarrow$] Bei \myCode{equals()} eher \myCode{getClass} verwenden
+        \item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html\#jls-15.20.2}{instanceof} funktioniert auch mit \myCode{null}
+        \item \myCode{null.getClass()} gibt \myCode{NullPointerException} nicht
+        \item[$\Rightarrow$] zuerst auf \myCode{null} überprüfen
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{instanceof vs. getClass()}
+    Aber \dots
+    \begin{itemize}
+        \item \href{http://stackoverflow.com/q/596462/562769}{Sehr viele} ziehen \myCode{instanceof} in \myCode{equals()} der \myCode{getClass()}
+              Variante vor
+        \item Es gibt Argumente für beides
+        \begin{itemize}
+            \item pro-instanceof: Debug-Klassen
+            \item pro-instanceof: \href{http://en.wikipedia.org/wiki/Liskov_substitution_principle}{Liskov substitution principle}
+            \item pro-getClass(): Die Klassen stimmen wirklich überein
+        \end{itemize}
+        \item Achtung: Andere Semantik!
+    \end{itemize}
+\end{frame}
+
+\section{Sortieren}
+\subsection{Was kann man sortieren?}
+\begin{frame}{Was kann man sortieren?}
+    \begin{itemize}
+        \item Zahlen
+        \item Wörter
+        \item Länder nach Anzahl der Einwohner
+        \item Spielkarten
+        \item \dots
+    \end{itemize}
+\end{frame}
+
+\subsection{Was braucht man?}
+\begin{frame}{Was braucht man?}
+    Totale Ordnungsrelation $\preceq$ auf einer Menge $C$:
+    \begin{itemize}
+        \item Totalität: $\forall x, y \in C: x \preceq y \lor y \preceq x$
+        \item Antisymmetrie: $\forall x,y \in C: x \preceq y \land y \preceq x \Rightarrow x = y$
+        \item Transitivität: $\forall x,y,z \in C: x \preceq y \land y \preceq z \Rightarrow x \preceq z$
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Wo ist das nicht gegeben?}
+    \begin{itemize}
+        \visible<1->{\item Totalität: $\forall x, y \in C: x \preceq y \lor y \preceq x$?}
+        \visible<2->{\item[$\Rightarrow$] Menge $\mathbb{C}$, Relation $\leq$: $i$ und $1$ stehen nicht in Relation!}
+        \visible<2->{\item[$\Rightarrow$] Menge $\mathcal{P}(\Set{1,2,3})$, Relation $\subseteq$: $\Set{1}$ und $\Set{2}$ stehen nicht in Relation!}
+        \visible<3->{\item Antisymmetrie: $\forall x,y \in C: x \preceq y \land y \preceq x \Rightarrow x = y$?}
+        \visible<4->{\item[$\Rightarrow$] Menge $\mathbb{R}$, Relation $\preceq: x \preceq y \Leftrightarrow x,y \in \mathbb{R}$ (vgl. \href{http://math.stackexchange.com/q/276907/6876}{SO})}
+        \visible<5->{\item Transitivität: $\forall x,y,z \in C: x \preceq y \land y \preceq z \Rightarrow x \preceq z$?}
+        \visible<6->{\item[$\Rightarrow$] ?}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Hilfe, ich komme mit Relationen nicht zurecht!}
+    Don't Panic!
+
+    \begin{itemize}
+        \item Meist vergleicht man indirekt Zahlen
+        \item[$\rightarrow$] Bei \myCode{double} und \myCode{float} den Epsilon-Vergleich machen!
+        \item Sonst vergleicht man Strings
+        \item[$\rightarrow$] \myCode{myString.compareTo(myOtherString)}
+        \item Die JavaDoc von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html\#compareTo\%28T\%29}{compareTo(other)} 
+              sind weniger mathematisch formuliert
+    \end{itemize}
+\end{frame}
+
+\subsection{Wie sortiert man?}
+\begin{frame}{Wie sortiert man?}
+    Vergleichsbasierte Sortieralgorithmen:
+    \begin{itemize}
+        \item Selectionsort
+        \item Bubblesort
+        \item Quicksort
+        \item \dots
+    \end{itemize}
+
+    Nicht vergleichsbasierte Algorithmen:
+    \begin{itemize}
+        \item Radixsort
+        \item Countingsort
+    \end{itemize}
+
+    Implementierungen und Vergleiche dieser und weiterer Algorithmen sind 
+    \href{http://martin-thoma.com/ubersicht-uber-sortieralgorithmen/}{hier}
+    zu finden.
+
+    \begin{block}{Info am Rande}
+        Collections.sort() verwendet Mergesort-Variante (vermutlich Timsort)
+    \end{block}
+\end{frame}
+
+\subsection{Sortieren in Java}
+\begin{frame}{Sortieren in Java: Arrays}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Main-Arrays-sort.java}
+\end{frame}
+
+\begin{frame}{Sortieren in Java: Collections}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Main-Collection-sort.java}
+\end{frame}
+
+\begin{frame}{Sortieren in Java: Comparator}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{PopulationDensityComperator.java}
+\end{frame}
+
+\begin{frame}{Sortieren in Java: Comparator benutzen}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ComparatorMain.java}
+\end{frame}
+
+\section{hashCode()}
+\subsection{Allgemeines}
+\begin{frame}{Vier Gewinnt}
+    \begin{block}{Frage}
+        Wie viele Situationen gibt es auf einem $7 \times 6$-Feld
+        bei "`4 Gewinnt"'?
+    \end{block}
+
+    \begin{itemize}[<+->]
+        \item maximal: $3^{7 \cdot 6} = 3^{42} = 109418989131512359209 \approx 109 \cdot 10^{18}$
+        \item minimal: schwer zu sagen
+        \item Idee: Brute-Force 
+        \begin{itemize}
+            \item Alle möglichen Spielentscheidungen durchgehen
+            \item Kommt man auf eine bereits bekannte Situation, ist es keine neue
+            \item Man muss also alte Situationen speichern (z.B. ein \myCode{char[42]} pro Spielsituation)
+            \item Man muss eine alte Situationen finden können
+            \item Vermutung: min. $20\,000\,000$ Spielsituationen
+            \item[$\Rightarrow$] lineare Suche nach bekannten Situationen dauert zu lange
+        \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Vier Gewinnt: Hashing}
+    \begin{block}{Frage}
+        Wie kann ich schnell eine Spielsituation speichern und wieder
+        finden?
+    \end{block}
+
+    Antwort: Hash-Funktion mit linearer Sondierung!
+
+    \pause
+
+    \begin{itemize}[<+->]
+        \item Ich will eine Funktion: $h: \text{Spielsituationen} \rightarrow \text{Array-Index}$
+        \item Die Spiel-Situation kann ich als Zahl $x$ auffassen mit $0 \leq x \leq 110 \cdot 10^{18}$
+        \item Für den Array-Index $i$ gilt: $0 \leq i \le 20\,000\,000$
+        \item $h$ ist also nicht injektiv
+        \item Sobald der Array voll ist, können wir aufhören
+        \item Falls $h(x)$ ein Array-Index ist, der bereits belegt ist, aber der Array nicht voll ist, müssen wir
+              die nächste freie Stelle suchen.\\
+              Dazu gehen wir einfach auf $(h(x) + 1) \% 20\,000\,000$
+        \item[$\Rightarrow$] wird "`lineares Sondieren genannt"'
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Vier Gewinnt: hash-Funktion}
+    \begin{block}{Frage}
+        Wie sieht eine gute hash-Funktion aus?
+    \end{block}
+
+    \begin{itemize}[<+->]
+        \item Sie sollte surjektiv sein
+        \item Sie sollte gleichmäßig auf die Bildmenge abbilden
+        \item Vorschlag: \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{c}{vierGewinnt.c}
+        \item Beispiel-Code ist auf \href{https://github.com/MartinThoma/connect-four/blob/master/C/connectfour.c}{GitHub}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Hashing: Allgemein}
+    \begin{block}{Frage}
+        Was ist nun eine Hash-Funktion im Allgemeinen?
+    \end{block}
+
+    \begin{block}{Antwort}
+        Eine Hash-Funktion $h$ bildet von einem sehr großem 
+        Definitionsbereich auf einen deutlich kleineren Wertebereich
+        ab.
+    \end{block}
+    
+    \pause
+
+    \begin{itemize}[<+->]
+        \item Meist ist der Wertebereich ein \myCode{int}, also $[-2147483648, 2147483647] = [-2^{31},2^{31}-1] \approx [-2 \cdot 10^9, 2 \cdot 10^9]$
+        \item Der Definitionsbereich kann alles mögliche sein
+        \item Normalerweise ist es nicht möglich, eine injektive Funktion zu finden
+    \end{itemize}
+\end{frame}
+
+\subsection{hashCode() in Java}
+\begin{frame}{hashCode() in Java}
+    \begin{block}{Signatur}
+        \myCode{public int hashCode()}
+    \end{block}
+
+    \pause
+
+    \begin{block}{Bedingung 1}
+        Whenever it is invoked on the same object more than once 
+        during an execution of a Java application, the hashCode 
+        method \textbf{must consistently return the same integer}, 
+        provided no information used in equals comparisons on the 
+        object is modified. This integer need not remain consistent 
+        from one execution of an application to another execution of 
+        the same application.
+    \end{block}
+    {\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
+\end{frame}
+
+\begin{frame}{hashCode() in Java}
+    \begin{block}{Bedingung 2}
+        If two objects are equal according to the equals(Object) 
+        method, then calling the hashCode method on each of the two 
+        objects \textbf{must} produce the same integer result.
+    \end{block}
+    {\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
+
+    \pause
+
+    \begin{block}{Klarstellung 1}
+        Es muss gelten:\\
+        $A.equals(B) \Rightarrow A.hashCode() == B.hashCode()$\\
+        Aber nicht:\\
+        $A.hashCode() == B.hashCode() \Rightarrow A.equals(B)$\\
+        Das ist meist auch nicht möglich. Beispiel:\\
+        Eine Klasse mit einem \myCode{double} als Rückgabewert.
+    \end{block}
+\end{frame}
+
+\begin{frame}{hashCode() in Java}
+    \begin{block}{Klarstellung 2}
+        It is \textbf{not required} that if two objects are unequal according 
+        to the equals(java.lang.Object) method, then calling the 
+        hashCode method on each of the two objects must produce 
+        distinct integer results.\\
+        However, the programmer should be 
+        aware that producing distinct integer results for unequal 
+        objects may improve the performance of hash tables.
+    \end{block}
+    {\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
+\end{frame}
+
+\begin{frame}{hashCode(): Quiz}
+    Ist das eine korrekte Hash-Funktion?
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Country-hashCode.java}
+\end{frame}
+
+\begin{frame}{hashCode(): Antwort}
+    \begin{itemize}[<+->]
+        \item Ja, ist nach \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc} eine korrekte
+              Hash-Funktion
+        \item Aber: Es ist die wohl schlechteste korrekte Hash-Funktion
+        \item Sogar praktisch nutzlos
+        \item \alert<5>{NIEMALS} so machen!
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{hashCode(): Set}
+    \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#equals(java.lang.Object)}{hashCode()} und \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#equals(java.lang.Object)}{equals()} sind für \href{http://docs.oracle.com/javase/7/docs/api/java/util/Set.html}{Set} wichtig.
+\end{frame}
+
+\section{Interface}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    War Thema in Tutorium Nr. 8
+\end{frame}
+
+\section{abstract}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    \begin{block}{docs.oracle.com Tutorial}
+        Eine abstrakte Klasse ist eine Klasse mit dem \myCode{abstract}-Schlüsselwort.
+        Sie kann abstrakte Methoden beinhalten.\\
+        Abstrakte Klassen können nicht instanziiert werden, aber man kann
+        Unterklassen bilden.
+    \end{block}
+
+    Abstrakte Klassen 
+    \begin{itemize}[<+->]
+        \item \dots müssen keine abstrakten Methoden beinhalten\\
+              {\tiny Quelle: \href{http://stackoverflow.com/q/4811678/562769}{Defining an abstract class without any abstract methods}}
+        \item \dots sollten eine abstrakte Methode beinhalten\\
+              {\tiny Quelle: \href{http://stackoverflow.com/q/2283399/562769}{Should an abstract class have at least one abstract method?}}
+        \item \dots können Konstruktoren haben\\
+              {\tiny Quelle: \href{http://stackoverflow.com/q/7644342/562769}{Abstract class is using it's own abstract method?}}
+        \item \dots können konkret impementierte Methoden haben\\
+              {\tiny Quelle: \href{http://answers.yahoo.com/question/index?qid=20111207141904AABXAvh}{Can an abstract class have concrete(non-abstract method) methods?}}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Beispiel}
+    \begin{block}{What are practical examples of abstract classes in java?}
+        \begin{itemize}
+            \item \href{http://stackoverflow.com/a/1509826/562769}{StackOverflow}
+            \item FileParser, CameraFileParser
+        \end{itemize}
+    \end{block}
+\end{frame}
+
+\subsection{Abstract Classes vs Interfaces}
+\begin{frame}{Abstract Classes vs Interfaces}
+    Abstrakte Klassen können \dots
+    \begin{itemize}
+        \item Attribute haben, die nicht \myCode{static} und \myCode{final} sind
+        \item Implementierte Methoden haben
+    \end{itemize}
+
+    \begin{block}{Wenn nutze ich Interfaces?}
+        Wenn ich nur abstrakte Methoden habe
+    \end{block}
+\end{frame}
+
+
+
+\subsection{Literatur}
+\begin{frame}{Literatur}
+    \begin{itemize}
+        \item docs.oracle.com Tutorial: \href{http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html}{Abstract Methods and Classes}
+        \item codestyle.org: \href{http://www.codestyle.org/java/faq-Abstract.shtml}{Java abstract classes FAQ}
+        \item openbook.galileodesign.de: \href{http://openbook.galileodesign.de/javainsel5/javainsel06_009.htm\#Rxx747java06009040001EA1F04F100}{Abstrakte Klassen und abstrakte Methoden}
+    \end{itemize}
+\end{frame}
+
+\section{final}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    \begin{itemize}
+        \item Finale Klassen können keine Unterklassen haben
+        \item Beispiel: \myCode{String}, \myCode{StringBuffer}, \myCode{StringBuilder}, \myCode{Math}:
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=1, firstline=1, lastline=6]{java}{singleLines.java}
+    \end{itemize}
+\end{frame}
+
+\subsection{Literatur}
+\begin{frame}{Literatur}
+    \begin{itemize}
+        \item docs.oracle.com Tutorial: \href{http://docs.oracle.com/javase/tutorial/java/IandI/final.html}{Writing Final Classes and Methods}
+        \item openbook.galileodesign.de: \href{http://openbook.galileodesign.de/javainsel5/javainsel06_006.htm\#Rxx747java06006040001E71F019239}{Finale Klassen}
+    \end{itemize}
+\end{frame}
+
+%\section{Tipp}
+%\subsection{Java API-Code anschauen}
+%\begin{frame}{Java API-Code anschauen}
+%    \begin{itemize}
+%        \item In Eclipse gehen
+%        \item Eine Funktion der Java API-Klasse, die ihr nutzen wollt, hinschreiben
+%        \item \menukeys{Strg} + Rechtsklick auf die Funktion
+%    \end{itemize}
+%\end{frame}
+
+
+\section{Abspann}
+\subsection{Klausuranmeldung}
+\begin{frame}{Klausuranmeldung}
+    \begin{itemize}
+        \item Anmeldebeginn: 28.1.
+        \item Anmeldeschluss / Abmeldeschluss: 28.2.
+        \item Ausgabetermin für Teil 1: 28.1.
+        \item Ausgabetermin für Teil 2: 11.2.
+        \item Abgabefrist für Teil 1: 11.3.
+        \item Abgabefrist für Teil 2: 25.3.
+    \end{itemize}
+\end{frame}
+
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[-] 28.01.2013: Ausgabetermin für Teil 1
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-user-too-dumb.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-11/vierGewinnt.c b/presentations/Programmieren-Tutorium/Tutorium-11/vierGewinnt.c
new file mode 100644
index 0000000..81747f8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-11/vierGewinnt.c
@@ -0,0 +1,10 @@
+unsigned int getFirstIndex(char board[BOARD_WIDTH][BOARD_HEIGHT]) {
+    unsigned int index = 0;
+    for (int x=0; x europe = new ArrayList();
+europe.add(new Country(81903000,357121.41,"Germany"));
+europe.add(new Country(64667000,668763, "France"));
+europe.add(new Country( 4985900,385199, "Norway"));
+europe.add(new Country( 9514406,450295, "Sweden"));
+europe.add(new Country(47212990,504645, "Spain"));
+europe.add(new Country( 8014000, 41285, "Switzerland"));
+europe.add(new Country(   36371,     2.02, "Monaco"));
+Collections.sort(europe, new Comparator(){
+    @Override
+    public int compare(Country o1, Country o2) {
+        double o1Density = o1.population / o1.area;
+        double o2Density = o2.population / o2.area;
+
+        if (Math.abs(o1Density - o2Density) < 0.00001) {
+            return 0;
+        } else if (o1Density > o2Density) {
+            return 1;
+        } else {
+            return -1;
+        }
+    }
+});
+// Now it's sorted according to the logic in the internal comparator
+System.out.println(europe);
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/ListExample.java b/presentations/Programmieren-Tutorium/Tutorium-12/ListExample.java
new file mode 100644
index 0000000..58a76bd
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/ListExample.java
@@ -0,0 +1,27 @@
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List; // nicht java.awt.List!
+
+public class Main {
+    public static void main(String[] args) {
+        List myList = new ArrayList();
+        List anotherList = new LinkedList();
+
+        for (int i = 0; i < 5; i += 1) {
+            myList.add((int) (Math.random() * 100));
+            anotherList.add((int) (Math.random() * 100));
+        }
+
+        System.out.println("myList: " + myList);
+        System.out.println("anotherList: " + anotherList);
+
+        myList.addAll(anotherList);
+        Collections.sort(myList);
+        System.out.println("combined: " + myList);
+
+        for (int myInt : myList) {
+            // do something with myInt...
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/ListLike.java b/presentations/Programmieren-Tutorium/Tutorium-12/ListLike.java
new file mode 100644
index 0000000..13e0aa5
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/ListLike.java
@@ -0,0 +1,7 @@
+public class ListLike implements CrazyDataStructure {
+
+    @Override
+    public void add(int a) {
+
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/Makefile b/presentations/Programmieren-Tutorium/Tutorium-12/Makefile
new file mode 100644
index 0000000..ce88860
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-12
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple.java b/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple.java
new file mode 100644
index 0000000..581b8ca
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple.java
@@ -0,0 +1,7 @@
+Map d = new HashMap ();
+d.put(12, "Martin");
+d.put(9, "Marie");
+d.put(18, "Peter");
+
+String name = d.get(9);
+// name.equals("Marie")!
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple2.java b/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple2.java
new file mode 100644
index 0000000..ffd1033
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/MapSimple2.java
@@ -0,0 +1,14 @@
+import java.util.HashMap;
+import java.util.Map;
+
+public class Main {
+    public static void main(String[] args) {
+        Map phonebook =
+            new HashMap();
+
+        TelephoneNumber a = new TelephoneNumber("01636280491");
+        phonebook.put(new Person("Martin", "Thoma"), a);
+        phonebook.put(new Person("Max", "Mustermann"), a);
+        System.out.println(phonebook);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/Person.java b/presentations/Programmieren-Tutorium/Tutorium-12/Person.java
new file mode 100644
index 0000000..54bdd2f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/Person.java
@@ -0,0 +1,15 @@
+public class Person {
+    String prename;
+    String surname;
+
+    public Person(String prename, String surname) {
+        super();
+        this.prename = prename;
+        this.surname = surname;
+    }
+
+    @Override
+    public String toString() {
+        return prename + " " + surname;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/PersonQuiz.java b/presentations/Programmieren-Tutorium/Tutorium-12/PersonQuiz.java
new file mode 100644
index 0000000..c2998c1
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/PersonQuiz.java
@@ -0,0 +1,15 @@
+public class Person {
+    String prename;
+    String surname;
+
+    public Person(String prename, String surname) {
+        super();
+        this.prename = prename;
+        this.surname = surname;
+    }
+
+    @Override
+    public void shout() {
+        System.out.println("AAAAAAAAAAAAARGH!");
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/QuizMain.java b/presentations/Programmieren-Tutorium/Tutorium-12/QuizMain.java
new file mode 100644
index 0000000..31e12b8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/QuizMain.java
@@ -0,0 +1,6 @@
+public class Main {
+    public static void main(String[] args) {
+        CrazyDataStructure a = new ListLike();
+        CrazyDataStructure b = new ArrayListLike();
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/Swing1.java b/presentations/Programmieren-Tutorium/Tutorium-12/Swing1.java
new file mode 100644
index 0000000..a29d363
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/Swing1.java
@@ -0,0 +1,22 @@
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+public class Main {
+    public static void main(String[] args) {
+        JFrame frame = new JFrame("My title!");
+        frame.setVisible(true);
+        frame.setSize(300, 150);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        JPanel panel = new JPanel();
+        frame.add(panel);
+
+        JLabel label = new JLabel("my label");
+        panel.add(label);
+
+        JButton button = new JButton("my button");
+        panel.add(button);
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/Swing2.java b/presentations/Programmieren-Tutorium/Tutorium-12/Swing2.java
new file mode 100644
index 0000000..27ac5db
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/Swing2.java
@@ -0,0 +1,27 @@
+public class test {
+    public static void main(String[] args) {
+        JFrame frame = new JFrame("My title!");
+        frame.setVisible(true);
+        frame.setSize(300, 150);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ 
+        JPanel panel = new JPanel();
+        frame.add(panel);
+ 
+        JLabel label = new JLabel("my label");
+        panel.add(label);
+ 
+        JButton button = new JButton("my button");
+        panel.add(button);
+        button.addActionListener(new MyAction());
+    }
+ 
+    static class MyAction implements ActionListener {
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            JFrame frame2 = new JFrame("clicked");
+            frame2.setVisible(true);
+            frame2.setSize(200,200);
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/Switch.java b/presentations/Programmieren-Tutorium/Tutorium-12/Switch.java
new file mode 100644
index 0000000..dec3116
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/Switch.java
@@ -0,0 +1,12 @@
+switch (Commands.valueOf(command.toUpperCase())) {
+case ADD:
+    add();
+    break;
+case SEARCH:
+    search();
+    break;
+case QUIT:
+    break;
+default:
+    System.out.println("Invalid input");
+    break;
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/TelephoneNumber.java b/presentations/Programmieren-Tutorium/Tutorium-12/TelephoneNumber.java
new file mode 100644
index 0000000..7eb8c98
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/TelephoneNumber.java
@@ -0,0 +1,13 @@
+public class TelephoneNumber {
+    String number;
+
+    public TelephoneNumber(String number) {
+        super();
+        this.number = number;
+    }
+
+    @Override
+    public String toString() {
+        return number;
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/java-swing-jpanel.png b/presentations/Programmieren-Tutorium/Tutorium-12/java-swing-jpanel.png
new file mode 100644
index 0000000..dadd086
Binary files /dev/null and b/presentations/Programmieren-Tutorium/Tutorium-12/java-swing-jpanel.png differ
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/singleLines.java b/presentations/Programmieren-Tutorium/Tutorium-12/singleLines.java
new file mode 100644
index 0000000..96836cc
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/singleLines.java
@@ -0,0 +1,20 @@
+LinkedList myList = new LinkedList();
+List myList = new LinkedList();
+import java.util.List;
+
+Animal a = new Animal();
+// The compiler can resolve this method call statically:
+a.Roar();
+
+public void MakeSomeNoise(object a) {
+    // Things happen...
+    // You won't know if this works until runtime:
+    ((Animal) a).Roar(); 
+}
+
+for (Map.Entry 
+        entry : phonebook.entrySet()) {
+    Person k = entry.getKey();
+    TelephoneNumber v = entry.getValue();
+    System.out.println(k + " " + v);
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-12/tutorium-12.tex b/presentations/Programmieren-Tutorium/Tutorium-12/tutorium-12.tex
new file mode 100644
index 0000000..f4d504a
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-12/tutorium-12.tex
@@ -0,0 +1,412 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Überladung, Bindung, List, Dictionarys}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny,frame=lines,label=Main.java]{java}{QuizMain.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{CrazyDataStructure.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ListLike.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ArrayListLike.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Alles klappt
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{block}{Antwort}
+        Alles klappt. Da ArrayListLike von ListLike erbt, erbt die
+        Klasse natürlich auch die Methoden. Insbesondere erbt sie
+        die Methoden, die CrazyDataStructure erwartet. Also
+        implementiert auch ArrayListLike das Interface ListLike,
+        obwohl es nicht explizit dort steht.
+    \end{block}
+\end{frame}
+
+\section{Überladung}
+\subsection{Musterlösung}
+\begin{frame}{Musterlösung}
+    Eine Musterlösung zu Blatt 5 ist 
+    \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-05/tutor-solution/Blatt5/src/mediabib}{hier}.
+\end{frame}
+
+\begin{frame}{Überladung}
+    \begin{exampleblock}{Allgemein}
+        \begin{enumerate}[<+->]
+            \item \myCode{void myFunction(int a);} und \myCode{void myFunction();}
+            \item \myCode{int myFunction();} und \myCode{double myFunction();}
+            \begin{itemize}
+                \item Geht in Java nicht
+                \item Funktioniert aber in Perl und Haskell (\href{http://stackoverflow.com/a/442291/562769}{Quelle})
+            \end{itemize}
+            \item \myCode{void myFunction();} und \myCode{int myFunction(int a);}
+            \item \myCode{void myFunction(String a);} und \myCode{void myFunction(int a);}
+            \item \myCode{void myFunction(String a);} und \myCode{void myFunction(int a, int b);}
+            \item \myCode{void myFunction(String a, int b);} und \myCode{void myFunction(int b, String a);}
+        \end{enumerate}
+    \end{exampleblock}
+\end{frame}
+
+\begin{frame}{Überladung}
+    So was geht nicht:
+    \begin{itemize}[<+->]
+        \item \myCode{void myFunction(int a, int b);} und \myCode{void myFunction(int b, int a);}
+        \item \myCode{void myFunction(String a, int b);} und \myCode{void myFunction(String b, int a);}
+        \item[$\Rightarrow$] Für den Compiler ist der Bezeichner "`a"' bzw. "`b"' in der Signatur egal\\
+              Dort sind nur der Rückgabewert, der Name der Methode und die Parameter-Typen und deren Reihenfolge wichtig\\
+              In Java nicht mal der Rückgabewert
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Überladung}
+    \begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{Java Language Specification}, 8.4.2}
+        Two methods have the same signature if they have the same name and argument types.
+    \end{block}
+
+    Beispiele:
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html\#signum(double)}{Math.signum(double)},
+              \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html\#signum(float)}{Math.signum(float)}
+        \item PrintStream:
+              \href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println()}{println();}, 
+              \href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println(boolean)}{println(boolean);},
+              \href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println(char)}{println(char);} \dots
+        \item Interface List: 
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html\#toArray()}{Object[] toArray();},
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html\#toArray(T[])}{ T[] toArray(T[] a)}
+    \end{itemize}
+\end{frame}
+
+\section{Bindung}
+\subsection{Allgemeines}
+\framedgraphic{Bindung}{Bindung.png}
+
+\begin{frame}{"`Early Binding"' und "`Late Binding"'}
+    Bindung kann für jeweils ein Objekt zu zwei Zeitpunkten stattfinden:
+    \begin{block}{Early binding, static binding, compile-time-binding}
+        References are resolved at compile time:
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=5, lastline=7]{java}{singleLines.java}
+    \end{block}
+
+    \begin{block}{Late binding, dynamic binding, run-time-binding}
+        References are resolved at run time:
+        \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=13]{java}{singleLines.java}
+    \end{block}
+    {\tiny Quelle: \href{http://stackoverflow.com/a/640990/562769}{StackOverflow}}
+\end{frame}
+
+\begin{frame}{Weitere}
+    \begin{itemize}
+        \item \href{http://en.wikipedia.org/wiki/Loose_coupling}{Loose coupling} (Lose Kopplung)
+        \item Loose binding - nicht weit verbreitet, vermutlich falscher Begriff
+        \item \href{http://en.wikipedia.org/wiki/Dynamic_dispatch}{Dynamic dispatch}: 
+              Laut Wikipedia das gleiche wie "`dynamic binding"'.
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{"`Dynamic Binding"' und "`Dynamic dispatch"'}
+    \begin{itemize}
+        \item \href{http://en.wikipedia.org/wiki/Dynamic_dispatch\#Single_and_multiple_dispatch}{Single and multiple dispatch} - Java unterstützt nur single dispatch
+        \item \href{http://stackoverflow.com/questions/533330/dynamic-dispatch-and-binding}{Are dynamic dispatch and dynamic binding the same thing?} - No.
+        \item Aber: Late binding and dynamic single dispatch are, for all intents and purposes, the same. (\href{http://stackoverflow.com/a/9470993/562769}{Quelle})
+        \item Paper "`\href{http://homepages.mcs.vuw.ac.nz/~alex/files/MuscheviciPotaninTemperoNobleOOPSLA2008.pdf}{Multiple Dispatch in Practice}"'
+    \end{itemize}
+\end{frame}
+
+\section{Nachbesprechung}
+\subsection{Polymorphismus nutzen}
+\begin{frame}{Polymorphismus}
+    \begin{itemize}
+         \item Was ihr schreibt:
+               \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=1]{java}{singleLines.java}
+         \item Besser wäre:
+               \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=2, lastline=2]{java}{singleLines.java}
+         \item Nicht vergessen:
+               \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=3, lastline=3]{java}{singleLines.java}
+    \end{itemize}
+
+    Warum ist Polymorphismus toll?
+    \begin{itemize}
+        \item siehe \href{http://www.artima.com/objectsandjava/webuscript/PolymorphismInterfaces1.html}{Polymorphism and Interfaces}
+        \item siehe 9. Tutorium
+    \end{itemize}
+\end{frame}
+
+\subsection{Interne Comparatoren}
+\begin{frame}{Interne Comparatoren}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{InternalComparator.java}
+    {\tiny \href{http://martin-thoma.com/how-to-sort-with-java/\#Internal_anonymous_Comparator}{Quelle}}
+\end{frame}
+
+\subsection{switch und String}
+\begin{frame}{switch und String}
+    \begin{itemize}[<+->]
+        \item Erst mit Java SE 7 kann man \myCode{switch} auf eine Variable vom Typ \myCode{String} anwenden
+        \item \dots 16 Jahre nach dem Feature Request! (\href{http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=1223179}{Quelle})
+        \item Vorher: \myCode{Cannot switch on a value of type String.}\\
+                \myCode{Only int values or enum constants are permitted}
+        \item Problem: Strings sind Objekte
+        \item Java-Puzzle: \myCode{new String("{}abc") != "{}abc";}
+        \item Java verwendet \myCode{.equals()} (\href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html}{Quelle})
+        \item \href{http://stackoverflow.com/a/338230/562769}{Mehr infos}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{switch und String}
+    Früher hat man einen Enum verwendet:
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Switch.java}
+\end{frame}
+
+\subsection{Annotationen}
+\begin{frame}{Quiz}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Person.java]{java}{PersonQuiz.java}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{AnnotationQuiz.java}
+\end{frame}
+
+\begin{frame}{Quiz: Antwort}
+    \begin{block}{Compiler-Fehler}
+        Exception in thread "main" java.lang.Error: \\
+        Unresolved compilation problem: \\
+        The method shout() of type Person must override or implement a supertype method\\
+        at Person.shout(Person.java:12)\\
+        at Main.main(Main.java:4)
+    \end{block}
+\end{frame}
+
+\begin{frame}{@Override-Annotation}
+    Die Annotation \myCode{@Override} \dots
+    \begin{itemize}[<+->]
+        \item Sollte verwendet werden, damit der Compiler euch warnen
+              kann, wenn ihr nichts überschreibt 
+        \item[$\Rightarrow$] Tippfehler werden unwahrscheinlicher
+        \item Anderen ist klar, dass euch klar war, dass ihr etwas
+              überschreibt
+        \item Code ist leichter verständlich
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{@author-Annotation}
+    \begin{itemize}
+        \item Für die Klausur bitte \myCode{@author} verwenden
+        \item und euren korrekten Namen angeben
+        \item In Eclipse: \menu{Window > Preferences > Java > Code Style > Code Templates > Comments > Types}
+              und dort \myCode{\$\{user\}} durch euren Namen ersetzen
+    \end{itemize}
+\end{frame}
+
+\subsection{Aufbau einer Klasse}
+\begin{frame}{Aufbau einer Klasse}
+    Folgender Aufbau ist Konvention und sollte eingehalten werden:
+    \begin{enumerate}
+        \item Class/interface documentation comment (/**...*/)
+        \item class or interface statement
+        \item Class/interface implementation comment (/*...*/), if necessary
+        \item Class (static) variables
+        \item \textbf{Instance variables}
+        \item \textbf{Constructors}
+        \item \textbf{Methods}
+    \end{enumerate}
+    Quelle: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Oracle Coding Convetions}, 3.1.3
+\end{frame}
+
+\section{Java API: List}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    Es gibt in \myCode{java.utils.*}
+    \begin{itemize}[<+->]
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html}{Interface List}
+        \begin{itemize}
+            \item \myCode{add(E e)}, \myCode{contains(Object o)}, \myCode{get(int index)}, \myCode{remove(Object o)}
+        \end{itemize}
+
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html}{Class ArrayList}
+        \begin{itemize}
+            \item Stärken: get, add $\in \mathcal{O}(1)$ - add nur amortisiert!
+            \item Schwächen: remove $\in \mathcal{O}(n)$
+        \end{itemize}
+
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html}{Class LinkedList}
+        \begin{itemize}
+            \item Stärken: add $\in \mathcal{O}(1)$
+            \item Schwächen: get, remove $\in \mathcal{O}(n)$, Speicherplatz
+        \end{itemize}
+        \item[$\Rightarrow$] LinkedList nur dann, wenn ihr add sehr häufig nutzt
+    \end{itemize}
+
+    Siehe: \href{http://stackoverflow.com/q/322715/562769}{When to use LinkedList<> over ArrayList<>?}
+\end{frame}
+
+\begin{frame}{List: Beispiel}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ListExample.java}
+\end{frame}
+
+\begin{frame}{Ausgabe}
+    \begin{itemize}
+        \item myList: [41, 35, 9, 51, 35]
+        \item anotherList: [2, 51, 64, 58, 57]
+        \item combined: [2, 9, 35, 35, 41, 51, 51, 57, 58, 64]
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{ArrayList vs. Vector}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html}{ArrayList} und \href{http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html}{Vector} sind praktisch identisch
+        \item Einziger Unterschied: Vector ist synchronized
+        \item[$\Rightarrow$] In Single-Thread-Anwendungen immer ArrayList verwenden
+        \item[$\Rightarrow$] Für die Abschlussaufgabe auf keinen Fall Vektor verwenden
+        \item Vector war bei mir mehr als $2 \times$ so langsam wie ArrayList ($\rightarrow$ \href{http://martin-thoma.com/matrix-multiplication-python-java-cpp/\#Java}{Performance of Matrix multiplication in Python, Java and C++})
+    \end{itemize}
+\end{frame}
+
+\section{Dictionary}
+\subsection{Allgemeines}
+\begin{frame}{Allgemeines}
+    \begin{itemize}[<+->]
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html}{Dictionary} 
+              is obsolete. New implementations should implement the 
+              \href{http://docs.oracle.com/javase/7/docs/api/java/util/Map.html}{Map} 
+              interface, rather than extending Dictionary.
+        \item Telefonbuch-Anwendungsfälle
+            \begin{itemize}
+                \item Schlüssel wird auf Wert abgebildet
+                \item Beides sind Objekte
+                \item Schlüssel ist eindeutig, Wert darfs mehrfach geben (sowohl identisch als auch gleich sind ok)
+            \end{itemize}
+        \item Interface Map links vom \myCode{=}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap}: 
+            \begin{itemize}
+                \item makes no guarantees as to the order of the map
+                \item $\mathcal{O}(1)$ für \myCode{get} und \myCode{put}
+            \end{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}: 
+            \begin{itemize}
+                \item sorted according to the natural ordering of its keys
+                \item $\mathcal{O}(\log n)$ für \myCode{containsKey}, \myCode{get}, \myCode{put} und \myCode{remove}
+            \end{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html}{LinkedHashMap}:
+            \begin{itemize}
+                \item predictable iteration order (usually insertion-order)
+                \item $\mathcal{O}(1)$ für \myCode{add} und \myCode{remove}
+            \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\subsection{Beispiele}
+\begin{frame}{Beispiel 1}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small]{java}{MapSimple.java}
+http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-sortedmap-in-java
+\end{frame}
+
+\begin{frame}{Beispiel 2.1}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines,label=Person.java]{java}{Person.java}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines,label=TelephoneNumber.java]{java}{TelephoneNumber.java}
+\end{frame}
+
+\begin{frame}{Beispiel 2.2}
+    \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{MapSimple2.java}
+\end{frame}
+
+\begin{frame}{Beispiel 2.3: Durch Map iterieren}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=15, lastline=20]{java}{singleLines.java}
+\end{frame}
+
+\section{Swing}
+\subsection{Basics}
+\begin{frame}{Basics: Ein Fenster}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Swing1.java}
+\end{frame}
+\framedgraphic{Basics: Ein Fenster}{java-swing-jpanel.png}
+
+\subsection{ActionListener}
+\begin{frame}{ActionListener}
+    ActionLister sind \dots
+    \begin{itemize}[<+->]
+        \item ein weit verbreitetes Konzept
+        \item Objekte, die auf bestimmte Aktionen warten und 
+        \begin{itemize}
+            \item dann was machen
+            \item die Aktion "`delegieren"'
+        \end{itemize}
+        \item das \href{http://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html}{Interface ActionListener}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{ActionListener}
+    \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Swing2.java}
+    {\tiny \href{http://martin-thoma.com/how-to-use-swing/}{complete source}}
+\end{frame}
+
+
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien: Themen?}
+  \begin{itemize}
+    \item \href{http://zetcode.com/tutorials/javagamestutorial/}{Snake}
+    \item Space Invaders
+    \item Breakout
+    \item Tetris
+    \item Minesweeper
+    \item Sokoban
+    \item Swing (Fenster in Java)
+    \item Port-Scanner
+    \item Multiprocessing (Matrix-Multiplikation auf mehreren Kernen)
+    \item Web-Crawler
+    \item PageRank auf reale Daten anwenden
+    \item Chat
+    \item[$\Rightarrow$] Bitte auf \href{http://www.doodle.com/drn5f9i94zedws5n}{Doodle} wählen!
+  \end{itemize}
+\end{frame}
+
+\begin{frame}{Disclaimer}
+    Bei wem steht noch \dots
+    \begin{itemize}
+        \item Einverständniserklärung nicht im Praktomaten registriert
+        \item Prüfungsanmeldung nicht im Praktomaten registriert
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Mathe-Studenten}
+    \begin{itemize}
+        \item Was der Prof. über den Verteilger geschrieben hat war Unfug.
+        \item Zulassungsbescheinigung über Studienbüro (blauer Schein)
+        \item Vermutlich kein Übungsschein
+        \item Nur für die Klausur
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[-] 28.01.2013: Ausgabetermin für Teil 1
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2009-10-naming-conventions.jpg}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/AnswerMain.java b/presentations/Programmieren-Tutorium/Tutorium-13/AnswerMain.java
new file mode 100644
index 0000000..a56cbd6
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/AnswerMain.java
@@ -0,0 +1,32 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class Main {
+    public static final int BIG_NR = 2000000;
+    public static AtomicLong bigSum = new AtomicLong();
+
+    public static void main(String[] args) {
+        List threads = new ArrayList();
+        for (int i = 0; i < 50; i++) {
+            Runnable task = new Sum(BIG_NR);
+            Thread worker = new Thread(task);
+            worker.start();
+            threads.add(worker);
+        }
+
+        int running = 0;
+        do {
+            running = 0;
+            for (Thread thread : threads) {
+                if (thread.isAlive()) {
+                    running++;
+                }
+            }
+            System.out.println("Remaining threads: " + running);
+        } while (running > 0);
+
+        System.out.println(Main.bigSum);
+
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/AnswerSum.java b/presentations/Programmieren-Tutorium/Tutorium-13/AnswerSum.java
new file mode 100644
index 0000000..168141f
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/AnswerSum.java
@@ -0,0 +1,14 @@
+public class Sum implements Runnable {
+    private final int UpperEnd;
+
+    public Sum(int upperEnd) {
+        UpperEnd = upperEnd;
+    }
+
+    @Override
+    public void run() {
+        for (int i = 0; i < UpperEnd; i++) {
+            Main.bigSum.incrementAndGet();
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/Makefile b/presentations/Programmieren-Tutorium/Tutorium-13/Makefile
new file mode 100644
index 0000000..813b97c
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-13
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/QuizMain.java b/presentations/Programmieren-Tutorium/Tutorium-13/QuizMain.java
new file mode 100644
index 0000000..59738d6
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/QuizMain.java
@@ -0,0 +1,32 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+    public static final int BIG_NR = 2000000;
+    public static long bigSum;
+
+    public static void main(String[] args) {
+        List threads = 
+                new ArrayList();
+        for (int i = 0; i < 50; i++) {
+            Runnable task = new Sum(BIG_NR);
+            Thread worker = new Thread(task);
+            worker.start();
+            threads.add(worker);
+        }
+
+        int running = 0;
+        do {
+            running = 0;
+            for (Thread thread : threads) {
+                if (thread.isAlive()) {
+                    running++;
+                }
+            }
+            System.out.println("Remaining threads: " + running);
+        } while (running > 0);
+
+        System.out.println(Main.bigSum);
+
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/QuizSum.java b/presentations/Programmieren-Tutorium/Tutorium-13/QuizSum.java
new file mode 100644
index 0000000..a916b89
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/QuizSum.java
@@ -0,0 +1,14 @@
+public class Sum implements Runnable {
+    private final int UpperEnd;
+
+    public Sum(int upperEnd) {
+        UpperEnd = upperEnd;
+    }
+
+    @Override
+    public void run() {
+        for (int i = 0; i < UpperEnd; i++) {
+            Main.bigSum++;
+        }
+    }
+}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-13/tutorium-13.tex b/presentations/Programmieren-Tutorium/Tutorium-13/tutorium-13.tex
new file mode 100644
index 0000000..66ecb26
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-13/tutorium-13.tex
@@ -0,0 +1,159 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{Five-in-A-Row, Multithreading}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizMain.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizSum.java}
+        \vspace{3.5cm}
+    \end{minipage}
+\end{frame}
+
+\begin{frame}{Quiz: Race-Condition}
+    \begin{itemize}[<+->]
+        \item \myCode{bigSum++;} ist nicht atomar:
+        \item[] 3 Operationen: Wert holen, Wert erhöhen, Wert schreiben
+        \item[$\Rightarrow$] Ergebnis ist zufällig
+        \item Alles im Bereich $[BIG\_NR, 50 \cdot BIG\_NR]$ ist möglich:
+            \begin{enumerate}
+                \item Thread 1 holt sich den Wert von \texttt{bigSum}
+                \item Thread 2 - 50 laufen durch
+                \item Thread 1 erhöht den zuvor geholten Wert um 1
+                \item Thread 1 überschreibt \texttt{bigSum} mit 2
+                \item Thread 1 läuft durch
+            \end{enumerate}
+        \item Sind kleinere Werte möglich?
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Quiz: Race-Condition}
+    Sind kleinere Werte als \texttt{BIG\_NR} für \texttt{bigSum} möglich?
+    \begin{enumerate}[<+->]
+        \item[] Ja:
+        \item Thread 1 holt sich den Wert von \texttt{bigSum}
+        \item Thread 2 holt sich den Wert von \texttt{bigSum}
+        \item Thread 3 - 50 laufen durch
+        \item Thread 2 läuft bis 1 vorm Ende durch
+        \item Thread 1 erhöht Wert im Register von 0 auf 1 und schreibt 1
+        \item Thread 2 hohlt sich die 1 aus \texttt{bigSum}
+        \item Thread 1 läuft durch
+        \item Thread 2 erhöht Wert im Register von 1 auf 2 und schreibt 2
+        \item[$\Rightarrow$] Alle Werte in $[2, 50 \cdot BIG\_NR]$ sind möglich!
+        \item[] Wie löst man das Problem?
+    \end{enumerate}
+\end{frame}
+
+\begin{frame}{Quiz}
+    Wie löst man das Problem:?
+    
+    Mit
+    \href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html}{AtomicLong}
+    aus 
+    \href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html}{java.util.concurrent}
+\end{frame}
+
+\begin{frame}{Quiz}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{AnswerMain.java}
+    \end{minipage}
+    \hspace{0.5cm}
+    \begin{minipage}[b]{0.45\linewidth}
+        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{AnswerSum.java}
+        \vspace{3.5cm}
+    \end{minipage}
+\end{frame}
+
+\section{Abschlussaufgaben}
+\subsection{Abschlussaufgaben}
+\begin{frame}{Abschlussaufgaben}
+    \begin{itemize}
+        \item Herangehensweise
+            \begin{itemize}
+                \item Genau lesen
+                \item Frühzeitig lösen, viel Testen (Am besten schon heute!)
+                \item Bei Unklarheiten frühzeitig fragen!
+            \end{itemize}
+        \item Ausgabe
+            \begin{itemize}
+                \item Genau die erwartete Ausgabe liefern
+                \item An \myCode{toString()} denken
+            \end{itemize}
+        \item Trennung von Logik und Shell
+            \begin{itemize}
+                \item Siehe \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-05.5}{Lösung zur Aufgabe 5.5}
+            \end{itemize}
+        \item Code
+            \begin{itemize}
+                \item \myCode{equals()}, \myCode{compareTo()} nutzen wenn sinnvoll
+                \item Exceptions einbauen, sollte der Nutzer aber nie sehen!
+                \item Gute JavaDoc!
+            \end{itemize}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}{Abschlussaufgaben}
+    Bepunktung:
+    \begin{itemize}
+        \item Punkte für Funktionalität
+        \item Punkte für Programmier-Stil
+        \item Nicht unbedingt gleich gewichtet
+    \end{itemize}
+\end{frame}
+
+% http://www.tutorialspoint.com/java/java_multithreading.htm
+%TODO David Kulicke - Nr. 13
+
+\section{Spiele}
+\subsection{Spiele}
+\begin{frame}{Spiele}
+  Anleitung für Snake, Tetris, Sokuban, Breakout \dots ist \href{http://zetcode.com/tutorials/javagamestutorial/}{hier}.
+\end{frame}
+
+\section{Multithreading}
+\subsection{Multithreading}
+\begin{frame}{Multithreading}
+    \begin{itemize}
+        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}
+        \item \href{http://www.vogella.com/articles/JavaConcurrency/article.html}{Java Concurrency (Multithreading) - Tutorial}
+        \item \href{http://www.tutorialspoint.com/java/java_multithreading.htm}{Java - Multithreading}
+    \end{itemize}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/Teach-yourself-C++-in-21-days.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/Tutorium-Vorlage/Makefile b/presentations/Programmieren-Tutorium/Tutorium-Vorlage/Makefile
new file mode 100644
index 0000000..4c554d8
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-Vorlage/Makefile
@@ -0,0 +1,10 @@
+SOURCE = tutorium-00
+
+make:
+	#latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make $(SOURCE).tex
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf #shellescape wird fürs logo benötigt
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf # nochmaliges ausführen wegen Inhaltsverzeichnissen
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.glo *.glg *.gls *.ist *.xdy *.1 *.toc *.snm *.nav *.vrb *.fls *.fdb_latexmk *.pyg
diff --git a/presentations/Programmieren-Tutorium/Tutorium-Vorlage/tutorium-00.tex b/presentations/Programmieren-Tutorium/Tutorium-Vorlage/tutorium-00.tex
new file mode 100644
index 0000000..1bd6a6d
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/Tutorium-Vorlage/tutorium-00.tex
@@ -0,0 +1,54 @@
+\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
+\usepackage{../templates/myStyle}
+
+\begin{document}
+\title{\titleText}
+\subtitle{TODO: Subtitle setzen!}
+\author{\tutor}
+\date{\today}
+\subject{Programmieren}
+
+\frame{\titlepage}
+
+\frame{
+    \frametitle{Inhaltsverzeichnis}
+    \setcounter{tocdepth}{1}
+    \tableofcontents
+    \setcounter{tocdepth}{2}
+}
+
+%\AtBeginSection[]{
+%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
+%}
+
+\section{Einleitung}
+\subsection{Quiz}
+\begin{frame}{Quiz}
+   % \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, label=Baby.java, frame=lines, firstline=5, lastline=6]{java}{singleLines.java}
+    \begin{itemize}
+        \item Gibt es einen Compiler-Fehler?
+        \item Gibt es einen Laufzeit-Fehler?
+        \item Gibt es eine Ausgabe? Welche?
+    \end{itemize}
+\end{frame}
+
+\section{Abspann}
+\subsection{Kommende Tutorien}
+\begin{frame}{Kommende Tutorien}
+  \begin{itemize}
+    \item[6.] 10.12.2012
+    \item[5.] 17.12.2012: Video "`Library"' zeigen
+    \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
+    \item[-] 31.12.2012: Silvester - Kein Tutorium
+    \item[4.] 07.01.2013
+    \item[3.] 14.01.2013
+    \item[2.] 21.01.2013
+    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
+    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
+    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
+  \end{itemize}
+\end{frame}
+
+\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/Teach-yourself-C++-in-21-days.png}
+
+\end{document}
diff --git a/presentations/Programmieren-Tutorium/images/Beware-of-physicist-fathers.png b/presentations/Programmieren-Tutorium/images/Beware-of-physicist-fathers.png
new file mode 100644
index 0000000..6553587
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/Beware-of-physicist-fathers.png differ
diff --git a/presentations/Programmieren-Tutorium/images/Teach-yourself-C++-in-21-days.png b/presentations/Programmieren-Tutorium/images/Teach-yourself-C++-in-21-days.png
new file mode 100644
index 0000000..b1dbe24
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/Teach-yourself-C++-in-21-days.png differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-2009-10-naming-conventions.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-2009-10-naming-conventions.jpg
new file mode 100644
index 0000000..ef83d32
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-2009-10-naming-conventions.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-2010-01-commenting.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-2010-01-commenting.jpg
new file mode 100644
index 0000000..0b9a104
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-2010-01-commenting.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-2010-10.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-2010-10.jpg
new file mode 100644
index 0000000..5cf24a3
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-2010-10.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-2012-04-commenting.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-2012-04-commenting.jpg
new file mode 100644
index 0000000..1e76079
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-2012-04-commenting.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-2012-06-future-use.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-2012-06-future-use.jpg
new file mode 100644
index 0000000..5e39a01
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-2012-06-future-use.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-development-cycle.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-development-cycle.jpg
new file mode 100644
index 0000000..c1711eb
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-development-cycle.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-object-orientation.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-object-orientation.jpg
new file mode 100644
index 0000000..a20ce4e
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-object-orientation.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/geekandpoke-user-too-dumb.jpg b/presentations/Programmieren-Tutorium/images/geekandpoke-user-too-dumb.jpg
new file mode 100644
index 0000000..0826dc9
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/geekandpoke-user-too-dumb.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/gotta-catch-them-all.jpg b/presentations/Programmieren-Tutorium/images/gotta-catch-them-all.jpg
new file mode 100644
index 0000000..612299e
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/gotta-catch-them-all.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/hello-world-cartoon.jpg b/presentations/Programmieren-Tutorium/images/hello-world-cartoon.jpg
new file mode 100644
index 0000000..27d699c
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/hello-world-cartoon.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/java-is-exceptional.png b/presentations/Programmieren-Tutorium/images/java-is-exceptional.png
new file mode 100644
index 0000000..440d474
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/java-is-exceptional.png differ
diff --git a/presentations/Programmieren-Tutorium/images/learn-java-in-a-minute.jpg b/presentations/Programmieren-Tutorium/images/learn-java-in-a-minute.jpg
new file mode 100644
index 0000000..9411161
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/learn-java-in-a-minute.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/programmers-users.jpg b/presentations/Programmieren-Tutorium/images/programmers-users.jpg
new file mode 100644
index 0000000..04971e7
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/programmers-users.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/whats_on_the_blackboard.jpg b/presentations/Programmieren-Tutorium/images/whats_on_the_blackboard.jpg
new file mode 100644
index 0000000..d49cb29
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/whats_on_the_blackboard.jpg differ
diff --git a/presentations/Programmieren-Tutorium/images/xkcd-good_code.png b/presentations/Programmieren-Tutorium/images/xkcd-good_code.png
new file mode 100644
index 0000000..45f0253
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/xkcd-good_code.png differ
diff --git a/presentations/Programmieren-Tutorium/images/xkcd-incident.png b/presentations/Programmieren-Tutorium/images/xkcd-incident.png
new file mode 100644
index 0000000..861a8a1
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/xkcd-incident.png differ
diff --git a/presentations/Programmieren-Tutorium/images/xkcd-pwned.png b/presentations/Programmieren-Tutorium/images/xkcd-pwned.png
new file mode 100644
index 0000000..9c88084
Binary files /dev/null and b/presentations/Programmieren-Tutorium/images/xkcd-pwned.png differ
diff --git a/presentations/Programmieren-Tutorium/logos/eclipse.png b/presentations/Programmieren-Tutorium/logos/eclipse.png
new file mode 100644
index 0000000..57bf75b
Binary files /dev/null and b/presentations/Programmieren-Tutorium/logos/eclipse.png differ
diff --git a/presentations/Programmieren-Tutorium/templates/example.bib b/presentations/Programmieren-Tutorium/templates/example.bib
new file mode 100644
index 0000000..712ec2b
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/templates/example.bib
@@ -0,0 +1,11 @@
+@ARTICLE{becker2008a,
+  author = {Steffen Becker and Heiko Koziolek and Ralf Reussner},
+  title = {{T}he {P}alladio component model for model-driven performance prediction},
+  journal = JSS,
+  year = {2009},
+  volume = {82},
+  pages = {3--22},
+  doi = {10.1016/j.jss.2008.03.066},
+  publisher = {Elsevier Science Inc.},
+  url = {http://dx.doi.org/10.1016/j.jss.2008.03.066}
+}
diff --git a/presentations/Programmieren-Tutorium/templates/myStyle.sty b/presentations/Programmieren-Tutorium/templates/myStyle.sty
new file mode 100644
index 0000000..d748931
--- /dev/null
+++ b/presentations/Programmieren-Tutorium/templates/myStyle.sty
@@ -0,0 +1,77 @@
+% use KIT-Theme
+% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
+%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
+\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
+\usefonttheme{professionalfonts}
+
+\usepackage{hyperref}
+\usepackage{lmodern}
+\usepackage{listings}
+\usepackage{wrapfig}        % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
+\usepackage[utf8]{inputenc} % this is needed for german umlauts
+\usepackage[ngerman]{babel} % this is needed for german umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{verbatim}
+\usepackage{relsize}
+\usepackage{subfigure}
+\usepackage{algorithm,algpseudocode}
+\usepackage{minted}         % needed for the inclusion of source code
+\usepackage{menukeys}
+\usepackage{xcolor}
+\usepackage{pifont}% http://ctan.org/pkg/pifont
+\usepackage{soul}
+\usepackage{braket} % needed for \Set
+
+\newcommand {\framedgraphic}[2] {
+    \begin{frame}{#1}
+        \begin{center}
+            \includegraphics[width=\textwidth,height=0.8\textheight,keepaspectratio]{#2}
+        \end{center}
+    \end{frame}
+}
+
+\hypersetup{%
+    breaklinks=true,
+    linktocpage=false,
+    colorlinks=true,
+    urlcolor=blue,
+    linkcolor=blue,
+    citecolor=black
+}
+
+\newcommand{\myCode}[1]{\colorbox{gray!30}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Make source code easier to copy                                   %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% from http://tex.stackexchange.com/questions/57151/how-do-i-prevent-conflicts-between-accsupp-and-hyperref
+\usepackage{accsupp}
+\newcommand\emptyaccsupp[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}}
+
+
+%default definition is: \def\theFancyVerbLine{\rmfamily\tiny\arabic{FancyVerbLine}}
+\let\theHFancyVerbLine\theFancyVerbLine% don't apply our patch to hyperref's version
+\def\theFancyVerbLine{\rmfamily\tiny\emptyaccsupp{\arabic{FancyVerbLine}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Add some shortcuts                                                %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\cmark}{\ding{51}}% a checkmark
+\newcommand{\xmark}{\ding{55}}% a cross
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Set some template options - other tutors will have to adjust this %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand\tutor{Martin Thoma}
+\newcommand\tutNR{10}
+\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
+\institute{Fakultät für Informatik}
+
+\hypersetup{pdftitle={\titleText}}
+\beamertemplatenavigationsymbolsempty
+
+\newcommand\InsertToC[1][]{
+  \begin{frame}{Outline}
+    \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
+  \end{frame}
+}