diff options
| author | Anhgelus Morhtuuzh <anhgelus@anhgelus.world> | 2025-03-10 10:31:33 +0100 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <anhgelus@anhgelus.world> | 2025-03-10 10:31:33 +0100 |
| commit | 4a3afaf44aa29e66a6c879c60322015a2920a5ab (patch) | |
| tree | 64d3e7748078b4215341aeead3b30eaaf28070ad /semestre 2/informatique/tme/semaine5/30_compression.c | |
| parent | 77bfb2ccd3152c1f41d43dc192ba86ca8fd0f72f (diff) | |
Ajout de la semaine des cours du 3 au 7 mars
Diffstat (limited to 'semestre 2/informatique/tme/semaine5/30_compression.c')
| -rw-r--r-- | semestre 2/informatique/tme/semaine5/30_compression.c | 64 |
1 files changed, 64 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <time.h> +#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; +} |
