Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- const int MIN_A_VALUE = -1000000;
- const int MAX_A_VALUE = 1000000;
- const int MAX_ARR_LENGTH = 10;
- const int MIN_ARR_LENGTH = 1;
- int inputInt(int min, int max) {
- int num = 0;
- bool isNotCorrect = true;
- do {
- cout << "Введите число: \n";
- cin >> num;
- if (cin.fail() || (cin.get() != '\n'))
- {
- cout << "Введены некорректные данные" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- else
- {
- cin.clear();
- if (min <= num && max >= num)
- {
- isNotCorrect = false;
- }
- else
- {
- cout << "Введено значение не входящее в диапазон допустимых значений"
- << endl;
- }
- }
- } while (isNotCorrect);
- return num;
- }
- void inputConsoleArray(int*& arr, int& len)
- {
- cout << "Введите число элементов масcива: \n";
- len = inputInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
- arr = new int[len];
- for (int i = 0; i < len; i++)
- {
- cout << "Введите элемент массива №" << i + 1 << ":\n";
- arr[i] = inputInt(MIN_A_VALUE, MAX_A_VALUE);
- }
- }
- string inputFilePathForInput()
- {
- ifstream fin;
- string path;
- bool isIncorrect;
- do
- {
- isIncorrect = false;
- cout << "Введите путь к файлу для получения исходных данных: \n";
- cin >> path;
- fin.open(path);
- if (!isIncorrect && !fin.is_open())
- {
- cout << "Файл по введенному пути не найден! Проверьте корректность введенных данных и повторите ввод.\n";
- isIncorrect = true;
- }
- } while (isIncorrect);
- fin.close();
- return path;
- }
- string inputFilePathForOutput()
- {
- string path;
- string extension;
- bool isIncorrect;
- cout << "Введите путь к файлу для вывода ответа(если файла не существует, он будет создан автоматически): \n";
- cin >> path;
- return path;
- }
- bool checkAndTakeFileData(const string path, int*& arr, int& len)
- {
- ifstream fin;
- bool isIncorrect;
- fin.open(path);
- isIncorrect = false;
- fin >> len;
- arr = new int[len];
- if (fin.fail())
- {
- fin.clear();
- isIncorrect = true;
- cout << "Данные в файле представлены в неправильном формате! Внесите изменения в файл и повторите попытку.\n" << endl;
- while (fin.get() != '\n');
- }
- if (!isIncorrect && ((MIN_ARR_LENGTH > len) || (MAX_ARR_LENGTH < len)))
- {
- isIncorrect = true;
- cout << "Данные в файле представлены в неправильном формате! Внесите изменения в файл и повторите попытку.\n" << endl;
- }
- int i = 0;
- while ((i < (len)) && (!isIncorrect))
- {
- fin >> arr[i];
- if (!fin.eof() && fin.fail())
- {
- cout << "Массив введен некорректно! Внесите изменения в файл и повторите попытку.\n" << endl;
- isIncorrect = true;
- fin.clear();
- while (cin.get() != '\n');
- }
- if (!isIncorrect && ((MIN_A_VALUE > arr[i]) || (MAX_A_VALUE < arr[i])))
- {
- isIncorrect = true;
- cout << "Данные в файле представлены в неправильном формате! Внесите изменения в файл и повторите попытку.\n" << endl;
- }
- i++;
- }
- fin.close();
- return isIncorrect;
- }
- void inputArray(int*& arr, int choice, int& length)
- {
- if (choice == 1)
- {
- inputConsoleArray(arr, length);
- }
- else
- {
- bool IsIncorrect;
- string path;
- do
- {
- path = inputFilePathForInput();
- IsIncorrect = checkAndTakeFileData(path, arr, length);
- } while (IsIncorrect);
- }
- }
- void sortArr(int*& arr, const int length)
- {
- int i, j, buff;
- for (i = 1; i < length; i++)
- {
- buff = arr[i];
- j = i;
- while ((j > 0) && (arr[j - 1] > buff))
- {
- arr[j] = arr[j - 1];
- j--;
- }
- arr[j] = buff;
- }
- }
- void outputAnswer(int choice, const int* arr, const int length)
- {
- int i;
- if (choice == 1)
- {
- cout << "Результат" << endl;
- for (i = 0; i < length; i++) {
- cout << arr[i] << " ";
- }
- }
- else
- {
- ofstream fout;
- bool isFileIncorrect = false;
- string path;
- path = inputFilePathForOutput();
- fout.open(path);
- do {
- isFileIncorrect = false;
- fout << "Результат:\n";
- for (i = 0; i < length; i++) {
- fout << arr[i] << " ";
- }
- if (fout.fail()) {
- cout << "Не удалось вывести в файл\n";
- isFileIncorrect = true;
- }
- } while (isFileIncorrect);
- fout.close();
- }
- }
- int main()
- {
- const int CONSOLE_CHOICE_NUMBER = 1;
- const int FILE_CHOICE_NUMBER = 2;
- setlocale(LC_ALL, "Russian");
- cout << "Программа сортирует массив методом простых вставок.\n" << "Диапазон значений для длины массива - от 1 до 10.\n" << "Диапазон для элементов массива - от -1000000 до 1000000." << endl;
- int length, choiceInput, choiceOutput;
- int* arr = nullptr;
- cout << "Доступные варианты ввода данных:\n1. Ввод через консоль.\n2. Ввод через файл." << endl;
- choiceInput = inputInt(CONSOLE_CHOICE_NUMBER, FILE_CHOICE_NUMBER);
- inputArray(arr, choiceInput, length);
- cout << "Доступные варианты вывода данных:\n1. Вывод через консоль.\n2. Вывод через файл." << endl;
- choiceOutput = inputInt(CONSOLE_CHOICE_NUMBER, FILE_CHOICE_NUMBER);
- sortArr(arr, length);
- outputAnswer(choiceOutput, arr, length);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement