From 51f83d21964c090214fa8ac4eeac19ddab45392f Mon Sep 17 00:00:00 2001 From: Peter Gerwinski <peter@cassini.intern> Date: Fri, 15 Jan 2016 10:41:50 +0100 Subject: [PATCH] =?UTF-8?q?Musterl=C3=B6sung=20von=20P.=20Wiese=20zu=20Auf?= =?UTF-8?q?gabe=203=20vom=207.1.2016?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 20160114/bitarray_dyn.c | 111 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 20160114/bitarray_dyn.c diff --git a/20160114/bitarray_dyn.c b/20160114/bitarray_dyn.c new file mode 100644 index 0000000..28939e7 --- /dev/null +++ b/20160114/bitarray_dyn.c @@ -0,0 +1,111 @@ +#include<stdio.h> +#include<stdlib.h> + +char *array = NULL; +int size; +int numberOfBits = 0; + +void bit_array_init(int n){ + numberOfBits = n; + if(n%8==0){ + size = n/8; + }else{ + size = (n/8) + 1; + } + + array = malloc(size * sizeof(char)); + for(int i=0;i<size;i++){ + array[i] = 0; + } +} + +void bit_array_set(int i, int value){ + if((value==0||value==1)&&(i<numberOfBits)&&(i>=0)){ + int index = i/8; + int bit = i%8; + char potenz = 1; + /*for(int i=0;i<bit;i++){ + potenz*=2; + }*/ + potenz = 1<<bit; + if(value){ + array[index] |= potenz; + }else{ + array[index] &= ~potenz; + } + }else{ + printf("\nUngültige Werte\n"); + } +} + +int bit_array_get(int i){ + if((i<numberOfBits)&&(i>=0)){ + int index = i/8; + int bit = i%8; + + int help = array[index] >> bit; + + if((help%2)==0){ //Binärzahlen mit 0 als letztes Bit sind durch 2 teilbar! + return 0; + }else{ + return 1; + } + }else{ + printf("nö"); + } +} + +void bit_array_flip(int i){ + if(bit_array_get(i)){ + bit_array_set(i,0); + }else{ + bit_array_set(i,1); + } +} + +void bit_array_done(void){ + free(array); +} + +void bit_array_resize(int new_n){ + int oldSize = size; + char *help = malloc(size*sizeof(char)); + for(int i=0;i<size;i++){ + help[i] = array[i]; + } + bit_array_done(); + bit_array_init(new_n); + + if(size<=oldSize){ + for(int i=0;i<size;i++){ + array[i] = help[i]; + } + }else{ + for(int i=0;i<oldSize;i++){ + array[i] = help[i]; + } + } + free(help); +} + +void print_array(){ + printf("\n"); + for(int i=0;i<numberOfBits;i++){ + printf("%d ",bit_array_get(i)); + } +} + +int main(void){ + int bits = 10; + bit_array_init(bits); + bit_array_set(7,1); + bit_array_set(0,1); + bit_array_flip(6); + print_array(); + //bit_array_flip(7); + print_array(); + bit_array_resize(12); + print_array(); + bit_array_done(); + return 0; +} \ No newline at end of file -- GitLab