diff --git a/20200109/loesung-1-1.c b/20200109/loesung-1-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..175923f7250d0747a21df5f33f8a3761393d1d7f
--- /dev/null
+++ b/20200109/loesung-1-1.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdint.h>
+
+typedef struct
+{
+  uint32_t a;
+  uint64_t b;
+  uint8_t c;
+} three_numbers;
+
+int main (void)
+{
+  three_numbers xyz = { 1819042120, 2410670883059281007, 0 };
+  printf ("%x %x %x\n", xyz.a, xyz.b, xyz.c);
+  printf ("%08x %016x %02x\n", xyz.a, xyz.b, xyz.c);
+  printf ("%s\n", &xyz);
+  return 0;
+}
diff --git a/20200109/loesung-1-2.c b/20200109/loesung-1-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..07ca06832cc58c1b8243f9afd05aec57bb12b1c4
--- /dev/null
+++ b/20200109/loesung-1-2.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdint.h>
+
+typedef struct
+{
+  uint32_t a;
+  uint64_t b;
+  uint8_t c;
+} three_numbers;
+
+int main (void)
+{
+  three_numbers xyz = { 1819042120, 2410670883059281007, 0 };
+  printf ("%x %lx %x\n", xyz.a, xyz.b, xyz.c);
+  printf ("%08x %016lx %02x\n", xyz.a, xyz.b, xyz.c);
+  printf ("%s\n", &xyz);
+  return 0;
+}
diff --git a/20200109/loesung-3-1.c b/20200109/loesung-3-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..416c5dfa2cba2f7dc68b72551ec6a5c8ce8bab79
--- /dev/null
+++ b/20200109/loesung-3-1.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <string.h>
+
+typedef struct
+{
+  char first_name[10];
+  char family_name[20];
+  char day, month;
+  int year;
+} person;
+
+int main (void)
+{
+  person sls;
+  strcpy (sls.first_name, "Sabine");
+  strcpy (sls.family_name, "Leutheusser-Schnarrenberger");
+  sls.day = 26;
+  sls.month = 7;
+  sls.year = 1951;
+  printf ("%s %s wurde am %d.%d.%d geboren.\n",
+          sls.first_name, sls.family_name, sls.day, sls.month, sls.year);
+  return 0;
+}
diff --git a/20200109/loesung-3-2.c b/20200109/loesung-3-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..825373e61475ebc67e9cac6929b6e004715a7cad
--- /dev/null
+++ b/20200109/loesung-3-2.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <string.h>
+
+typedef struct
+{
+  char first_name[10];
+  char family_name[20];
+  char day, month;
+  int year;
+} person;
+
+int main (void)
+{
+  person sls;
+  sls.day = 26;
+  sls.month = 7;
+  sls.year = 1951;
+  strncpy (sls.first_name, "Sabine", 10);
+  strncpy (sls.family_name, "Leutheusser-Schnarrenberger", 20);
+  printf ("%s %s wurde am %d.%d.%d geboren.\n",
+          sls.first_name, sls.family_name, sls.day, sls.month, sls.year);
+  return 0;
+}
diff --git a/20200109/loesung-3-3.c b/20200109/loesung-3-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..7a4b1bfaf9e67a164ee865a0ae4ef69606255de0
--- /dev/null
+++ b/20200109/loesung-3-3.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <string.h>
+
+typedef struct
+{
+  char first_name[10];
+  char family_name[20];
+  char day, month;
+  int year;
+} person;
+
+int main (void)
+{
+  person sls;
+  sls.day = 26;
+  sls.month = 7;
+  sls.year = 1951;
+  strncpy (sls.first_name, "Sabine", 9);
+  strncpy (sls.family_name, "Leutheusser-Schnarrenberger", 19);
+  printf ("%s %s wurde am %d.%d.%d geboren.\n",
+          sls.first_name, sls.family_name, sls.day, sls.month, sls.year);
+  return 0;
+}
diff --git a/20200109/loesung-3-4.c b/20200109/loesung-3-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..3c635dfa7e3923eb678469166bf218e1640927a2
--- /dev/null
+++ b/20200109/loesung-3-4.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <string.h>
+
+typedef struct
+{
+  char first_name[10];
+  char family_name[20];
+  char day, month;
+  int year;
+} person;
+
+int main (void)
+{
+  person sls;
+  sls.day = 26;
+  sls.month = 7;
+  sls.year = 1951;
+  strncpy (sls.first_name, "Sabine", 9);
+  sls.first_name[9] = 0;
+  strncpy (sls.family_name, "Leutheusser-Schnarrenberger", 19);
+  sls.family_name[19] = 0;
+  printf ("%s %s wurde am %d.%d.%d geboren.\n",
+          sls.first_name, sls.family_name, sls.day, sls.month, sls.year);
+  return 0;
+}
diff --git a/exams/20170206/loesung-4.c b/exams/20170206/loesung-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..8d41f9154e197d711212efbb20d49603ac7ba7e3
--- /dev/null
+++ b/exams/20170206/loesung-4.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <errno.h>
+#include <error.h>
+
+/* Die Aufgabe besteht darin, die Funktionen pbm_open(),
+ * pbm_line() und pbm_close() zu schreiben.
+ */
+
+int pbm_width = 0;
+int pbm_height = 0;
+FILE *pbm_file;  /* globale Variable für die PBM-Datei */
+
+void pbm_open (int width, int height, char *filename)
+{
+  pbm_file = fopen (filename, "w");
+  if (!pbm_file)
+    error (errno, errno, "cannot open file %s for writing", filename);
+  pbm_width = width;
+  pbm_height = height;
+  fprintf (pbm_file, "P4\n%d %d\n", pbm_width, pbm_height);
+}
+
+void pbm_line (char *line)
+{
+  int pbm_bytes = (pbm_width + 7) / 8;   /* benötigte Bytes pro Zeile (immer aufrunden) */
+  uint8_t buffer[pbm_bytes];
+  for (int i = 0; i < pbm_bytes; i++)   /* Puffer auf 0 initialisieren */
+    buffer[i] = 0;
+  for (int x = 0; line[x]; x++)
+    {
+      int i = x / 8;  /* In welches Byte des Puffers gehört dieses Pixel? */
+      int b = x % 8;  /* Welches Bit innerhalb des Bytes ist dieses Pixel? */
+      if (line[x] != ' ')   /* Kein Leerzeichen --> Bit auf 1 setzen */
+        buffer[i] |= 0x80 >> b;  /* MSB first. LSB first wäre 1 << b. */
+    }
+  for (int i = 0; i < pbm_bytes; i++)   /* Puffer in Datei ausgeben */
+    fprintf (pbm_file, "%c", buffer[i]);
+}
+
+void pbm_close (void)
+{
+  fclose (pbm_file);
+}
+
+int main (void)
+{
+  pbm_open (14, 14, "test.pbm");
+  pbm_line ("              ");
+  pbm_line ("    XXXXXX    ");
+  pbm_line ("   X      X   ");
+  pbm_line ("  X        X  ");
+  pbm_line (" X          X ");
+  pbm_line (" X  XX  XX  X ");
+  pbm_line (" X   X   X  X ");
+  pbm_line (" X          X ");
+  pbm_line (" X X      X X ");
+  pbm_line (" X  X    X  X ");
+  pbm_line ("  X  XXXX  X  ");
+  pbm_line ("   X      X   ");
+  pbm_line ("    XXXXXX    ");
+  pbm_line ("              ");
+  pbm_close ();
+  return 0;
+}
diff --git a/exams/20170206/loesung-4f.c b/exams/20170206/loesung-4f.c
new file mode 100644
index 0000000000000000000000000000000000000000..652a63189bacbb48e851c3f991a4c2f86dff60d8
--- /dev/null
+++ b/exams/20170206/loesung-4f.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <errno.h>
+#include <error.h>
+
+/* Die Aufgabe besteht darin, die Funktionen pbm_open(),
+ * pbm_line() und pbm_close() zu schreiben.
+ */
+
+int pbm_width = 0;
+int pbm_height = 0;
+FILE *pbm_file;  /* globale Variable für die PBM-Datei */
+
+void pbm_open (int width, int height, char *filename)
+{
+  pbm_file = fopen (filename, "w");
+  if (!pbm_file)
+    error (errno, errno, "cannot open file %s for writing", filename);
+  pbm_width = width;
+  pbm_height = height;
+  fprintf (pbm_file, "P4\n%d %d\n", pbm_width, pbm_height);
+}
+
+void pbm_line (char *line)
+{
+  int pbm_bytes = (pbm_width + 7) / 8;   /* benötigte Bytes pro Zeile (immer aufrunden) */
+  uint8_t buffer[pbm_bytes];
+  for (int i = 0; i < pbm_bytes; i++)   /* Puffer auf 0 initialisieren */
+    buffer[i] = 0;
+  for (int x = 0; line[x]; x++)
+    {
+      int i = x / 8;  /* In welches Byte des Puffers gehört dieses Pixel? */
+      int b = x % 8;  /* Welches Bit innerhalb des Bytes ist dieses Pixel? */
+      if (line[x] != ' ')   /* Kein Leerzeichen --> Bit auf 1 setzen */
+        buffer[i] |= 1 << b;
+    }
+  for (int i = 0; i < pbm_bytes; i++)   /* Puffer in Datei ausgeben */
+    fprintf (pbm_file, "%c", buffer[i]);
+}
+
+void pbm_close (void)
+{
+  fclose (pbm_file);
+}
+
+int main (void)
+{
+  pbm_open (14, 14, "test.pbm");
+  pbm_line ("              ");
+  pbm_line ("    XXXXXX    ");
+  pbm_line ("   X      X   ");
+  pbm_line ("  X        X  ");
+  pbm_line (" X          X ");
+  pbm_line (" X  XX  XX  X ");
+  pbm_line (" X   X   X  X ");
+  pbm_line (" X          X ");
+  pbm_line (" X X      X X ");
+  pbm_line (" X  X    X  X ");
+  pbm_line ("  X  XXXX  X  ");
+  pbm_line ("   X      X   ");
+  pbm_line ("    XXXXXX    ");
+  pbm_line ("              ");
+  pbm_close ();
+  return 0;
+}