Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <limits>
- using namespace std;
- int getK()
- {
- int k;
- bool isValid = false;
- while (!isValid)
- {
- if (!(std::cin >> k) || k <= 0 || (std::cin.peek() != '\n')) // Проверяем, является ли введенное значение числом, является ли только числом и больше ли оно нуля
- {
- std::cout << "Ошибка ввода, недопустимое k или недопустимый формат. Введите только положительное число: ";
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- else
- {
- isValid = true; // Ввод корректен
- }
- }
- return k;
- }
- int getCount()
- {
- int count;
- bool isValid = false;
- while (!isValid)
- {
- if (!(std::cin >> count) || count <= 0 || (std::cin.peek() != '\n')) // Проверяем, является ли введенное значение числом, является ли только числом и больше ли оно нуля
- {
- std::cout << "Ошибка ввода, недопустимое кол-во элементов или недопустимый формат. Введите только положительное число: ";
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- else
- {
- isValid = true; // Ввод корректен
- }
- }
- return count;
- }
- void print(int* elements, int count)
- {
- for (int i = 0; i < count; i++)
- {
- cout << elements[i] << ' ';
- }
- cout << '\n';
- }
- void compress(int* elements, int count, int k)
- {
- int newPos = 0;
- for (int lastPos = 0; lastPos < count; lastPos++)
- {
- if ((lastPos + 1) % k != 0 && elements[lastPos] != 0)
- {
- elements[newPos] = elements[lastPos];
- newPos++;
- }
- }
- for (; newPos < count; newPos++)
- elements[newPos] = 0;
- }
- int getInt(const string& warning_message)
- {
- int element;
- bool isValid = false;
- while (!isValid)
- {
- if (!(cin >> element) || (cin.peek() != '\n'))
- {
- cout << warning_message << endl;
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- else
- isValid = true;
- }
- return element;
- }
- void inputValues(int& count, int& k, int*& elements)
- {
- const string warning_message1 = "Ошибка ввода, недопустимое k или недопустимый формат.Введите только положительное число : ";
- const string warning_message2 = "Ошибка ввода, недопустимое кол - во элементов или недопустимый формат.Введите только положительное число : ";
- const string warning_message3 = "Элемент не является целым числом. Повторите попытку.";
- cout << "Введите k: ";
- k = getK(warning_message1);
- cout << "Введите кол-во элементов в массиве: ";
- count = getCount(warning_message2);
- elements = new int[count];
- cout << "Введите элементы массива: ";
- for (int i = 0; i < count; i++) {
- elements[i] = getData(elements, warning_message3);
- }
- }
- char GetChar() {
- while(true) {
- char ch;
- cin >> ch;
- if (std::cin.peek() == '\n') { //значит ввели один символ
- return ch;
- } else {
- std::cout << "Ошибка ввода. Введите один символ (Y/y для продолжения, любой другой для завершения): ";
- std::cin.clear();
- std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
- }
- }
- }
- bool RepeatCheck()
- {
- std::cout << "Для того чтобы повторить программу, введите (Y/y) или любой другой символ для остановки: ";
- char ch = GetChar();
- return ch == 'y' || ch == 'Y';
- }
- int main()
- {
- setlocale(LC_ALL, "Russian"); // Русская локаль
- char Repeat = 'y';
- do
- {
- int k, count;
- int* elements;
- inputValues(count, k, elements);
- compress(elements, count, k);
- print(elements, count);
- if (count == 1) {
- delete elements;
- } else if (count > 1) {
- delete[] elements;
- }
- } while (RepeatCheck());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement