From 4a3afaf44aa29e66a6c879c60322015a2920a5ab Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Mon, 10 Mar 2025 10:31:33 +0100 Subject: Ajout de la semaine des cours du 3 au 7 mars --- .../informatique/tme/semaine5/30_compression.c | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 semestre 2/informatique/tme/semaine5/30_compression.c (limited to 'semestre 2/informatique/tme/semaine5/30_compression.c') diff --git a/semestre 2/informatique/tme/semaine5/30_compression.c b/semestre 2/informatique/tme/semaine5/30_compression.c new file mode 100644 index 0000000..161cd00 --- /dev/null +++ b/semestre 2/informatique/tme/semaine5/30_compression.c @@ -0,0 +1,64 @@ +#include +#include +#include +#define MIN 2 +#define MAX 15 + +int init_tab(int tab[MAX+1]) { + int size = rand()%(MAX-MIN+1)+MIN; + for (int i = 0; i < size; i++) { + tab[i] = rand()%2; + } + tab[size] = -1; + return size; +} + +void compress_tab(int tab_brut[], int tab_compress[]){ + int j = 0; + int last = -1; + int cnt = 0; + for (int i = 0; tab_brut[i] != -1; i++) { + if (last == -1 || tab_brut[i] != last) { + if (last != -1) { + int id = j++; + tab_compress[id*2] = cnt; + tab_compress[id*2+1] = last; + } + last = tab_brut[i]; + cnt = 0; + } + cnt++; + } + if (last != -1) { + int id = j++; + tab_compress[id*2] = cnt; + tab_compress[id*2+1] = last; + } + tab_compress[j*2] = -1; +} + +int compare(int tab_brut[], int tab_compress[]){ + int j = 0; + for (int i = 0; tab_compress[i] != -1; i += 2) { + int n = tab_compress[i]; + int v = tab_compress[i+1]; + for (int cnt = 0; cnt < n; cnt++) { + if (tab_brut[j++] != v) return 0; + } + } + return 1; +} + +int main(){ + srand(time(NULL)); + int tab[MAX+1] = {}; + int tab_compress[MAX+1] = {}; + init_tab(tab); + compress_tab(tab, tab_compress); + for (int i = 0; tab[i] != -1; i++) printf("%d, ", tab[i]); + printf("\n"); + for (int i = 0; tab_compress[i] != -1; i += 2) printf("%d:%d, ", tab_compress[i], tab_compress[i+1]); + printf("\n"); + printf("%s", compare(tab, tab_compress) ? "True" : "False"); + return 0; +} -- cgit v1.2.3