Advertisement
profits

Untitled

Jan 9th, 2020
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.67 KB | None | 0 0
  1. //Задание 2
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <vector>
  6. #include <cmath>
  7. #include <Windows.h>
  8.  
  9. void writeFile(const int num, const std::string& str) // записываем числа в файл
  10. {
  11.     std::ofstream out_f(str, std::ios::app); // открываем файл для записи в конец
  12.     out_f << num << " "; // записываем данные
  13.     out_f.close(); // закрываем файл
  14. }
  15.  
  16. void readFile(const std::string& str, std::vector<int>& vec, const bool flag) // считываем числа из файла в массив
  17. {
  18.     int num;
  19.     std::ifstream in_f(str, std::ios::in); // открываем файл для чтения
  20.     if (in_f) { // если файл открылся
  21.         while (in_f && in_f >> num) { // пока нет ошибок и EOF, извлекаем данные
  22.             std::cout << num << " "; // выводим все числа из файла
  23.             if (flag)
  24.                 vec.push_back(num); // присваиваем числа из файла в vector
  25.         }
  26.         in_f.close(); // закрываем файл
  27.     }
  28.     else
  29.         std::cout << "Файл \"" << str << "\" не обнаружен\n";
  30. }
  31.  
  32. int number(const int num) // определим какие из чисел являются счастливыми
  33. {
  34.     int sum{}; // сумма квадратов цифр числа num
  35.     for (int k = 0; k < 4; ++k) { // из числа получаем сумму цифр, 4 - max число разрядов sum
  36.         int x = pow(10, k), y = pow(10, k + 1); // делители
  37.         sum += pow((num % y - num % x) / x, 2); // вычленяем цифру, возводим в квадрат и добавляем к сумме
  38.     }
  39.     if (sum == 1)   return true; // число счастливое
  40.     if (sum == 4)   return false; // число не счастливое
  41.     if (sum != 0)   return  number(sum); // рекурсия с новым параметром (сумма квадратов чисел)
  42.     return false; // число не счастливое
  43. }
  44.  
  45. void luckyNumber(const std::string& str) // счастливые числа
  46. {
  47.     for (int i{}; i <= 1000; ++i) // все числа (0 - 1000)
  48.         if (number(i)) // если число счастливое,
  49.             writeFile(i, str); // записываем в файл
  50. }
  51.  
  52. void primeNumber(const std::string& str) // простые числа
  53. {
  54.     for (int i{}; i <= 1000; ++i) // все числа (0 - 1000)
  55.         for (int j(1); j <= i; ++j) {
  56.             if ((i > j) && (j != 1) && (i % j == 0)) // если число не простое
  57.                 break; // выходим из цикла
  58.             if (j == i && j != 1) // если число простое,
  59.                 writeFile(i, str); // записываем в файл
  60.         }
  61. }
  62.  
  63. void clear_file(const std::string& str_1, const std::string& str_2) // очищаем файлы от записей
  64. {
  65.     std::ifstream out_f1(str_1, std::ios::out | std::ios::trunc); // очищаем 1_file.txt для последующей записи
  66.     std::ifstream out_f2(str_2, std::ios::out | std::ios::trunc); // очищаем 2_file.txt для последующей записи
  67. }
  68.  
  69. void delete_duplicate(std::vector<int>& vec_1, std::vector<int>& vec_2,
  70.     const std::string& str_1, const std::string& str_2) // удаляем из файлов дубликаты
  71. {
  72.     for (int i{}; i < vec_1.size(); ++i) // итерация простых чисел
  73.         for (int j{}; j < vec_2.size(); ++j) // итерация счастливых чисел
  74.             if (vec_1[i] == vec_2[j]) { // если числа дублируются, удаляем их
  75.                 vec_1.erase(vec_1.begin() + i);
  76.                 vec_2.erase(vec_2.begin() + j);
  77.             }
  78.     clear_file(str_1, str_2); // очищаем файлы от записей
  79.  
  80.     for (int k{}; k < vec_1.size(); ++k) // записываем простые числа, без дубликатов, в файл
  81.         writeFile(vec_1[k], str_1);
  82.     for (int q{}; q < vec_2.size(); ++q) // записываем счастливые числа, без дубликатов, в файл
  83.         writeFile(vec_2[q], str_2);
  84. }
  85.  
  86. int main()
  87. {
  88.     SetConsoleCP(1251); SetConsoleOutputCP(1251);
  89.     std::vector<int>vec_1, vec_2;
  90.     const std::string str_1{ "C://1_file.txt" }; // адрес и имя файла для простых чисел
  91.     const std::string str_2{ "C://2_file.txt" }; // адрес и имя файла для счастливых чисел
  92.  
  93.     clear_file(str_1, str_2); // очищаем файлы от записей
  94.     primeNumber(str_1); // определяем простые числа и записываем в файл 1_file.txt
  95.     luckyNumber(str_2); // определяем счастливые числа и записываем в файл 2_file.txt
  96.  
  97.     std::cout << "Простые числа из файла " << str_1 << " :\n";
  98.     readFile(str_1, vec_1, true); // выводим из файла простые числа и присваиваем в vector
  99.     std::cout << "\n\nСчастливые числа из файла " << str_2 << " :\n";
  100.     readFile(str_2, vec_2, true); // выводим из файла счастливые числа и присваиваем в vector
  101.  
  102.     delete_duplicate(vec_1, vec_2, str_1, str_2); // удаляем дубликаты чисел
  103.  
  104.     std::cout << "\n\nПростые числа без дубликатов из файла " << str_1 << " :\n";
  105.     readFile(str_1, vec_1, false); // выводим из файла простые числа без дубликатов
  106.     std::cout << "\n\nСчастливые числа без дубликатов из файла " << str_2 << " :\n";
  107.     readFile(str_2, vec_2, false); // выводим из файла счастливые числа без дубликатов
  108.  
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement