diff --git a/20160107/malloc-1.c b/20160107/malloc-1.c new file mode 100644 index 0000000000000000000000000000000000000000..c9192fbfbfd746e7c9d5edef4daaff5c4a537e67 --- /dev/null +++ b/20160107/malloc-1.c @@ -0,0 +1,17 @@ +#include <stdio.h> +#include <stdlib.h> + +int main (void) +{ + int *buffer = NULL; + + buffer = malloc (24 * sizeof (int)); /* 42 Integer-Variable anlegen */ + /* ^^ Zahlendreher infolge Code-Verdopplung! */ + + for (int i = 0; i < 42; i++) + buffer[i] = i; + + /* free() vergessen! :-( */ + + return 0; +} diff --git a/20160107/malloc-2.c b/20160107/malloc-2.c new file mode 100644 index 0000000000000000000000000000000000000000..ad46614b2d0ae0dfe5e3722a149c98fd82482b8d --- /dev/null +++ b/20160107/malloc-2.c @@ -0,0 +1,17 @@ +#include <stdio.h> +#include <stdlib.h> + +int main (void) +{ + int *buffer = NULL; + + buffer = malloc (24 * sizeof (int)); /* 42 Integer-Variable anlegen */ + /* ^^ Zahlendreher infolge Code-Verdopplung! */ + + for (int i = 0; i < 1042; i++) + buffer[i] = i; + + /* free() vergessen! :-( */ + + return 0; +} diff --git a/20160107/malloc-3.c b/20160107/malloc-3.c new file mode 100644 index 0000000000000000000000000000000000000000..815685106bb55b9e24e2a9acc8fc028f3fe88b9e --- /dev/null +++ b/20160107/malloc-3.c @@ -0,0 +1,17 @@ +#include <stdio.h> +#include <stdlib.h> + +int main (void) +{ + int *buffer = NULL; + + buffer = malloc (24 * sizeof (int)); /* 42 Integer-Variable anlegen */ + /* ^^ Zahlendreher infolge Code-Verdopplung! */ + + for (int i = 0; i < 42000; i++) + buffer[i] = i; + + /* free() vergessen! :-( */ + + return 0; +} diff --git a/20160107/malloc-4.c b/20160107/malloc-4.c new file mode 100644 index 0000000000000000000000000000000000000000..e52a6940a0213f6ddaaa210ec77f397cea6c8f1f --- /dev/null +++ b/20160107/malloc-4.c @@ -0,0 +1,20 @@ +#include <stdio.h> +#include <stdlib.h> + +int main (void) +{ + int *buffer = NULL; + + buffer = malloc (24 * sizeof (int)); /* 42 Integer-Variable anlegen */ + /* ^^ Zahlendreher infolge Code-Verdopplung! */ + + for (int i = 0; i < 42000; i++) + { + printf ("i = %d\n", i); + buffer[i] = i; + } + + /* free() vergessen! :-( */ + + return 0; +} diff --git a/20160107/malloc-5.c b/20160107/malloc-5.c new file mode 100644 index 0000000000000000000000000000000000000000..d721ce07b4fd97eacea30886a33366a7f48fd1e2 --- /dev/null +++ b/20160107/malloc-5.c @@ -0,0 +1,16 @@ +#include <stdio.h> +#include <stdlib.h> + +#define SIZE 42 + +int main (void) +{ + int *buffer = NULL; + buffer = malloc (SIZE * sizeof (int)); /* SIZE Integer-Variable anlegen */ + + for (int i = 0; i < SIZE; i++) + buffer[i] = i; + + free (buffer); + return 0; +} diff --git a/20160107/sort-10.c b/20160107/sort-10.c new file mode 100644 index 0000000000000000000000000000000000000000..becc47414dcce01d852decad29b3f62cfc21466f --- /dev/null +++ b/20160107/sort-10.c @@ -0,0 +1,62 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int comp_counter = 0; + +void clear_screen (void) +{ + printf ("\e[H\e[J"); +} + +void output_marked (char **name, int mark1, int mark2) +{ + clear_screen (); + for (int i = 0; name[i]; i++) + if (i == mark1 || i == mark2) + printf ("%s <--\n", name[i]); + else + printf ("%s\n", name[i]); + printf ("%d\n", comp_counter); +} + +void output (char **name) +{ + output_marked (name, -1, -1); +} + +int compare (char **name, int left, int right) +{ + comp_counter++; + output_marked (name, left, right); + usleep (200000); + return strcmp (name[left], name[right]); +} + +void sort (char **name) +{ + int target = 0; + while (name[target]) + target++; /* Länge des Arrays ermitteln */ + int start = 1; + while (target > 0) + { + for (int i = start; i < target; i++) + if (compare (name, i - 1, i) > 0) + { + char *temp = name[i - 1]; + name[i - 1] = name[i]; + name[i] = temp; + } + target--; + } +} + +int main (void) +{ + char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", "Zacharias", NULL }; + sort (name); + return 0; +} diff --git a/20160107/sort-11.c b/20160107/sort-11.c new file mode 100644 index 0000000000000000000000000000000000000000..3779a562c2bc1275629e233fbe2e853b315f5369 --- /dev/null +++ b/20160107/sort-11.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int comp_counter = 0; + +void clear_screen (void) +{ + printf ("\e[H\e[J"); +} + +void output_marked (char **name, int mark1, int mark2) +{ + clear_screen (); + for (int i = 0; name[i]; i++) + if (i == mark1 || i == mark2) + printf ("%s <--\n", name[i]); + else + printf ("%s\n", name[i]); + printf ("%d\n", comp_counter); +} + +void output (char **name) +{ + output_marked (name, -1, -1); +} + +int compare (char **name, int left, int right) +{ + comp_counter++; + output_marked (name, left, right); + usleep (200000); + return strcmp (name[left], name[right]); +} + +void sort (char **name) +{ + int target = 0; + while (name[target]) + target++; /* Länge des Arrays ermitteln */ + int start = 1; + int last_swap = 0; + while (target > 0) + { + for (int i = start; i < target; i++) + if (compare (name, i - 1, i) > 0) + { + last_swap = i; + char *temp = name[i - 1]; + name[i - 1] = name[i]; + name[i] = temp; + } + target = last_swap; + } +} + +int main (void) +{ + char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", "Zacharias", NULL }; + sort (name); + return 0; +} diff --git a/20160107/sort-12.c b/20160107/sort-12.c new file mode 100644 index 0000000000000000000000000000000000000000..f40cc2a4d117d5a282b871856e762ff4e359c842 --- /dev/null +++ b/20160107/sort-12.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int comp_counter = 0; + +void clear_screen (void) +{ + printf ("\e[H\e[J"); +} + +void output_marked (char **name, int mark1, int mark2) +{ + clear_screen (); + for (int i = 0; name[i]; i++) + if (i == mark1 || i == mark2) + printf ("%s <--\n", name[i]); + else + printf ("%s\n", name[i]); + printf ("%d\n", comp_counter); +} + +void output (char **name) +{ + output_marked (name, -1, -1); +} + +int compare (char **name, int left, int right) +{ + comp_counter++; + output_marked (name, left, right); + usleep (200000); + return strcmp (name[left], name[right]); +} + +void sort (char **name) +{ + int target = 0; + while (name[target]) + target++; /* Länge des Arrays ermitteln */ + int start = 1; + while (target > 0) + { + int last_swap = 0; + for (int i = start; i < target; i++) + if (compare (name, i - 1, i) > 0) + { + last_swap = i; + char *temp = name[i - 1]; + name[i - 1] = name[i]; + name[i] = temp; + } + target = last_swap; + } +} + +int main (void) +{ + char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", "Zacharias", NULL }; + sort (name); + return 0; +} diff --git a/20160107/sort-13.c b/20160107/sort-13.c new file mode 100644 index 0000000000000000000000000000000000000000..484a5ba43e4c92af8fd1aa8fb3c6e36d79140627 --- /dev/null +++ b/20160107/sort-13.c @@ -0,0 +1,74 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +int comp_counter = 0; + +void clear_screen (void) +{ + printf ("\e[H\e[J"); +} + +void output_marked (char **name, int mark) +{ + clear_screen (); + for (int i = 0; name[i]; i++) + if (i == mark) + printf ("%s <--\n", name[i]); + else + printf ("%s\n", name[i]); + printf ("%d\n", comp_counter); +} + +void output (char **name) +{ + output_marked (name, -1); +} + +int compare (char **name, int left, char *right) +{ + comp_counter++; + output_marked (name, left); + usleep (100000); + return strcmp (name[left], right); +} + +void sort (char **name, int left, int right) /* QuickSort */ +{ + if (left < right) + { + int middle = left + rand () % (right - left + 1); + char *test = name[middle]; + int l = left; + int r = right; + while (l <= r) + { + while (compare (name, l, test) < 0) + l++; + while (compare (name, r, test) > 0) + r--; + if (l <= r) + { + char *temp = name[l]; + name[l] = name[r]; + name[r] = temp; + l++; + r--; + } + } + sort (name, left, r); + sort (name, l, right); + } +} + +int main (void) +{ + char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", "Zacharias", NULL }; + srand (13); + sort (names, 0, 15); + output (names); + return 0; +} diff --git a/20160107/sort-9.c b/20160107/sort-9.c new file mode 100644 index 0000000000000000000000000000000000000000..dc9ddbd62ebcd6c5a15aa469f480fff01ca8dae4 --- /dev/null +++ b/20160107/sort-9.c @@ -0,0 +1,31 @@ +#include <stdio.h> +#include <string.h> + +void sort (char **name) +{ + int target = 0; + while (name[target]) + target++; /* Länge des Arrays ermitteln */ + while (target > 0) + { + for (int i = 1; i < target; i++) + if (strcmp (name[i - 1], name[i]) > 0) + { + char *temp = name[i - 1]; + name[i - 1] = name[i]; + name[i] = temp; + } + target--; + } +} + +int main (void) +{ + char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", "Zacharias", NULL }; + sort (name); + for (int i = 0; name[i]; i++) + printf ("%s\n", name[i]); + return 0; +}