diff --git a/20231130/hanoi-0.c b/20231130/hanoi-0.c new file mode 100644 index 0000000000000000000000000000000000000000..83b5f081e33e699f2d5eaa1f858320530e1b2820 --- /dev/null +++ b/20231130/hanoi-0.c @@ -0,0 +1,26 @@ +#include <stdio.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +int main (void) +{ + n[0] = 0; + n[1] = 0; + n[2] = 0; + display (); + return 0; +} diff --git a/20231130/hanoi-1.c b/20231130/hanoi-1.c new file mode 100644 index 0000000000000000000000000000000000000000..6d005f0b12afa6086afb65e1794fb5c977b474e2 --- /dev/null +++ b/20231130/hanoi-1.c @@ -0,0 +1,30 @@ +#include <stdio.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +int main (void) +{ + n[0] = 4; + tower[0][0] = 4; + tower[0][1] = 3; + tower[0][2] = 2; + tower[0][3] = 1; + n[1] = 0; + n[2] = 0; + display (); + return 0; +} diff --git a/20231130/hanoi-2.c b/20231130/hanoi-2.c new file mode 100644 index 0000000000000000000000000000000000000000..c928c1130539da08d0882249bdffc877d72289b2 --- /dev/null +++ b/20231130/hanoi-2.c @@ -0,0 +1,28 @@ +#include <stdio.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + return 0; +} diff --git a/20231130/hanoi-3.c b/20231130/hanoi-3.c new file mode 100644 index 0000000000000000000000000000000000000000..4b59c046962c1f79eca315882d93faf6b6c298c1 --- /dev/null +++ b/20231130/hanoi-3.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + move (2, 0, 1); + display (); + return 0; +} diff --git a/20231130/hanoi-4.c b/20231130/hanoi-4.c new file mode 100644 index 0000000000000000000000000000000000000000..162a5ba7cccedf64bff8ae9a514aaf146088e3a4 --- /dev/null +++ b/20231130/hanoi-4.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + move (0, 2, 1); + display (); + return 0; +} diff --git a/20231130/hanoi-5.c b/20231130/hanoi-5.c new file mode 100644 index 0000000000000000000000000000000000000000..e04ad85f63fe92e5c15d22646beb9e9107bf78d6 --- /dev/null +++ b/20231130/hanoi-5.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, 1); + return 0; +} diff --git a/20231130/hanoi-6.c b/20231130/hanoi-6.c new file mode 100644 index 0000000000000000000000000000000000000000..1267605f802246e857c32d29cc0a132609cb24ce --- /dev/null +++ b/20231130/hanoi-6.c @@ -0,0 +1,52 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 4 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); + return 0; +} diff --git a/20231130/hanoi-7.c b/20231130/hanoi-7.c new file mode 100644 index 0000000000000000000000000000000000000000..f71fcdc0c3f66047ee3ad870d019a06eb328050f --- /dev/null +++ b/20231130/hanoi-7.c @@ -0,0 +1,52 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 5 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); + return 0; +} diff --git a/20231130/hanoi-8.c b/20231130/hanoi-8.c new file mode 100644 index 0000000000000000000000000000000000000000..6d804063531d424a82924a89d85424c33994793b --- /dev/null +++ b/20231130/hanoi-8.c @@ -0,0 +1,52 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 64 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + display (); + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); + return 0; +} diff --git a/20231130/hanoi-9.c b/20231130/hanoi-9.c new file mode 100644 index 0000000000000000000000000000000000000000..7694b373b7011e96f6be0ad0f00ba54b67086158 --- /dev/null +++ b/20231130/hanoi-9.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <error.h> + +#define DISKS 64 + +int n[3], tower[3][DISKS]; + +void display (void) +{ + printf ("\n"); + for (int i = 0; i < 3; i++) + { + printf ("tower %d:", i); + for (int j = 0; j < n[i]; j++) + printf (" %d", tower[i][j]); + printf ("\n"); + } +} + +void move (int from, int to, int disks) +{ + if (disks == 1) + { + if (n[from] <= 0) + error (1, 0, "trying to move disk from empty tower"); + if (n[to] > 0 && tower[to][n[to] - 1] < tower[from][n[from] - 1]) + error (1, 0, "trying to move larger disk on smaller one"); + tower[to][n[to]] = tower[from][n[from] - 1]; + n[to]++; + n[from]--; + static int counter = 1; + if (counter++ >= 100000000) + { + display (); + counter = 1; + } + } + else + { + int help = 0 + 1 + 2 - from - to; + move (from, help, disks - 1); + move (from, to, 1); + move (help, to, disks - 1); + } +} + +int main (void) +{ + n[0] = DISKS; + for (int i = 0; i < DISKS; i++) + tower[0][i] = DISKS - i; + n[1] = 0; + n[2] = 0; + display (); + move (0, 2, DISKS); + display (); + return 0; +} diff --git a/20231130/hp-20231130.pdf b/20231130/hp-20231130.pdf index 66a0a71f6fe530d0c1e6581494b379a7654070ad..5b874dd081f07bc7110a99532598d0da58a1fa0d 100644 Binary files a/20231130/hp-20231130.pdf and b/20231130/hp-20231130.pdf differ diff --git a/20231130/hp-20231130.tex b/20231130/hp-20231130.tex index c878d5d163e8a26275d773eab12032d163964ddf..8901b9350f0e3dd1826b9a73b29e777058cc722c 100644 --- a/20231130/hp-20231130.tex +++ b/20231130/hp-20231130.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Algorithmen: Rekursion, Aufwandsabschätzungen +% README: Algorithmen: Rekursion \documentclass[10pt,t]{beamer} @@ -64,6 +64,7 @@ \item[5.1] Differentialgleichungen \color{red} \item[5.2] Rekursion + \color{black} \item[5.3] Aufwandsabschätzungen \end{itemize} \item[\textbf{6}] \textbf{Objektorientierte Programmierung} @@ -442,6 +443,8 @@ \end{frame} +\iffalse + \subsection{Aufwandsabschätzungen \protect\color{gray}-- Komplexitätsanalyse} \begin{frame}[fragile] @@ -592,4 +595,6 @@ \end{frame} +\fi + \end{document} diff --git a/20231130/landau-symbols-2.pdf b/20231130/landau-symbols-2.pdf deleted file mode 120000 index 6b458b6efd8e274824a6dfcaabc4b9c27d196dc4..0000000000000000000000000000000000000000 --- a/20231130/landau-symbols-2.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/landau-symbols-2.pdf \ No newline at end of file diff --git a/20231130/landau-symbols-3.pdf b/20231130/landau-symbols-3.pdf deleted file mode 120000 index 46efa409b35ff5df763c744a423599cba515d886..0000000000000000000000000000000000000000 --- a/20231130/landau-symbols-3.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/landau-symbols-3.pdf \ No newline at end of file diff --git a/20231130/landau-symbols.pdf b/20231130/landau-symbols.pdf deleted file mode 120000 index ca145425bf07439c680632aa0663f84be601a565..0000000000000000000000000000000000000000 --- a/20231130/landau-symbols.pdf +++ /dev/null @@ -1 +0,0 @@ -../common/landau-symbols.pdf \ No newline at end of file diff --git a/20231130/mathematisches-pendel-01-kraeftezerlegung.png b/20231130/mathematisches-pendel-01-kraeftezerlegung.png new file mode 100644 index 0000000000000000000000000000000000000000..950bfdabfa6dca689233ad90ef3bb54d7e371885 Binary files /dev/null and b/20231130/mathematisches-pendel-01-kraeftezerlegung.png differ diff --git a/20231130/mathematisches-pendel-02-kleinwinkelnaeherung.png b/20231130/mathematisches-pendel-02-kleinwinkelnaeherung.png new file mode 100644 index 0000000000000000000000000000000000000000..a62a1b6deccb8ddf865b5dd68ec0aa18d16a4e79 Binary files /dev/null and b/20231130/mathematisches-pendel-02-kleinwinkelnaeherung.png differ diff --git a/20231130/mathematisches-pendel.xcf.gz b/20231130/mathematisches-pendel.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..35cd09007ac19a6f8c37d47fcf3537ca913d69f5 Binary files /dev/null and b/20231130/mathematisches-pendel.xcf.gz differ diff --git a/20231130/pendulum-1.c b/20231130/pendulum-1.c new file mode 100644 index 0000000000000000000000000000000000000000..0024b2bc283c5d9b76a3148359254aab38fca282 --- /dev/null +++ b/20231130/pendulum-1.c @@ -0,0 +1,69 @@ +#include <gtk/gtk.h> +#include <math.h> + +#define WIDTH 320 +#define HEIGHT 240 +#define GAP (HEIGHT / 20) +#define r GAP +#define visual_length (HEIGHT - 2 * GAP - r) + +#define phi0 (-0.5) +#define omega0 0.0 +#define t0 0.0 +#define g 9.81 +#define l 1.0 +#define dt 0.02 + +double t = t0; +double phi = phi0; +double omega = omega0; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + + int x = WIDTH / 2 + visual_length * sin (phi); + int y = GAP + visual_length * cos (phi); + + gdk_cairo_set_source_rgba (c, &blue); + cairo_move_to (c, WIDTH / 2, GAP); + cairo_line_to (c, x, y); + cairo_stroke (c); + cairo_arc (c, x, y, r, 0, 2 * G_PI); + cairo_fill (c); + + return FALSE; /* TRUE to stop other handlers from being invoked for the event. + FALSE to propagate the event further. */ +} + +gboolean timer (GtkWidget *widget) +{ + t += dt; + phi += omega * dt; + omega += - dt * g / l * sin (phi); + + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + return FALSE; +} + +int main (int argc, char **argv) +{ + gtk_init (&argc, &argv); + + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_show (window); + gtk_window_set_title (GTK_WINDOW (window), "Hello"); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + GtkWidget *drawing_area = gtk_drawing_area_new (); + gtk_widget_show (drawing_area); + gtk_container_add (GTK_CONTAINER (window), drawing_area); + gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_main (); + return 0; +} diff --git a/20231130/pendulum-2.c b/20231130/pendulum-2.c new file mode 100644 index 0000000000000000000000000000000000000000..d307d37307ec1fea3297be1f0157dddbede77fd6 --- /dev/null +++ b/20231130/pendulum-2.c @@ -0,0 +1,79 @@ +#include <gtk/gtk.h> +#include <math.h> + +#define WIDTH 320 +#define HEIGHT 240 +#define GAP (HEIGHT / 20) +#define r GAP +#define visual_length (HEIGHT - 2 * GAP - r) + +#define phi0 (-0.5) +#define omega0 0.0 +#define t0 0.0 +#define g 9.81 +#define l 1.0 +#define dt 0.02 + +double t = t0; +double phi = phi0; +double omega= omega0; + +void draw_pendulum (cairo_t *c, double phi, GdkRGBA *colour) +{ + int x = WIDTH / 2 + visual_length * sin (phi); + int y = GAP + visual_length * cos (phi); + + gdk_cairo_set_source_rgba (c, colour); + cairo_move_to (c, WIDTH / 2, GAP); + cairo_line_to (c, x, y); + cairo_stroke (c); + cairo_arc (c, x, y, r, 0, 2 * G_PI); + cairo_fill (c); +} + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + GdkRGBA green = { 0.0, 0.5, 0.0, 1.0 }; + + double A = phi0; + double B = 0.5 * M_PI; /* 90° */ + double phi_analytic = A * sin (sqrt (g / l) * t + B); + + draw_pendulum (c, phi, &blue); + draw_pendulum (c, phi_analytic, &green); + + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + t += dt; + phi += omega * dt; + omega += - dt * g / l * sin (phi); + + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + return FALSE; +} + +int main (int argc, char **argv) +{ + gtk_init (&argc, &argv); + + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_show (window); + gtk_window_set_title (GTK_WINDOW (window), "Hello"); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + GtkWidget *drawing_area = gtk_drawing_area_new (); + gtk_widget_show (drawing_area); + gtk_container_add (GTK_CONTAINER (window), drawing_area); + gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_main (); + return 0; +} diff --git a/20231130/pendulum-3.c b/20231130/pendulum-3.c new file mode 100644 index 0000000000000000000000000000000000000000..b6bc9793b3b7c0166df678cccdf8a4ae9170d886 --- /dev/null +++ b/20231130/pendulum-3.c @@ -0,0 +1,87 @@ +#include <gtk/gtk.h> +#include <math.h> + +#define WIDTH 320 +#define HEIGHT 240 +#define GAP (HEIGHT / 20) +#define r GAP +#define visual_length (HEIGHT - 2 * GAP - r) + +#define phi0 (-0.5) +#define omega0 0.0 +#define t0 0.0 +#define g 9.81 +#define l 1.0 +#define dt 0.02 + +double t = t0; +double phi_with_sin = phi0; +double omega_with_sin= omega0; +double phi_without_sin = phi0; +double omega_without_sin= omega0; + +void draw_pendulum (cairo_t *c, double phi, GdkRGBA *colour) +{ + int x = WIDTH / 2 + visual_length * sin (phi); + int y = GAP + visual_length * cos (phi); + + gdk_cairo_set_source_rgba (c, colour); + cairo_move_to (c, WIDTH / 2, GAP); + cairo_line_to (c, x, y); + cairo_stroke (c); + cairo_arc (c, x, y, r, 0, 2 * G_PI); + cairo_fill (c); +} + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + GdkRGBA orange = { 1.0, 0.5, 0.0, 1.0 }; + GdkRGBA green = { 0.0, 0.5, 0.0, 1.0 }; + + double A = phi0; + double B = 0.5 * M_PI; /* 90° */ + double phi_analytic = A * sin (sqrt (g / l) * t + B); + + /* Näherungen: Kleinwinkel dt */ + draw_pendulum (c, phi_with_sin, &blue); /* blau nein ja */ + draw_pendulum (c, phi_without_sin, &orange); /* orange ja ja */ + draw_pendulum (c, phi_analytic, &green); /* grün ja nein */ + + return FALSE; /* TRUE to stop other handlers from being invoked for the event. + FALSE to propagate the event further. */ +} + +gboolean timer (GtkWidget *widget) +{ + t += dt; + phi_with_sin += omega_with_sin * dt; + omega_with_sin += - dt * g / l * sin (phi_with_sin); + phi_without_sin += omega_without_sin * dt; + omega_without_sin += - dt * g / l * phi_without_sin; + + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + return FALSE; +} + +int main (int argc, char **argv) +{ + gtk_init (&argc, &argv); + + GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_show (window); + gtk_window_set_title (GTK_WINDOW (window), "Hello"); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + GtkWidget *drawing_area = gtk_drawing_area_new (); + gtk_widget_show (drawing_area); + gtk_container_add (GTK_CONTAINER (window), drawing_area); + gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_main (); + return 0; +}