diff --git a/20151203/ujma/Text-Grafik-Bibliothek-4.c b/20151203/ujma/Text-Grafik-Bibliothek-4.c new file mode 100644 index 0000000000000000000000000000000000000000..e9655a635f19e6424ed83baa0a0d58c1ab1e7a76 --- /dev/null +++ b/20151203/ujma/Text-Grafik-Bibliothek-4.c @@ -0,0 +1,62 @@ +#include "Text-Grafik-Bibliothek-20x15.h" +#include <stdio.h> +#include "fifo-pg-3.h" + +char screen[WIDTH][HEIGHT]; + +//Setze alle Einträge in display auf c +void clear (char c) +{ + for (int i=0;i<WIDTH;i++) + { + for (int j=0;j<HEIGHT;j++) + { + screen[i][j]=c; + } + } +} + +//setze display [x][y] auf c +void putPoint (int x, int y, char c) +{ + screen[x][y]=c; +} + +//Gebe display[x][y] zurück +char getPoint (int x, int y) +{ + char c=screen[x][y]; + return c; +} + +//Fülle eine Fläche in display, die aus den Zeichen o besteht mit den Zeichen c aus +void fill (int x, int y, char c, char o) +{ + push_pair (x, y); + while (!fifo_empty ()) + { + pair p = pop_pair (); + if (getPoint (p.x, p.y) == o) + { + putPoint (p.x, p.y, c++); + push_pair (p.x + 1, p.y); + push_pair (p.x - 1, p.y); + push_pair (p.x, p.y + 1); + push_pair (p.x, p.y - 1); + } + } +} + +//Gib display aus +void display (void) +{ + for (int i=0;i<HEIGHT;i++) + { + for (int j=0;j<WIDTH;j++) + { + printf("%c",screen[j][i]); + } + printf("\n"); + } +} + diff --git a/20151203/ujma/fifo-pg-1.c b/20151203/ujma/fifo-pg-1.c new file mode 100644 index 0000000000000000000000000000000000000000..016bc00afab124bb7a3d109694166b58311f213b --- /dev/null +++ b/20151203/ujma/fifo-pg-1.c @@ -0,0 +1,94 @@ +#include <stdio.h> +#include <stdlib.h> + +#define FIFO_SIZE 42 + +typedef struct +{ + int x, y; +} +pair; + +pair fifo[FIFO_SIZE]; +int fifo_read_pointer = 0; +int fifo_write_pointer = 0; + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s\n", msg); + exit (1); +} + +void push_pair (int x, int y) +{ + if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE) + fatal_error ("push_pair: fifo inconsistence"); + else + { + printf ("pushing (%d,%d)\n", x, y); + fifo[fifo_write_pointer].x = x; + fifo[fifo_write_pointer].y = y; + fifo_write_pointer++; + if (fifo_write_pointer >= FIFO_SIZE) + fifo_write_pointer = 0; + if (fifo_write_pointer == fifo_read_pointer) + fatal_error ("fifo overflow"); + } +} + +pair pop_pair (void) +{ + pair nix = { 0, 0 }; + if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE) + { + fatal_error ("pop_pair: fifo inconsistence"); + return nix; + } + else if (fifo_read_pointer == fifo_write_pointer) + { + fatal_error ("fifo underflow"); + return nix; + } + else + { + printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y); + pair value = fifo[fifo_read_pointer]; + fifo[fifo_read_pointer].x = 0; + fifo[fifo_read_pointer].y = 0; + fifo_read_pointer++; + if (fifo_read_pointer >= FIFO_SIZE) + fifo_read_pointer = 0; + return value; + } +} + +void dump_fifo (void) +{ + int i; + printf ("dump_fifo:"); + for (i = 0; i < FIFO_SIZE; i++) + printf (" (%d,%d)", fifo[i].x, fifo[i].y); + printf ("\n"); +} + +int main (void) +{ + dump_fifo (); + push_pair (3, 0); + dump_fifo (); + push_pair (7, 2); + dump_fifo (); + push_pair (23, 23); + dump_fifo (); + pop_pair (); + dump_fifo (); + pop_pair (); + dump_fifo (); + push_pair (42, 137); + dump_fifo (); + pop_pair (); + dump_fifo (); + pop_pair (); + dump_fifo (); + return 0; +} diff --git a/20151203/ujma/fifo-pg-2.c b/20151203/ujma/fifo-pg-2.c new file mode 100644 index 0000000000000000000000000000000000000000..cf3194f4f9f9d6f8902a02b8c9aaf0f53d1fc4be --- /dev/null +++ b/20151203/ujma/fifo-pg-2.c @@ -0,0 +1,94 @@ +#include <stdio.h> +#include <stdlib.h> + +#define FIFO_SIZE 42 + +typedef struct +{ + int x, y; +} +pair; + +pair fifo[FIFO_SIZE]; +int fifo_read_pointer = 0; +int fifo_write_pointer = 0; + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s\n", msg); + exit (1); +} + +void push_pair (int x, int y) +{ + if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE) + fatal_error ("push_pair: fifo inconsistence"); + else + { + printf ("pushing (%d,%d)\n", x, y); + fifo[fifo_write_pointer].x = x; + fifo[fifo_write_pointer].y = y; + fifo_write_pointer++; + if (fifo_write_pointer >= FIFO_SIZE) + fifo_write_pointer = 0; + if (fifo_write_pointer == fifo_read_pointer) + fatal_error ("fifo overflow"); + } +} + +pair pop_pair (void) +{ + pair nix = { 0, 0 }; + if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE) + { + fatal_error ("pop_pair: fifo inconsistence"); + return nix; + } + else if (fifo_read_pointer == fifo_write_pointer) + { + fatal_error ("fifo underflow"); + return nix; + } + else + { + printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y); + pair value = fifo[fifo_read_pointer]; + fifo[fifo_read_pointer].x = 0; + fifo[fifo_read_pointer].y = 0; + fifo_read_pointer++; + if (fifo_read_pointer >= FIFO_SIZE) + fifo_read_pointer = 0; + return value; + } +} + +void dump_fifo (void) +{ + int i; + printf ("dump_fifo:"); + for (i = fifo_read_pointer; i < fifo_write_pointer; i++) + printf (" (%d,%d)", fifo[i].x, fifo[i].y); + printf ("\n"); +} + +int main (void) +{ + dump_fifo (); + push_pair (3, 0); + dump_fifo (); + push_pair (7, 2); + dump_fifo (); + push_pair (23, 23); + dump_fifo (); + pop_pair (); + dump_fifo (); + pop_pair (); + dump_fifo (); + push_pair (42, 137); + dump_fifo (); + pop_pair (); + dump_fifo (); + pop_pair (); + dump_fifo (); + return 0; +} diff --git a/20151203/ujma/fifo-pg-3.c b/20151203/ujma/fifo-pg-3.c new file mode 100644 index 0000000000000000000000000000000000000000..316fcbfbfee3bc3f9c4106c0b2e97573d6b62a6f --- /dev/null +++ b/20151203/ujma/fifo-pg-3.c @@ -0,0 +1,70 @@ +#include <stdio.h> +#include <stdlib.h> +#include "fifo-pg-3.h" + +pair fifo[FIFO_SIZE]; +int fifo_read_pointer = 0; +int fifo_write_pointer = 0; + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s\n", msg); + exit (1); +} + +int fifo_empty (void) +{ + return fifo_read_pointer == fifo_write_pointer; +} + +void push_pair (int x, int y) +{ + if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE) + fatal_error ("push_pair: fifo inconsistence"); + else + { + printf ("pushing (%d,%d)\n", x, y); + fifo[fifo_write_pointer].x = x; + fifo[fifo_write_pointer].y = y; + fifo_write_pointer++; + if (fifo_write_pointer >= FIFO_SIZE) + fifo_write_pointer = 0; + if (fifo_write_pointer == fifo_read_pointer) + fatal_error ("fifo overflow"); + } +} + +pair pop_pair (void) +{ + pair nix = { 0, 0 }; + if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE) + { + fatal_error ("pop_pair: fifo inconsistence"); + return nix; + } + else if (fifo_read_pointer == fifo_write_pointer) + { + fatal_error ("fifo underflow"); + return nix; + } + else + { + printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y); + pair value = fifo[fifo_read_pointer]; + fifo[fifo_read_pointer].x = 0; + fifo[fifo_read_pointer].y = 0; + fifo_read_pointer++; + if (fifo_read_pointer >= FIFO_SIZE) + fifo_read_pointer = 0; + return value; + } +} + +void dump_fifo (void) +{ + int i; + printf ("dump_fifo:"); + for (i = fifo_read_pointer; i < fifo_write_pointer; i++) + printf (" (%d,%d)", fifo[i].x, fifo[i].y); + printf ("\n"); +} diff --git a/20151203/ujma/fifo-pg-3.h b/20151203/ujma/fifo-pg-3.h new file mode 100644 index 0000000000000000000000000000000000000000..968c011095abaac80d056166e082107b7acd145a --- /dev/null +++ b/20151203/ujma/fifo-pg-3.h @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <stdlib.h> + +#define FIFO_SIZE 42 + +typedef struct +{ + int x, y; +} +pair; + +extern int fifo_empty (void); +extern void push_pair (int x, int y); +extern pair pop_pair (void); +extern void dump_fifo (void); diff --git a/20151203/ujma/fifo.c b/20151203/ujma/fifo.c new file mode 100644 index 0000000000000000000000000000000000000000..f1a06167468bc15947171cfe3cfbc133c567f957 --- /dev/null +++ b/20151203/ujma/fifo.c @@ -0,0 +1,94 @@ +#include <stdio.h> +#include <stdlib.h> + +#define FIFO_SIZE 42 + +typedef struct +{ + int x, y; +} +pair; + +pair fifo[FIFO_SIZE]; +int fifo_read_pointer = 0; +int fifo_write_pointer = 0; + +void fatal_error (char *msg) +{ + fprintf (stderr, "%s\n", msg); + exit (1); +} + +void push_pair (int x, int y) +{ + if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE) + fatal_error ("push_pair: fifo inconsistence"); + else + { + printf ("pushing (%d,%d)\n", x, y); + fifo[fifo_write_pointer].x = x; + fifo[fifo_write_pointer].y = y; + fifo_write_pointer++; + if (fifo_write_pointer >= FIFO_SIZE) + fifo_write_pointer = 0; + if (fifo_write_pointer == fifo_read_pointer) + fatal_error ("fifo overflow"); + } +} + +pair pop_pair (void) +{ + pair nix; + if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE) + { + fatal_error ("pop_pair: fifo inconsistence"); + return nix; + } + else if (fifo_read_pointer == fifo_write_pointer) + { + fatal_error ("fifo underflow"); + return nix; + } + else + { + printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y); + pair value = fifo[fifo_read_pointer]; + fifo[fifo_read_pointer].x = 0; + fifo[fifo_read_pointer].y = 0; + fifo_read_pointer++; + if (fifo_read_pointer >= FIFO_SIZE) + fifo_read_pointer = 0; + return value; + } +} + +void dump_stack (void) +{ + int i; + printf ("dump_stack:"); + for (i = 0; i < FIFO_SIZE; i++) + printf (" (%d,%d)", fifo[i].x, fifo[i].y); + printf ("\n"); +} + +int main (void) +{ + dump_stack (); + push_pair (3, 0); + dump_stack (); + push_pair (7, 2); + dump_stack (); + push_pair (23, 23); + dump_stack (); + pop_pair (); + dump_stack (); + pop_pair (); + dump_stack (); + push_pair (42, 137); + dump_stack (); + pop_pair (); + dump_stack (); + pop_pair (); + dump_stack (); + return 0; +}