Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- #include <windows.h>
- using namespace std;
- const int
- MAX_NUM = 1000000,
- MIN_NUM = 1;
- int getNum(int min, int max)
- {
- int n;
- bool isNotCorrect;
- do
- {
- isNotCorrect = true;
- cin >> n;
- if (cin.fail() || (cin.get() != '\n'))
- {
- cout << "Введены некорректные данные" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- else
- {
- cin.clear();
- if (min < n || max > n)
- {
- isNotCorrect = false;
- }
- else
- {
- cout << "Введено значение не входящее в диапазон допустимых значений" << endl;
- }
- }
- } while (isNotCorrect);
- return n;
- }
- bool checkFile(const string path, int& n)
- {
- ifstream inputFile;
- bool isIncorrect;
- isIncorrect = false;
- inputFile.open(path);
- inputFile >> n;
- if (inputFile.fail())
- {
- inputFile.clear();
- isIncorrect = true;
- cout << "Файл не найден или данные некорректны." << endl << "Внесите изменения в файл и повторите попытку." << endl;
- }
- else if (!inputFile.eof())
- {
- cout << "Данные в файле представлены в неправильном формате!" << endl << "Внесите изменения в файл и повторите попытку." << endl;
- isIncorrect = true;
- inputFile.clear();
- }
- else if ((MIN_NUM > n) || (MAX_NUM < n))
- {
- isIncorrect = true;
- cout << "Введено значение не входящее в диапазон допустимых значений" << endl << "Внесите изменения в файл и повторите попытку" << endl;
- }
- inputFile.close();
- return isIncorrect;
- }
- int inputNum()
- {
- int choice, n;
- bool isFileIncorrect;
- string pathFile;
- cout << "Выберете вариант ввода" << endl << "1.Ввод из консоли" << endl << "2.Ввод из файла" << endl;
- choice = getNum(1, 2);
- if (choice == 1)
- {
- cout << "Введите число для проверки, является ли оно палиндромом" << endl;
- n = getNum(MIN_NUM, MAX_NUM);
- }
- else
- {
- cout << "Данные в файле должны содержать натуральное число" << endl;
- do
- {
- cout << "Введите путь к файлу с его расширением:";
- cin >> pathFile;
- isFileIncorrect = checkFile(pathFile, n);
- } while (isFileIncorrect);
- }
- return n;
- }
- int analysNum(int number)
- {
- int k;
- k = 0;
- while (number > 0)
- {
- number /= 10;
- k++;
- }
- return k;
- }
- void creatArr(int* A, int sizeA, int number)
- {
- for (int i = 0; i < sizeA; i++)
- {
- A[i] = number % 10;
- number /= 10;
- }
- }
- bool check(int* arr, int sizeArr)
- {
- bool solution;
- solution = true;
- for (int i = 0; i < sizeArr / 2; i++)
- if (arr[i] != arr[sizeArr - 1 - i])
- solution = false;
- return solution;
- }
- void outputSolution(int* A, int n) {
- int choice;
- ofstream outputFile;
- string path;
- bool isFileIncorrect, verdict;
- cout << "Выберите вариант вывода" << endl << "1.Вывод в консоль" << endl << "2.Вывод в файл";
- choice = getNum(1, 2);
- verdict = check(A,n);
- if (choice == 1) {
- if (verdict)
- cout << "Число является палиндромом";
- else
- cout << "Число не является палиндромом";
- }
- else {
- cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
- cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
- do {
- cout << "Введите путь:";
- cin >> path;
- outputFile.open(path);
- isFileIncorrect = false;
- if (verdict)
- outputFile << "Число является палиндромом";
- else
- outputFile << "Число не является палиндромом";
- if (outputFile.fail()) {
- cout << "Не удалось вывести в файл! ";
- isFileIncorrect = true;
- outputFile.clear();
- }
- } while (isFileIncorrect);
- outputFile.close();
- cout << "Вывод данных... успешно!";
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int number, lengthA;
- SetConsoleOutputCP(CP_UTF8);
- cout << "Эта программа определит, является ли заданное натуральное число P палиндромом\nДиапазон для ввода числа от 1 до 1000000\n";
- number = inputNum();
- lengthA = analysNum(number);
- int* A = new int[lengthA];
- creatArr(A, lengthA, number);
- outputSolution(A, lengthA);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement