Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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)
 +
  
programare/laboratoare/lab12-bitset-example.txt · Last modified: 2025/12/14 02:32 by darius.neatu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0