Advertisement
193030

DR5. 02. Bit arrays ready

Nov 21st, 2021
1,228
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.02 KB | None
  1. #include <stdio.h>
  2. #define UNSIGNED_INT_SIZE (sizeof(unsigned int))
  3. #define SET_SIZE 3
  4. unsigned size(int A[], unsigned n)
  5. {
  6.     return (n * sizeof(int) * 8);
  7. }
  8.  
  9. int contains(unsigned a[], unsigned n, unsigned k)
  10. {
  11.     if (a[k / UNSIGNED_INT_SIZE] & 1 << (k % UNSIGNED_INT_SIZE))
  12.         return 1;
  13.     else
  14.         return 0;
  15.  
  16. }
  17.  
  18. void  add(int a[], int n, int k)
  19. {
  20.     a[k / UNSIGNED_INT_SIZE] |= 1 << (k % UNSIGNED_INT_SIZE);
  21. }
  22.  
  23.  
  24. void  Remove(int a[], int n, int k)
  25. {
  26.     a[k / UNSIGNED_INT_SIZE] &= ~(1 << (k % UNSIGNED_INT_SIZE));
  27. }
  28.  
  29.  
  30.  
  31. void Union(int a[], int b[], int c[], int n)
  32. {
  33.     for (int i = 0; i < n; i++)
  34.     {
  35.         c[i] = a[i] | b[i];
  36.     }
  37. }
  38.  
  39. void subtract(int a[], int b[], int c[], int n)
  40. {
  41.     for (int i = 0; i < n; i++)
  42.     {
  43.         c[i] = a[i] ^ b[i];
  44.     }
  45. }
  46.  
  47. void print(int a[], int n)
  48. {
  49.     printf("\n");
  50.     for (int i = 0; i < n; i++)
  51.         printf("%d ", a[i]);
  52. }
  53.  
  54. int main()
  55. {
  56.     int A[SET_SIZE] = { 0 };
  57.     int n = sizeof(A) / sizeof(A[0]);
  58.    
  59.     int a[] = { 10,20,30 };
  60.     int b[] = { 10,22,30 };
  61.     int c[SET_SIZE] = { 0 };
  62.     int c2[SET_SIZE] = { 0 };
  63.    
  64.     add(A, n, 3);
  65.     print(A, n); // Принтиране на резултата след функцията add на първия ред
  66.     Remove(A,n,3);
  67.     print(A, n); // Принтиране на резултата след функцията remove на втория ред
  68.     printf(" \nsize: %d", size(A, n)); // Принтиране на резултата от функцията size на третия ред
  69.  
  70.     Union(a, b, c, SET_SIZE);
  71.     subtract(a, b, c2, SET_SIZE);
  72.     print(c, SET_SIZE);   // Принтиране на резултата след функцията Union на четвъртия ред
  73.     print(c2, SET_SIZE);  // Принтиране на резултата след функцията subtract на петия ред
  74.     printf("\n%d", contains(a, SET_SIZE, 3));  // Принтиране на резултата от contains на шестия ред
  75.  
  76. }
  77.  
Advertisement
RAW Paste Data Copied
Advertisement