Skip to content
Snippets Groups Projects
Commit 4e6cb861 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Beispielprogramme 12.12.2016

Tafelbilder 14.12.2016: Binärdarstellung negativer Zahlen
README.md statt README
parent faac733f
Branches
No related tags found
No related merge requests found
Showing
with 189 additions and 169 deletions
#include <stdio.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
for (int i = 0; i < 3; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
for (int i = 0; i < 3; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
char **new_name = malloc (4 * sizeof (char*));
for (int i = 0; i < 3; i++)
new_name[i] = name[i];
name = new_name; /* Speicherleck: Array wurde nicht freigegeben! */
name[3] = "Dieter";
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
char **new_name = malloc (4 * sizeof (char*));
for (int i = 0; i < 3; i++)
new_name[i] = name[i];
free (name);
name = new_name; /* kein Speicherleck: Array wurde freigegeben. */
name[3] = "Dieter";
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
char **new_name = malloc (4 * sizeof (char*));
for (int i = 0; i < 3; i++)
new_name[i] = name[i];
free (name);
name = new_name;
name[3] = "Dieter";
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
free (new_name); /* Fehler: Array wurde bereits freigegeben! */
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
char **new_name = malloc (4 * sizeof (char*));
for (int i = 0; i < 3; i++)
new_name[i] = name[i];
free (name);
name = new_name;
new_name = NULL; /* Zeiger wird nicht mehr gebraucht. */
name[3] = "Dieter";
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
name = realloc (name, 4 * sizeof (char));
name[3] = "Dieter"; /* Fehler: ^ "*" vergessen; zu wenig Speicher */
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
name = realloc (name, 4 * sizeof (char *));
name[3] = "Dieter";
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char **name = malloc (3 * sizeof (char *));
name[0] = "Anton";
name[1] = "Berthold";
name[2] = "Caesar";
name = realloc (name, 4 * sizeof (char));
name[3] = "Dieter"; /* Fehler: ^ "*" vergessen; zu wenig Speicher */
for (int i = 0; i < 4; i++)
printf ("%s\n", name[i]);
free (name);
return 0;
}
...@@ -17,6 +17,14 @@ typedef struct ...@@ -17,6 +17,14 @@ typedef struct
char *content; char *content;
} t_string; } t_string;
void print_object (t_base *this)
{
if (this->type == 1)
printf ("Integer: %d\n", ((t_integer *) this)->content);
else if (this->type == 2)
printf ("String: \"%s\"\n", ((t_string *) this)->content);
}
int main (void) int main (void)
{ {
t_integer i = { 1, 42 }; t_integer i = { 1, 42 };
...@@ -25,10 +33,7 @@ int main (void) ...@@ -25,10 +33,7 @@ int main (void)
t_base *object[] = { (t_base *) &i, (t_base *) &s }; t_base *object[] = { (t_base *) &i, (t_base *) &s };
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
if (object[i]->type == 2) print_object (object[i]);
printf ("Integer: %d\n", ((t_integer *) object[i])->content);
else if (object[i]->type == 1)
printf ("String: \"%s\"\n", ((t_string *) object[i])->content);
return 0; return 0;
} }
#include <stdio.h>
typedef struct
{
int type;
} t_base;
typedef struct
{
int type;
int content;
} t_integer;
typedef struct
{
int type;
char *content;
} t_string;
typedef union
{
t_base base;
t_integer integer;
t_string string;
} t_object;
int main (void)
{
t_object i = { integer: { 1, 42 } };
t_object s = { string: { 2, "Hello, world!" } };
t_object *object[] = { &i, &s };
for (int i = 0; i < 2; i++)
if (object[i]->base.type == 1)
printf ("Integer: %d\n", ((t_integer *) object[i])->content);
else if (object[i]->base.type == 2)
printf ("String: \"%s\"\n", ((t_string *) object[i])->content);
return 0;
}
#include <stdio.h>
union t_object;
typedef struct
{
void (* print) (union t_object *this);
} t_base;
typedef struct
{
void (* print) (union t_object *this);
int content;
} t_integer;
typedef struct
{
void (* print) (union t_object *this);
char *content;
} t_string;
typedef union t_object
{
t_base base;
t_integer integer;
t_string string;
} t_object;
void print_integer (t_object *this)
{
printf ("Integer: %d\n", this->integer.content);
}
void print_string (t_object *this)
{
printf ("String: %s\n", this->string.content);
}
int main (void)
{
t_object i = { integer: { print_integer, 42 } };
t_object s = { string: { print_string, "Hello, world!" } };
t_object *object[] = { &i, &s };
for (int i = 0; i < 2; i++)
object[i]->base.print (object[i]);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
union t_object;
typedef struct
{
void (* print) (union t_object *this);
} t_base;
typedef struct
{
void (* print) (union t_object *this);
int content;
} t_integer;
typedef struct
{
void (* print) (union t_object *this);
char *content;
} t_string;
typedef union t_object
{
t_base base;
t_integer integer;
t_string string;
} t_object;
void print_integer (t_object *this)
{
printf ("Integer: %d\n", this->integer.content);
}
t_object *new_integer (int i)
{
t_object *object = malloc (sizeof (t_integer));
object->base.print = print_integer;
object->integer.content = i;
return object;
}
void print_string (t_object *this)
{
printf ("String: %s\n", this->string.content);
}
t_object *new_string (char *s)
{
t_object *object = malloc (sizeof (t_string));
object->base.print = print_string;
object->string.content = s;
return object;
}
int main (void)
{
t_object *object[] = { new_integer (42), new_string ("Hello, world!") };
for (int i = 0; i < 2; i++)
object[i]->base.print (object[i]);
return 0;
}
20161212/photo-20161212-124818.jpg

154 KiB

20161212/photo-20161212-125316.jpg

140 KiB

20161214/photo-20161214-111912.jpg

126 KiB

20161214/photo-20161214-112815.jpg

127 KiB

20161214/photo-20161214-115434.jpg

159 KiB

Hardwarenahe Programmierung Hardwarenahe Programmierung
~~~~~~~~~~~~~~~~~~~~~~~~~~~ ===========================
Lehrveranstaltung im Wintersemester 2016/17 Lehrveranstaltung im Wintersemester 2016/17
Hochschule Bochum, Campus Velbert/Heiligenhaus Hochschule Bochum, Campus Velbert/Heiligenhaus
Prof. Dr. rer. nat. Peter Gerwinski Prof. Dr. rer. nat. Peter Gerwinski
Copyright (C) 2012-2016 Peter Gerwinski Copyright (C) 20122016 Peter Gerwinski
common - gemeinsame Dateien für Skript und Vortragsfolien * common gemeinsame Dateien für Skript und Vortragsfolien
script - Skript zur Lehrveranstaltung * script Skript zur Lehrveranstaltung
201????? - Vortragsfolien und Beispiele * 201????? Vortragsfolien und Beispiele
Diese Lehrmaterialien sind freie Software. Sie dürfen diese Diese Lehrmaterialien sind freie Software. Sie dürfen diese
gemäß den jeweils angegebenen Lizenzen (CC-BY-SA 3.0, GNU GPL 3+, gemäß den jeweils angegebenen Lizenzen (CC-BY-SA 3.0, GNU GPL 3+,
...@@ -17,16 +18,17 @@ weitergeben. Für Details siehe common/README. ...@@ -17,16 +18,17 @@ weitergeben. Für Details siehe common/README.
Low-Level Programming Low-Level Programming
~~~~~~~~~~~~~~~~~~~~~ =====================
Course in winter semester 2016-17 Course in winter semester 2016-17
Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus
Prof. Dr. rer. nat. Peter Gerwinski Prof. Dr. rer. nat. Peter Gerwinski
Copyright (C) 2012-2016 Peter Gerwinski Copyright (C) 20122016 Peter Gerwinski
common - common files for lecture notes and slides * common common files for lecture notes and slides
script - lecture notes * script lecture notes
201????? - slides and examples * 201????? slides and examples
This teaching materials are Free Software. You may study, copy, This teaching materials are Free Software. You may study, copy,
modify, and/or distribute them according to their respective modify, and/or distribute them according to their respective
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment