vertexofvortex

lr11

Oct 22nd, 2020
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.54 KB | None | 0 0
  1. /*
  2.     Дан файл. Переписать его элементы в два новых файла:
  3.     в один — элементы, которые меньше среднего арифметического всех компонентов заданного файла,
  4.     а в другой — которые больше.
  5. */
  6.  
  7. #include <iostream>
  8. #include <cstdlib>
  9. #include <ctime>
  10. #include <string>
  11. #include <fstream>
  12. #include <conio.h>
  13. #include <Windows.h>
  14.  
  15. using namespace std;
  16.  
  17. void mainMenu();
  18. bool importFile(string path);
  19. bool createInputFile(string path);
  20. bool createOutputFile(string path, int*, int size);
  21.  
  22. void calculateResult(int[]);
  23.  
  24. int main() {
  25.     //setlocale(LC_ALL, "rus");
  26.     SetConsoleCP(1251);
  27.     SetConsoleOutputCP(1251);
  28.     srand(time(0));
  29.  
  30.     mainMenu();
  31. }
  32.  
  33. void mainMenu() {
  34.     system("cls");
  35.  
  36.     cout << "Добро пожаловать. Выберите одну из двух опций:\n\n1\tимпортировать существующий файл\n2\tсгенерировать новый файл\nesc\tвыйти и забыть об этом всём\n";
  37.     cout << "\n| Если вы забыли условие задачи:\n| Дан файл. Переписать его элементы в два новых файла:\n| в один — элементы, которые меньше среднего арифметического всех компонентов заданного файла,\n| а в другой — которые больше.\n\n";
  38.     cout << "Что будем делать? (нажмите соответствующую клавишу): ";
  39.  
  40.     char input = _getch();
  41.  
  42.     if (input == '1') {
  43.         system("cls");
  44.  
  45.         string path;
  46.  
  47.         cout << "Введите путь к файлу: ";
  48.         getline(cin, path);
  49.  
  50.         if (!importFile(path)) {
  51.             cout << "Произошла ошибка при открытии/чтении файла. Нажмите любую клавишу для продолжения.";
  52.             _getch();
  53.         }
  54.  
  55.         mainMenu();
  56.     }
  57.     else if (input == '2') {
  58.         system("cls");
  59.  
  60.         string path;
  61.        
  62.         cout << "Введите путь к создаваемому файлу: ";
  63.         getline(cin, path);
  64.  
  65.         if (!createInputFile(path)) {
  66.             cout << "Произошла ошибка при создании файла. Нажмите любую клавишу для продолжения.";
  67.             _getch();
  68.         }
  69.  
  70.         mainMenu();
  71.     }
  72.     else if (input == 27) {
  73.         exit(0);
  74.     }
  75.     else {
  76.         system("cls");
  77.         mainMenu();
  78.     }
  79.  
  80.     _getch();
  81. }
  82.  
  83. bool importFile(string path) {
  84.     system("cls");
  85.  
  86.     ifstream file;
  87.     file.open(path, ios::out);
  88.  
  89.     int numbers[15];
  90.  
  91.     if (!file.is_open()) {
  92.         return false;
  93.     }
  94.  
  95.     for (int i = 0; !file.eof(); i++) {
  96.         file >> numbers[i];
  97.     }
  98.  
  99.     file.close();
  100.  
  101.     cout << "Первые 15 строк натуральных чисел, полученные из указанного файла:\n[" << path << "]\n" << endl;
  102.  
  103.     for (int i = 0; i < 15; i++) {
  104.         if (i < 9) {
  105.             cout << i + 1 << ")  " << numbers[i] << endl;
  106.         }
  107.         else {
  108.             cout << i + 1 << ") " << numbers[i] << endl;
  109.         }
  110.     }
  111.  
  112.     cout << "\nПродолжить выполнение? Будут проивзедены необходимые рассчёты и предложено создание новых файлов.\n\n1\tпродолжить\nesc\tпрервать и выйти в меню\n";
  113.     cout << "\nЯ выбираю: ";
  114.  
  115.     calcResultTryAgain:
  116.  
  117.     char input = _getch();
  118.  
  119.     if (input == '1') {
  120.         calculateResult(numbers);
  121.     }
  122.     else if (input == 27) {
  123.         system("cls");
  124.         mainMenu();
  125.     }
  126.     else {
  127.         goto calcResultTryAgain;
  128.     }
  129.  
  130.     return true;
  131. }
  132.  
  133. bool createInputFile(string path) {
  134.     ofstream file;
  135.     file.open(path);
  136.  
  137.     if (!file.is_open()) {
  138.         return false;
  139.     }
  140.  
  141.     for (int i = 0; i < 15; i++) {
  142.         file << rand() % 200 - 50 << endl;
  143.     }
  144.  
  145.     file.close();
  146.  
  147.     return true;
  148. }
  149.  
  150. void calculateResult(int numbers[]) {
  151.     system("cls");
  152.     float avg = 0;
  153.  
  154.     int lessThanAvgSize = 0;
  155.     int moreThanAvgSize = 0;
  156.    
  157.     for (int i = 0; i < 15; i++) {
  158.         avg += numbers[i];
  159.     }
  160.     avg = avg / 15;
  161.  
  162.     for (int i = 0; i < 15; i++) {
  163.         if (i < 9) {
  164.             cout << i + 1 << ")  " << numbers[i] << endl;
  165.         }
  166.         else {
  167.             cout << i + 1 << ") " << numbers[i] << endl;
  168.         }
  169.     }
  170.     cout << "\n\n| Среднее арифметическое всех элементов: " << avg << "\n|\n";
  171.  
  172.     for (int i = 0; i < 15; i++) {
  173.         if (numbers[i] < avg) {
  174.             lessThanAvgSize++;
  175.         }
  176.         if (numbers[i] > avg) {
  177.             moreThanAvgSize++;
  178.         }
  179.     }
  180.  
  181.     int* lessThanAvg = new int[lessThanAvgSize];
  182.     int* moreThanAvg = new int[moreThanAvgSize];
  183.  
  184.     int LTAi = 0;
  185.     int MTAi = 0;
  186.  
  187.     for (int i = 0; i < 15; i++) {
  188.         if (numbers[i] < avg) {
  189.             lessThanAvg[LTAi] = numbers[i];
  190.             LTAi++;
  191.         }
  192.         if (numbers[i] > avg) {
  193.             moreThanAvg[MTAi] = numbers[i];
  194.             MTAi++;
  195.         }
  196.     }
  197.  
  198.     cout << "| Элементов, меньших среднего арифметического: " << lessThanAvgSize << endl;
  199.     for (int i = 0; i < lessThanAvgSize; i++) {
  200.         if (i < 9) {
  201.             cout << "| " << i + 1 << ")  " << lessThanAvg[i] << endl;
  202.         }
  203.         else {
  204.             cout << "| " << i + 1 << ") " << lessThanAvg[i] << endl;
  205.         }
  206.     }
  207.    
  208.     cout << "|\n| Элементов, больших среднего арифметического: " << moreThanAvgSize << endl;
  209.     for (int i = 0; i < moreThanAvgSize; i++) {
  210.         if (i < 9) {
  211.             cout << "| " << i + 1 << ")  " << moreThanAvg[i] << endl;
  212.         }
  213.         else {
  214.             cout << "| " << i + 1 << ") " << moreThanAvg[i] << endl;
  215.         }
  216.     }
  217.  
  218.     cout << "\n\nЗаписать полученные данные в файлы?\n\n1\tуказать путь и записать\nesc\tне записывать и вернуться в меню\n";
  219.    
  220.     createOutputFilesTryAgain:
  221.  
  222.     char input = _getch();
  223.  
  224.     if (input == '1') {
  225.         string pathLTA;
  226.  
  227.         cout << "Введите путь к сохраняемому файлу (числа, меньшие ср. арифм.): ";
  228.         getline(cin, pathLTA);
  229.  
  230.         createOutputFile(pathLTA, lessThanAvg, lessThanAvgSize);
  231.  
  232.         string pathMTA;
  233.  
  234.         cout << "Введите путь к сохраняемому файлу (числа, большие ср. арифм.): ";
  235.         getline(cin, pathMTA);
  236.  
  237.         createOutputFile(pathMTA, moreThanAvg, moreThanAvgSize);
  238.     }
  239.     else if (input == 27) {
  240.         system("cls");
  241.         mainMenu();
  242.     }
  243.     else {
  244.         goto createOutputFilesTryAgain;
  245.     }
  246. }
  247.  
  248. bool createOutputFile(string path, int *array, int size) {
  249.     ofstream file;
  250.     file.open(path);
  251.  
  252.     if (!file.is_open()) {
  253.         return false;
  254.     }
  255.  
  256.     for (int i = 0; i < size; i++) {
  257.         file << array[i] << endl;
  258.     }
  259.  
  260.     file.close();
  261.  
  262.     return true;
  263. }
Advertisement
Add Comment
Please, Sign In to add comment