Selaa lähdekoodia

Added source files (Programmieren Tutorium)

Martin Thoma 11 vuotta sitten
vanhempi
commit
ad81fa802b
100 muutettua tiedostoa jossa 3217 lisäystä ja 0 poistoa
  1. 34 0
      presentations/Programmieren-Tutorium/.gitignore
  2. 25 0
      presentations/Programmieren-Tutorium/Misc/Stilfragen.tex
  3. 10 0
      presentations/Programmieren-Tutorium/Misc/tutoriumTermine.py
  4. 18 0
      presentations/Programmieren-Tutorium/README.md
  5. 8 0
      presentations/Programmieren-Tutorium/Tutorium-01/Bash.sh
  6. 4 0
      presentations/Programmieren-Tutorium/Tutorium-01/Day.java
  7. 5 0
      presentations/Programmieren-Tutorium/Tutorium-01/HelloWorld.java
  8. 11 0
      presentations/Programmieren-Tutorium/Tutorium-01/Makefile
  9. 4 0
      presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Leaf.java
  10. 13 0
      presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Nature.java
  11. 5 0
      presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Root.java
  12. 24 0
      presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Tree.java
  13. 7 0
      presentations/Programmieren-Tutorium/Tutorium-01/SomeClass.java
  14. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png
  15. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png
  16. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png
  17. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png
  18. 104 0
      presentations/Programmieren-Tutorium/Tutorium-01/email-liste.tex
  19. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/java-download.png
  20. 7 0
      presentations/Programmieren-Tutorium/Tutorium-01/pi-good.c
  21. 22 0
      presentations/Programmieren-Tutorium/Tutorium-01/pi.c
  22. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.png
  23. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.xcf
  24. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png
  25. 612 0
      presentations/Programmieren-Tutorium/Tutorium-01/tutorium-01.tex
  26. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png
  27. BIN
      presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png
  28. 28 0
      presentations/Programmieren-Tutorium/Tutorium-02/Baby-02.java
  29. 14 0
      presentations/Programmieren-Tutorium/Tutorium-02/Baby.java
  30. 11 0
      presentations/Programmieren-Tutorium/Tutorium-02/Bool-02.java
  31. 21 0
      presentations/Programmieren-Tutorium/Tutorium-02/Bool.java
  32. 10 0
      presentations/Programmieren-Tutorium/Tutorium-02/Makefile
  33. 9 0
      presentations/Programmieren-Tutorium/Tutorium-02/Math.java
  34. 11 0
      presentations/Programmieren-Tutorium/Tutorium-02/Shark-constructor.java
  35. 17 0
      presentations/Programmieren-Tutorium/Tutorium-02/Shark.java
  36. 3 0
      presentations/Programmieren-Tutorium/Tutorium-02/String-01.java
  37. 6 0
      presentations/Programmieren-Tutorium/Tutorium-02/String-02.java
  38. 1 0
      presentations/Programmieren-Tutorium/Tutorium-02/String-03.java
  39. 1 0
      presentations/Programmieren-Tutorium/Tutorium-02/String-04.java
  40. 1 0
      presentations/Programmieren-Tutorium/Tutorium-02/String-05.java
  41. 12 0
      presentations/Programmieren-Tutorium/Tutorium-02/comparisons.js
  42. BIN
      presentations/Programmieren-Tutorium/Tutorium-02/eclipse-icon.png
  43. 47 0
      presentations/Programmieren-Tutorium/Tutorium-02/index.htm
  44. 7 0
      presentations/Programmieren-Tutorium/Tutorium-02/static-01.java
  45. BIN
      presentations/Programmieren-Tutorium/Tutorium-02/syntax-error.png
  46. 276 0
      presentations/Programmieren-Tutorium/Tutorium-02/tutorium-02.tex
  47. 22 0
      presentations/Programmieren-Tutorium/Tutorium-03/JavaDoc.java
  48. 49 0
      presentations/Programmieren-Tutorium/Tutorium-03/Kontrollstrukturen.java
  49. 10 0
      presentations/Programmieren-Tutorium/Tutorium-03/Makefile
  50. 5 0
      presentations/Programmieren-Tutorium/Tutorium-03/Quiz-Answer.sh-session
  51. 11 0
      presentations/Programmieren-Tutorium/Tutorium-03/Quiz.java
  52. 13 0
      presentations/Programmieren-Tutorium/Tutorium-03/QuizIf.java
  53. 39 0
      presentations/Programmieren-Tutorium/Tutorium-03/Visibility.java
  54. BIN
      presentations/Programmieren-Tutorium/Tutorium-03/eclipse-getter-setter.png
  55. 6 0
      presentations/Programmieren-Tutorium/Tutorium-03/singleLines.java
  56. BIN
      presentations/Programmieren-Tutorium/Tutorium-03/stringly-typed.jpg
  57. 462 0
      presentations/Programmieren-Tutorium/Tutorium-03/tutorium-03.tex
  58. BIN
      presentations/Programmieren-Tutorium/Tutorium-03/yoda-condition.png
  59. 27 0
      presentations/Programmieren-Tutorium/Tutorium-04/Bytecode-interessant.txt
  60. 34 0
      presentations/Programmieren-Tutorium/Tutorium-04/Bytecode.txt
  61. 15 0
      presentations/Programmieren-Tutorium/Tutorium-04/Euler28-fast.java
  62. 86 0
      presentations/Programmieren-Tutorium/Tutorium-04/Euler28.java
  63. 15 0
      presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-1.java
  64. 16 0
      presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-2.java
  65. 10 0
      presentations/Programmieren-Tutorium/Tutorium-04/Kommentare-3.java
  66. 10 0
      presentations/Programmieren-Tutorium/Tutorium-04/Makefile
  67. 11 0
      presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-1.java
  68. 11 0
      presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-2.java
  69. 11 0
      presentations/Programmieren-Tutorium/Tutorium-04/Quiz-float-3.java
  70. 9 0
      presentations/Programmieren-Tutorium/Tutorium-04/QuizFor-2.java
  71. 9 0
      presentations/Programmieren-Tutorium/Tutorium-04/QuizFor.java
  72. 6 0
      presentations/Programmieren-Tutorium/Tutorium-04/README.md
  73. 8 0
      presentations/Programmieren-Tutorium/Tutorium-04/SimpleLoop.java
  74. 9 0
      presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-Baby.java
  75. 12 0
      presentations/Programmieren-Tutorium/Tutorium-04/Static-Quiz-World.java
  76. 1 0
      presentations/Programmieren-Tutorium/Tutorium-04/bash.sh
  77. BIN
      presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png
  78. 56 0
      presentations/Programmieren-Tutorium/Tutorium-04/euler28.py
  79. BIN
      presentations/Programmieren-Tutorium/Tutorium-04/java-6-javadoc.png
  80. BIN
      presentations/Programmieren-Tutorium/Tutorium-04/java-7-javadoc.png
  81. 82 0
      presentations/Programmieren-Tutorium/Tutorium-04/javadoc.sh-session
  82. 33 0
      presentations/Programmieren-Tutorium/Tutorium-04/singleLines.java
  83. 542 0
      presentations/Programmieren-Tutorium/Tutorium-04/tutorium-04.tex
  84. 14 0
      presentations/Programmieren-Tutorium/Tutorium-05/AverageCalculation.java
  85. 9 0
      presentations/Programmieren-Tutorium/Tutorium-05/Bilder.java
  86. 28 0
      presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame-bad.java
  87. 32 0
      presentations/Programmieren-Tutorium/Tutorium-05/ConnectFourGame.java
  88. 15 0
      presentations/Programmieren-Tutorium/Tutorium-05/IataCode-2.java
  89. 13 0
      presentations/Programmieren-Tutorium/Tutorium-05/IataCode-3.java
  90. 18 0
      presentations/Programmieren-Tutorium/Tutorium-05/IataCode.java
  91. 10 0
      presentations/Programmieren-Tutorium/Tutorium-05/Makefile
  92. 25 0
      presentations/Programmieren-Tutorium/Tutorium-05/QuizArray-solution.java
  93. 17 0
      presentations/Programmieren-Tutorium/Tutorium-05/QuizArray.java
  94. BIN
      presentations/Programmieren-Tutorium/Tutorium-05/Sieve_of_Eratosthenes_animation.gif
  95. 18 0
      presentations/Programmieren-Tutorium/Tutorium-05/SwitchContinue.java
  96. BIN
      presentations/Programmieren-Tutorium/Tutorium-05/eclipse-export-project.png
  97. BIN
      presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy.dia
  98. BIN
      presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy~
  99. BIN
      presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy.dia
  100. 0 0
      presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy~

+ 34 - 0
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

+ 25 - 0
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}

+ 10 - 0
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)

+ 18 - 0
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!

+ 8 - 0
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:~$ 

+ 4 - 0
presentations/Programmieren-Tutorium/Tutorium-01/Day.java

@@ -0,0 +1,4 @@
+public enum Day {
+    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
+    THURSDAY, FRIDAY, SATURDAY 
+}

+ 5 - 0
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!");
+    }
+}

+ 11 - 0
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

+ 4 - 0
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;
+}

+ 13 - 0
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
+
+    }
+
+}

+ 5 - 0
presentations/Programmieren-Tutorium/Tutorium-01/Natur-Beispiel/Root.java

@@ -0,0 +1,5 @@
+public class Root {
+    Root mainRoot;
+    Root leftRoot;
+    Root rightRoot;
+}

+ 24 - 0
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;
+
+}

+ 7 - 0
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);
+    }
+}

BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png


BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png


BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png


BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png


+ 104 - 0
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}

BIN
presentations/Programmieren-Tutorium/Tutorium-01/java-download.png


+ 7 - 0
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);
+}

+ 22 - 0
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()
+{
+            _-_-_-_
+       _-_-_-_-_-_-_-_-_
+    _-_-_-_-_-_-_-_-_-_-_-_
+  _-_-_-_-_-_-_-_-_-_-_-_-_-_
+ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
+  _-_-_-_-_-_-_-_-_-_-_-_-_-_
+    _-_-_-_-_-_-_-_-_-_-_-_
+       _-_-_-_-_-_-_-_-_
+            _-_-_-_
+}

BIN
presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.png


BIN
presentations/Programmieren-Tutorium/Tutorium-01/schaubild-java-workflow.xcf


BIN
presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png


+ 612 - 0
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}

BIN
presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png


BIN
presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png


+ 28 - 0
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;
+}
+

+ 14 - 0
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;
+}
+

+ 11 - 0
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");
+        }
+    }
+}

+ 21 - 0
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");
+        }
+    }
+}

+ 10 - 0
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

+ 9 - 0
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;
+
+    // [..]
+}

+ 11 - 0
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);

+ 17 - 0
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);

+ 3 - 0
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

+ 6 - 0
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 ;

+ 1 - 0
presentations/Programmieren-Tutorium/Tutorium-02/String-03.java

@@ -0,0 +1 @@
+String = "Hallo \"Welt\"";

+ 1 - 0
presentations/Programmieren-Tutorium/Tutorium-02/String-04.java

@@ -0,0 +1 @@
+String = "Hallo \n Welt";

+ 1 - 0
presentations/Programmieren-Tutorium/Tutorium-02/String-05.java

@@ -0,0 +1 @@
+String = "Hallo \\ Welt";

+ 12 - 0
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

BIN
presentations/Programmieren-Tutorium/Tutorium-02/eclipse-icon.png


+ 47 - 0
presentations/Programmieren-Tutorium/Tutorium-02/index.htm

@@ -0,0 +1,47 @@
+<!-- Source: http://codegolf.stackexchange.com/a/4518/5240 -->
+<html>
+  <head>
+    <title>Snake</title>
+  </head>
+  <body>
+<pre id="x" style="line-height: 1"></pre>
+<script>
+c = 0;
+a = b = d = -1;
+e = [f = [20, 7],
+    [20, 8]
+];
+
+i = Math.random;~
+
+function n() {
+    if (c && (87 == a || 83 == a)) c = 0, d = 87 == a ? -1 : 1;
+    if (d && (65 == a || 68 == a)) d = 0, c = 65 == a ? -1 : 1;
+    p([j = e[0][0] + c, k = e[0][1] + d]) 
+    || !j || 39 == j || !k 
+    || 10 == k ? b += " | GAME OVER" 
+        : (e.unshift([j, k]), p(f) 
+            ? (f = [1 + 38 * i() | 0, 1 + 9 * i() | 0], b++) 
+            : e.pop());
+    for (m = h = ""; 11 > h; h++) {
+        for (g = 0; 40 > g; g++) l = g + "," + h, m += !g 
+            || 39 == g || !h 
+            || 10 == h ? "X" 
+                : e[0] == l ? "O" 
+                    : p(l) ? "*" : f == l ? "%" : " ";
+        m += "\n"
+    }
+    x.innerHTML = m + b;
+    !b.sup && setTimeout(n, 99)
+}();
+
+onkeydown = function (o) {
+    a = o.keyCode
+};
+
+function p(o) {
+    return e.join(p).indexOf(p + o) + 1
+}
+</script>
+</body>
+</html>

+ 7 - 0
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
+

BIN
presentations/Programmieren-Tutorium/Tutorium-02/syntax-error.png


+ 276 - 0
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}

+ 22 - 0
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

+ 49 - 0
presentations/Programmieren-Tutorium/Tutorium-03/Kontrollstrukturen.java

@@ -0,0 +1,49 @@
+if (<Bedingung>) {
+    // Anweisung für '<Bedingung> ist wahr'
+} else {
+    // Anweisung für '<Bedingung> ist falsch'
+}
+
+if (<Bedingung>) {
+    // Anweisung für '<Bedingung> ist wahr'
+} else if (<andere Bedingung>) {
+    // Anweisung für '<andere Bedingung> ist wahr'
+} else {
+    // Anweisung für '<Bedingung> 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);

+ 10 - 0
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

+ 5 - 0
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

+ 11 - 0
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");
+        }
+    }
+}

+ 13 - 0
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");
+        }
+    }
+}

+ 39 - 0
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());
+        // ...
+    }
+}

BIN
presentations/Programmieren-Tutorium/Tutorium-03/eclipse-getter-setter.png


+ 6 - 0
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[];

BIN
presentations/Programmieren-Tutorium/Tutorium-03/stringly-typed.jpg


+ 462 - 0
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}

BIN
presentations/Programmieren-Tutorium/Tutorium-03/yoda-condition.png


+ 27 - 0
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."<init>":()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 <varnum> <n> increments the int held in the local variable <varnum> by <n> */
+   43:	goto	3
+   46:	return
+
+}

+ 34 - 0
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."<init>":()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."<init>":()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
+
+}

+ 15 - 0
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));
+    }
+}

+ 86 - 0
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));
+    }
+}

+ 15 - 0
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
+}

+ 16 - 0
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;
+}

+ 10 - 0
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
+}

+ 10 - 0
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

+ 11 - 0
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");
+        }
+    }
+}

+ 11 - 0
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");
+        }
+    }
+}

+ 11 - 0
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");
+        }
+    }
+}

+ 9 - 0
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++;
+        }
+    }
+}

+ 9 - 0
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");
+    }
+}

+ 6 - 0
presentations/Programmieren-Tutorium/Tutorium-04/README.md

@@ -0,0 +1,6 @@
+Aufgaben
+========
+
+ * Tut04_Loops.pdf  : For-Loops
+ * ProjectEuler     : For-Loops + Arrays
+ * Matrix-Multiplikation

+ 8 - 0
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);
+        }
+
+    }
+}

+ 9 - 0
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;
+    }
+}

+ 12 - 0
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);
+    }
+}

+ 1 - 0
presentations/Programmieren-Tutorium/Tutorium-04/bash.sh

@@ -0,0 +1 @@
+javap -c SimpleLoop

BIN
presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png


+ 56 - 0
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)

BIN
presentations/Programmieren-Tutorium/Tutorium-04/java-6-javadoc.png


BIN
presentations/Programmieren-Tutorium/Tutorium-04/java-7-javadoc.png


+ 82 - 0
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$ 

+ 33 - 0
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;

+ 542 - 0
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 (<Bedingung>) \{ \dots \}} 
+            \item \myCode{while (<Bedingung>) \{ \dots \}}
+            \item \myCode{for (<Initialisierung>, <Bedingung>, <Update>) \{\dots\}}
+            \item \myCode{switch (<Variable>) \{case <Wert>:\}}
+          \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}

+ 14 - 0
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));
+    }
+}

+ 9 - 0
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);
+}

+ 28 - 0
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);
+        }
+    }
+}

+ 32 - 0
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);
+        }
+    }
+}

+ 15 - 0
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);
+    }
+}

+ 13 - 0
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);
+    }
+}

+ 18 - 0
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);
+    }
+}

+ 10 - 0
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

+ 25 - 0
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] + " ");
+        }
+    }
+}

+ 17 - 0
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] + " ");
+        }
+    }
+}

BIN
presentations/Programmieren-Tutorium/Tutorium-05/Sieve_of_Eratosthenes_animation.gif


+ 18 - 0
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;
+        }
+    }
+}

BIN
presentations/Programmieren-Tutorium/Tutorium-05/eclipse-export-project.png


BIN
presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy.dia


BIN
presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-deep-copy~


BIN
presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy.dia


+ 0 - 0
presentations/Programmieren-Tutorium/Tutorium-05/so-obj1-shallow-copy~


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä