Advertisement
Ewerlost

Lab2_4C++

Oct 24th, 2023 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <windows.h>  
  5.  
  6. using namespace std;
  7.  
  8. const int
  9.     MIN_ARR_LENGTH = 1,
  10.     MAX_ARR_LENGTH = 100,
  11.     MIN_ARR_VALUE = -100,
  12.     MAX_ARR_VALUE = 100;
  13.  
  14. int getInt(int min, int max)
  15. {
  16.     int n;
  17.     bool isInCorrect;
  18.     do
  19.     {
  20.         isInCorrect = true;
  21.         cin >> n;
  22.         if (cin.fail() || (cin.get() != '\n'))
  23.         {
  24.             cout << "Введены некорректные данные" << endl;
  25.             cin.clear();
  26.             while (cin.get() != '\n');
  27.         }
  28.         else
  29.         {
  30.             cin.clear();
  31.             if (min < n || max > n)
  32.             {
  33.                 isInCorrect = false;
  34.             }
  35.             else
  36.             {
  37.                 cout << "Введено значение не входящее в диапазон допустимых значений" << endl;
  38.             }
  39.         }
  40.     } while (isInCorrect);
  41.     return n;
  42. }
  43.  
  44. void inputArrFromConsole(int* arr, int length)
  45. {
  46.     int i;
  47.     for (i = 0; i < length; i++)
  48.     {
  49.         cout << "Введите элемент последовательности №" << i + 1 << ":" << endl;
  50.         arr[i] = getInt(MIN_ARR_VALUE, MAX_ARR_VALUE);
  51.     }
  52. }
  53.  
  54. string inputFilePathForInput()
  55. {
  56.     ifstream fin;
  57.     string path;
  58.     bool isIncorrect;
  59.     do
  60.     {
  61.         isIncorrect = false;
  62.         cout << "Данные в файлы должны быть записаны следующим образом :\nN(длина последовательности)\na1 a2 a3 a4... an\n";
  63.         cout << "Введите путь к файлу для получения исходных данных: \n";
  64.         cin >> path;
  65.         fin.open(path);
  66.         if (!fin.is_open())
  67.         {
  68.             cout << "Файл по введенному пути не найден! Проверьте корректность введенных данных и повторите ввод.\n";
  69.                 isIncorrect = true;
  70.         }
  71.     } while (isIncorrect);
  72.     fin.close();
  73.     return path;
  74. }
  75.  
  76. string inputFilePathForOutput()
  77. {
  78.     string path;
  79.     string extension;
  80.  
  81.     cout << "Для вывода введите путь к файлу и его имя\n";
  82.         cin >> path;
  83.     return path;
  84. }
  85.  
  86. bool checkFileData(string path)
  87. {
  88.     ifstream fin;
  89.     bool isIncorrect;
  90.     fin.open(path);
  91.     isIncorrect = false;
  92.     int length;
  93.         fin >> length;
  94.         if (fin.fail())
  95.         {
  96.             fin.clear();
  97.             isIncorrect = true;
  98.             cout << "Данные в файле представлены в неправильном формате! Внесите изменения в файл и повторите попытку.\n";
  99.                 while (cin.get() != '\n');
  100.         }
  101.         int* checkArr = new int[length];
  102.         for (int i = 0; i < length; i++)
  103.         {
  104.             fin >> checkArr[i];
  105.             if (!fin.eof() && fin.fail())
  106.             {
  107.                 cout << "Последовательность введена некорректно! Внесите изменения в файл и повторите попытку.\n";
  108.                 isIncorrect = true;
  109.                 fin.clear();
  110.                 while (cin.get() != '\n');
  111.             }
  112.         }
  113.         delete[] checkArr;
  114.  
  115.     fin.close();
  116.     return isIncorrect;
  117. }
  118.  
  119. void inputFileArray(int* arr, int& lengthArr, const string path)
  120. {
  121.     ifstream fin;
  122.     fin.open(path);
  123.     fin >> lengthArr;
  124.     arr = new int[lengthArr];
  125.     for (int i = 0; i < lengthArr; i++)
  126.     {
  127.         fin >> arr[i];
  128.     }
  129.     fin.close();
  130. }
  131.  
  132. void inputArray(int*& arr, int choice, int& lengthArr)
  133. {
  134.     if (choice == 1)
  135.     {
  136.         cout << "Введите длину последовательности:\n";
  137.         lengthArr = getInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  138.         arr = new int[lengthArr];
  139.         inputArrFromConsole(arr, lengthArr);
  140.     }
  141.     else
  142.     {
  143.         bool IsIncorrect;
  144.         string path;
  145.         do
  146.         {
  147.             path = inputFilePathForInput();
  148.             IsIncorrect = checkFileData(path);
  149.         } while (IsIncorrect);
  150.         inputFileArray(arr, lengthArr, path);
  151.     }
  152. }
  153.  
  154.  
  155. bool analizeArr(int* arr, int lengthA)
  156. {
  157.     bool IsNonIncreasing;
  158.  
  159.     IsNonIncreasing = true;
  160.     for (int i = 0; i < lengthA - 1; i++)
  161.         if (arr[i] < arr[i + 1])
  162.             IsNonIncreasing = false;
  163.  
  164.     return IsNonIncreasing;
  165. }
  166.  
  167. void outputVerdict(int* arr, int choice, int length)
  168. {
  169.     bool verdict;
  170.    
  171.     verdict = analizeArr(arr, length);
  172.  
  173.     if (choice == 1)
  174.  
  175.     {
  176.         if (verdict)
  177.             cout << "Последовательность является невозрастающей";
  178.         else
  179.             cout << "Последовательность не является невозрастающей";
  180.     }
  181.     else
  182.     {
  183.         ofstream fout;
  184.         string path;
  185.         path = inputFilePathForOutput();
  186.         fout.open(path);
  187.             if (verdict)
  188.                 fout << "Последовательность является невозрастающей";
  189.             else
  190.                 fout << "Последовательность не является невозрастающей";
  191.         fout.close();
  192.     }
  193. }
  194.  
  195. int main()
  196. {
  197.  
  198.     int lengthA, choice;
  199.     int* arrA = new int;
  200.  
  201.     SetConsoleOutputCP(CP_UTF8);
  202.  
  203.     cout << "Эта программа определит, является ли заданная последовательность невозрастающей\nДиапазон для ввода длины последовательности от 1 до 100\nДиапазон для ввода элементов от -100 до 100\n";
  204.     cout << "Выберите способ ввода:\n1.Ввод из консоли\n2.Ввод из файла" << endl;
  205.     choice = getInt(1, 2);
  206.     inputArray(arrA, choice, lengthA);
  207.     cout << "Выберите способ вывода:\n1.Вывод в консоль\n2.Вывод в файл" << endl;
  208.     choice = getInt(1, 2);
  209.     outputVerdict(arrA, choice, lengthA);
  210.     return 0;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement