Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- const int MAX_SIZE = 100;
- const int MIN_SIZE = 2;
- const int MIN_ELEMENT = -2147483648;
- const int MAX_ELEMENT = 2147483647;
- void writeTask()
- {
- cout << "Данная программа реализует сортировку простыми вставками\n";
- }
- int takeSizeArrFromConsole()
- {
- bool isNotCorrect;
- int size;
- do
- {
- isNotCorrect = false;
- cout << "Введите длину сортируемого массива: ";
- cin >> size;
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE)))
- {
- isNotCorrect = true;
- cout << "Введённое число не входит в допустимый диапазон. Повторите попытку...\n";
- }
- } while (isNotCorrect);
- return size;
- }
- string takePathToFile()
- {
- bool isNotCorrect;
- string path;
- fstream file;
- do
- {
- isNotCorrect = false;
- cout << "Введите путь к файлу: ";
- cin >> path;
- file.open(path);
- if (!file.is_open())
- {
- isNotCorrect = true;
- cout << "Файл не найден. Повторите попытку...\n";
- }
- } while (isNotCorrect);
- file.close();
- return path;
- }
- void printArr(int* arr, int size)
- {
- for (int i = 0; i < size; i++)
- {
- cout << arr[i] << " ";
- }
- cout << endl;
- }
- int* takeArrFromConsole(int size)
- {
- bool isNotCorrect;
- int* arr = new int[size];
- for (int i = 0; i < size; i++)
- {
- do
- {
- isNotCorrect = false;
- cout << "Введите элемент №" << (i + 1) << "массива: ";;
- cin >> arr[i];
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT)))
- {
- isNotCorrect = true;
- cout << "Введённое значение не входит в допустимый диапазон.Повторите попытку...\n";
- }
- } while (isNotCorrect);
- }
- return arr;
- }
- int* takeArrFromFile(int& size)
- {
- int* arr;
- bool isNotCorrect;
- fstream file;
- cout << "Требуется файл для чтения. ";
- string path = takePathToFile();
- do
- {
- isNotCorrect = false;
- file.open(path);
- file >> size;
- if (file.fail())
- {
- file.clear();
- while (file.get() != '\n');
- cout << "Некорректно введённый размер массива. ";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE)))
- {
- cout << "Размер массива неверного диапазона! ";
- isNotCorrect = true;
- }
- arr = new int[size];
- int i = 0;
- while ((!isNotCorrect) && (i < size))
- {
- file >> arr[i];
- if (file.fail())
- {
- cout << "Ошибка! Найдено некорректное значение элемента массива. ";
- isNotCorrect = true;
- i--;
- }
- i++;
- }
- if (isNotCorrect)
- {
- cout << "Повторите попытку...\n";
- file.close();
- path = takePathToFile();
- }
- } while (isNotCorrect);
- return arr;
- }
- int chooseInputOutputMethod()
- {
- bool isNotCorrect;
- int choice;
- do
- {
- isNotCorrect = false;
- cin >> choice;
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (choice != 1) && (choice != 2))
- {
- cout << "Введите либо 1, либо 2. Ваш выбор: \n";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- int* getArrForSort(int& size)
- {
- cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
- int choice = chooseInputOutputMethod();
- int* arr;
- if (choice == 1)
- {
- size = takeSizeArrFromConsole();
- arr = takeArrFromConsole(size);
- }
- else
- {
- arr = takeArrFromFile(size);
- }
- cout << "Полученный массив: ";
- printArr(arr, size);
- return arr;
- }
- void sort(int*& arr, int size)
- {
- int i, j, x;
- for (i = 1; i < size; i++)
- {
- x = arr[i];
- j = i;
- while ((j > 0) && (arr[j - 1] > x))
- {
- arr[j] = arr[j - 1];
- j--;
- }
- arr[j] = x;
- printArr(arr, size);
- }
- }
- void outputSortedArrInFile(int* arr, int size)
- {
- cout << "Требуется файл для записи. ";
- string path = takePathToFile();
- ofstream file;
- file.open(path);
- file << "Полученный массив: ";
- for (int i = 0; i < size; i++)
- {
- file << arr[i] << " ";
- }
- file.close();
- cout << "Отсортированный массив записан в файл!\n";
- }
- void outputSortedArr(int* arr, int size)
- {
- cout << "Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ";
- int choice = chooseInputOutputMethod();
- if (choice == 1)
- {
- cout << "Полученный массив: ";
- for (int i = 0; i < size; i++)
- {
- cout << arr[i] << " ";
- }
- }
- else
- {
- outputSortedArrInFile(arr, size);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- writeTask();
- int size = 0;
- int* arr = getArrForSort(size);
- cout << "Процесс сортировки:\n";
- sort(arr, size);
- outputSortedArr(arr, size);
- delete[] arr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement