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