SHARE
TWEET

Untitled

Risonna Feb 25th, 2020 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // no gurls.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include <iostream>
  5. #include <fstream>
  6. #include <string>
  7. #include <ctime>
  8. #include <stdlib.h>
  9. using namespace std;
  10.  
  11. void filewrite(); //функция создаёт текстовый файл и записывает туда рандомные элементы формата int
  12. void fileread(int* p_darr, int& t, int& c); //считывает элементы из созданного filewrite() документа и записывает в массив p_darr все нечётные
  13. void checkif(int& c); //проверяет сколько всего элементов в текстовом файле
  14. void sorte(int* p_darr, int left, int right); //сортирует массив p_darr по возрастанию
  15. void checkif1(int& t, int& c); //проверяет количество нечётных чисел
  16.  
  17. int main()
  18. {
  19.     setlocale(LC_ALL, "Russian");
  20.     int t = 0, c = 0; //c = return from checkif(), t = return from checkif1()
  21.     filewrite(); //вызов функции для записи рандомных элементов в текстовый файл
  22.     checkif(c);//вызов функции для подсчёта количества элементов в файле
  23.     checkif1(t, c);
  24.     int* p_darr = new int[t];
  25.     fileread(p_darr, t, c);
  26.     sorte(p_darr, 0, t - 1);
  27.     for (int i = 0; i < t; i++)cout << "p_darr[" << i << "]= " << p_darr[i] << "\n";
  28.     delete[] p_darr;
  29.     return 0;
  30. }
  31.  
  32. void filewrite()
  33. {
  34.     ofstream F;          // поток для записи
  35.     F.open("D:\\hello.txt", ios::out); // окрываем файл для записи
  36.     if (F.is_open())
  37.     {
  38.         srand((unsigned)time(0));
  39.         for (int i = 0; i <= 10000; i++) {
  40.             F << (rand() % 10000) + 1 << "\n";
  41.         }
  42.     }
  43.     F.close();
  44. }
  45.  
  46. void checkif(int& c)
  47. {
  48.     int value;
  49.     ifstream F;          // поток для чтения
  50.     F.open("D:\\hello.txt", ios::in); // окрываем файл для чтения
  51.     if (F.is_open())
  52.     {
  53.         F >> value;
  54.         while (!F.eof()) //проверяем, достигнут ли конец файла
  55.         {
  56.             F >> value; //считываем значение из файла просто чтобы !F.eof() работала правильно
  57.             c++;
  58.             //cout << "value=" << value;
  59.         }
  60.         cout << "c=" << c << "\n";
  61.     }
  62.     F.close();
  63. }
  64.  
  65. void checkif1(int& t, int& c)
  66. {
  67.     int value;
  68.     ifstream F;          // поток для чтения
  69.     F.open("D:\\hello.txt", ios::in); // окрываем файл для чтения
  70.     if (F.is_open())
  71.     {
  72.         for (int i = 0; i <= c; i++)
  73.         {
  74.             F >> value;
  75.             if (value % 2 != 0 and value != 0)t++;
  76.         }
  77.         cout << "t=" << t << "\n";
  78.     }
  79.     F.close();
  80. }
  81.  
  82. void fileread(int* p_darr, int& t, int& c)
  83. {
  84.     int value1;
  85.     ifstream F;          // поток для чтения
  86.     F.open("D:\\hello.txt", ios::in); // окрываем файл для чтения
  87.     if (F.is_open())
  88.     {
  89.         ofstream F1;
  90.         F1.open("D:\\hello1.txt", ios::out);
  91.         if (F1.is_open())
  92.         {
  93.             for (int i = 0; i <= c; i++)
  94.             {
  95.                 F >> value1;
  96.                 if (value1 % 2 != 0 and value1 != 0) F1 << value1 << "\n";
  97.                 //cout << "p_darr[" << i << "]=" << p_darr[i] << "\n";
  98.             }
  99.         }
  100.         F1.close();
  101.         ifstream F2;
  102.         F2.open("D:\\hello1.txt", ios::in);
  103.         if (F2.is_open())
  104.         {
  105.             for (int i = 0; i < t; i++)
  106.             {
  107.                 F2 >> p_darr[i];
  108.                 //cout << "p_darr[" << i << "]= " << p_darr[i] << "\n";
  109.             }
  110.         }
  111.         F2.close();
  112.     }
  113.     F.close();
  114. }
  115.  
  116. void sorte(int* p_darr, int left, int right)
  117. {
  118.     int pivot; // разрешающий элемент
  119.     int l_hold = left; //левая граница
  120.     int r_hold = right; // правая граница
  121.     pivot = p_darr[left];
  122.     while (left < right) // пока границы не сомкнутся
  123.     {
  124.         while ((p_darr[right] >= pivot) && (left < right))
  125.             right--; // сдвигаем правую границу пока элемент [right] больше [pivot]
  126.         if (left != right) // если границы не сомкнулись
  127.         {
  128.             p_darr[left] = p_darr[right]; // перемещаем элемент [right] на место разрешающего
  129.             left++; // сдвигаем левую границу вправо
  130.         }
  131.         while ((p_darr[left] <= pivot) && (left < right))
  132.             left++; // сдвигаем левую границу пока элемент [left] меньше [pivot]
  133.         if (left != right) // если границы не сомкнулись
  134.         {
  135.             p_darr[right] = p_darr[left]; // перемещаем элемент [left] на место [right]
  136.             right--; // сдвигаем правую границу вправо
  137.         }
  138.     }
  139.     p_darr[left] = pivot; // ставим разрешающий элемент на место
  140.     pivot = left;
  141.     left = l_hold;
  142.     right = r_hold;
  143.     if (left < pivot) // Рекурсивно вызываем сортировку для левой и правой части массива
  144.         sorte(p_darr, left, pivot - 1);
  145.     if (right > pivot)
  146.         sorte(p_darr, pivot + 1, right);
  147. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top