Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132930 views
License: OTHER
1
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
2
3
% use KIT-Theme
4
% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
5
%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
6
\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
7
\usefonttheme{professionalfonts}
8
9
\usepackage{hyperref}
10
\usepackage{lmodern}
11
\usepackage{listings}
12
\usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
13
\usepackage[utf8]{inputenc} % this is needed for german umlauts
14
\usepackage[ngerman]{babel} % this is needed for german umlauts
15
\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
16
\usepackage{verbatim}
17
\usepackage{relsize}
18
\usepackage{subfigure}
19
\usepackage{algorithm,algpseudocode}
20
\usepackage{minted} % needed for the inclusion of source code
21
\usepackage{menukeys}
22
\usepackage{xcolor}
23
\usepackage{graphicx}
24
\usepackage{wrapfig}
25
\usepackage{../templates/myStyle}
26
27
\newcommand\tutor{Martin Thoma}
28
\newcommand\tutNR{10}
29
\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
30
\institute{Fakultät für Informatik}
31
32
\hypersetup{pdftitle={\titleText}}
33
\beamertemplatenavigationsymbolsempty
34
35
\newcommand\InsertToC[1][]{
36
\begin{frame}{Outline}
37
\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
38
\end{frame}
39
}
40
41
\begin{document}
42
\title{\titleText}
43
\subtitle{Coding Style, Arrays}
44
\author{\tutor}
45
\date{\today}
46
\subject{Programmieren}
47
48
\frame{\titlepage}
49
50
\frame{
51
\frametitle{Inhaltsverzeichnis}
52
\setcounter{tocdepth}{1}
53
\tableofcontents
54
\setcounter{tocdepth}{2}
55
}
56
57
\section{Einleitung}
58
\subsection{Quiz}
59
\begin{frame}{Quiz}
60
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizArray.java, frame=lines]{java}{QuizArray.java}
61
\begin{itemize}
62
\item Gibt es einen Compiler-Fehler?
63
\item Gibt es einen Laufzeit-Fehler?
64
\item Gibt es eine Ausgabe? Welche?
65
\end{itemize}
66
\end{frame}
67
68
\begin{frame}{Quiz: Antwort}
69
\begin{block}{Quelltext}
70
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizArray.java}
71
\end{block}
72
73
\begin{block}{Ausgabe}
74
myArray1: geh du alter sack\\
75
myArray2: geh du alter sack
76
\end{block}
77
\end{frame}
78
79
\begin{frame}{Shallow copy und deep copy}
80
\includegraphics*[height=5cm,angle=-90]{so-obj1.pdf}
81
82
\begin{minipage}[b]{0.45\linewidth}
83
\begin{figure}[htb]
84
\includegraphics*[height=5cm,angle=-90]{so-obj1-shallow-copy.pdf}
85
\caption{shallow copy}
86
\label{UploadForm}
87
\end{figure}
88
\end{minipage}
89
\hspace{0.5cm}
90
\begin{minipage}[b]{0.45\linewidth}
91
\begin{figure}[htb]
92
\includegraphics*[height=5cm,angle=-90]{so-obj1-deep-copy.pdf}
93
\caption{deep copy}
94
\label{UploadForm}
95
\end{figure}
96
\end{minipage}
97
98
\tiny{Weitere infos auf \href{http://stackoverflow.com/a/9835954/562769}{stackoverflow.com}}
99
\end{frame}
100
101
\begin{frame}{Shallow copy und deep copy}
102
\begin{itemize}
103
\item Java macht standardmäßig eine "`shallow copy"'
104
\item Wenn ihr eine "`deep copy"' wollt, müsst ihr das selbst machen
105
\end{itemize}
106
\begin{alertblock}{Lehre aus dem Quiz}
107
Beim kopieren von Objekten (alles außer \myCode{boolean}, \myCode{byte},
108
\myCode{int}, \myCode{long}, \myCode{float}, \myCode{double} -
109
oder einfacher, alles was mit einem Großbuchstaben beginnt)
110
ist Vorsicht geboten.
111
\end{alertblock}
112
\end{frame}
113
114
\begin{frame}{Shallow copy und deep copy}
115
Deep copy sieht im Beispiel so aus:
116
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=QuizArray.java, frame=lines]{java}{QuizArray-solution.java}
117
\end{frame}
118
119
\section{Coding Style}
120
\subsection{Magic Numbers}
121
\begin{frame}{Magic Numbers}
122
\begin{alertblock}{Definition: Magic numbers}
123
Unique values with unexplained meaning or multiple occurrences
124
which could (preferably) be replaced with named constants.
125
\end{alertblock}
126
127
Warum sind Konstanten besser als magic numbers?
128
\begin{itemize}
129
\item Code wird lesbarer
130
\item Code wird leichter erweiterbar
131
\item Kein (nennenswerter) Geschwindigkeits- oder Speicherplatznachteil
132
\end{itemize}
133
134
\begin{block}{Faustregel}
135
Alle Zahlen, bis auf \myCode{0}, \myCode{1} und \myCode{-1}
136
sollten mittels Konstanten verwendet werden.
137
\end{block}
138
\end{frame}
139
140
\begin{frame}{Magic Numbers: Beispiel mit magic numbers}
141
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame-bad.java}
142
\end{frame}
143
144
\begin{frame}{Magic Numbers: Beispiel mit magic Konstanten}
145
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame.java}
146
\end{frame}
147
148
\section{Praxis}
149
\subsection{Durchschnitt}
150
\begin{frame}{Durchschnitt: Aufgabe}
151
Schreiben Sie eine Methode \myCode{float getAverage(int[] numbers) \{ \dots \}},
152
die den Durchschnitt der Zahlen im Array \myCode{numbers} berechnet.
153
\end{frame}
154
155
\begin{frame}{Durchschnitt: Lösung}
156
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{AverageCalculation.java}
157
\end{frame}
158
159
\subsection{Flughafenkürzel}
160
\begin{frame}{Flughafenkürzel: Aufgabe}
161
Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und
162
möchten den Inhalt auf der Konsole ausgeben.
163
\end{frame}
164
165
\begin{frame}{Flughafenkürzel: Lösung}
166
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode.java}
167
\end{frame}
168
169
\begin{frame}{Flughafenkürzel: Ausgabe}
170
Kein Compiler- oder Laufzeitfehler, obwohl \myCode{iataCodes[3]}
171
nicht initialisiert ist!
172
173
\begin{block}{Ausgabe}
174
MUC\\
175
BER\\
176
AGB\\
177
null
178
\end{block}
179
\end{frame}
180
181
\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge}
182
Modifiziere das Programm so, dass die Kürzel in umgekehrter
183
Reihenfolge ausgegeben werden.
184
\begin{block}{Lösung von vorhin}
185
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
186
\end{block}
187
\end{frame}
188
189
\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge - Lösung}
190
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-2.java}
191
\end{frame}
192
193
\begin{frame}{Flughafenkürzel: Jumping}
194
Modifiziere das Programm so, dass nur jedes dritte Element
195
ausgegeben wird.
196
\begin{block}{Lösung von vorhin}
197
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
198
\end{block}
199
\end{frame}
200
201
\begin{frame}{Flughafenkürzel: Jumping - Lösung}
202
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-3.java}
203
\end{frame}
204
205
\subsection{Praxis: Bilder}
206
\begin{frame}{Praxis: Bilder}
207
Gegeben ist ein Schwarz-Weiß Bild \myCode{int[][] image}.
208
\begin{enumerate}
209
\item Was repräsentiert \myCode{image[2][42]}?
210
\item Schreiben Sie eine Methode, die die durchschnittliche
211
Farbe von \myCode{image} berechnet und zurückgibt.
212
\end{enumerate}
213
\end{frame}
214
215
\begin{frame}{Praxis: Bilder - Lösung}
216
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bilder.java}
217
218
Mögliche Probleme:
219
\begin{itemize}
220
\item Ein \myCode{int} für \myCode{sum} ist eventuell zu klein
221
\item 255 Grauwerte, \myCode{int} hat maximalwert von 2.147.483.64
222
\item[$\Rightarrow$] $\frac{2147483647}{255} \approx 8.4 \cdot 10^6$
223
\item[$\Rightarrow$] maximal 8.4 Millionen Pixel
224
\item[$\Rightarrow$] $\sqrt{8.4 \cdot 10^6} \approx 2900$
225
\item[$\Rightarrow$] maximale Auflösung von $2900 \times 2900$ Pixel
226
\item Eventuell \myCode{int[][] image = new int[0][0];}
227
\end{itemize}
228
\end{frame}
229
230
\subsection{Praxis: Sieb des Erasthostenes}
231
\begin{frame}{Praxis: Sieb des Erasthostenes}
232
Implementieren Sie das Sieb des Erasthostenes.
233
\end{frame}
234
235
\section{Allgemeine Hinweise zu ÜB}
236
\subsection{Praktomat}
237
\begin{frame}{Praktomat}
238
\begin{itemize}
239
\item Fragen frühzeitig stellen!
240
\item Wenn ihr Pakete verwendet, am Anfang eurer Dateien
241
also \myCode{package AB\_2;} oder ähnliches steht,
242
müsst ihr die korrekte Ordnerstruktur in den Praktomat
243
hochladen
244
\item In Eclipse im Fenster "`Navigation"' den Ordner "`src"'
245
auswählen
246
\item \menu{File > Export\dots > File system}
247
\item Zip-Datei aus dem exportiertem src-Ordner erstellen
248
\item Zip-Datei hochladen
249
\end{itemize}
250
\end{frame}
251
252
\framedgraphic{Projekt mit Eclipse exportieren}{eclipse-export-project.png}
253
254
\begin{frame}{Allgemeines}
255
\begin{itemize}
256
\item Eclipse-Warnungen beherzigen und die Ursache dafür beseitigen
257
\item Formattieren: \keys{Strg + A} und \keys{Strg + \shift + F}
258
\item Encoding: \menu{Project > Properties > Ressource > Text file encoding > UTF-8}
259
\end{itemize}
260
\end{frame}
261
262
\section{Hinweise zum ÜB 3}
263
\subsection{ÜB 3}
264
\begin{frame}{ÜB 3}
265
\begin{itemize}
266
\item A1:
267
\begin{itemize}
268
\item Pro Aufgabe jeweils eine Textdatei(\myCode{A1.txt}, \myCode{B1.txt})
269
\item Schaut euch meinen Artikel \href{http://martin-thoma.com/java-puzzle-1-pre-and-postincrement/}{Java Puzzle \#1: Pre- and Postincrement} an
270
\end{itemize}
271
\item A2: Buchstaben "`d"' und "`f"' nicht verwenden
272
\end{itemize}
273
\end{frame}
274
275
\section{Abspann}
276
\subsection{Comic}
277
\framedgraphic{Abgaben um 11:55 Uhr}{ub-2-abgabge.png}
278
\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-01-commenting.jpg}
279
280
\end{document}
281
282