2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-26 06:48:04 +02:00

Added source files (Programmieren Tutorium)

This commit is contained in:
Martin Thoma 2013-11-05 19:39:03 +01:00
parent 1be8f17cc0
commit ad81fa802b
244 changed files with 8252 additions and 0 deletions

View file

@ -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

View file

@ -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}

View file

@ -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)

View file

@ -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!

View file

@ -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:~$

View file

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

View file

@ -0,0 +1,5 @@
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hallo Welt!");
}
}

View file

@ -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

View file

@ -0,0 +1,4 @@
public class Leaf {
/** Is this leaf connected to the tree or is it fallen? */
boolean isAlive;
}

View file

@ -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
}
}

View file

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

View file

@ -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;
}

View file

@ -0,0 +1,7 @@
public class SomeClass {
public static void main(String[] args) {
Day currentDay;
currentDay = Day.MONDAY;
System.out.println(currentDay);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View file

@ -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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View file

@ -0,0 +1,7 @@
#define PI 3.14159265359
main(){
// Ausgabe der mathematischen Konstante "pi" auf 3
// Nachkommastellen
printf("%1.3f\n", PI);
}

View file

@ -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()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View file

@ -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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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");
}
}
}

View file

@ -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");
}
}
}

View file

@ -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

View file

@ -0,0 +1,9 @@
public final class Math {
private Math() {}
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
// [..]
}

View file

@ -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);

View file

@ -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);

View file

@ -0,0 +1,3 @@
String myVar = "Hallo"; // String mit Inhalt
String myVar2 = new String(); // leerer String
String myVar3 = ""; // auch ein leerer String

View file

@ -0,0 +1,6 @@
String myVar = "Hallo";
String myVar2 = "Welt";
// Verknuepfen von Strings
String result1 = myVar + " " + myVar2 ;
String result2 = myVar2 + "+" + myVar2 ;

View file

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

View file

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

View file

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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

View file

@ -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>

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

View file

@ -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}

View file

@ -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

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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");
}
}
}

View file

@ -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");
}
}
}

View file

@ -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());
// ...
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -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[];

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -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
}

View file

@ -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
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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
}

View file

@ -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;
}

View file

@ -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
}

View file

@ -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

View file

@ -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");
}
}
}

View file

@ -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");
}
}
}

View file

@ -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");
}
}
}

View file

@ -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++;
}
}
}

View file

@ -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");
}
}

View file

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

View file

@ -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);
}
}
}

View file

@ -0,0 +1,9 @@
public class Baby {
public String name;
public static int size;
public Baby(String name) {
this.name = name;
size = 46;
}
}

View file

@ -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);
}
}

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

View file

@ -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$

View file

@ -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;

View file

@ -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}

View file

@ -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));
}
}

View file

@ -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);
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

View file

@ -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;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Some files were not shown because too many files have changed in this diff Show more