Browse Source

Added source files (Programmieren Tutorium)

Martin Thoma 12 năm trước cách đây
mục cha
commit
ad81fa802b
100 tập tin đã thay đổi với 3217 bổ sung0 xóa
  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~


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác