diff --git a/20160107/portb.jpg b/20160107/portb.jpg
deleted file mode 100644
index d4dd32ba173da4e555e0cafbc1720bb19b493875..0000000000000000000000000000000000000000
Binary files a/20160107/portb.jpg and /dev/null differ
diff --git a/20160107/portb.jpg b/20160107/portb.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..6261e6d6baa8f9b0dfa2b4f9bc6325feeecf48f2
--- /dev/null
+++ b/20160107/portb.jpg
@@ -0,0 +1 @@
+../common/portb.jpg
\ No newline at end of file
diff --git a/20160114/ainf-20160114.pdf b/20160114/ainf-20160114.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b193581c270e71d52de8453520026d039c19f8e0
Binary files /dev/null and b/20160114/ainf-20160114.pdf differ
diff --git a/20160114/ainf-20160114.tex b/20160114/ainf-20160114.tex
new file mode 100644
index 0000000000000000000000000000000000000000..795889f87523e4d47028e78b4ea2656b9c1dd08f
--- /dev/null
+++ b/20160114/ainf-20160114.tex
@@ -0,0 +1,947 @@
+% ainf-20160114.pdf - Lecture Slides on Applied Computer Sciences
+% Copyright (C) 2012, 2013, 2015, 2016  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{pdftricks}
+\usepackage{rotating}
+
+\newrgbcolor{orange}{0.7 0.2 0.0}
+
+\begin{psinputs}
+  \usepackage[utf8]{inputenc}
+  \usepackage[german]{babel}
+  \usepackage[T1]{fontenc}
+  \usepackage{helvet}
+  \renewcommand*\familydefault{\sfdefault}
+  \usepackage{pstricks,pst-grad,pst-node,pst-math,pst-plot}
+\end{psinputs}
+
+\lstdefinestyle{asm}{basicstyle=\color{structure},
+                     language={},
+                     gobble=4}
+
+\title{Angewandte Informatik}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{14.\ Januar 2016}
+
+\begin{document}
+
+\maketitleframe
+
+\sectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+    \item[\textbf{2}] \textbf{Einführung in C}
+    \item[\textbf{3}] \textbf{Bibliotheken}
+    \item[\textbf{4}] \textbf{Algorithmen}
+      \begin{itemize}
+        \item[4.1] Differentialgleichungen
+        \item[4.2] Rekursion
+        \item[4.3] Stack und FIFO
+        \color{medgreen}
+        \item[4.4] Aufwandsabschätzungen
+        \item[4.4] Dynamische Speicherverwaltung
+      \end{itemize}
+    \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
+      \begin{itemize}
+        \vspace*{-5pt}
+        \item[\dots]
+        \item[5.4] volatile-Variable
+        \color{red}
+        \item[5.5] Software-Interrupts
+        \item[5.6] Byte-Reihenfolge -- Endianness
+        \item[5.6] Speicherausrichtung -- Alignment
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+    \item[\textbf{7}] \textbf{Ergänzungen und Ausblicke}
+  \end{itemize}
+
+\end{frame}
+
+\section{Einführung}
+\section{Einführung in C}
+\section{Bibliotheken}
+\section{Algorithmen}
+\subsection{Differentialgleichungen}
+\subsection{Rekursion}
+\subsection{Stack und FIFO}
+\subsection{Aufwandsabschätzungen}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Beispiel: Sortieralgorithmen
+
+  \begin{itemize}
+    \item
+      Maximum suchen: $\mathcal{O}(n)$
+      \hfill
+      \begin{minipage}[t]{5.6cm}
+        \vspace*{-1.3cm}
+        \begin{pdfpic}
+          \psset{unit=0.5pt}
+          \begin{pspicture}(-20,-20)(250,200)
+            \psline[arrows=->](-10,0)(200,0)
+            \put(205,0){\makebox(0,0)[l]{$n$}}
+            \psline[arrows=->](0,-10)(0,220)
+            \put(-10,230){\makebox(0,0)[l]{$g(n)$}}
+            \psplot[plotpoints=200]{1}{128}{2 x 0.06 mul exp}
+            \put(100,212){\mbox{$g(n) \sim 2^n$}}
+            \psplot[plotpoints=200]{0}{190}{x x mul 0.005 mul}
+            \put(190,190){\mbox{$g(n) \sim n^2$}}
+            \psplot[plotpoints=200]{1}{190}{x ln x mul 0.1 mul}
+            \put(195,100){\mbox{$g(n) \sim n \log n$}}
+            \psplot[plotpoints=200]{0}{190}{x 0.4 mul}
+            \put(195,75){\mbox{$g(n) \sim n$}}
+            \psplot[plotpoints=200]{1}{190}{x ln 10 mul}
+            \put(195,50){\mbox{$g(n) \sim \log n$}}
+            \psplot[plotpoints=200]{1}{190}{30}
+            \put(195,25){\mbox{$g(n) \sim 1$}}
+            \psplot[plotpoints=300]{1}{76}{x 0.05 mul 1 add GAMMA 10 mul}
+%            \put(7,7){\pscircle[fillstyle=solid,fillcolor=black]{2.5}}
+%            \put(14,14){\pscircle[fillstyle=solid,fillcolor=black]{2.5}}
+%            \put(21,42){\pscircle[fillstyle=solid,fillcolor=black]{2.5}}
+%            \put(28,168){\pscircle[fillstyle=solid,fillcolor=black]{2.5}}
+            \put(20,182){\mbox{$g(n) \sim n!$}}
+          \end{pspicture}
+        \end{pdfpic}
+        \small
+        \begin{description}\itemsep0pt
+          \item[$n$:] Eingabedaten
+          \item[$g(n)$:] Rechenzeit
+        \end{description}
+        \vspace*{-10cm}\strut
+      \end{minipage}
+    \pause[2]
+    \item
+      Maximum ans Ende tauschen\\
+      \textarrow\ Selectionsort: $\mathcal{O}(n^2)$
+    \pause
+    \item
+      zufällig mischen, bis sortiert\\
+      \textarrow\ Monkeysort: $\mathcal{O}(n!)$
+    \pause
+    \item
+      Während Maximumsuche prüfen,\\abbrechen, falls schon sortiert\\
+      \textarrow\ Bubblesort: $\mathcal{O}(n)$ bis $\mathcal{O}(n^2)$
+    \pause
+    \item
+      Rekursiv sortieren\\
+      \textarrow\ Quicksort: $\mathcal{O}(n\log n)$ bis $\mathcal{O}(n^2)$\hfill
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Dynamische Speicherverwaltung}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \bigskip
+
+  \begin{lstlisting}
+    char *name[] = { "Anna", "Berthold", "Caesar" };
+
+    ...
+
+     name[3] = "Dieter";
+  \end{lstlisting}
+
+  \begin{picture}(0,0)
+    \color{red}
+    \put(0,0){\line(3,1){3.5}}
+    \put(0,1){\line(3,-1){3.5}}
+  \end{picture}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \bigskip
+
+  \begin{lstlisting}
+    #include <stdlib.h>
+
+    ...
+
+      char **name = malloc (3 * sizeof (char *));
+        /* Speicherplatz für 3 Zeiger anfordern */
+
+    ...
+
+      free (name)
+        /* Speicherplatz freigeben */
+
+  \end{lstlisting}
+
+\end{frame}
+
+\section{Hardwarenahe Programmierung}
+\subsection{Bit-Operationen}
+\subsubsection{Zahlensysteme}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \vspace*{-\smallskipamount}
+  \showsubsection
+  \vspace*{-\medskipamount}
+  \showsubsubsection
+
+  Oktal- und Hexadezimal-Zahlen lassen sich ziffernweise\\
+  in Binär-Zahlen umrechnen:
+
+  \begin{verbatim}
+    000 0        0000 0  1000 8
+    001 1        0001 1  1001 9
+    010 2        0010 2  1010 A
+    011 3        0011 3  1011 B
+    100 4        0100 4  1100 C
+    101 5        0101 5  1101 D
+    110 6        0110 6  1110 E
+    111 7        0111 7  1111 F
+  \end{verbatim}
+
+  \begin{picture}(0,0)
+    \put(8,3){\begin{rotate}{15}
+                \color{red}\bf
+                Auswendig lernen!
+              \end{rotate}}
+  \end{picture}
+
+\end{frame}
+
+\subsubsection{Bit-Operationen in C}
+
+\begin{frame}[fragile]
+
+  \showsubsubsection
+
+  \begin{tabular}{lll}
+    C-Operator     & Verknüpfung              & Anwendung                \\[\smallskipamount]
+    \lstinline,&,  & Und                      & Bits gezielt löschen     \\
+    \lstinline,|,  & Oder                     & Bits gezielt setzen      \\
+    \lstinline,^,  & Exklusiv-Oder            & Bits gezielt invertieren \\
+    \lstinline,~,  & Nicht                    & Alle Bits invertieren    \\[\smallskipamount]
+    \lstinline,<<, & Verschiebung nach links  & Maske generieren         \\
+    \lstinline,>>, & Verschiebung nach rechts & Bits isolieren
+  \end{tabular}
+
+  \bigskip
+
+  Beispiele:
+  \begin{itemize}
+    \item
+      Bit Nr.\ 5 gezielt auf 1 setzen:
+      \lstinline{PORTB |= 1 << 5;}
+    \item
+      Bit Nr.\ 6 gezielt auf 0 setzen:
+      \lstinline{PORTA &= ~(1 << 6);}
+    \item
+      Ist Bit Nr.\ 4 gesetzt?
+      \lstinline{if (PINC & (1 << 4) ...}
+      \smallskip
+    \item
+      Umschalten zwischen Ein- und Ausgabe: \lstinline{DDR}\\
+      Bit = 1: Ausgabe; Bit = 0: Eingabe
+  \end{itemize}
+
+  \begin{picture}(0,0)
+    \put(8.4,1){\begin{rotate}{15}
+                  \color{red}\bf
+                  \shortstack{Details abhängig von\\Prozessor und Compiler!}
+                \end{rotate}}
+  \end{picture}
+
+\end{frame}
+
+\subsection{I/O-Ports}
+
+\begin{frame}[fragile]
+
+%  \showsection
+  \showsubsection
+  \vspace*{-1.5\medskipamount}
+  {\large\textbf{\color{structure}5.3\quad Interrupts}}
+
+  \bigskip
+
+  Kommunikation mit externen Geräten
+
+  \bigskip
+
+  \begin{center}
+    \begin{pdfpic}
+      \psset{unit=1cm}%
+      \begin{pspicture}(0,0)(10,6)
+        \rput(0,0){\psframe[framearc=0.25](2,5)}
+        \rput(1,4.5){\makebox(0,0)[t]{Prozessor}}
+        \rput(2.0,3.7){\pnode{p0}}
+        \rput(2.0,3.3){\pnode{q0}}
+        \rput(2.0,1.0){\pnode{i0}}
+        \rput(2.12,1.2){\pnode{j0}}
+        \rput(2.02,1.3){\pnode{k0}}
+        \rput(2.12,1.4){\pnode{l0}}
+        \rput(3.5,1.4){\pnode{m0}}
+        \rput(8,0){\psframe[framearc=0.25](2,5)}
+        \rput(9,4.5){\makebox(0,0)[t]{\shortstack{externes\\Gerät}}}
+        \rput(8.0,3.7){\pnode{p1}}
+        \rput(7.88,3.3){\pnode{q1}}
+        \rput(7.98,3.2){\pnode{r1}}
+        \rput(7.88,3.1){\pnode{s1}}
+        \rput(6.5,3.1){\pnode{t1}}
+        \rput(8.0,1.0){\pnode{i1}}
+        \rput(8.0,1.2){\pnode{j1}}
+        \ncline{->}{p0}{p1}
+        \ncline{q0}{q1}
+        \nccurve[angleB=90]{q1}{r1}
+        \nccurve[angleA=-90]{r1}{s1}
+        \ncline{->}{s1}{t1}
+        \rput(2.2,3.8){\makebox(0,0)[lb]{Prozessor schreibt in Output-Port}}
+        \rput(2.2,3.1){\makebox(0,0)[lt]{Prozessor liest Input-Port}}
+        \ncline{->}{i1}{i0}
+        \rput(7.8,1.1){\makebox(0,0)[rb]{externes Gerät ruft Interrupt auf}}
+      \end{pspicture}
+    \end{pdfpic}
+  \end{center}
+
+\end{frame}
+
+\subsection{Interrupts}
+\subsection{volatile-Variable}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \begin{lstlisting}
+    volatile uint16_t mleft_counter;
+
+    /* ... */
+
+    volatile uint16_t mleft_dist;
+
+    /* ... */
+
+    ISR (INT0_vect)
+    {
+      mleft_dist++;
+      mleft_counter++;
+      /* ... */
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(1.6,5.2){\vector(-1,-1){0.55}}
+    \put(1.6,5.2){\vector(-1,1){0.55}}
+    \put(1.6,5.2){\makebox(0,0)[l]{"`Immer lesen und schreiben. Nicht wegoptimieren."'}}
+  \end{picture}
+  \vspace{-3cm}
+  \begin{lstlisting}
+                                        int main (void)
+                                        {
+                                          int prev_mleft_dist = mleft_dist;
+                                          while (mleft_dist == prev_mleft_dist)
+                                            /* just wait */;
+                                        }
+  \end{lstlisting}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \vspace*{-1.2cm}
+  \strut\hfill\makebox(0,0)[tr]{\includegraphics[width=7.5cm]{portb.jpg}}
+
+  \bigskip\bigskip
+
+  \begin{minipage}{4.5cm}
+    \lstinline{PORTA}, \lstinline{PORTB}, \lstinline{DDRA} usw.\
+    sind \lstinline{volatile}-Variable an numerisch vorgegebenen
+    Speicheradressen (z.\,B.\ \lstinline{0x38} für \lstinline{PORTB}).
+  \end{minipage}
+
+\end{frame}
+
+\subsection{Software-Interrupts}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \begin{lstlisting}[style=asm]
+    mov ax, 0012
+    int 10
+  \end{lstlisting}
+  \pause
+  \begin{picture}(0,0)
+    \color{red}
+    \put(2.8,0.95){\vector(-1,0){0.55}}
+    \put(2.9,0.95){\makebox(0,0)[l]{Parameter in Prozessorregister}}
+    \put(1.7,0.50){\vector(-1,0){0.55}}
+    \put(1.8,0.50){\makebox(0,0)[l]{Funktionsaufruf über Interrupt-Vektor}}
+  \end{picture}
+
+  \pause
+  Beispiel: VGA-Grafikkarte
+  \begin{itemize}
+    \item Modus setzen: \lstinline{mov ah, 00}
+    \item Grafikmodus: \lstinline{mov al, 12}
+    \item Textmodus: \lstinline{mov al, 03}
+  \end{itemize}
+
+  \pause
+  \bigskip
+  Verschiedene Farben: Output-Ports
+  \begin{itemize}
+    \item \newterm{Graphics Register\/}: Index \lstinline{03CE}, Daten \lstinline{03CF}
+    \item Index 0: \newterm{Set/Reset Register}
+    \item Index 1: \newterm{Enable Set/Reset Register}
+    \item Index 8: \newterm{Bit Mask Register}
+    \item Jedes Bit steht für Schreibzugriff auf eine Speicherbank.
+    \item 4 Speicherbänke \textarrow\ 16 Farben
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+  \showsubsubsection
+
+  Eine Zahl geht über mehrere Speicherzellen.\\
+  Beispiel: 16-Bit-Zahl in 2 8-Bit-Speicherzellen
+
+  \smallskip
+
+  Welche Bits liegen wo?
+
+  \pause
+  \bigskip
+
+  $1027 = 1024 + 2 + 1 = 0000\,0100\,0000\,0011_2 = 0403_{16}$
+
+  \pause
+  \bigskip
+  Speicherzellen:
+
+  \medskip
+  \begin{tabular}{|c|c|l}\cline{1-2}
+    \raisebox{-0.25ex}{04} & \raisebox{-0.25ex}{03} & \strut Big-Endian "`großes Ende zuerst"' \\\cline{1-2}
+    \multicolumn{2}{c}{} & \pause für Menschen leichter lesbar \pause \\
+    \multicolumn{3}{c}{} \\[-5pt]\cline{1-2}
+    \raisebox{-0.25ex}{03} & \raisebox{-0.25ex}{04} & \strut Little-Endian "`kleines Ende zuerst"' \\\cline{1-2}
+    \multicolumn{2}{c}{} & \pause bei Additionen effizienter
+  \end{tabular}
+
+  \pause
+  \medskip
+  \textarrow\ Geschmackssache
+  \pause\\
+  \quad\textbf{\dots\ außer bei Datenaustausch!}
+
+%  \pause
+%  \bigskip
+%
+%  Aber: nicht verwechseln! \qquad $0304_{16} = 772$
+
+\end{frame}
+
+\begin{frame}
+
+  \showsubsection
+  \showsubsubsection
+
+  Eine Zahl geht über mehrere Speicherzellen.\\
+  Beispiel: 16-Bit-Zahl in 2 8-Bit-Speicherzellen
+
+  \smallskip
+
+  Welche Bits liegen wo?
+
+  \medskip
+
+  \textarrow\ Geschmackssache\\
+  \textbf{\dots\ außer bei Datenaustausch!}
+
+  \begin{itemize}
+    \item
+      Dateiformate
+    \item
+      Datenübertragung
+  \end{itemize}
+
+\end{frame}
+
+\subsubsection{Dateiformate}
+
+\begin{frame}
+
+  \showsubsection
+  \showsubsubsection
+
+  Audio-Formate: Reihenfolge der Bytes in 16- und 32-Bit-Zahlen
+  \begin{itemize}
+    \item
+      RIFF-WAVE-Dateien (\file{.wav}): Little-Endian
+    \item
+      Au-Dateien (\file{.au}): Big-Endian
+    \pause
+    \item
+      ältere AIFF-Dateien (\file{.aiff}): Big-Endian
+    \item
+      neuere AIFF-Dateien (\file{.aiff}): Little-Endian
+  \end{itemize}
+
+  \pause
+  \bigskip
+
+  Grafik-Formate: Reihenfolge der Bits in den Bytes
+  \begin{itemize}
+    \item
+      PBM-Dateien: Big-Endian\only<4->{, MSB first}
+    \item
+      XBM-Dateien: Little-Endian\only<4->{, LSB first}
+  \end{itemize}
+  \only<4->{MSB/LSB = most/least significant bit}
+
+\end{frame}
+
+\subsubsection{Datenübertragung}
+
+\begin{frame}
+
+  \showsubsection
+  \showsubsubsection
+
+  \begin{itemize}
+    \item
+      RS-232 (serielle Schnittstelle): LSB first
+    \item
+      I$^2$C: MSB first
+    \item
+      USB: beides
+    \pause
+    \medskip
+    \item
+      Ethernet: LSB first
+    \item
+      TCP/IP (Internet): Big-Endian
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Speicherausrichtung -- Alignment}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  \pause
+
+  \begin{lstlisting}
+    #include <stdint.h>
+
+    uint8_t a;
+    uint16_t b;
+    uint8_t c;
+  \end{lstlisting}
+
+  \pause
+  \bigskip
+
+  Speicheradresse durch 2 teilbar -- "`16-Bit-Alignment"'
+  \begin{itemize}
+    \item
+      2-Byte-Operation: effizienter
+    \pause
+    \item
+      \dots\ oder sogar nur dann erlaubt
+    \pause
+    \arrowitem
+      Compiler optimiert Speicherausrichtung
+  \end{itemize}
+
+  \medskip
+
+  \pause
+  \begin{minipage}{3cm}
+    \begin{lstlisting}[gobble=6]
+      uint8_t a;
+      uint8_t dummy;
+      uint16_t b;
+      uint8_t c;
+    \end{lstlisting}
+  \end{minipage}
+  \pause
+  \begin{minipage}{3cm}
+    \begin{lstlisting}[gobble=6]
+      uint8_t a;
+      uint8_t c;
+      uint16_t b;
+    \end{lstlisting}
+  \end{minipage}
+
+  \pause
+  \vspace{-1.75cm}
+  \strut\hfill
+  \begin{minipage}{6.5cm}
+    Fazit:
+    \begin{itemize}
+      \item
+        Adressen von Variablen\\
+        sind systemabhängig
+      \pause
+      \item
+        Bei Definition von Datenformaten\\
+        Alignment beachten \textarrow\ effizienter
+    \end{itemize}
+  \end{minipage}
+
+\end{frame}
+
+\sectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+    \item[\textbf{2}] \textbf{Einführung in C}
+    \item[\textbf{3}] \textbf{Bibliotheken}
+    \item[\textbf{4}] \textbf{Algorithmen}
+    \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
+      \begin{itemize}
+        \vspace*{-5pt}
+        \item[\dots]
+        \item[5.4] volatile-Variable
+        \color{medgreen}
+        \item[5.5] Software-Interrupts
+        \item[5.6] Byte-Reihenfolge -- Endianness
+        \item[5.6] Speicherausrichtung -- Alignment
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+      \begin{itemize}
+        \color{red}
+        \item[6.1] Konzepte und Ziele
+        \item[6.2] Beispiel: Zahlen und Buchstaben
+        \item[6.3] Einführung in C++
+      \end{itemize}
+    \item[\textbf{7}] \textbf{Ergänzungen und Ausblicke}
+  \end{itemize}
+
+\end{frame}
+
+\setcounter{section}{5}
+\section{Objektorientierte Programmierung}
+\subsection{Konzepte und Ziele}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Array: feste Anzahl von Elementen desselben Typs (z.\,B.: 3 Zeiger)
+    \item
+      Dynamisches Array: variable Anzahl von Elementen desselben Typs
+    \item
+      Problem: Elemente unterschiedlichen Typs
+    \item
+      Lösung: den Typ des Elements zusätzlich speichern
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Problem: Elemente unterschiedlichen Typs
+    \item
+      Lösung: den Typ des Elements zusätzlich speichern
+  \end{itemize}
+
+  \begin{itemize}
+    \item
+      Zeiger auf verschiedene Strukturen\\
+      mit einem gemeinsamen Anteil von Datenfeldern\\
+      \textarrow\ "`verwandte"' \newterm{Objekte}, \newterm{Klassen} von Objekten
+    \item
+      Struktur, die \emph{nur\/} den gemeinsamen Anteil enthält\\
+      \textarrow\ "`Vorfahr"', \newterm{Basisklasse}, \newterm{Vererbung}
+    \item
+      Explizite Typumwandlung eines Zeigers auf die Basisklasse\\
+      in einen Zeiger auf die \newterm{abgeleitete Klasse}\\
+      \textarrow\ Man kann ein Array unterschiedlicher Objekte\\
+      \strut\phantom{\textarrow} in einer Schleife abarbeiten.\\
+      \textarrow\ \newterm{Polymorphie}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \newterm{Objekte}, \newterm{Klassen}, \newterm{Basisklassen}, \newterm{abgeleitete Klassen}
+    \item
+      \newterm{Vererbung}, \newterm{Polymorphie}
+  \end{itemize}
+
+  \begin{itemize}
+    \item
+      Funktionen, die mit dem Objekt arbeiten: \newterm{Methoden}
+    \item
+      Aufgerufene Funktion hängt vom Typ des Objekts ab:
+      \newterm{virtuelle Methode}
+    \item
+      Realisierung über Zeiger, die im Objekt gespeichert sind\\
+      (Genaugenommen: Tabelle von Zeigern)
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Beispiel: Zahlen und Buchstaben}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \begin{center}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+        } t_base;
+      \end{lstlisting}
+    \end{minipage}\\[0.5cm]
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          int content;
+        } t_integer;
+      \end{lstlisting}
+    \end{minipage}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          char *content;
+        } t_string;
+      \end{lstlisting}
+    \end{minipage}
+  \end{center}
+  
+\end{frame}
+
+\begin{frame}[fragile]
+  \begin{center}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+        } t_base;
+      \end{lstlisting}
+    \end{minipage}\\[0.5cm]
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          int content;
+        } t_integer;
+      \end{lstlisting}
+    \end{minipage}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          char *content;
+        } t_string;
+      \end{lstlisting}
+    \end{minipage}\\[0.7cm]
+    \begin{minipage}{8cm}
+      \begin{lstlisting}[gobble=8]
+        t_integer i = { 1, 42 };
+        t_string s = { 2, "Hello, world!" };
+
+        t_base *object[] = { (t_base *) &i, (t_base *) &s };
+      \end{lstlisting}
+    \end{minipage}%
+    \begin{picture}(0,0)
+      \color{red}
+      \put(-5.4,-0.8){\mbox{$\underbrace{\rule{1.45cm}{0pt}}_{\shortstack{\strut explizite\\Typumwandlung}}$}}
+    \end{picture}
+  \end{center}
+  
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Weitere Beispiele:
+  \begin{itemize}
+    \item
+      Editor für graphische Objekte
+    \item
+      Datenbank-Software
+    \item
+      graphische Benutzeroberfläche (GUI)
+  \end{itemize}
+  
+\end{frame}
+
+\subsection{Einführung in C++}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{center}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+        } t_base;
+      \end{lstlisting}
+    \end{minipage}\\[0.5cm]
+    \begin{minipage}{6cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          int content;
+        } t_integer;
+      \end{lstlisting}
+    \end{minipage}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        typedef struct
+        {
+          int type;
+          char *content;
+        } t_string;
+      \end{lstlisting}
+    \end{minipage}
+  \end{center}
+  
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{center}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        struct TBase
+        {
+        };
+        ¡¿
+      \end{lstlisting}
+    \end{minipage}\\[0.5cm]
+    \begin{minipage}{6cm}
+      \begin{lstlisting}[gobble=8]
+        struct TInteger: public TBase
+        {
+          int content;
+        };
+      \end{lstlisting}
+    \end{minipage}
+    \begin{minipage}{5cm}
+      \begin{lstlisting}[gobble=8]
+        struct TString: public TBase
+        {
+          char *content;
+        };
+      \end{lstlisting}
+    \end{minipage}
+  \end{center}
+  
+\end{frame}
+
+\sectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+    \item[\textbf{2}] \textbf{Einführung in C}
+    \item[\textbf{3}] \textbf{Bibliotheken}
+    \item[\textbf{4}] \textbf{Algorithmen}
+    \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
+      \begin{itemize}
+        \vspace*{-5pt}
+        \item[\dots]
+        \item[5.4] volatile-Variable
+        \color{medgreen}
+        \item[5.5] Software-Interrupts
+        \item[5.6] Byte-Reihenfolge -- Endianness
+        \item[5.6] Speicherausrichtung -- Alignment
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+      \begin{itemize}
+        \color{medgreen}
+        \item[6.1] Konzepte und Ziele
+        \item[6.2] Beispiel: Zahlen und Buchstaben
+        \item[6.3] Einführung in C++
+      \end{itemize}
+    \item[\textbf{7}] \textbf{Ergänzungen und Ausblicke}
+  \end{itemize}
+
+\end{frame}
+
+\end{document}
diff --git a/20160114/ainf-uebung-20160114.pdf b/20160114/ainf-uebung-20160114.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6e815e4a781b71e6f24760fd80f8687c0ffd8c5b
Binary files /dev/null and b/20160114/ainf-uebung-20160114.pdf differ
diff --git a/20160114/ainf-uebung-20160114.tex b/20160114/ainf-uebung-20160114.tex
new file mode 100644
index 0000000000000000000000000000000000000000..ccdc8fa2aee1fd502dafcb61b4db340314bcee8d
--- /dev/null
+++ b/20160114/ainf-uebung-20160114.tex
@@ -0,0 +1,163 @@
+% ainf-uebung-20160114.pdf - Exercises on Applied Computer Sciences
+% Copyright (C) 2013, 2015, 2016  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+\documentclass[a4paper]{article}
+
+\usepackage{pgscript}
+\usepackage{enumerate}
+\usepackage{ifthen}
+
+\usepackage{gensymb}
+
+\newcounter{exercise}
+\newcommand{\exercise}[1]{\addtocounter{exercise}{1}\subsection*{Aufgabe \arabic{exercise}: #1}}
+
+\newcounter{points}
+\newcommand{\points}[1]{\ifthenelse{#1=1}{(1 Punkt)}{(#1 Punkte)}\addtocounter{points}{#1}}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+\newcommand{\ITWOC}{I\raisebox{0.5ex}{\normalsize 2}C}
+
+\begin{document}
+
+  \thispagestyle{empty}
+
+  \section*{Angewandte Informatik\\Übungsaufgaben -- 14.\ Januar 2016}
+
+  \exercise{Trickprogrammierung}
+
+  Wir betrachten das folgende Programm \file{hallo.c}:
+  \begin{lstlisting}
+    #include <stdio.h>
+    #include <stdint.h>
+
+    int main (void)
+    {
+      uint64_t x = 4262939000843297096;
+      char *s = &x;
+      printf ("%s\n", s);
+      return 0;
+    }
+  \end{lstlisting}
+  Das Programm wird compiliert und auf einem 64-Bit-Little-Endian-Computer ausgeführt:
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -Wall -O hallo.c -o hallo¿
+    hallo.c: In function `main':
+    hallo.c:7:13: warning: initialization from incompatible pointer type [...]
+    $ ¡./hallo¿
+    Hallo
+  \end{lstlisting}
+
+  \begin{itemize}
+    \item[(a)]
+      Erklären Sie die Warnung beim Compilieren. \points{2}
+    \item[(b)]
+      Erklären Sie die Ausgabe des Programms. \points{4}
+    \item[(c)]
+      Wie würde die Ausgabe des Programms auf einem 64-Bit-Big-Endian-Computer lauten? \points{5}\\
+      Hinweis: Es kann hilfreich sein, für die Umrechnung ein Programm zu schreiben.
+  \end{itemize}
+
+  \exercise{Daten im Speicher}
+
+  Das folgende C-Programm \file{test.c} gibt den Speicherbereich,
+  in dem sich seine Variablen befinden,
+  als eine Folge von 8-Bit-Zahlen aus:
+
+  \begin{lstlisting}
+    #include <stdio.h>
+    #include <stdint.h>
+
+    int16_t a = -1;
+    int32_t b = 8320;
+
+    int main (void)
+    {
+      uint8_t *p = &a;
+      for (int i = 0; i < 8; i++)
+        printf (" %d", p[i]);
+      printf ("\n");
+    }
+  \end{lstlisting}
+
+  Das Programm wird auf einem 32-Bit-Rechner ohne Optimierung compiliert (mit Warnung)
+  und ge\-star\-tet:
+  
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -Wall -O0 -std=c99 test.c -o test¿
+    test.c: In function `main':
+    test.c:9:16: warning: initialization from incompatible pointer type [...]
+    $ ¡./test¿
+     255 255 0 0 128 32 0 0
+  \end{lstlisting}
+
+  \begin{itemize}
+    \item[(a)]
+      Erklären Sie die ausgegebenen Zahlen.
+      \points{4}
+    \item[(b)]
+      Wie würde die Ausgabe auf einem 8-Bit-Rechner lauten und warum?
+      \points{3}
+  \end{itemize}
+
+  \clearpage
+
+  \exercise{Thermometer-Baustein an \ITWOC-Bus}
+
+  Eine Firma stellt einen elektronischen Thermometer-Baustein her,
+  den man über die serielle Schnittstelle (RS-232) an einen PC anschließen kann,
+  um die Temperatur auszulesen.
+  Nun wird eine Variante des Thermo"-meter-Bausteins entwickelt,
+  die die Temperatur zusätzlich über einen \ItwoC-Bus bereitstellt.
+
+  Um das neue Thermometer zu testen, wird es in ein Gefäß mit heißem Wasser gelegt,
+  das langsam auf Zimmertemperatur abkühlt.
+  Alle 10 Minuten liest ein Programm, das auf dem PC läuft,
+  die gemessene Temperatur über beide Schnittstellen aus
+  und erzeugt daraus die folgende Tabelle:
+
+  \begin{center}
+    \renewcommand{\arraystretch}{1.2}
+    \begin{tabular}{|c|c|c|}\hline
+      Zeit /\,min. & Temperatur per RS-232 /\,\degree C & Temperatur per \ItwoC\ /\,\degree C \\\hline\hline
+      \phantom{0}0 & 94 & 122 \\\hline
+      10 & 47 & 244 \\\hline
+      20 & 30 & 120 \\\hline
+      30 & 24 & \phantom{0}24 \\\hline
+      40 & 21 & 168 \\\hline
+    \end{tabular}
+  \end{center}
+
+  \begin{itemize}
+    \item[(a)]
+      Aus dem Vergleich der Meßdaten läßt sich
+      auf einen Fehler bei der \ItwoC-Übertragung schließen.\\
+      Um welchen Fehler handelt es sich,
+      und wie ergibt sich dies aus den Meßdaten?
+      \points{5}
+    \item[(b)]
+      Schreiben Sie eine C-Funktion \lstinline{uint8_t repair (uint8_t data)},
+      die eine über den \ItwoC-Bus empfangene fehlerhafte Temperatur \lstinline{data} korrigiert.
+      \points{5}
+  \end{itemize}
+
+\end{document}
diff --git a/20160114/hallo.c b/20160114/hallo.c
new file mode 100644
index 0000000000000000000000000000000000000000..2afae773ac2d564771ab6dfb473eed664070d3e2
--- /dev/null
+++ b/20160114/hallo.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <stdint.h>
+
+int main (void)
+{
+  uint64_t x = 4262939000843297096;
+  char *s = &x;
+  printf ("%s\n", s);
+  return 0;
+}
diff --git a/20160114/logo-hochschule-bochum-cvh-text.pdf b/20160114/logo-hochschule-bochum-cvh-text.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..a05946126bc0ce6a2818740da2893f59eb0c659c
--- /dev/null
+++ b/20160114/logo-hochschule-bochum-cvh-text.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text.pdf
\ No newline at end of file
diff --git a/20160114/logo-hochschule-bochum.pdf b/20160114/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20160114/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20160114/pgscript.sty b/20160114/pgscript.sty
new file mode 120000
index 0000000000000000000000000000000000000000..95c888478c99ea7fda0fd11ccf669ae91be7178b
--- /dev/null
+++ b/20160114/pgscript.sty
@@ -0,0 +1 @@
+../common/pgscript.sty
\ No newline at end of file
diff --git a/20160114/pgslides.sty b/20160114/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20160114/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20160114/portb.jpg b/20160114/portb.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..6261e6d6baa8f9b0dfa2b4f9bc6325feeecf48f2
--- /dev/null
+++ b/20160114/portb.jpg
@@ -0,0 +1 @@
+../common/portb.jpg
\ No newline at end of file
diff --git a/20160114/test.c b/20160114/test.c
new file mode 100644
index 0000000000000000000000000000000000000000..8ba11e25209827683aac113c41fe6887a608456e
--- /dev/null
+++ b/20160114/test.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <stdint.h>
+
+int16_t a = -1;
+int32_t b = 8320;
+
+int main (void)
+{
+  uint8_t *p = &a;
+  for (int i = 0; i < 8; i++)
+    printf (" %d", p[i]);
+  printf ("\n");
+}
diff --git a/common/portb.jpg b/common/portb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d4dd32ba173da4e555e0cafbc1720bb19b493875
Binary files /dev/null and b/common/portb.jpg differ