From 2f4b8f90e4453027a7428a29dcc2c7ef700d0ecc Mon Sep 17 00:00:00 2001 From: Peter Gerwinski <peter@cassini.intern> Date: Thu, 7 Jan 2016 18:12:40 +0100 Subject: [PATCH] Beispielprogramme 7.1.2016 --- 20160107/malloc-1.c | 17 +++++++++++ 20160107/malloc-2.c | 17 +++++++++++ 20160107/malloc-3.c | 17 +++++++++++ 20160107/malloc-4.c | 20 ++++++++++++ 20160107/malloc-5.c | 16 ++++++++++ 20160107/sort-10.c | 62 +++++++++++++++++++++++++++++++++++++ 20160107/sort-11.c | 64 +++++++++++++++++++++++++++++++++++++++ 20160107/sort-12.c | 64 +++++++++++++++++++++++++++++++++++++++ 20160107/sort-13.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ 20160107/sort-9.c | 31 +++++++++++++++++++ 10 files changed, 382 insertions(+) create mode 100644 20160107/malloc-1.c create mode 100644 20160107/malloc-2.c create mode 100644 20160107/malloc-3.c create mode 100644 20160107/malloc-4.c create mode 100644 20160107/malloc-5.c create mode 100644 20160107/sort-10.c create mode 100644 20160107/sort-11.c create mode 100644 20160107/sort-12.c create mode 100644 20160107/sort-13.c create mode 100644 20160107/sort-9.c diff --git a/20160107/malloc-1.c b/20160107/malloc-1.c new file mode 100644 index 0000000..c9192fb --- /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 0000000..ad46614 --- /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 0000000..8156851 --- /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 0000000..e52a694 --- /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 0000000..d721ce0 --- /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 0000000..becc474 --- /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 0000000..3779a56 --- /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 0000000..f40cc2a --- /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 0000000..484a5ba --- /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 0000000..dc9ddbd --- /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; +} -- GitLab