Advertisement
meta1211

Untitled

Dec 27th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. /*25) Массив переменных типа unsigned int рассматривается как последовательность битов.
  2. Инвертировать подпоследовательность битов размера n с позиции p.
  3. Предполагается, что подпоследовательность битов может пересекать границы переменной int.Параметры p, n вводятся с клавиатуры.*/
  4.  
  5. #define _CRT_SECURE_NO_WARNINGS
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string>
  9. #include <iostream>
  10. #define UI unsigned int
  11.  
  12. UI Ust1(UI v, int k)
  13.  
  14. {
  15. UI mask = 1;
  16. mask <<= k;
  17. v |= mask;
  18. return v;
  19.  
  20. }
  21.  
  22. UI Ust0(UI v, int k)
  23.  
  24. {
  25. UI mask = 1;
  26. mask <<= k;
  27. v &= (~mask);
  28. return v;
  29.  
  30. }
  31.  
  32. UI VvodBV(int n)
  33.  
  34. {
  35. UI v = 0, mask = 1; char s[33]; int i;
  36. std::cout << "input array:" << std::endl;
  37. std::cin >> s;
  38. for (i = 0; s[i]; i++)
  39. {
  40. v <<= 1;
  41. if (s[i] == '1') v++;
  42.  
  43. }
  44. return v;
  45.  
  46. }
  47. void PrintBV(UI v, UI n) {
  48. UI mask = 1, i;
  49. mask <<= n - 1;
  50. for (i = 0; i<n; i++, mask >>= 1)
  51. if (v&mask) putchar('1');
  52. else putchar('0');
  53. printf("\n");
  54. }
  55.  
  56. UI invert_n(UI vector, int len, int count, int begin)
  57. {
  58. UI mask = 1;
  59. mask <<= len - 1;
  60. mask >>= begin;
  61. for (int i = 0; i < count; i++)
  62. {
  63. if (mask&vector)
  64. vector = Ust0(vector, len - begin - i - 1);
  65. else
  66. vector = Ust1(vector, len - begin - i - 1);
  67. mask >>= 1;
  68. if (len - begin - i> len)
  69. return vector;
  70. }
  71. return vector;
  72. }
  73.  
  74. int main()
  75. {
  76. int n, len, p;
  77. std::cout << "input array length:" << std::endl;
  78. std::cin >> len;
  79. std::cout << "input how many elements you would to invert:" << std::endl;
  80. std::cin >> n;
  81. std::cout << "input start position:" << std::endl;
  82. std::cin >> p;
  83. UI vector;
  84. vector = VvodBV(len);
  85. vector = invert_n(vector, len, n, p);
  86. printf("result:\n");
  87. PrintBV(vector, len);
  88. system("pause");
  89. return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement