📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / presentations / Programmieren-Tutorium / Tutorium-05 / tutorium-05.tex
132930 viewsLicense: OTHER
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}12% use KIT-Theme3% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen4%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback5\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}6\usefonttheme{professionalfonts}78\usepackage{hyperref}9\usepackage{lmodern}10\usepackage{listings}11\usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions12\usepackage[utf8]{inputenc} % this is needed for german umlauts13\usepackage[ngerman]{babel} % this is needed for german umlauts14\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf15\usepackage{verbatim}16\usepackage{relsize}17\usepackage{subfigure}18\usepackage{algorithm,algpseudocode}19\usepackage{minted} % needed for the inclusion of source code20\usepackage{menukeys}21\usepackage{xcolor}22\usepackage{graphicx}23\usepackage{wrapfig}24\usepackage{../templates/myStyle}2526\newcommand\tutor{Martin Thoma}27\newcommand\tutNR{10}28\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}29\institute{Fakultät für Informatik}3031\hypersetup{pdftitle={\titleText}}32\beamertemplatenavigationsymbolsempty3334\newcommand\InsertToC[1][]{35\begin{frame}{Outline}36\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]37\end{frame}38}3940\begin{document}41\title{\titleText}42\subtitle{Coding Style, Arrays}43\author{\tutor}44\date{\today}45\subject{Programmieren}4647\frame{\titlepage}4849\frame{50\frametitle{Inhaltsverzeichnis}51\setcounter{tocdepth}{1}52\tableofcontents53\setcounter{tocdepth}{2}54}5556\section{Einleitung}57\subsection{Quiz}58\begin{frame}{Quiz}59\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizArray.java, frame=lines]{java}{QuizArray.java}60\begin{itemize}61\item Gibt es einen Compiler-Fehler?62\item Gibt es einen Laufzeit-Fehler?63\item Gibt es eine Ausgabe? Welche?64\end{itemize}65\end{frame}6667\begin{frame}{Quiz: Antwort}68\begin{block}{Quelltext}69\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizArray.java}70\end{block}7172\begin{block}{Ausgabe}73myArray1: geh du alter sack\\74myArray2: geh du alter sack75\end{block}76\end{frame}7778\begin{frame}{Shallow copy und deep copy}79\includegraphics*[height=5cm,angle=-90]{so-obj1.pdf}8081\begin{minipage}[b]{0.45\linewidth}82\begin{figure}[htb]83\includegraphics*[height=5cm,angle=-90]{so-obj1-shallow-copy.pdf}84\caption{shallow copy}85\label{UploadForm}86\end{figure}87\end{minipage}88\hspace{0.5cm}89\begin{minipage}[b]{0.45\linewidth}90\begin{figure}[htb]91\includegraphics*[height=5cm,angle=-90]{so-obj1-deep-copy.pdf}92\caption{deep copy}93\label{UploadForm}94\end{figure}95\end{minipage}9697\tiny{Weitere infos auf \href{http://stackoverflow.com/a/9835954/562769}{stackoverflow.com}}98\end{frame}99100\begin{frame}{Shallow copy und deep copy}101\begin{itemize}102\item Java macht standardmäßig eine "`shallow copy"'103\item Wenn ihr eine "`deep copy"' wollt, müsst ihr das selbst machen104\end{itemize}105\begin{alertblock}{Lehre aus dem Quiz}106Beim kopieren von Objekten (alles außer \myCode{boolean}, \myCode{byte},107\myCode{int}, \myCode{long}, \myCode{float}, \myCode{double} -108oder einfacher, alles was mit einem Großbuchstaben beginnt)109ist Vorsicht geboten.110\end{alertblock}111\end{frame}112113\begin{frame}{Shallow copy und deep copy}114Deep copy sieht im Beispiel so aus:115\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=QuizArray.java, frame=lines]{java}{QuizArray-solution.java}116\end{frame}117118\section{Coding Style}119\subsection{Magic Numbers}120\begin{frame}{Magic Numbers}121\begin{alertblock}{Definition: Magic numbers}122Unique values with unexplained meaning or multiple occurrences123which could (preferably) be replaced with named constants.124\end{alertblock}125126Warum sind Konstanten besser als magic numbers?127\begin{itemize}128\item Code wird lesbarer129\item Code wird leichter erweiterbar130\item Kein (nennenswerter) Geschwindigkeits- oder Speicherplatznachteil131\end{itemize}132133\begin{block}{Faustregel}134Alle Zahlen, bis auf \myCode{0}, \myCode{1} und \myCode{-1}135sollten mittels Konstanten verwendet werden.136\end{block}137\end{frame}138139\begin{frame}{Magic Numbers: Beispiel mit magic numbers}140\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame-bad.java}141\end{frame}142143\begin{frame}{Magic Numbers: Beispiel mit magic Konstanten}144\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame.java}145\end{frame}146147\section{Praxis}148\subsection{Durchschnitt}149\begin{frame}{Durchschnitt: Aufgabe}150Schreiben Sie eine Methode \myCode{float getAverage(int[] numbers) \{ \dots \}},151die den Durchschnitt der Zahlen im Array \myCode{numbers} berechnet.152\end{frame}153154\begin{frame}{Durchschnitt: Lösung}155\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{AverageCalculation.java}156\end{frame}157158\subsection{Flughafenkürzel}159\begin{frame}{Flughafenkürzel: Aufgabe}160Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und161möchten den Inhalt auf der Konsole ausgeben.162\end{frame}163164\begin{frame}{Flughafenkürzel: Lösung}165\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode.java}166\end{frame}167168\begin{frame}{Flughafenkürzel: Ausgabe}169Kein Compiler- oder Laufzeitfehler, obwohl \myCode{iataCodes[3]}170nicht initialisiert ist!171172\begin{block}{Ausgabe}173MUC\\174BER\\175AGB\\176null177\end{block}178\end{frame}179180\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge}181Modifiziere das Programm so, dass die Kürzel in umgekehrter182Reihenfolge ausgegeben werden.183\begin{block}{Lösung von vorhin}184\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}185\end{block}186\end{frame}187188\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge - Lösung}189\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-2.java}190\end{frame}191192\begin{frame}{Flughafenkürzel: Jumping}193Modifiziere das Programm so, dass nur jedes dritte Element194ausgegeben wird.195\begin{block}{Lösung von vorhin}196\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}197\end{block}198\end{frame}199200\begin{frame}{Flughafenkürzel: Jumping - Lösung}201\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-3.java}202\end{frame}203204\subsection{Praxis: Bilder}205\begin{frame}{Praxis: Bilder}206Gegeben ist ein Schwarz-Weiß Bild \myCode{int[][] image}.207\begin{enumerate}208\item Was repräsentiert \myCode{image[2][42]}?209\item Schreiben Sie eine Methode, die die durchschnittliche210Farbe von \myCode{image} berechnet und zurückgibt.211\end{enumerate}212\end{frame}213214\begin{frame}{Praxis: Bilder - Lösung}215\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bilder.java}216217Mögliche Probleme:218\begin{itemize}219\item Ein \myCode{int} für \myCode{sum} ist eventuell zu klein220\item 255 Grauwerte, \myCode{int} hat maximalwert von 2.147.483.64221\item[$\Rightarrow$] $\frac{2147483647}{255} \approx 8.4 \cdot 10^6$222\item[$\Rightarrow$] maximal 8.4 Millionen Pixel223\item[$\Rightarrow$] $\sqrt{8.4 \cdot 10^6} \approx 2900$224\item[$\Rightarrow$] maximale Auflösung von $2900 \times 2900$ Pixel225\item Eventuell \myCode{int[][] image = new int[0][0];}226\end{itemize}227\end{frame}228229\subsection{Praxis: Sieb des Erasthostenes}230\begin{frame}{Praxis: Sieb des Erasthostenes}231Implementieren Sie das Sieb des Erasthostenes.232\end{frame}233234\section{Allgemeine Hinweise zu ÜB}235\subsection{Praktomat}236\begin{frame}{Praktomat}237\begin{itemize}238\item Fragen frühzeitig stellen!239\item Wenn ihr Pakete verwendet, am Anfang eurer Dateien240also \myCode{package AB\_2;} oder ähnliches steht,241müsst ihr die korrekte Ordnerstruktur in den Praktomat242hochladen243\item In Eclipse im Fenster "`Navigation"' den Ordner "`src"'244auswählen245\item \menu{File > Export\dots > File system}246\item Zip-Datei aus dem exportiertem src-Ordner erstellen247\item Zip-Datei hochladen248\end{itemize}249\end{frame}250251\framedgraphic{Projekt mit Eclipse exportieren}{eclipse-export-project.png}252253\begin{frame}{Allgemeines}254\begin{itemize}255\item Eclipse-Warnungen beherzigen und die Ursache dafür beseitigen256\item Formattieren: \keys{Strg + A} und \keys{Strg + \shift + F}257\item Encoding: \menu{Project > Properties > Ressource > Text file encoding > UTF-8}258\end{itemize}259\end{frame}260261\section{Hinweise zum ÜB 3}262\subsection{ÜB 3}263\begin{frame}{ÜB 3}264\begin{itemize}265\item A1:266\begin{itemize}267\item Pro Aufgabe jeweils eine Textdatei(\myCode{A1.txt}, \myCode{B1.txt})268\item Schaut euch meinen Artikel \href{http://martin-thoma.com/java-puzzle-1-pre-and-postincrement/}{Java Puzzle \#1: Pre- and Postincrement} an269\end{itemize}270\item A2: Buchstaben "`d"' und "`f"' nicht verwenden271\end{itemize}272\end{frame}273274\section{Abspann}275\subsection{Comic}276\framedgraphic{Abgaben um 11:55 Uhr}{ub-2-abgabge.png}277\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-01-commenting.jpg}278279\end{document}280281282