diff --git a/20210114/aufgabe-3.c b/20210114/aufgabe-3.c
index 4c95eb6ad4881c904448309c6b7c46fa101cc109..9ae72941b931c04f3c380cb3bbcd64bec7f08c20 100644
--- a/20210114/aufgabe-3.c
+++ b/20210114/aufgabe-3.c
@@ -1,33 +1,18 @@
-#include <stdint.h>
-#include <avr/io.h>
-#include <avr/interrupt.h>
+#include <stdio.h>
+#include <string.h>
 
-uint8_t counter = 1;
-uint8_t leds = 0;
-
-ISR (TIMER0_COMP_vect)
-{
-  if (counter == 0)
-    {
-      leds = (leds + 1) % 8;
-      PORTC = leds << 4;
-    }
-  counter++;
-}
-
-void init (void)
+void insert_into_string (char src, char *target, int pos)
 {
-  cli ();
-  TCCR0 = (1 << CS01) | (1 << CS00);
-  TIMSK = 1 << OCIE0;
-  sei ();
-  DDRC = 0x70;
+  int len = strlen (target);
+  for (int i = pos; i < len; i++)
+    target[i+1] = target[i];
+  target[pos] = src;
 }
 
 int main (void)
 {
-  init ();
-  while (1)
-    ; /* do nothing */
+  char test[100] = "Hochshule Bochum";
+  insert_into_string ('c', test, 5);
+  printf ("%s\n", test);
   return 0;
 }
diff --git a/20210114/hp-uebung-20210114.pdf b/20210114/hp-uebung-20210114.pdf
index 0ae342976a00e5c500c3c9a39d463bd4650869f9..785187e80cc5dd88b94bb022298fd377113c2202 100644
Binary files a/20210114/hp-uebung-20210114.pdf and b/20210114/hp-uebung-20210114.pdf differ
diff --git a/20210114/hp-uebung-20210114.tex b/20210114/hp-uebung-20210114.tex
index eb358f56632229ddaa946ea6b758195c0785c8dc..952f3ed10fd5e8a8a2565351c1c14c176e92462b 100644
--- a/20210114/hp-uebung-20210114.tex
+++ b/20210114/hp-uebung-20210114.tex
@@ -20,7 +20,7 @@
 % Attribution-ShareAlike 3.0 Unported License along with this
 % document.  If not, see <http://creativecommons.org/licenses/>.
 
-% README: Zahlensysteme, Mikrocontroller, LED-Blinkmuster
+% README: Zahlensysteme, Mikrocontroller, Einfügen in Strings (Ergänzung)
 
 \documentclass[a4paper]{article}
 
@@ -161,6 +161,100 @@
     \end{itemize}
   \end{minipage}
 
+  \exercise{Einfügen in Strings (Ergänzung)}
+
+  Diese Aufgabe ist eine Ergänzung von Aufgabe 2 der Übung vom 10.\ Dezember
+  2020 um die Teilaufgaben (e), (f) und (g). Für den "`Klausur-Modus"' können
+  Sie die Teilaufgaben (a) bis (d) als "`bereits gelöst"' voraussetzen.
+
+  Wir betrachten das folgende Programm (\gitfile{hp}{2020ws/20210114}{aufgabe-3.c}):
+%  \begin{lstlisting}[style=numbered]
+  \begin{lstlisting}
+    #include <stdio.h>
+    #include <string.h>
+
+    void insert_into_string (char src, char *target, int pos)
+    {
+      int len = strlen (target);
+      for (int i = pos; i < len; i++)
+        target[i+1] = target[i];
+      target[pos] = src;
+    }
+
+    int main (void)
+    {
+      char test[100] = "Hochshule Bochum";
+      insert_into_string ('c', test, 5);
+      printf ("%s\n", test);
+      return 0;
+    }
+  \end{lstlisting}
+  Die Ausgabe des Programms lautet:
+  \lstinline[style=terminal]{Hochschhhhhhhhhhh}
+
+  \begin{enumerate}[\quad(a)]
+    \item
+      Erklären Sie, wie die Ausgabe zustandekommt.
+%      \points{3}
+%      \workspace{12}
+    \item
+      Schreiben Sie die Funktion \lstinline|insert_into_string()| so um,
+      daß sie den Buchstaben \lstinline{src} an der Stelle \lstinline{pos}
+      in den String \lstinline{target} einfügt.\par
+      Die Ausgabe des Programms müßte dann
+      \lstinline[style=terminal]{Hochschule Bochum} lauten.
+%      \points{2}
+%      \workspace{13}
+    \item
+      Was kann passieren, wenn Sie die Zeile
+      \lstinline{char test[100] = "Hochshule Bochum";}\\
+      durch
+      \lstinline{char test[] = "Hochshule Bochum";} ersetzen?
+      Begründen Sie Ihre Antwort.
+%      \points{2}
+%      \workspace{10}
+    \item
+      Was kann passieren, wenn Sie die Zeile
+      \lstinline{char test[100] = "Hochshule Bochum";}\\
+      durch
+      \lstinline{char *test = "Hochshule Bochum";} ersetzen?
+      Begründen Sie Ihre Antwort.
+%      \points{2}
+%      \workspace{10}
+    \item
+      Schreiben Sie eine Funktion
+      \lstinline{void insert_into_string_sorted (char src, char *target)},
+      die voraussetzt, daß der String \lstinline{target} alphabetisch sortiert ist
+      und den Buchstaben \lstinline{src} an der alphabetisch richtigen Stelle
+      einfügt. Diese Funktion darf die bereits vorhandene Funktion
+      \lstinline|insert_into_string()| aufrufen.\\
+      \points{4}\par
+      Zum Testen eignen sich die folgenden Zeilen im Hauptprogramm:
+      \begin{lstlisting}[gobble=8]
+        char test[100] = "";
+        insert_into_string_sorted ('c', test);
+        insert_into_string_sorted ('a', test);
+        insert_into_string_sorted ('d', test);
+        insert_into_string_sorted ('b', test);
+      \end{lstlisting}
+      Danach sollte \lstinline{test[]} die Zeichenfolge \lstinline{"abcd"} enthalten.
+%      \workspace{14}
+    \item
+      Wie schnell (Landau-Symbol in Abhängigkeit von der Länge $n$ des Strings)
+      arbeitet Ihre Funktion
+      \lstinline{void insert_into_string_sorted (char src, char *target)}?
+      Begründen Sie Ihre Antwort.
+      \points{1}
+%      \workspace{10}
+    \item
+      Beschreiben Sie -- in Worten oder als C-Quelltext --, wie man die Funktion\\
+      \lstinline{void insert_into_string_sorted (char src, char *target)}
+      so gestalten kann,\\
+      daß sie in $\mathcal{O}(\log n)$ arbeitet.
+      \points{3}
+%      \workspace{35}
+  \end{enumerate}
+
   \begin{flushright}
     \textit{Viel Erfolg!}
   \end{flushright}