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