Advertisement
Ewerlost

Lab2_3C++

Oct 23rd, 2023
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <iomanip>
  5. #include <windows.h>  
  6.  
  7. using namespace std;
  8.  
  9. const int
  10.     MAX_NUM = 1000000,
  11.     MIN_NUM = 1;
  12.  
  13. int getNum(int min, int max)
  14. {
  15.     int n;
  16.     bool isNotCorrect;
  17.     do
  18.     {
  19.         isNotCorrect = true;
  20.         cin >> n;
  21.         if (cin.fail() || (cin.get() != '\n'))
  22.         {
  23.             cout << "Введены некорректные данные" << endl;
  24.             cin.clear();
  25.             while (cin.get() != '\n');
  26.         }
  27.         else
  28.         {
  29.             cin.clear();
  30.             if (min < n || max > n)
  31.             {
  32.                 isNotCorrect = false;
  33.             }
  34.             else
  35.             {
  36.                 cout << "Введено значение не входящее в диапазон допустимых значений" << endl;
  37.             }
  38.         }
  39.     } while (isNotCorrect);
  40.     return n;
  41. }
  42.  
  43. bool checkFile(const string path, int& n)
  44. {
  45.     ifstream inputFile;
  46.     bool isIncorrect;
  47.  
  48.     isIncorrect = false;
  49.  
  50.     inputFile.open(path);
  51.     inputFile >> n;
  52.  
  53.     if (inputFile.fail())
  54.     {
  55.         inputFile.clear();
  56.         isIncorrect = true;
  57.         cout << "Файл не найден или данные некорректны." << endl << "Внесите изменения в файл и повторите попытку." << endl;
  58.     }
  59.  
  60.     else if (!inputFile.eof())
  61.     {
  62.         cout << "Данные в файле представлены в неправильном формате!" << endl << "Внесите изменения в файл и повторите попытку." << endl;
  63.         isIncorrect = true;
  64.         inputFile.clear();
  65.     }
  66.  
  67.     else if ((MIN_NUM > n) || (MAX_NUM < n))
  68.     {
  69.         isIncorrect = true;
  70.         cout << "Введено значение не входящее в диапазон допустимых значений" << endl << "Внесите изменения в файл и повторите попытку" << endl;
  71.     }
  72.     inputFile.close();
  73.     return isIncorrect;
  74. }
  75.  
  76. int inputNum()
  77. {
  78.     int choice, n;
  79.     bool isFileIncorrect;
  80.     string pathFile;
  81.  
  82.     cout << "Выберете вариант ввода" << endl << "1.Ввод из консоли" << endl << "2.Ввод из файла" << endl;
  83.     choice = getNum(1, 2);
  84.     if (choice == 1)
  85.     {
  86.         cout << "Введите число для проверки, является ли оно палиндромом" << endl;
  87.         n = getNum(MIN_NUM, MAX_NUM);
  88.     }
  89.     else
  90.     {
  91.         cout << "Данные в файле должны содержать натуральное число" << endl;
  92.         do
  93.         {
  94.             cout << "Введите путь к файлу с его расширением:";
  95.             cin >> pathFile;
  96.             isFileIncorrect = checkFile(pathFile, n);
  97.         } while (isFileIncorrect);
  98.     }
  99.     return n;
  100. }
  101.  
  102. int analysNum(int number)
  103. {
  104.     int k;
  105.     k = 0;
  106.     while (number > 0)
  107.     {
  108.         number /= 10;
  109.         k++;
  110.     }
  111.     return k;
  112. }
  113.  
  114. void creatArr(int* A, int sizeA, int number)
  115. {
  116.     for (int i = 0; i < sizeA; i++)
  117.     {
  118.         A[i] = number % 10;
  119.         number /= 10;
  120.     }
  121. }
  122.  
  123. bool check(int* arr, int sizeArr)
  124. {
  125.     bool solution;
  126.  
  127.     solution = true;
  128.     for (int i = 0; i < sizeArr / 2; i++)
  129.         if (arr[i] != arr[sizeArr - 1 - i])
  130.             solution = false;
  131.     return solution;
  132. }
  133.  
  134. void outputSolution(int* A, int  n) {
  135.     int choice;
  136.     ofstream outputFile;
  137.     string path;
  138.     bool isFileIncorrect, verdict;
  139.  
  140.     cout << "Выберите вариант вывода" << endl << "1.Вывод в консоль" << endl << "2.Вывод в файл";
  141.     choice = getNum(1, 2);
  142.     verdict = check(A,n);
  143.     if (choice == 1) {
  144.         if (verdict)
  145.             cout << "Число является палиндромом";
  146.         else
  147.             cout << "Число не является палиндромом";
  148.     }
  149.     else {
  150.         cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
  151.         cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
  152.         do {
  153.             cout << "Введите путь:";
  154.             cin >> path;
  155.             outputFile.open(path);
  156.             isFileIncorrect = false;
  157.  
  158.             if (verdict)
  159.                 outputFile << "Число является палиндромом";
  160.             else
  161.                 outputFile << "Число не является палиндромом";
  162.  
  163.             if (outputFile.fail()) {
  164.                 cout << "Не удалось вывести в файл! ";
  165.                 isFileIncorrect = true;
  166.                 outputFile.clear();
  167.             }
  168.         } while (isFileIncorrect);
  169.  
  170.         outputFile.close();
  171.         cout << "Вывод данных... успешно!";
  172.     }
  173. }
  174.  
  175. int main()
  176. {
  177.     setlocale(LC_ALL, "Russian");
  178.  
  179.     int number, lengthA;
  180.  
  181.     SetConsoleOutputCP(CP_UTF8);
  182.  
  183.     cout << "Эта программа определит, является ли заданное натуральное число P палиндромом\nДиапазон для ввода числа от 1 до 1000000\n";
  184.     number = inputNum();
  185.     lengthA = analysNum(number);
  186.     int* A = new int[lengthA];
  187.     creatArr(A, lengthA, number);
  188.     outputSolution(A, lengthA);
  189.     return 0;
  190. }
  191.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement