From afb47a1dd898b593df2db2a6d2d1f0121fdea375 Mon Sep 17 00:00:00 2001
From: Peter Gerwinski <peter.gerwinski@hs-bochum.de>
Date: Mon, 28 Jan 2019 18:03:27 +0100
Subject: [PATCH] Beispielprogramme 28.1.2019

---
 20190128/aufgabe-3-20160129.c   | 31 +++++++++++++++
 20190128/aufgabe-3-20170206.c   | 33 ++++++++++++++++
 20190128/loesung-3-20160129-1.c | 29 ++++++++++++++
 20190128/loesung-3-20160129-2.c | 44 +++++++++++++++++++++
 20190128/loesung-3-20160129-3.c | 44 +++++++++++++++++++++
 20190128/loesung-3-20160129-4.c | 65 +++++++++++++++++++++++++++++++
 20190128/loesung-3-20160129-5.c | 68 +++++++++++++++++++++++++++++++++
 20190128/loesung-3-20160129-6.c | 68 +++++++++++++++++++++++++++++++++
 20190128/loesung-3-20160129-7.c | 68 +++++++++++++++++++++++++++++++++
 20190128/loesung-3-20170206-1.c | 31 +++++++++++++++
 20190128/loesung-3-20170206-2.c | 41 ++++++++++++++++++++
 20190128/loesung-3-20170206-3.c | 41 ++++++++++++++++++++
 20190128/loesung-3-20170206-4.c | 42 ++++++++++++++++++++
 20190128/loesung-3-20170206-5.c | 45 ++++++++++++++++++++++
 20190128/loesung-3-20170206-6.c | 45 ++++++++++++++++++++++
 20190128/loesung-3-20170206-7.c | 47 +++++++++++++++++++++++
 20190128/loesung-3-20170206-8.c | 47 +++++++++++++++++++++++
 20190128/loesung-3-20170206-9.c | 45 ++++++++++++++++++++++
 18 files changed, 834 insertions(+)
 create mode 100644 20190128/aufgabe-3-20160129.c
 create mode 100644 20190128/aufgabe-3-20170206.c
 create mode 100644 20190128/loesung-3-20160129-1.c
 create mode 100644 20190128/loesung-3-20160129-2.c
 create mode 100644 20190128/loesung-3-20160129-3.c
 create mode 100644 20190128/loesung-3-20160129-4.c
 create mode 100644 20190128/loesung-3-20160129-5.c
 create mode 100644 20190128/loesung-3-20160129-6.c
 create mode 100644 20190128/loesung-3-20160129-7.c
 create mode 100644 20190128/loesung-3-20170206-1.c
 create mode 100644 20190128/loesung-3-20170206-2.c
 create mode 100644 20190128/loesung-3-20170206-3.c
 create mode 100644 20190128/loesung-3-20170206-4.c
 create mode 100644 20190128/loesung-3-20170206-5.c
 create mode 100644 20190128/loesung-3-20170206-6.c
 create mode 100644 20190128/loesung-3-20170206-7.c
 create mode 100644 20190128/loesung-3-20170206-8.c
 create mode 100644 20190128/loesung-3-20170206-9.c

diff --git a/20190128/aufgabe-3-20160129.c b/20190128/aufgabe-3-20160129.c
new file mode 100644
index 0000000..d99132f
--- /dev/null
+++ b/20190128/aufgabe-3-20160129.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+[...]
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/aufgabe-3-20170206.c b/20190128/aufgabe-3-20170206.c
new file mode 100644
index 0000000..69c78ed
--- /dev/null
+++ b/20190128/aufgabe-3-20170206.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+[...]
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort (strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort (numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-1.c b/20190128/loesung-3-20160129-1.c
new file mode 100644
index 0000000..6bbf028
--- /dev/null
+++ b/20190128/loesung-3-20160129-1.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-2.c b/20190128/loesung-3-20160129-2.c
new file mode 100644
index 0000000..67621ec
--- /dev/null
+++ b/20190128/loesung-3-20160129-2.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+operation *new_plus (void)
+{
+  return NULL;
+}
+
+operation *new_minus (void)
+{
+  return NULL;
+}
+
+operation *new_times (void)
+{
+  return NULL;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-3.c b/20190128/loesung-3-20160129-3.c
new file mode 100644
index 0000000..0fdb0fc
--- /dev/null
+++ b/20190128/loesung-3-20160129-3.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+operation *new_plus (void)
+{
+  return new_operation ();
+}
+
+operation *new_minus (void)
+{
+  return new_operation ();
+}
+
+operation *new_times (void)
+{
+  return new_operation ();
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-4.c b/20190128/loesung-3-20160129-4.c
new file mode 100644
index 0000000..283cb89
--- /dev/null
+++ b/20190128/loesung-3-20160129-4.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+int calculate_plus (int a, int b)
+{
+  return a + b;
+}
+
+operation *new_plus (void)
+{
+  operation *op = new_operation ();
+  op->calculate = calculate_plus;
+  return op;
+}
+
+int calculate_minus (int a, int b)
+{
+  return a - b;
+}
+
+operation *new_minus (void)
+{
+  operation *op = new_operation ();
+  op->calculate = calculate_minus;
+  return op;
+}
+
+int calculate_times (int a, int b)
+{
+  return a * b;
+}
+
+operation *new_times (void)
+{
+  operation *op = new_operation ();
+  op->calculate = calculate_times;
+  return op;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-5.c b/20190128/loesung-3-20160129-5.c
new file mode 100644
index 0000000..a5c91f6
--- /dev/null
+++ b/20190128/loesung-3-20160129-5.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+int calculate_plus (int a, int b)
+{
+  return a + b;
+}
+
+operation *new_plus (void)
+{
+  operation *op = new_operation ();
+  op->symbol = '+';
+  op->calculate = calculate_plus;
+  return op;
+}
+
+int calculate_minus (int a, int b)
+{
+  return a - b;
+}
+
+operation *new_minus (void)
+{
+  operation *op = new_operation ();
+  op->calculate = calculate_minus;
+  op->symbol = '-';
+  return op;
+}
+
+int calculate_times (int a, int b)
+{
+  return a * b;
+}
+
+operation *new_times (void)
+{
+  operation *op = new_operation ();
+  op->calculate = calculate_times;
+  op->symbol = '*';
+  return op;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-6.c b/20190128/loesung-3-20160129-6.c
new file mode 100644
index 0000000..1e63e25
--- /dev/null
+++ b/20190128/loesung-3-20160129-6.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+int calculate_plus (int a, int b)
+{
+  return a + b;
+}
+
+operation *new_plus (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '+';
+  op->calculate = calculate_plus;
+  return op;
+}
+
+int calculate_minus (int a, int b)
+{
+  return a - b;
+}
+
+operation *new_minus (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '-';
+  op->calculate = calculate_minus;
+  return op;
+}
+
+int calculate_times (int a, int b)
+{
+  return a * b;
+}
+
+operation *new_times (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '*';
+  op->calculate = calculate_times;
+  return op;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ();
+  op[1] = new_minus ();
+  op[2] = new_times ();
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20160129-7.c b/20190128/loesung-3-20160129-7.c
new file mode 100644
index 0000000..a576cdb
--- /dev/null
+++ b/20190128/loesung-3-20160129-7.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct
+{
+  char symbol;
+  int (*calculate) (int a, int b);
+}
+operation;
+
+operation *new_operation (void)
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '?';
+  op->calculate = NULL;
+  return op;
+}
+
+int calculate_plus (int a, int b)
+{
+  return a + b;
+}
+
+operation *new_plus ()
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '+';
+  op->calculate = calculate_plus;
+  return op;
+}
+
+int calculate_minus (int a, int b)
+{
+  return a - b;
+}
+
+operation *new_minus ()
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '-';
+  op->calculate = calculate_minus;
+  return op;
+}
+
+int calculate_times (int a, int b)
+{
+  return a * b;
+}
+
+operation *new_times ()
+{
+  operation *op = malloc (sizeof (operation));
+  op->symbol = '*';
+  op->calculate = calculate_times;
+  return op;
+}
+
+int main (void)
+{
+  operation *op[4];
+  op[0] = new_plus ("Hello, world!");
+  op[1] = new_minus (42, 137);
+  op[2] = new_times (3.14159265358979323846, NULL, "Hallo?", op, calculate_times);
+  op[3] = NULL;
+  for (int i = 0; op[i]; i++)
+    printf ("2 %c 3 = %d\n", op[i]->symbol, op[i]->calculate (2, 3));
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-1.c b/20190128/loesung-3-20170206-1.c
new file mode 100644
index 0000000..b57039e
--- /dev/null
+++ b/20190128/loesung-3-20170206-1.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort (strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort (numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-2.c b/20190128/loesung-3-20170206-2.c
new file mode 100644
index 0000000..845f8bf
--- /dev/null
+++ b/20190128/loesung-3-20170206-2.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return 42;
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  return 42;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort (strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort (numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-3.c b/20190128/loesung-3-20170206-3.c
new file mode 100644
index 0000000..35e323a
--- /dev/null
+++ b/20190128/loesung-3-20170206-3.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return 42;
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  return 42;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-4.c b/20190128/loesung-3-20170206-4.c
new file mode 100644
index 0000000..7d5cd5a
--- /dev/null
+++ b/20190128/loesung-3-20170206-4.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  return 42;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-5.c b/20190128/loesung-3-20170206-5.c
new file mode 100644
index 0000000..357e483
--- /dev/null
+++ b/20190128/loesung-3-20170206-5.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  if (*x2 < *x1)
+    return 1;
+  else
+    return 0;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-6.c b/20190128/loesung-3-20170206-6.c
new file mode 100644
index 0000000..8229594
--- /dev/null
+++ b/20190128/loesung-3-20170206-6.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (int *x1, int *x2)
+{
+  if (*x2 < *x1)
+    return 1;
+  else
+    return 0;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-7.c b/20190128/loesung-3-20170206-7.c
new file mode 100644
index 0000000..35b3a85
--- /dev/null
+++ b/20190128/loesung-3-20170206-7.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  int *y1 = x1;
+  int *y2 = x2;
+  if (*y2 < *y1)
+    return 1;
+  else
+    return 0;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-8.c b/20190128/loesung-3-20170206-8.c
new file mode 100644
index 0000000..4070c30
--- /dev/null
+++ b/20190128/loesung-3-20170206-8.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  int *y1 = (int *) x1;
+  int *y2 = (int *) x2;
+  if (*y2 < *y1)
+    return 1;
+  else
+    return 0;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
diff --git a/20190128/loesung-3-20170206-9.c b/20190128/loesung-3-20170206-9.c
new file mode 100644
index 0000000..ef902f3
--- /dev/null
+++ b/20190128/loesung-3-20170206-9.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <string.h>
+
+void sort (void **data, int (*compare) (void *x1, void *x2))
+{
+  for (int i = 0; data[i]; i++)
+    for (int j = i + 1; data[j]; j++)
+      if (compare (data[i], data[j]) > 0)
+        {
+          void *tmp = data[i];
+          data[i] = data[j];
+          data[j] = tmp;
+        }
+}
+
+int compare_strings (void *x1, void *x2)
+{
+  return strcmp (x1, x2);
+}
+
+int compare_numbers (void *x1, void *x2)
+{
+  if (*(int *) x2 < *(int *) x1)
+    return 1;
+  else
+    return 0;
+}
+
+int main (void)
+{
+  char *strings[] = { "Thomas", "Dora", "Konrad", "Adalbert", "Sophie", NULL };
+  sort ((void **) strings, compare_strings);
+  for (int i = 0; strings[i]; i++)
+    printf ("%s\n", strings[i]);
+
+  printf ("\n");
+
+  int two = 2, ten = 10, zero = 0, three = 3, one = 1;
+  int *numbers[] = { &two, &ten, &zero, &three, &one, NULL };
+  sort ((void **) numbers, compare_numbers);
+  for (int i = 0; numbers[i]; i++)
+    printf ("%d\n", *numbers[i]);
+
+  return 0;
+}
-- 
GitLab