diff --git a/20160107/ainf-20160107.pdf b/20160107/ainf-20160107.pdf
index ec620e3f237e648b3fa03f62249cf6996edb5632..8dbfbad6edd99a7831524e8330adaf2113044538 100644
Binary files a/20160107/ainf-20160107.pdf and b/20160107/ainf-20160107.pdf differ
diff --git a/20160107/ainf-20160107.tex b/20160107/ainf-20160107.tex
index f53dc46b539f1507647757475c9a7e46a4b14eb1..8f53a9ac78e63172869121ec334ab7c152d17f22 100644
--- a/20160107/ainf-20160107.tex
+++ b/20160107/ainf-20160107.tex
@@ -1,5 +1,5 @@
-% ainf-20151217.pdf - Lecture Slides on Applied Computer Sciences
-% Copyright (C) 2012, 2013, 2015  Peter Gerwinski
+% ainf-20160107.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
@@ -43,7 +43,7 @@
 
 \title{Angewandte Informatik}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{17.\ Dezember 2015}
+\date{7.\ Januar 2016}
 
 \begin{document}
 
@@ -66,21 +66,21 @@
         \item[4.3] Stack und FIFO
         \color{red}
         \item[4.4] Aufwandsabschätzungen
+        \item[4.4] Dynamische Speicherverwaltung
       \end{itemize}
     \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
       \begin{itemize}
-        \item[5.1] Bit-Operationen
-        \item[5.2] I/O-Ports
-        \item[5.3] Interrupts
+        \vspace*{-5pt}
+        \item[\dots]
         \color{medgreen}
         \item[5.4] volatile-Variable
         \color{black}
         \item[5.5] Software-Interrupts
-        \item[\dots]
+        \item[5.6] Byte-Reihenfolge -- Endianness
+        \item[5.6] Speicherausrichtung -- Alignment
       \end{itemize}
-    \color{gray}
-    \item[\makebox(0,0){\textbf{\raisebox{0.5ex}{\dots}}}]
-%    \item[\textbf{6}] \textbf{Ergänzungen und Ausblicke}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+    \item[\textbf{7}] \textbf{Ergänzungen und Ausblicke}
   \end{itemize}
 
 \end{frame}
@@ -262,6 +262,23 @@
 
 \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}
+
 \iffalse
 
 \subsection{Software-Interrupts}
@@ -375,8 +392,109 @@
 
 \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}
+
+\iffalse
+
+\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}
+
 \sectionnonumber{\inserttitle}
 
+\fi
+
 \begin{frame}
 
   \showsectionnonumber
@@ -392,18 +510,19 @@
         \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
         \item[5.5] Software-Interrupts
         \item[5.6] Byte-Reihenfolge -- Endianness
         \item[5.6] Speicherausrichtung -- Alignment
       \end{itemize}
-    \color{gray}
-    \item[\makebox(0,0){\textbf{\raisebox{0.5ex}{\dots}}}]
-%    \item[\textbf{6}] \textbf{Ergänzungen und Ausblicke}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+    \item[\textbf{7}] \textbf{Ergänzungen und Ausblicke}
   \end{itemize}
 
 \end{frame}
diff --git a/20160107/ainf-uebung-20160107.pdf b/20160107/ainf-uebung-20160107.pdf
index d047aee3882dfcd11497921877a8a75ce397fec2..6ee7b0f4b55719760505d9c51e9dad00c47d2861 100644
Binary files a/20160107/ainf-uebung-20160107.pdf and b/20160107/ainf-uebung-20160107.pdf differ
diff --git a/20160107/ainf-uebung-20160107.tex b/20160107/ainf-uebung-20160107.tex
index eb79ba6cf2a9a460253b89a7c637b5a54b44c8d0..aa1f1e71f5ba3249307fcd0eac522c951dc2a571 100644
--- a/20160107/ainf-uebung-20160107.tex
+++ b/20160107/ainf-uebung-20160107.tex
@@ -117,4 +117,52 @@
       \points{1}
   \end{itemize}
 
+  \clearpage
+
+  \exercise{Dynamisches Bit-Array}
+
+  Schreiben Sie die folgenden Funktionen zur Verwaltung eines dynamischen Bit-Arrays:
+  \begin{itemize}
+    \item
+      \lstinline{void bit_array_init (int n)}\\
+      Das Array initialisieren, so daß man \lstinline{n} Bits darin speichern kann.\\
+      Die Array-Größe \lstinline{n} ist keine Konstante, sondern erst im laufenden Programm bekannt.\\
+      Die Bits sollen auf den Anfangswert 0 initialisiert werden.
+    \item
+      \lstinline{void bit_array_set (int i, int value)}\\
+      Das Bit mit dem Index \lstinline{i} auf den Wert \lstinline{value} setzen.\\
+      Der Index \lstinline{i} darf von \lstinline{0} bis \lstinline{n - 1} gehen;
+      der Wert \lstinline{value} darf 1 oder 0 sein.
+    \item
+      \lstinline{void bit_array_flip (int i)}\\
+      Das Bit mit dem Index \lstinline{i} auf den entgegengesetzten Wert setzen,\\
+      also auf 1, wenn er vorher 0 ist, bzw.\ auf 0, wenn er vorher 1 ist.\\
+      Der Index \lstinline{i} darf von \lstinline{0} bis \lstinline{n - 1} gehen.
+    \item
+      \lstinline{int bit_array_get (int i)}\\
+      Den Wert des Bit mit dem Index \lstinline{i} zurückliefern.\\
+      Der Index \lstinline{i} darf von \lstinline{0} bis \lstinline{n - 1} gehen.
+    \item
+      \lstinline{void bit_array_resize (int new_n)}\\
+      Die Größe des Arrays auf \lstinline{new_n} Bits ändern.\\
+      Dabei soll der Inhalt des Arrays, soweit er in die neue Größe paßt, erhalten bleiben.\\
+      Neu hinzukommende Bits sollen auf 0 initialisiert werden.
+    \item
+      \lstinline{void bit_array_done (void)}\\
+      Den vom Array belegten Speicherplatz wieder freigeben.
+  \end{itemize}
+  Bei Bedarf dürfen Sie den Funktionen zusätzliche Parameter mitgeben,
+  beispielsweise um mehrere Arrays parallel verwalten zu können.
+  (In der objektorientierten Programmierung wäre dies der implizite Parameter \lstinline{this},
+  der auf die Objekt-Struktur zeigt.)
+
+  Die Bits sollen möglichst effizient gespeichert werden,
+  z.\,B.\ jeweils 8 Bits in einer \lstinline{uint8_t}-Variablen.
+
+  Die Funktionen sollen möglichst robust sein,
+  d.\,h.\ das Programm darf auch bei unsinnigen Parameterwerten nicht abstürzen,
+  sondern soll eine Fehlermeldung ausgeben.
+
+  \points{14}
+
 \end{document}
diff --git a/20160107/portb.jpg b/20160107/portb.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d4dd32ba173da4e555e0cafbc1720bb19b493875
Binary files /dev/null and b/20160107/portb.jpg differ
diff --git a/script/ainf-2015ws.pdf b/script/ainf-2015ws.pdf
index 73182d612dfe6f323d9f23af9121592bd501c8ea..b2bacd2c41088e2064e47aec7ba8959c9568a1ab 100644
Binary files a/script/ainf-2015ws.pdf and b/script/ainf-2015ws.pdf differ