Filage

lab3_3

Dec 5th, 2022 (edited)
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int takeСhoise(int MIN, int MAX) {
  7.     const string error = "Проверьте корректность введнных данных!\n";
  8.     bool isIncorrect;
  9.     int num;
  10.     do {
  11.         isIncorrect = false;
  12.         cin >> num;
  13.         if (cin.fail()) {
  14.             isIncorrect = true;
  15.             cout << error;
  16.             cin.clear();
  17.             while (cin.get() != '\n');
  18.         }
  19.         if (!isIncorrect && cin.get() != '\n') {
  20.             cin.clear();
  21.             while (cin.get() != '\n');
  22.             cout << error;
  23.             isIncorrect = true;
  24.         }
  25.         if (!isIncorrect && (num < MIN || num > MAX)) {
  26.             isIncorrect = true;
  27.             cout << error;
  28.         }
  29.     } while (isIncorrect);
  30.     return num;
  31. }
  32.  
  33. int* takeAmount(int& n) {
  34.     cout << "Пожалуйста, введите количество чисел в массиве\n";
  35.     n = takeСhoise(0, INT_MAX);
  36.     int* sequence = new int[n];
  37.     return sequence;
  38. }
  39.  
  40.  
  41. void takeNums(int* sequence, int n) {
  42.     cout << "Введите числа\n";
  43.     for (int i = 0; i < n; i++) {
  44.         sequence[i] = takeСhoise(1, INT_MAX);
  45.     }
  46. }
  47.  
  48. int* findFrequency(int* sequence, int n) {
  49.     int* frequency = new int[n];
  50.     for (int i = 0; i < n; i++) {
  51.         frequency[i] = 0;
  52.     }
  53.     for (int i = 0; i < n; i++) {
  54.         int k = sequence[i];
  55.         for (int j = 0; j < n; j++) {
  56.             if (k == sequence[j]) {
  57.                 frequency[i]++;
  58.             }
  59.         }
  60.     }
  61.     return frequency;
  62. }
  63.  
  64. void sortArray(int* frequency, int n, int*& sequence) {
  65.     for (int i = 0; i < n; i++) {
  66.         for (int j = 0; j < n; j++) {
  67.             if (frequency[i] < frequency[j]) {
  68.                 int swap = frequency[i];
  69.                 frequency[i] = frequency[j];
  70.                 frequency[j] = swap;
  71.                 swap = sequence[i];
  72.                 sequence[i] = sequence[j];
  73.                 sequence[j] = swap;
  74.             }
  75.         }
  76.     }
  77. }
  78.  
  79. string wayToFile() {
  80.     fstream checkFile;
  81.     string way;
  82.     bool isIncorrect;
  83.     do {
  84.         isIncorrect = false;
  85.         cout << "Введите путь к файлу\n";
  86.         cin >> way;
  87.         checkFile.open(way);
  88.         if (!checkFile.is_open()) {
  89.             cout << "Проверьте правильность и нахождение вашего файла по заданному пути\n";
  90.             isIncorrect = true;
  91.             checkFile.close();
  92.         }
  93.         else {
  94.             isIncorrect = false;
  95.         }
  96.         if(!isIncorrect)
  97.             checkFile.close();
  98.     } while (isIncorrect);
  99.     return way;
  100. }
  101.  
  102. int* takeAmountFromFile(int& n) {
  103.     fstream outFile;
  104.     bool isIncorrect;
  105.     do {
  106.         isIncorrect = false;
  107.         string name = wayToFile();
  108.         outFile.open(name);
  109.         if (!outFile.bad()) {
  110.             outFile >> n;
  111.             if (n < 0 || n > INT_MAX || n == 0) {
  112.                 cout << "Ошибка. Проверьте содержание файла\n";
  113.                 isIncorrect = true;
  114.                 outFile.close();
  115.             }
  116.            
  117.         }
  118.     } while (isIncorrect);
  119.     int* sequence = new int[n];
  120.     return sequence;
  121. }
  122.  
  123. void takeNumsFromFile(int* sequence, int n) {
  124.     fstream outFile;
  125.     bool isIncorrect;
  126.     do {
  127.         isIncorrect = false;
  128.         string name = wayToFile();
  129.         outFile.open(name);
  130.         if (!outFile.bad()) {
  131.             outFile >> n;
  132.             for (int i = 0; i < n; i++ && !isIncorrect) {
  133.                 outFile >> sequence[i];
  134.                 if (sequence[i] < 1 || sequence[i] > INT_MAX) {
  135.                     cout << "Ошибка. Проверьте содержание файла";
  136.                     isIncorrect = true;
  137.                 }
  138.             }
  139.             outFile.close();
  140.         }
  141.     } while (isIncorrect);
  142. }
  143.  
  144. int* choiseEnter(int& n) {
  145.     int choise;
  146.     int* sequence{};
  147.     cout << "Выберете способ ввода. \n 1. Введите 1 для использования консоли. \n 2. Введите 0 для использования файла.\n";
  148.     choise = takeСhoise(0, 1);
  149.     if (choise == 1) {
  150.         sequence = takeAmount(n);
  151.         takeNums(sequence, n);
  152.        
  153.     }
  154.     else {
  155.         sequence = takeAmountFromFile(n);
  156.         takeNumsFromFile(sequence, n);
  157.     }
  158.     int* chastota = findFrequency(sequence, n);
  159.     sortArray(chastota, n, sequence);
  160.     return sequence;
  161. }
  162.  
  163.  
  164. void resultInConsole(int* sequence, int n) {
  165.     cout << "Отсортированный массив: ";
  166.     for (int i = 0; i < n; i++) {
  167.         cout << sequence[i] << " ";
  168.     }
  169. }
  170.  
  171. void resultInFile(string name, int* sequence, int n) {
  172.     fstream inFile;
  173.     inFile.open(name);
  174.     if (!inFile.bad()) {
  175.         for (int i = 0; i < n; i++) {
  176.             inFile << sequence[i] << " ";
  177.         }
  178.     }
  179.     inFile.close();
  180. }
  181.  
  182. void choiseExit(int* sequence, int n) {
  183.     int choise;
  184.     cout << "Выберете способ вывода результата. \n 1. Введите 1 для использования консоли. \n 2. Введите 0 для использования файла.\n";
  185.     choise = takeСhoise(0, 1);
  186.     if (choise == 1) {
  187.         resultInConsole(sequence, n);
  188.     }
  189.     else {
  190.         string name = wayToFile();
  191.         resultInFile(name, sequence, n);
  192.     }
  193. }
  194.  
  195. int main()
  196. {
  197.     setlocale(LC_ALL, "Rus");
  198.     int n;
  199.     int* sequence = choiseEnter(n);
  200.     choiseExit(sequence, n);
  201. }
Advertisement
Add Comment
Please, Sign In to add comment