This shows you the differences between two versions of the page.
| — |
programare:laboratoare:lab12-bitset-example [2025/12/14 02:32] (current) darius.neatu created |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | === Codificare=== | ||
| + | Presupunem că avem vectorul ** unsigned char s[3]; **. s[0], s[1], s[2] fiecare reprezintă câte o variabilă pe 8 biți pe care initial ii setam pe 0. | ||
| + | |||
| + | |||
| + | ^ ^ ^ ^ ^ s[0] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[1] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[2] ^ ^ ^ ^ ^ | ||
| + | ^ ^$b_7$^$b_ 6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ||
| + | ^ biti din S ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^ 0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ||
| + | |||
| + | În plus facem următoarea asociere: | ||
| + | |||
| + | ^ ^ ^ ^ ^ s[0] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[1] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[2] ^ ^ ^ ^ ^ | ||
| + | ^ ^$b_7$^$b_ 6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ||
| + | ^ biti din S ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^ 0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ||
| + | ^ numere asociate^7^6^5^4^3^2^1^0^ | ^15^14^13^12^11^10^9^8^ | ^23^22^21^20^19^18^17^16^ | ||
| + | |||
| + | Explicație: | ||
| + | * numerele **0, 8, 16** au fost asociate cu bitul **0** ($b_0$) in bytes diferiti. Pentru că toate dau restul impartirii la 8 egal cu **0**; | ||
| + | * numerele **1, 9, 17** au fost asociate cu bit-ul **1** ($b_1$). Pentru că toate dau restul impartirii la 8 egal cu **1**; | ||
| + | * numerele **2, 10, 18** au fost asociate cu bit-ul **2** ($b_2$). Pentru că toate dau restul impartirii la 8 egal cu **2**; | ||
| + | * numerele **3, 11, 19** au fost asociate cu bit-ul **3** ($b_3$). Pentru că toate dau restul impartirii la 8 egal cu **3**; | ||
| + | * ... | ||
| + | * numărul **i** a fost asociat cu bitul ** (i % 8) ** in byte-ul **(i / 8)**! | ||
| + | |||
| + | Observație! **card_set(s) == 0** (0 elemente in s) și **is_empty_set(s) == 1** (este **adevărat** că s e gol). | ||
| + | |||
| + | === Insert - exemplu 1 === | ||
| + | Să presupunem că pe mulțimea s de mai sus (inițial goală) se execută operația următoarea: | ||
| + | <code cpp> | ||
| + | insert_in_set(s, 8); | ||
| + | </code> | ||
| + | |||
| + | Noua mulțime s este **s = {8}** și arată astfel: | ||
| + | ^ ^ ^ ^ ^ s[0] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[1] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[2] ^ ^ ^ ^ ^ | ||
| + | ^ ^$b_7$^$b_ 6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ||
| + | ^ biti din S ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^1 ^ | ^ 0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ||
| + | ^ numere asociate^7^6^5^4^3^2^1^0^ | ^15^14^13^12^11^10^9^8^ | ^23^22^21^20^19^18^17^16^ | ||
| + | |||
| + | Explicație: numărul **8** a fost asociat cu bitul 0 (** 8 % 8 **) in byte-ul 1 (**8 / 8**). Acest bit a fost facut 1. | ||
| + | |||
| + | Observație! **card_set(s) == 1** (1 element in s) și **is_empty_set(s) == 0** (este **false** că s e gol). | ||
| + | |||
| + | |||
| + | === Insert - exemplu 2 === | ||
| + | Să presupunem că pe mulțimea s curentă se execută operația următoarea: | ||
| + | <code cpp> | ||
| + | insert_in_set(s, 19); | ||
| + | </code> | ||
| + | |||
| + | Noua mulțime s este **s = {8, 19}** și arată astfel: | ||
| + | ^ ^ ^ ^ ^ s[0] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[1] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[2] ^ ^ ^ ^ ^ | ||
| + | ^ ^$b_7$^$b_ 6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ||
| + | ^ biti din S ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^1 ^ | ^ 0 ^0 ^0 ^0 ^1 ^0 ^0 ^0 ^ | ||
| + | ^ numere asociate^7^6^5^4^3^2^1^0^ | ^15^14^13^12^11^10^9^8^ | ^23^22^21^20^19^18^17^16^ | ||
| + | |||
| + | Explicație: numărul **19** a fost asociat cu bitul 3 (** 19 % 8 **) in byte-ul 2 (**19 / 8**). Acest bit a fost facut 1. | ||
| + | |||
| + | Observație! **card_set(s) == 2** (2 elemente in s) și **is_empty_set(s) == 0** (este **false** că s e gol). | ||
| + | |||
| + | === Verificare - exemplu 1 === | ||
| + | Să presupunem că pe mulțimea s curentă se execută următoarele 2 operații: | ||
| + | <code cpp> | ||
| + | printf("%d", is_in_set(s, 3)); // afișează 0 | ||
| + | printf("%d", is_in_set(s, 19)); // afișează 1 | ||
| + | </code> | ||
| + | |||
| + | * ** is_in_set(s, 3)** returnează 0 pentru că 3 **NU** face parte din s (bitul $b_3$ din byteul s[0] este egal cu 0) | ||
| + | * ** is_in_set(s, 19)** returnează 1 pentru că 19 face parte din s (bitul $b_3$ din byteul s[2] este egal cu 0) | ||
| + | |||
| + | |||
| + | === Delete - exemplu 1 === | ||
| + | Să presupunem că pe mulțimea s curentă se execută operația următoarea: | ||
| + | <code cpp> | ||
| + | delete_from_set(s, 19); | ||
| + | </code> | ||
| + | |||
| + | Noua mulțime s este **s = {8}** și arată astfel: | ||
| + | ^ ^ ^ ^ ^ s[0] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[1] ^ ^ ^ ^ ^ | ^ ^ ^ ^ s[2] ^ ^ ^ ^ ^ | ||
| + | ^ ^$b_7$^$b_ 6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ^ $b_7$^$b_6$^$b_5$^$b_4$^$b_3$^$b_2$^$b_1$^$b_0$^ | ||
| + | ^ biti din S ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^1 ^ | ^ 0 ^0 ^0 ^0 ^0 ^0 ^0 ^0 ^ | ||
| + | ^ numere asociate^7^6^5^4^3^2^1^0^ | ^15^14^13^12^11^10^9^8^ | ^23^22^21^20^19^18^17^16^ | ||
| + | |||
| + | Explicație: numărul **19** a fost asociat cu bitul 3 (** 19 % 8 **) in byte-ul 2 (**19 / 8**). Acest bit a fost facut 0. | ||
| + | |||
| + | Observație! **card_set(s) == 1** (1 element in s) și **is_empty_set(s) == 0** (este **false** că s e gol). | ||
| + | |||
| + | === Verificare - exemplu 1 === | ||
| + | Să presupunem că pe mulțimea s curentă se execută următoarele 2 operații: | ||
| + | <code cpp> | ||
| + | printf("%d", is_in_set(s, 19)); // afișează 0 | ||
| + | </code> | ||
| + | |||
| + | * ** is_in_set(s, 19)** returnează 0 pentru că 19 **NU ** mai face parte din S (bitul $b_3$ din byteul s[2] este egal cu 0) | ||
| + | |||