Advertisement
ksyshshot

Lab.3.3

Nov 29th, 2022
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.54 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX_SIZE = 100;
  7. const int MIN_SIZE = 2;
  8. const int MIN_ELEMENT = -2147483648;
  9. const int MAX_ELEMENT = 2147483647;
  10.  
  11. void writeTask()
  12. {
  13.     cout << "Данная программа реализует сортировку простыми вставками\n";
  14. }
  15.  
  16. int takeSizeArrFromConsole()
  17. {
  18.     bool isNotCorrect;
  19.     int size;
  20.     do
  21.     {
  22.         isNotCorrect = false;
  23.         cout << "Введите длину сортируемого массива: ";
  24.         cin >> size;
  25.         if (cin.fail())
  26.         {
  27.             cin.clear();
  28.             while (cin.get() != '\n');
  29.             isNotCorrect = true;
  30.             cout << "Введено некорректное значение. Повторите попытку...\n";
  31.         }
  32.         if ((!isNotCorrect) && (cin.get() != '\n'))
  33.         {
  34.             cin.clear();
  35.             isNotCorrect = true;
  36.             cout << "Введено некорректное значение. Повторите попытку...\n";
  37.         }
  38.         if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE)))
  39.         {
  40.             isNotCorrect = true;
  41.             cout << "Введённое число не входит в допустимый диапазон. Повторите попытку...\n";
  42.         }
  43.     } while (isNotCorrect);
  44.     return size;
  45. }
  46.  
  47. string takePathToFile()
  48. {
  49.     bool isNotCorrect;
  50.     string path;
  51.     fstream file;
  52.     do
  53.     {
  54.         isNotCorrect = false;
  55.         cout << "Введите путь к файлу: ";
  56.         cin >> path;
  57.         file.open(path);
  58.         if (!file.is_open())
  59.         {
  60.             isNotCorrect = true;
  61.             cout << "Файл не найден. Повторите попытку...\n";
  62.         }
  63.     } while (isNotCorrect);
  64.     file.close();
  65.     return path;
  66. }
  67.  
  68. void printArr(int* arr, int size)
  69. {
  70.     for (int i = 0; i < size; i++)
  71.     {
  72.         cout << arr[i] << " ";
  73.     }
  74.     cout << endl;
  75. }
  76.  
  77. int* takeArrFromConsole(int size)
  78. {
  79.     bool isNotCorrect;
  80.     int* arr = new int[size];
  81.     for (int i = 0; i < size; i++)
  82.     {
  83.         do
  84.         {
  85.             isNotCorrect = false;
  86.             cout << "Введите элемент №" << (i + 1) << "массива: ";;
  87.             cin >> arr[i];
  88.             if (cin.fail())
  89.             {
  90.                 cin.clear();
  91.                 while (cin.get() != '\n');
  92.                 isNotCorrect = true;
  93.                 cout << "Введено некорректное значение. Повторите попытку...\n";
  94.             }
  95.             if ((!isNotCorrect) && (cin.get() != '\n'))
  96.             {
  97.                 cin.clear();
  98.                 isNotCorrect = true;
  99.                 cout << "Введено некорректное значение. Повторите попытку...\n";
  100.             }
  101.             if ((!isNotCorrect) && ((arr[i] < MIN_ELEMENT) || (arr[i] > MAX_ELEMENT)))
  102.             {
  103.                 isNotCorrect = true;
  104.                 cout << "Введённое значение не входит в допустимый диапазон.Повторите попытку...\n";
  105.             }
  106.         } while (isNotCorrect);
  107.     }
  108.     return arr;
  109. }
  110.  
  111. int* takeArrFromFile(int& size)
  112. {
  113.     int* arr;
  114.     bool isNotCorrect;
  115.     fstream file;
  116.     cout << "Требуется файл для чтения. ";
  117.     string path = takePathToFile();
  118.     do
  119.     {
  120.         isNotCorrect = false;
  121.         file.open(path);
  122.         file >> size;
  123.         if (file.fail())
  124.         {
  125.             file.clear();
  126.             while (file.get() != '\n');
  127.             cout << "Некорректно введённый размер массива. ";
  128.             isNotCorrect = true;
  129.         }
  130.         if ((!isNotCorrect) && ((size < MIN_SIZE) || (size > MAX_SIZE)))
  131.         {
  132.             cout << "Размер массива неверного диапазона! ";
  133.             isNotCorrect = true;
  134.         }
  135.         arr = new int[size];
  136.         int i = 0;
  137.         while ((!isNotCorrect) && (i < size))
  138.         {
  139.             file >> arr[i];
  140.             if (file.fail())
  141.             {
  142.                 cout << "Ошибка! Найдено некорректное значение элемента массива. ";
  143.                 isNotCorrect = true;
  144.                 i--;
  145.             }
  146.             i++;
  147.         }
  148.         if (isNotCorrect)
  149.         {
  150.             cout << "Повторите попытку...\n";
  151.             file.close();
  152.             path = takePathToFile();
  153.         }
  154.     } while (isNotCorrect);
  155.     return arr;
  156. }
  157.  
  158. int chooseInputOutputMethod()
  159. {
  160.     bool isNotCorrect;
  161.     int choice;
  162.     do
  163.     {
  164.         isNotCorrect = false;
  165.         cin >> choice;
  166.         if (cin.fail())
  167.         {
  168.             cin.clear();
  169.             while (cin.get() != '\n');
  170.             cout << "Число введено некорректно. Повторите попытку...\n";
  171.             isNotCorrect = true;
  172.         }
  173.         if ((!isNotCorrect) && (cin.get() != '\n'))
  174.         {
  175.             cin.clear();
  176.             cout << "Число введено некорректно. Повторите попытку...\n";
  177.             isNotCorrect = true;
  178.         }
  179.         if ((!isNotCorrect) && (choice != 1) && (choice != 2))
  180.         {
  181.             cout << "Введите либо 1, либо 2. Ваш выбор: \n";
  182.             isNotCorrect = true;
  183.         }
  184.     } while (isNotCorrect);
  185.     return choice;
  186. }
  187.  
  188. int* getArrForSort(int& size)
  189. {
  190.     cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
  191.     int choice = chooseInputOutputMethod();
  192.     int* arr;
  193.     if (choice == 1)
  194.     {
  195.         size = takeSizeArrFromConsole();
  196.         arr = takeArrFromConsole(size);
  197.     }
  198.     else
  199.     {
  200.         arr = takeArrFromFile(size);
  201.     }
  202.     cout << "Полученный массив: ";
  203.     printArr(arr, size);
  204.     return arr;
  205. }
  206.  
  207. void sort(int*& arr, int size)
  208. {
  209.     int i, j, x;
  210.     for (i = 1; i < size; i++)
  211.     {
  212.         x = arr[i];
  213.         j = i;
  214.         while ((j > 0) && (arr[j - 1] > x))
  215.         {
  216.             arr[j] = arr[j - 1];
  217.             j--;
  218.         }
  219.         arr[j] = x;
  220.         printArr(arr, size);
  221.     }
  222. }
  223.  
  224. void outputSortedArrInFile(int* arr, int size)
  225. {
  226.     cout << "Требуется файл для записи. ";
  227.     string path = takePathToFile();
  228.     ofstream file;
  229.     file.open(path);
  230.     file << "Полученный массив: ";
  231.     for (int i = 0; i < size; i++)
  232.     {
  233.         file << arr[i] << " ";
  234.     }
  235.     file.close();
  236.     cout << "Отсортированный массив записан в файл!\n";
  237. }
  238.  
  239. void outputSortedArr(int* arr, int size)
  240. {
  241.     cout << "Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ";
  242.     int choice = chooseInputOutputMethod();
  243.     if (choice == 1)
  244.     {
  245.         cout << "Полученный массив: ";
  246.         for (int i = 0; i < size; i++)
  247.         {
  248.             cout << arr[i] << " ";
  249.         }
  250.     }
  251.     else
  252.     {
  253.         outputSortedArrInFile(arr, size);
  254.     }
  255. }
  256.  
  257. int main()
  258. {
  259.     setlocale(LC_ALL, "Rus");
  260.     writeTask();
  261.     int size = 0;
  262.     int* arr = getArrForSort(size);
  263.     cout << "Процесс сортировки:\n";
  264.     sort(arr, size);
  265.     outputSortedArr(arr, size);
  266.     delete[] arr;
  267.     return 0;
  268. }
  269.  
  270.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement