Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- bool valueRange(int value, int inputType) {
- int maxValue, minValue;
- bool isCorrect;
- maxValue = 100;
- minValue = 1;
- isCorrect = true;
- if ((value < minValue) or (value > maxValue)) {
- isCorrect = false;
- if (inputType == 1) {
- cout << "Количество чисел не попало в диапазон данных. Попробуйте еще раз." << endl;
- }
- else {
- cout << "Число не попало в диапазон данных. Проверьте правильность ввода." << endl;
- }
- }
- return isCorrect;
- }
- int divive(int num) {
- int count;
- count = 0;
- for (int i = 1; i <= num; i++) {
- if (num % i == 0) {
- count++;
- }
- }
- return count;
- }
- void bubbleSort(int* arr, int* divArr) {
- int temp;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size - i - 1; j++) {
- if (divArr[j] < divArr[j + 1]) {
- temp = divArr[j];
- divArr[j] = divArr[j + 1];
- temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- }
- int readFromConsole(int inputType, int index) {
- bool isNotCorrect;
- int input;
- if (inputType == 1) {
- cout << "Введите длину массива: " << endl;
- }
- else {
- cout << "Введите " << (index + 1) << " элемент массива: " << endl;
- }
- do {
- isNotCorrect = false;
- cin >> input;
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Что-то пошло не так. Попробуйте еще раз." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- if (!isNotCorrect) {
- isNotCorrect = !valueRange(input, inputType);
- }
- } while (isNotCorrect);
- return input;
- }
- int* createArrayWithConsole() {
- int size;
- int* someArr;
- size = readFromConsole(1, 0);
- someArr = new int[size];
- for (int i = 0; i < size; i++) {
- someArr[i] = readFromConsole(2, i);
- }
- return someArr;
- }
- int* createDividorsArr(int* inputArr) {
- int* dividorArr;
- dividorArr = new int[size];
- for (int i = 0; i < size; i++) {
- dividorArr[i] = divide(inputArr[i]);
- }
- return dividorArr;
- }
- void writeInConsole(int* inputArr) {
- for (int i = 0; i < size; i++) {
- cout << inputArr[i] << " ";
- }
- }
- void info(int infoType) {
- if (infoType == 1) {
- cout << "Следуйте указаниям далее." << endl;
- cout << "Диапазон значений числа для сортировки = 1..100" << endl;
- cout << "Диапазон количества чисел для сортировки = 1..100" << endl;
- }
- else {
- cout << "Программа считывает только первую строку файла." << endl;
- cout << "Обратите внимание на то, какая запись у вас в файле." << endl;
- cout << "Правильная запись выглядит так: 1 2 3 4 5 6 7 8 9" << endl;
- cout << "Все числа идут через пробел, никаких запятых, точек и скобок." << endl;
- cout << "Диапазон значений числа для сортировки = 1..100" << endl;
- cout << "Диапазон количества чисел для сортировки = 1..100" << endl;
- }
- }
- int inputChoice() {
- int input;
- bool isNotCorrect;
- cout << "Если хотите использовать консоль - введите 1 // Если хотите использовать текстовый файл - введите 2." << endl;
- do {
- isNotCorrect = false;
- cout << input;
- if (cin.fail() or ((input != 1) and (input != 2))) {
- isNotCorrect = true;
- cout << "Произошла ошибка!" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- info(input);
- return input;
- }
- string findOutputFile() {
- string path;
- bool isNotOpen;
- do {
- isNotOpen = false;
- cout << "Введите путь к файлу вывода: " << endl;
- cin >> path;
- ofstream fout(path);
- if (fout.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- }
- else {
- cout << "Ошибка открытия файла!" << endl;
- isNotOpen = true;
- }
- fout.close();
- } while (isNotOpen);
- return path;
- }
- void writeToFile(int* input, string path) {
- ofstream fout(path, fstream::app);
- if (fout.is_open()) {
- cout << "Попытка записи..." << endl;
- }
- else {
- cout << "Что-то пошло не так." << endl;
- }
- for (int i = 0; i < size; i++) {
- fout << input[i] << " ";
- }
- cout << "Результат записан в файл." << endl;
- }
- void consoleInput() {
- int* intArr;
- int* arrayOfDividors;
- intArr = createArrayWithConsole();
- arrayOfDividors = createDividorsArr(intArr);
- bubbleSort(intArr, arrayOfDividors);
- writeInConsole(intArr);
- writeToFile(intArr, findOutputFile);
- }
- string findInputFile() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь файла: " << endl;
- cin >> path;
- ifstream fin(path);
- if (fin.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- }
- else {
- cout << "Ошибка открытия файла!" << endl;
- isNotCorrect = true;
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- int inputSizeFromFile(string path) {
- int size;
- bool isCorrect;
- int number;
- ifstream fin(path);
- isCorrect = true;
- size = 0;
- cout << "Читаю размер.." << endl;
- while (!fin.eof()) {
- fin >> number;
- size++;
- if (fin.fail()) {
- isCorrect = false;
- cout << "не получилось считать размер. Перепроверьте файл." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- }
- fin.close();
- if (isCorrect) {
- isCorrect = valueRange(size, 1);
- }
- else {
- size = 0;
- }
- return size;
- }
- int* inputArrFromFile(string path, int size) {
- bool isCorrect;
- int* inputArray;
- ifstream fin(path);
- isCorrect = true;
- inputArray = new int[size];
- cout << "Читаю элементы..." << endl;
- for (int i = 0; i < size; i++) {
- fin >> inputArray[i];
- if (fin.fail()) {
- isCorrect = false;
- cout << "Не удалось считать элементы. Перепроверьте файл." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- if (isCorrect) {
- isCorrect = valueRange(inputArray[i], 2);
- }
- }
- fin.close();
- if (!isCorrect) {
- delete[] inputArray;
- }
- return inputArray;
- }
- void fileInput() {
- int size;
- int* intArr;
- int* arrayOfDividors;
- string path;
- path = findInputFile();
- do {
- size = inputSizeFromFile(path);
- if (size == 0) {
- path = findInputFile();
- }
- } while (size == 0);
- do {
- intArr = inputArrFromFile(path, size);
- if (sizeof(intArr) == 0) {
- path = findInputFile();
- }
- } while (sizeof(intArr) == 0);
- arrayOfDividors = createDividorsArr(intArr);
- buubleSort(intArr, arrayOfDividors);
- writeInConsole(intArr);
- writeToFile(intArr, findOutputFile);
- }
- void procceedWithFileOrConsole(int input) {
- if (input == 1) {
- consoleInput();
- }
- else {
- fileInput();
- }
- }
- int main() {
- int choice;
- cout << "Эта программа сортирует массив натуральных чисел по количеству их делителей." << endl;
- choice = inputChoice();
- procceedWithFileOrConsole(choice);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement