Advertisement
Derga

Untitled

Oct 8th, 2023
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <limits>
  3.  
  4. using namespace std;
  5.  
  6. int getK()
  7. {
  8. int k;
  9. bool isValid = false;
  10. while (!isValid)
  11. {
  12. if (!(std::cin >> k) || k <= 0 || (std::cin.peek() != '\n')) // Проверяем, является ли введенное значение числом, является ли только числом и больше ли оно нуля
  13. {
  14. std::cout << "Ошибка ввода, недопустимое k или недопустимый формат. Введите только положительное число: ";
  15. std::cin.clear();
  16. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  17. }
  18. else
  19. {
  20. isValid = true; // Ввод корректен
  21. }
  22. }
  23. return k;
  24. }
  25.  
  26. int getCount()
  27. {
  28. int count;
  29. bool isValid = false;
  30. while (!isValid)
  31. {
  32. if (!(std::cin >> count) || count <= 0 || (std::cin.peek() != '\n')) // Проверяем, является ли введенное значение числом, является ли только числом и больше ли оно нуля
  33. {
  34. std::cout << "Ошибка ввода, недопустимое кол-во элементов или недопустимый формат. Введите только положительное число: ";
  35. std::cin.clear();
  36. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  37. }
  38. else
  39. {
  40. isValid = true; // Ввод корректен
  41. }
  42. }
  43. return count;
  44. }
  45.  
  46. void print(int* elements, int count)
  47. {
  48. for (int i = 0; i < count; i++)
  49. {
  50. cout << elements[i] << ' ';
  51. }
  52. cout << '\n';
  53. }
  54.  
  55. void compress(int* elements, int count, int k)
  56. {
  57. int newPos = 0;
  58. for (int lastPos = 0; lastPos < count; lastPos++)
  59. {
  60. if ((lastPos + 1) % k != 0 && elements[lastPos] != 0)
  61. {
  62. elements[newPos] = elements[lastPos];
  63. newPos++;
  64. }
  65. }
  66. for (; newPos < count; newPos++)
  67. elements[newPos] = 0;
  68. }
  69.  
  70. int getInt(const string& warning_message)
  71. {
  72. int element;
  73. bool isValid = false;
  74.  
  75. while (!isValid)
  76. {
  77. if (!(cin >> element) || (cin.peek() != '\n'))
  78. {
  79. cout << warning_message << endl;
  80. std::cin.clear();
  81. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  82. }
  83. else
  84. isValid = true;
  85. }
  86. return element;
  87. }
  88.  
  89. void inputValues(int& count, int& k, int*& elements)
  90. {
  91. const string warning_message1 = "Ошибка ввода, недопустимое k или недопустимый формат.Введите только положительное число : ";
  92. const string warning_message2 = "Ошибка ввода, недопустимое кол - во элементов или недопустимый формат.Введите только положительное число : ";
  93. const string warning_message3 = "Элемент не является целым числом. Повторите попытку.";
  94.  
  95. cout << "Введите k: ";
  96. k = getK(warning_message1);
  97.  
  98. cout << "Введите кол-во элементов в массиве: ";
  99. count = getCount(warning_message2);
  100.  
  101. elements = new int[count];
  102.  
  103. cout << "Введите элементы массива: ";
  104. for (int i = 0; i < count; i++) {
  105. elements[i] = getData(elements, warning_message3);
  106. }
  107. }
  108.  
  109. char GetChar() {
  110. while(true) {
  111. char ch;
  112. cin >> ch;
  113. if (std::cin.peek() == '\n') { //значит ввели один символ
  114. return ch;
  115. } else {
  116. std::cout << "Ошибка ввода. Введите один символ (Y/y для продолжения, любой другой для завершения): ";
  117. std::cin.clear();
  118. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  119. }
  120. }
  121. }
  122.  
  123. bool RepeatCheck()
  124. {
  125. std::cout << "Для того чтобы повторить программу, введите (Y/y) или любой другой символ для остановки: ";
  126. char ch = GetChar();
  127. return ch == 'y' || ch == 'Y';
  128. }
  129.  
  130. int main()
  131. {
  132. setlocale(LC_ALL, "Russian"); // Русская локаль
  133. char Repeat = 'y';
  134. do
  135. {
  136. int k, count;
  137. int* elements;
  138. inputValues(count, k, elements);
  139. compress(elements, count, k);
  140. print(elements, count);
  141.  
  142. if (count == 1) {
  143. delete elements;
  144. } else if (count > 1) {
  145. delete[] elements;
  146. }
  147.  
  148. } while (RepeatCheck());
  149.  
  150. return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement