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

Musterlösung Aufgabe 3 4.2.2021, Aktualisierung README.md

parent 393ba11b
Branches
No related tags found
No related merge requests found
#include <stdio.h>
#include <stdint.h>
uint8_t buffer = 0;
void bit_array_set (int i, int value)
{
uint8_t mask = 1 << i;
if (value)
buffer |= mask;
else
buffer &= ~mask;
}
void bit_array_flip (int i)
{
uint8_t mask = 1 << i;
buffer ^= mask;
}
int bit_array_get (int i)
{
uint8_t mask = 1 << i;
if (buffer & mask)
return 1;
else
return 0;
}
void output (void)
{
for (int i = 0; i < 8; i++)
{
if (i % 4 == 0)
printf (" ");
printf ("%d", bit_array_get (i));
}
printf ("\n");
}
int main (void)
{
output ();
bit_array_set (2, 1);
output ();
bit_array_flip (7);
output ();
bit_array_set (2, 0);
output ();
}
#include <stdio.h>
#include <stdint.h>
#define LENGTH 32
uint8_t buffer[LENGTH / 8] = { 0, 0, 0, 0 };
void bit_array_set (int i, int value)
{
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (value)
buffer[byte_index] |= mask;
else
buffer[byte_index] &= ~mask;
}
void bit_array_flip (int i)
{
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
buffer[byte_index] ^= mask;
}
int bit_array_get (int i)
{
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (buffer[byte_index] & mask)
return 1;
else
return 0;
}
void output (void)
{
for (int i = 0; i < LENGTH; i++)
{
if (i % 4 == 0)
printf (" ");
printf ("%d", bit_array_get (i));
}
printf ("\n");
}
int main (void)
{
output ();
bit_array_set (12, 1);
output ();
bit_array_flip (31);
output ();
bit_array_set (12, 0);
output ();
}
#include <stdio.h>
#include <stdint.h>
#include <error.h>
#define LENGTH 29
#define BYTES ((LENGTH + 7) / 8)
uint8_t buffer[BYTES] = { 0, 0, 0, 0 };
void check_index (int i)
{
if (i < 0 || i >= LENGTH)
error (1, 0, "index %d out of range (0, ..., %d)", i, LENGTH - 1);
}
void bit_array_set (int i, int value)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (value)
buffer[byte_index] |= mask;
else
buffer[byte_index] &= ~mask;
}
void bit_array_flip (int i)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
buffer[byte_index] ^= mask;
}
int bit_array_get (int i)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (buffer[byte_index] & mask)
return 1;
else
return 0;
}
void output (void)
{
for (int i = 0; i < LENGTH; i++)
{
if (i % 4 == 0)
printf (" ");
printf ("%d", bit_array_get (i));
}
printf ("\n");
}
int main (void)
{
output ();
bit_array_set (12, 1);
output ();
bit_array_flip (28);
output ();
bit_array_set (12, 0);
output ();
bit_array_flip (31);
output ();
}
#include <stdio.h>
#include <stdint.h>
#include <error.h>
#include <stdlib.h>
int length = 0;
int bytes = 0;
uint8_t *buffer = NULL;
void bit_array_init (int n)
{
length = n;
bytes = (length + 7) / 8;
if (buffer)
free (buffer);
buffer = malloc (bytes * sizeof (uint8_t));
for (int i = 0; i < bytes; i++)
buffer[i] = 0;
}
void bit_array_resize (int new_n)
{
length = new_n;
bytes = (length + 7) / 8;
buffer = realloc (buffer, bytes * sizeof (uint8_t));
}
void bit_array_done (void)
{
free (buffer);
buffer = NULL;
length = 0;
bytes = 0;
}
void check_index (int i)
{
if (!buffer)
error (1, 0, "array not initialised");
if (i < 0 || i >= length)
error (1, 0, "index %d out of range (0, ..., %d)", i, length - 1);
}
void bit_array_set (int i, int value)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (value)
buffer[byte_index] |= mask;
else
buffer[byte_index] &= ~mask;
}
void bit_array_flip (int i)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
buffer[byte_index] ^= mask;
}
int bit_array_get (int i)
{
check_index (i);
int byte_index = i / 8;
int bit_index = i % 8;
uint8_t mask = 1 << bit_index;
if (buffer[byte_index] & mask)
return 1;
else
return 0;
}
void output (void)
{
for (int i = 0; i < length; i++)
{
if (i % 4 == 0)
printf (" ");
printf ("%d", bit_array_get (i));
}
printf ("\n");
}
int main (void)
{
bit_array_init (29);
output ();
bit_array_set (12, 1);
output ();
bit_array_flip (28);
output ();
bit_array_set (12, 0);
output ();
bit_array_flip (31);
output ();
bit_array_done ();
}
...@@ -29,6 +29,7 @@ Vortragsfolien und Beispiele: ...@@ -29,6 +29,7 @@ Vortragsfolien und Beispiele:
* [21.01.2021: Hardwarenahe Programmierung: Interrupts, volatile-Variable, Byte-Reihenfolge – Endianness, Binärdarstellung negativer Zahlen, Speicherausrichtung – Alignment](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-20210121.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210121/) * [21.01.2021: Hardwarenahe Programmierung: Interrupts, volatile-Variable, Byte-Reihenfolge – Endianness, Binärdarstellung negativer Zahlen, Speicherausrichtung – Alignment](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-20210121.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210121/)
* [28.01.2021: Objektorientierte Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-20210128.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210128/) * [28.01.2021: Objektorientierte Programmierung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-20210128.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210128/)
* [04.02.2021: Objektorientierte Programmierung: virtuelle Methoden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-20210204.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210204/) * [04.02.2021: Objektorientierte Programmierung: virtuelle Methoden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-20210204.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210204/)
* [11.02.2021: Objektorientierte Programmierung: virtuelle Methoden](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-20210211.pdf) [**(Beispiele)**](https://gitlab.cvh-server.de/pgerwinski/hp/tree/2020ws/20210211/)
* [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/hp-slides-2020ws.pdf) * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/hp-slides-2020ws.pdf)
Übungsaufgaben: Übungsaufgaben:
...@@ -45,6 +46,7 @@ Vortragsfolien und Beispiele: ...@@ -45,6 +46,7 @@ Vortragsfolien und Beispiele:
* [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-uebung-20210121.pdf) * [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-uebung-20210121.pdf)
* [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-uebung-20210128.pdf) * [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-uebung-20210128.pdf)
* [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-uebung-20210204.pdf) * [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-uebung-20210204.pdf)
* [11.02.2021: Stack-Operationen, einfach und doppelt verkettete Listen, ternärer Baum](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-uebung-20210211.pdf)
Musterlösungen: Musterlösungen:
--------------- ---------------
...@@ -59,6 +61,7 @@ Musterlösungen: ...@@ -59,6 +61,7 @@ Musterlösungen:
* [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-musterloesung-20210121.pdf) * [21.01.2021: Trickprogrammierung, Thermometer-Baustein an I²C-Bus, LED-Blinkmuster](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210121/hp-musterloesung-20210121.pdf)
* [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-musterloesung-20210128.pdf) * [28.01.2021: Speicherformate von Zahlen, Personen-Datenbank, objektorientierte Tier-Datenbank](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210128/hp-musterloesung-20210128.pdf)
* [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-musterloesung-20210204.pdf) * [04.02.2021: Objektorientierte Tier-Datenbank (Neuauflage), Iterationsfunktionen, dynamisches Bit-Array](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210204/hp-musterloesung-20210204.pdf)
* [11.02.2021: Stack-Operationen, einfach und doppelt verkettete Listen, ternärer Baum](https://gitlab.cvh-server.de/pgerwinski/hp/raw/2020ws/20210211/hp-musterloesung-20210211.pdf)
Tafelbilder: Tafelbilder:
------------ ------------
......
No preview for this file type
...@@ -34,4 +34,6 @@ ...@@ -34,4 +34,6 @@
\includepdf[pages=-]{20210128/hp-20210128.pdf} \includepdf[pages=-]{20210128/hp-20210128.pdf}
\pdfbookmark[1]{04.02.2021: Objektorientierte Programmierung: virtuelle Methoden}{20210204} \pdfbookmark[1]{04.02.2021: Objektorientierte Programmierung: virtuelle Methoden}{20210204}
\includepdf[pages=-]{20210204/hp-20210204.pdf} \includepdf[pages=-]{20210204/hp-20210204.pdf}
\pdfbookmark[1]{11.02.2021: Objektorientierte Programmierung: virtuelle Methoden}{20210211}
\includepdf[pages=-]{20210211/hp-20210211.pdf}
\end{document} \end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment