diff --git a/20190107/bsort-1a.c b/20190107/bsort-1a.c new file mode 100644 index 0000000000000000000000000000000000000000..348b638843002926f57cdcf1d4fbc9bd88d2a10c --- /dev/null +++ b/20190107/bsort-1a.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int comparisons = 0; + +void display (char **name, int left, int right) +{ + printf ("\e[H\e[J"); + for (int i = 0; name[i]; i++) + { + printf ("%s", name[i]); + if (i == left || i == right) + printf (" <--"); + printf ("\n"); + } + printf ("%d\n", comparisons); +} + +int compare (char **name, int left, int right) +{ + int result = strcmp (name[left], name[right]); + comparisons++; + display (name, left, right); + usleep (200000); + return result; +} + +void sort (char **name) +{ + for (int i = 1; name[i]; i++) + if (compare (name, i - 1, i) > 0) + { + char *temp = name[i - 1]; + name[i - 1] = name[i]; + name[i] = temp; + } +} + +int main (void) +{ + char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter", + "Dieter", "Hugo", "Zacharias", "Berta", "Maria", "Fritz", "Box", "Hans", + "Thomas", "Ulrich", NULL }; + sort (name); + display (name, -1, -1); + return 0; +} diff --git a/20190107/dynmem-1.c b/20190107/dynmem-1.c new file mode 100644 index 0000000000000000000000000000000000000000..559684f073676ef87cb01f155e9b3bad86416224 --- /dev/null +++ b/20190107/dynmem-1.c @@ -0,0 +1,13 @@ +#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; +} diff --git a/20190107/dynmem-2.c b/20190107/dynmem-2.c new file mode 100644 index 0000000000000000000000000000000000000000..56148108873fc8dae9bdb7f8b555a4172883c6ad --- /dev/null +++ b/20190107/dynmem-2.c @@ -0,0 +1,14 @@ +#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; +} diff --git a/20190107/dynmem-3.c b/20190107/dynmem-3.c new file mode 100644 index 0000000000000000000000000000000000000000..f78a21ec7a8285f4c3fc41e3b549dd333e11c22e --- /dev/null +++ b/20190107/dynmem-3.c @@ -0,0 +1,22 @@ +#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; +} diff --git a/20190107/dynmem-4.c b/20190107/dynmem-4.c new file mode 100644 index 0000000000000000000000000000000000000000..0db6dd4f7f67d8d4db8ce8264a0ba533082da721 --- /dev/null +++ b/20190107/dynmem-4.c @@ -0,0 +1,23 @@ +#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; +} diff --git a/20190107/dynmem-5.c b/20190107/dynmem-5.c new file mode 100644 index 0000000000000000000000000000000000000000..d1ebf99fd76b60aa3bcf97ebc2eb7b76c1a583a9 --- /dev/null +++ b/20190107/dynmem-5.c @@ -0,0 +1,24 @@ +#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; +} diff --git a/20190107/dynmem-6.c b/20190107/dynmem-6.c new file mode 100644 index 0000000000000000000000000000000000000000..c8a5807d1172df17419fa05efffcb643b8e75ba7 --- /dev/null +++ b/20190107/dynmem-6.c @@ -0,0 +1,24 @@ +#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; +} diff --git a/20190107/dynmem-7.c b/20190107/dynmem-7.c new file mode 100644 index 0000000000000000000000000000000000000000..b80cd7fa18551d2046a2aa77e7f4d1bc74157f0b --- /dev/null +++ b/20190107/dynmem-7.c @@ -0,0 +1,16 @@ +#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; +} diff --git a/20190107/dynmem-8.c b/20190107/dynmem-8.c new file mode 100644 index 0000000000000000000000000000000000000000..414a24a14321085196c5c2887f3c7d90e7c81e01 --- /dev/null +++ b/20190107/dynmem-8.c @@ -0,0 +1,16 @@ +#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; +} diff --git a/20190107/hp-20190107.pdf b/20190107/hp-20190107.pdf index f29469844093a266764aadca67e69ca9a0bc9e4c..b9e31a23b0cce026d770e7ca5871226880ce9139 100644 Binary files a/20190107/hp-20190107.pdf and b/20190107/hp-20190107.pdf differ diff --git a/20190107/hp-20190107.tex b/20190107/hp-20190107.tex index e87ff48825c5bfa9fd24eced460d36b2968eec9f..6ef2485f0245e868064ce5898e78642d41976e64 100644 --- a/20190107/hp-20190107.tex +++ b/20190107/hp-20190107.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Aufwandsabschätzungen, objektorientierte Programmierung in C +% README: Aufwandsabschätzungen, dynamische Speicherverwaltung \documentclass[10pt,t]{beamer} @@ -63,6 +63,7 @@ \item[5.1] Differentialgleichungen \color{medgreen} \item[5.2] Rekursion + \color{orange} \item[5.3] Aufwandsabschätzungen \end{itemize} \item[\textbf{6}] \textbf{Objektorientierte Programmierung} @@ -70,6 +71,7 @@ \color{red} \item[6.0] Dynamische Speicherverwaltung \item[6.1] Konzepte und Ziele + \color{black} \item[6.2] Beispiel: Zahlen und Buchstaben \item[6.3] Beispiel: Graphische Benutzeroberfläche (GUI) \vspace*{-\smallskipamount} @@ -303,6 +305,7 @@ \color{red} \item[6.0] Dynamische Speicherverwaltung \item[6.1] Konzepte und Ziele + \color{black} \item[6.2] Beispiel: Zahlen und Buchstaben \item[6.3] Beispiel: Graphische Benutzeroberfläche (GUI) \vspace*{-\smallskipamount} @@ -424,6 +427,8 @@ \end{frame} +\iffalse + \begin{frame} \showsection @@ -554,8 +559,6 @@ \end{frame} -\iffalse - \begin{frame}[fragile] \begin{center} \begin{minipage}{5cm} @@ -602,8 +605,6 @@ \end{frame} -\fi - \subsection{Beispiel: Graphische Benutzeroberfläche (GUI)} \begin{frame}[fragile] @@ -646,8 +647,6 @@ \end{frame} -\iffalse - \subsection{Unions} \begin{frame}[fragile] @@ -809,10 +808,11 @@ \begin{itemize} \color{medgreen} \item[6.0] Dynamische Speicherverwaltung + \color{orange} \item[6.1] Konzepte und Ziele + \color{red} \item[6.2] Beispiel: Zahlen und Buchstaben \item[6.3] Beispiel: Graphische Benutzeroberfläche (GUI) - \color{red} \item[6.4] Unions \item[6.5] Virtuelle Methoden \item[6.6] Einführung in C++ diff --git a/20190107/hp-uebung-20190107.pdf b/20190107/hp-uebung-20190107.pdf index 8a8113c575bdd50d401ef174ac8a2ed76ae94ad0..cedea8fd7babfe068fbe3ce2dbbf79db97592179 100644 Binary files a/20190107/hp-uebung-20190107.pdf and b/20190107/hp-uebung-20190107.pdf differ diff --git a/20190107/hp-uebung-20190107.tex b/20190107/hp-uebung-20190107.tex index d4299df321b1ba4b6e43c2ee9361aa310db907d9..ddad3e0fc05d2e3da4880c23978c7ef243c1b67d 100644 --- a/20190107/hp-uebung-20190107.tex +++ b/20190107/hp-uebung-20190107.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Speicherformate von Zahlen, Zeigerarithmetik, objektorientierte Tier-Datenbank +% README: Speicherformate von Zahlen, Zeigerarithmetik \documentclass[a4paper]{article} @@ -34,9 +34,9 @@ Übungsaufgaben -- 7.\ Januar 2019} Diese Übung enthält Punkteangaben wie in einer Klausur. - Um zu "`bestehen"', müssen Sie innerhalb von 100 Minuten + Um zu "`bestehen"', müssen Sie innerhalb von 60 Minuten unter Verwendung ausschließlich zugelassener Hilfsmittel - 18 Punkte (von insgesamt \totalpoints) erreichen. + 11 Punkte (von insgesamt \totalpoints) erreichen. \exercise{Speicherformate von Zahlen} @@ -190,6 +190,8 @@ \points{4} \end{enumerate} +\iffalse + \clearpage \exercise{Objektorientierte Tier-Datenbank} @@ -295,6 +297,8 @@ \points{4} \end{itemize} +\fi + \bigskip \begin{flushright} \textit{Viel Erfolg!} diff --git a/20190107/photo-20190107-173418.jpg b/20190107/photo-20190107-173418.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f8143757dadbedf1ab4f0cbd7af41192b387f1b Binary files /dev/null and b/20190107/photo-20190107-173418.jpg differ diff --git a/20190107/photo-20190107-173418.txt b/20190107/photo-20190107-173418.txt new file mode 100644 index 0000000000000000000000000000000000000000..98711a57c52b1e97933d5f8274cad51bc0f5db1e --- /dev/null +++ b/20190107/photo-20190107-173418.txt @@ -0,0 +1 @@ +README: Quicksort diff --git a/README.md b/README.md index 4fb108d2536764dc20401f38e0e77230226f06ba..67288428dd6efdb4e3a36d2fdf9998dbc8da4235 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Vortragsfolien: * [03.12.2018: Bit-Operationen, Programmierung von Mikrocontrollern, I/O-Ports, Interrupts](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-20181203.pdf) * [10.12.2018: volatile-Variable, Byte-Reihenfolge - Endianness, Binärdarstellung negativer Zahlen, Speicherausrichtung - Alignment](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181210/hp-20181210.pdf) * [17.12.2018: Rekursion, Aufwandsabschätzungen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181217/hp-20181217.pdf) - * [07.01.2019: Aufwandsabschätzungen, objektorientierte Programmierung in C](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190107/hp-20190107.pdf) + * [07.01.2019: Aufwandsabschätzungen, dynamische Speicherverwaltung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190107/hp-20190107.pdf) * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/hp-slides-2018ws.pdf) Übungsaufgaben: @@ -44,7 +44,7 @@ Vortragsfolien: * [03.12.2018: XBM-Grafik, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-uebung-20181203.pdf) * [10.12.2018: Trickprogrammierung, Thermometer-Baustein an I²C-Bus](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181210/hp-uebung-20181210.pdf) * [17.12.2018: Fakultät, Lauflicht, Länge von Strings (Neuauflage)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181217/hp-uebung-20181217.pdf) - * [07.01.2019: Speicherformate von Zahlen, Zeigerarithmetik, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190107/hp-uebung-20190107.pdf) + * [07.01.2019: Speicherformate von Zahlen, Zeigerarithmetik](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190107/hp-uebung-20190107.pdf) Musterlösungen: --------------- @@ -61,6 +61,7 @@ Tafelbilder: * [26.11.2018: Prakikumstermine, Bit-Operationen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181126/photo-20181126-174025.jpg) * [03.12.2018: Pull-Down- und Pull-Up-Widerstand](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/photo-20181203-173451.jpg) * [10.12.2018: Grafik abspeichern; Zweierkomplement auf 4-Bit-Rechner](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181210/photo-20181210-173116.jpg) + * [07.01.2019: Quicksort](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190107/photo-20190107-173418.jpg) Praktikumsunterlagen: --------------------- diff --git a/hp-slides-2018ws.pdf b/hp-slides-2018ws.pdf index a861ce592b389e66db263c6535c1655e7ca50609..9f7631627647f4f2346501d7e59e07c00fab9a13 100644 Binary files a/hp-slides-2018ws.pdf and b/hp-slides-2018ws.pdf differ diff --git a/hp-slides-2018ws.tex b/hp-slides-2018ws.tex index b4f71a5c0810aec66fc8d1788ceda898f5032806..3857cfffb7d651540dd07210f95adead692fef55 100644 --- a/hp-slides-2018ws.tex +++ b/hp-slides-2018ws.tex @@ -32,6 +32,6 @@ \includepdf[pages=-]{20181210/hp-20181210.pdf} \pdfbookmark[1]{17.12.2018: Rekursion, Aufwandsabschätzungen}{20181217} \includepdf[pages=-]{20181217/hp-20181217.pdf} - \pdfbookmark[1]{07.01.2019: Aufwandsabschätzungen, objektorientierte Programmierung in C}{20190107} + \pdfbookmark[1]{07.01.2019: Aufwandsabschätzungen, dynamische Speicherverwaltung}{20190107} \includepdf[pages=-]{20190107/hp-20190107.pdf} \end{document}