Added source files (Programmieren Tutorium)
34
presentations/Programmieren-Tutorium/.gitignore
vendored
Normal 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
|
25
presentations/Programmieren-Tutorium/Misc/Stilfragen.tex
Normal 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}
|
10
presentations/Programmieren-Tutorium/Misc/tutoriumTermine.py
Executable 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)
|
18
presentations/Programmieren-Tutorium/README.md
Normal 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!
|
8
presentations/Programmieren-Tutorium/Tutorium-01/Bash.sh
Normal 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:~$
|
|
@ -0,0 +1,4 @@
|
|||
public enum Day {
|
||||
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
|
||||
THURSDAY, FRIDAY, SATURDAY
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
public class HelloWorld {
|
||||
public static void main(String[] args) {
|
||||
System.out.println("Hallo Welt!");
|
||||
}
|
||||
}
|
11
presentations/Programmieren-Tutorium/Tutorium-01/Makefile
Normal 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
|
|
@ -0,0 +1,4 @@
|
|||
public class Leaf {
|
||||
/** Is this leaf connected to the tree or is it fallen? */
|
||||
boolean isAlive;
|
||||
}
|
|
@ -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
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
public class Root {
|
||||
Root mainRoot;
|
||||
Root leftRoot;
|
||||
Root rightRoot;
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
public class SomeClass {
|
||||
public static void main(String[] args) {
|
||||
Day currentDay;
|
||||
currentDay = Day.MONDAY;
|
||||
System.out.println(currentDay);
|
||||
}
|
||||
}
|
BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-choose-download.png
Executable file
After Width: | Height: | Size: 103 KiB |
BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-download.png
Executable file
After Width: | Height: | Size: 116 KiB |
BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-einrichten.png
Executable file
After Width: | Height: | Size: 93 KiB |
BIN
presentations/Programmieren-Tutorium/Tutorium-01/eclipse-projekt.png
Executable file
After Width: | Height: | Size: 108 KiB |
104
presentations/Programmieren-Tutorium/Tutorium-01/email-liste.tex
Normal 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}
|
BIN
presentations/Programmieren-Tutorium/Tutorium-01/java-download.png
Executable file
After Width: | Height: | Size: 52 KiB |
|
@ -0,0 +1,7 @@
|
|||
#define PI 3.14159265359
|
||||
|
||||
main(){
|
||||
// Ausgabe der mathematischen Konstante "pi" auf 3
|
||||
// Nachkommastellen
|
||||
printf("%1.3f\n", PI);
|
||||
}
|
22
presentations/Programmieren-Tutorium/Tutorium-01/pi.c
Normal 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()
|
||||
{
|
||||
_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_-_-_-_-_-_
|
||||
_-_-_-_
|
||||
}
|
After Width: | Height: | Size: 181 KiB |
BIN
presentations/Programmieren-Tutorium/Tutorium-01/start-systemsteuerung.png
Executable file
After Width: | Height: | Size: 85 KiB |
612
presentations/Programmieren-Tutorium/Tutorium-01/tutorium-01.tex
Normal 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}
|
BIN
presentations/Programmieren-Tutorium/Tutorium-01/uTorrent.png
Executable file
After Width: | Height: | Size: 24 KiB |
BIN
presentations/Programmieren-Tutorium/Tutorium-01/windows-systemsteuerung.png
Executable file
After Width: | Height: | Size: 76 KiB |
|
@ -0,0 +1,28 @@
|
|||
public class Baby {
|
||||
/**
|
||||
* Write something in the constructor
|
||||
* @param weight set weight in gramm
|
||||
* @param size the size in cm
|
||||
* @param loudness the loudnes in dB
|
||||
*/
|
||||
public Baby(int weight, int size, float loudness) {
|
||||
super();
|
||||
this.name = name;
|
||||
this.weight = weight;
|
||||
this.size = size;
|
||||
this.loudness = loudness;
|
||||
}
|
||||
|
||||
/** Der Vor- und Nachname des Babys */
|
||||
public String name;
|
||||
|
||||
/** Gewicht in Gramm */
|
||||
public int weight;
|
||||
|
||||
/** Größe in cm */
|
||||
public int size;
|
||||
|
||||
/** Lautstärke in dB */
|
||||
public float loudness;
|
||||
}
|
||||
|
14
presentations/Programmieren-Tutorium/Tutorium-02/Baby.java
Normal 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;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
public class Bool {
|
||||
public static void main(String[] v) {
|
||||
int x = 42;
|
||||
|
||||
if (x = x + 42) {
|
||||
System.out.println("Das Leben");
|
||||
} else {
|
||||
System.out.println("Das Universum");
|
||||
}
|
||||
}
|
||||
}
|
21
presentations/Programmieren-Tutorium/Tutorium-02/Bool.java
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
10
presentations/Programmieren-Tutorium/Tutorium-02/Makefile
Normal 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
|
|
@ -0,0 +1,9 @@
|
|||
public final class Math {
|
||||
private Math() {}
|
||||
|
||||
public static final double E = 2.7182818284590452354;
|
||||
|
||||
public static final double PI = 3.14159265358979323846;
|
||||
|
||||
// [..]
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
public class Shark {
|
||||
private int size;
|
||||
|
||||
// constructor
|
||||
public Shark(int size) {
|
||||
this.size = size;
|
||||
}
|
||||
}
|
||||
|
||||
// initializes object
|
||||
Shark erik = new Shark(25);
|
17
presentations/Programmieren-Tutorium/Tutorium-02/Shark.java
Normal 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);
|
|
@ -0,0 +1,3 @@
|
|||
String myVar = "Hallo"; // String mit Inhalt
|
||||
String myVar2 = new String(); // leerer String
|
||||
String myVar3 = ""; // auch ein leerer String
|
|
@ -0,0 +1,6 @@
|
|||
String myVar = "Hallo";
|
||||
String myVar2 = "Welt";
|
||||
|
||||
// Verknuepfen von Strings
|
||||
String result1 = myVar + " " + myVar2 ;
|
||||
String result2 = myVar2 + "+" + myVar2 ;
|
|
@ -0,0 +1 @@
|
|||
String = "Hallo \"Welt\"";
|
|
@ -0,0 +1 @@
|
|||
String = "Hallo \n Welt";
|
|
@ -0,0 +1 @@
|
|||
String = "Hallo \\ Welt";
|
|
@ -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
|
After Width: | Height: | Size: 498 B |
47
presentations/Programmieren-Tutorium/Tutorium-02/index.htm
Normal 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>
|
|
@ -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
|
||||
|
After Width: | Height: | Size: 547 B |
276
presentations/Programmieren-Tutorium/Tutorium-02/tutorium-02.tex
Normal 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}
|
|
@ -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
|
|
@ -0,0 +1,49 @@
|
|||
if (<Bedingung>) {
|
||||
// Anweisung für '<Bedingung> ist wahr'
|
||||
} else {
|
||||
// Anweisung für '<Bedingung> ist falsch'
|
||||
}
|
||||
|
||||
if (<Bedingung>) {
|
||||
// Anweisung für '<Bedingung> ist wahr'
|
||||
} else if (<andere Bedingung>) {
|
||||
// Anweisung für '<andere Bedingung> ist wahr'
|
||||
} else {
|
||||
// Anweisung für '<Bedingung> ist falsch'
|
||||
}
|
||||
|
||||
public class World {
|
||||
public static void main(String[] a) {
|
||||
int monat = 12;
|
||||
switch (monat) {
|
||||
case 1:
|
||||
System.out.println("Es ist Januar!");
|
||||
break;
|
||||
case 2:
|
||||
System.out.println("Es ist Februar!");
|
||||
break;
|
||||
case 3:
|
||||
System.out.println("Es ist März!");
|
||||
break;
|
||||
default:
|
||||
// Anweisung, wenn monat keinen angegebener Wert angenommen hat.
|
||||
System.out.println("Es ist Weihnachten!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while(true) {
|
||||
System.out.println("It's true!");
|
||||
}
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
System.out.println(i);
|
||||
}
|
||||
|
||||
while (bedingung) {
|
||||
// Anweisungen werden ausgeführt, solange bedingung == true
|
||||
}
|
||||
|
||||
do {
|
||||
// Anweisungen werden ausgeführt, solange bedingung == true
|
||||
} while (bedingung);
|
10
presentations/Programmieren-Tutorium/Tutorium-03/Makefile
Normal 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
|
|
@ -0,0 +1,5 @@
|
|||
user@pc:~/Tutorium-03$ javac Quiz.java
|
||||
Quiz.java:5: variable b might not have been initialized
|
||||
if (a == b) {
|
||||
^
|
||||
1 error
|
11
presentations/Programmieren-Tutorium/Tutorium-03/Quiz.java
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
13
presentations/Programmieren-Tutorium/Tutorium-03/QuizIf.java
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
// ...
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 54 KiB |
|
@ -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[];
|
After Width: | Height: | Size: 11 KiB |
462
presentations/Programmieren-Tutorium/Tutorium-03/tutorium-03.tex
Normal 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}
|
After Width: | Height: | Size: 6.8 KiB |
|
@ -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
|
||||
|
||||
}
|
|
@ -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
|
||||
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* Methode, die ein neues Stadtrad erstellt.
|
||||
* @return neues Stadtrad
|
||||
*/
|
||||
public Bike createCityBike() { //Methodensignatur der Methode createCityBike
|
||||
Wheels cityWheels = new Wheels(559,50f,10000); //Räder des Stadtrads erstellen
|
||||
Gears cityGears = new Gears(3,1,5000); //Gangschaltung des Stadtrads erstellen
|
||||
Bike newCityBike = new Bike(cityGears, cityWheels, "Stahl", "CB105", true, true, 30000); //Stadtrad erstellen
|
||||
return newCityBike; //Stadtrad zurückgeben
|
||||
}
|
10
presentations/Programmieren-Tutorium/Tutorium-04/Makefile
Normal 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
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
Aufgaben
|
||||
========
|
||||
|
||||
* Tut04_Loops.pdf : For-Loops
|
||||
* ProjectEuler : For-Loops + Arrays
|
||||
* Matrix-Multiplikation
|
8
presentations/Programmieren-Tutorium/Tutorium-04/SimpleLoop.java
Executable 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
public class Baby {
|
||||
public String name;
|
||||
public static int size;
|
||||
|
||||
public Baby(String name) {
|
||||
this.name = name;
|
||||
size = 46;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
public class World {
|
||||
public static void main(String[] args) {
|
||||
Baby alice = new Baby("Alice");
|
||||
alice.size = 42;
|
||||
|
||||
Baby bob = new Baby("Bob");
|
||||
bob.size = 56;
|
||||
|
||||
System.out.println("Alice: " + alice.size);
|
||||
System.out.println("Bob: " + bob.size);
|
||||
}
|
||||
}
|
1
presentations/Programmieren-Tutorium/Tutorium-04/bash.sh
Normal file
|
@ -0,0 +1 @@
|
|||
javap -c SimpleLoop
|
BIN
presentations/Programmieren-Tutorium/Tutorium-04/euler-28.png
Normal file
After Width: | Height: | Size: 28 KiB |
56
presentations/Programmieren-Tutorium/Tutorium-04/euler28.py
Normal 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)
|
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 137 KiB |
|
@ -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$
|
|
@ -0,0 +1,33 @@
|
|||
boolean hasLicense();
|
||||
boolean canEvaluate();
|
||||
boolean shouldAbort = false;
|
||||
|
||||
boolean bell;
|
||||
boolean light;
|
||||
|
||||
boolean hasBell;
|
||||
boolean hasLight;
|
||||
|
||||
public class TestBoolean {
|
||||
private boolean isActive;
|
||||
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int i = 42;
|
||||
int k = (i * i) / (42 % 3);
|
||||
for (int j = 12; j < i; i++) {
|
||||
|
||||
}
|
||||
|
||||
int[] liste = new int[7];
|
||||
liste[5] = 5;
|
||||
|
||||
int[][] tabelle = new int[20][30];
|
||||
tabelle[1][2] = 1;
|
||||
|
||||
int[][][] quader = new int[5][7][2];
|
||||
quader[0][0][0] = 0;
|
542
presentations/Programmieren-Tutorium/Tutorium-04/tutorium-04.tex
Normal 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}
|
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
public class IataCode {
|
||||
public static void printIATACodes(String[] myArray) {
|
||||
for (int i = 0; i < myArray.length; i++) {
|
||||
System.out.println(myArray[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String[] iataCodes = new String[4];
|
||||
// Flughafen München
|
||||
iataCodes[0] = "MUC";
|
||||
// Flughafen Berlin Brandenburg
|
||||
iataCodes[1] = "BER";
|
||||
// Flughafen Augsburg
|
||||
iataCodes[2] = "AGB";
|
||||
printIATACodes(iataCodes);
|
||||
}
|
||||
}
|
10
presentations/Programmieren-Tutorium/Tutorium-05/Makefile
Normal 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
|
|
@ -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] + " ");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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] + " ");
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 154 KiB |
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 44 KiB |