Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <set>
- using namespace std;
- int getInputValue(int min, int max);
- int getUserInputFromConsole();
- int getUserInputFromFile(string path);
- bool checkPath(string path);
- string getUserInputPath();
- int getInputMethod();
- void printInConsole(set<int> mySet);
- string getUserOutputPath();
- void printInFile(string path, set<int> mySet);
- int getOutputMethod();
- void start();
- set<int> eratosfen(set<int> mySet);
- set<int> fillSet(int n);
- void printTask();
- const int USE_CONSOLE = 1;
- const int USE_FILE = 2;
- int getInputValue(int min, int max) {
- int currentValue;
- bool isNotValid = true;
- do {
- cin >> currentValue;
- if (currentValue >= min && currentValue <= max)
- isNotValid = false;
- else
- cout << "Введите число в заданном диапазоне\n";
- } while (isNotValid);
- return currentValue;
- }
- int getUserInputFromConsole() {
- const int MIN_SIZE = 2;
- const int MAX_SIZE = 255;
- int num;
- cout << "Введите число, до которого нужно найти все простые числа в диапазоне " << MIN_SIZE << ".." << MAX_SIZE << ": ";
- num = getInputValue(MIN_SIZE, MAX_SIZE);
- return num;
- }
- set<int> eratosfen(set<int> mySet) {
- set<int> ::iterator it = mySet.begin();
- for (int i = 1; it != mySet.end(); i++, it++) {
- set<int> ::iterator it1 = mySet.begin();
- for (int j = 0; j < i; j++)
- it1++;
- for (int j = i + 1; it1 != mySet.end(); j++) {
- if (*it1 % *it == 0)
- it1 = mySet.erase(it1);
- else
- it1++;
- }
- }
- return mySet;
- }
- set<int> fillSet(int num) {
- set<int> mySet;
- for (int i = 2; i <= num; i++)
- mySet.insert(i);
- return mySet;
- }
- int getUserInputFromFile(string path) {
- int num;
- ifstream file(path);
- file.open(path);
- file.clear();
- file >> num;
- file.close();
- return num;
- }
- bool checkPath(string path) {
- ifstream file(path);
- if (file.is_open()) {
- cout << path << " найден" << endl;
- return true;
- }
- else {
- cout << path << " не найден" << endl;
- return false;
- }
- }
- string getUserInputPath() {
- string path;
- bool isNotValid = false;
- do {
- cout << "Введите абсолютный путь к файлу с входными данными" << endl;
- cin >> path;
- } while (!checkPath(path));
- return path;
- }
- int getInputMethod() {
- int method;
- cout << "Каким способом хотите ввести данные?" << endl;
- cout << "1 - с помощью консоли" << endl;
- cout << "2 - с помощью файла" << endl;
- do {
- cin >> method;
- if (method != USE_CONSOLE && method != USE_FILE)
- cout << "Введите 1 или 2";
- } while (method != USE_CONSOLE && method != USE_FILE);
- return method;
- }
- void printInConsole(set<int> mySet) {
- for (auto it = mySet.begin(); it != mySet.end(); ++it)
- cout << *it << " ";
- }
- string getUserOutputPath() {
- string path;
- cout << "Введите абсолютный путь к файлу для вывода результата" << endl;
- cin >> path;
- cout << "Результат работа помещён в файл";
- return path;
- }
- void printInFile(string path, set<int> mySet) {
- ofstream file(path);
- for (auto it = mySet.begin(); it != mySet.end(); ++it)
- file << *it << " ";
- }
- int getOutputMethod() {
- int method;
- cout << "Куда хотите вывести результат?" << endl;
- cout << "1 - в консоль" << endl;
- cout << "2 - в файл" << endl;
- do {
- cin >> method;
- if (method != USE_CONSOLE && method != USE_FILE)
- cout << "Введите 1 или 2";
- } while (method != USE_CONSOLE && method != USE_FILE);
- return method;
- }
- void printTask() {
- cout << "Данная программа находит все простые числа, не превосходящие n, ";
- cout << "с помощью алгоритма «решето Эратосфена»" << endl;
- }
- int getUserInput() {
- int num;
- short method = getInputMethod();
- if (method == USE_CONSOLE)
- num = getUserInputFromConsole();
- else {
- string path = getUserInputPath();
- num = getUserInputFromFile(path);
- }
- return num;
- }
- void printResult(set<int> mySet, int num) {
- short method = getOutputMethod();
- if (method == USE_CONSOLE)
- printInConsole(mySet);
- else {
- string path = getUserOutputPath();
- printInFile(path, mySet);
- }
- }
- void start() {
- int num;
- set<int> mySet;
- printTask();
- num = getUserInput();
- mySet = fillSet(num);
- mySet = eratosfen(mySet);
- printResult(mySet, num);
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- start();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement