Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <set>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- void outputTask() {
- cout << "Данная программа формирует множество Y={X1 * X2* X3} и выделяет из него подмножество Y1, которое представляет все цифры,входящие в Y. Например, дано X1={‘s’, ‘v’, ‘e’, ‘t’, ‘a’,’ ‘2’}; X2={‘*’, ’-‘, ‘*’, ‘-‘}; X3={‘1’, ‘4’, ‘7’, ‘a’, ‘b’, ‘c’}." << endl;
- }
- void outputSet(set<char> charSet, int i) {
- cout << "Введенное множество номер " << (i + 1) << " : " << endl;
- for (char elem : charSet) {
- cout << elem << " ";
- }
- }
- set<char> convertToSet(string str) {
- set <char> charSet = {};
- for (char elem : str) {
- charSet.insert(elem);
- }
- return charSet;
- }
- string inputStringFromConsole(int num) {
- string str;
- bool isCorrect;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите элементы " << (num + 1) << " множества в строку без пробелов." << endl;
- getline(cin, str);
- isCorrect = true;
- for (int i = 0; i < size(str); i++) {
- if ((str[i] == ' ') and (isCorrect)) {
- isCorrect = false;
- }
- }
- if ((size(str) < 1) or (!isCorrect)) {
- cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Повторите попытку." << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return str;
- }
- string inputStringFromFile(string path, int num) {
- string str;
- bool isCorrect;
- ifstream fin(path);
- cout << "Считывание множества номер " << (num + 1) << "..." << endl;
- for (int i = 0; i < num; i++) {
- fin >> str;
- }
- fin >> str;
- fin.close();
- isCorrect = false;
- for (int i = 0; i < size(str); i++) {
- if ((str[i] != ' ') and (!isCorrect)) {
- isCorrect = true;
- }
- }
- if ((size(str) < 1) or (!isCorrect)) {
- cout << "Строка должна иметь хотя бы 1 символ и не иметь пробелы! Введите данные строки номер " << (num + 1) << " с клавиатуры." << endl;
- str = inputStringFromConsole(num);
- }
- return str;
- }
- string choicePath() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь файла: " << endl;
- cin >> path;
- ifstream fin(path);
- if (fin.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- }
- else {
- cout << "Ошибка открытия файла!" << endl;
- isNotCorrect = true;
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- set<char>* inputFromFile() {
- string path;
- string stringOfElements;
- set<char>* sets;
- set<char> charSet;
- cout << "При вводе из файла учтите, что в файле элементы множества должны быть записаны в строку без пробелов(1 строка - 1 множество. 2 строка - 2 множество 3 строка - 3 множество)." << endl;
- path = choicePath();
- sets = new set<char>[3];
- for (int i = 0; i < 3; i++) {
- stringOfElements = inputStringFromFile(path, i);
- charSet = convertToSet(stringOfElements);
- sets[i] = charSet;
- outputSet(sets[i], i);
- }
- return sets;
- }
- set<char>* inputFromConsole() {
- set<char> charSet = {};
- set<char>* sets;
- string strOfElements;
- sets = new set<char>[3];
- for (int i = 0; i < 3; i++) {
- strOfElements = inputStringFromConsole(i);
- charSet = convertToSet(strOfElements);
- sets[i] = charSet;
- outputSet(sets[i], i);
- }
- return sets;
- }
- set<char>* choiceInput() {
- set<char>* sets;
- int choice;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Выберите, откуда будут вводиться данные. Введите 0, если с консоли; 1, если с файла" << endl;
- cin >> choice;
- if (cin.fail() or ((choice != 0) and (choice != 1))) {
- cout << "Неверный ввод данных!" << endl;
- isNotCorrect = true;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- if (choice == 0) {
- sets = inputFromConsole();
- }
- else {
- sets = inputFromFile();
- }
- return sets;
- }
- set<char>* calculateSets(set<char>* sets) {
- set<char> symbols;
- set<char>* resultSets;
- set<char> charSet;
- resultSets = new set<char>[2];
- resultSets[0] = {};
- resultSets[1] = {};
- symbols = {};
- for (char digit = '0'; digit <= '9'; ++digit) {
- symbols.insert(digit);
- }
- set_intersection(sets[0].begin(), sets[0].end(), sets[1].begin(), sets[1].end(), inserter(charSet, charSet.begin()));
- set_intersection(sets[2].begin(), sets[2].end(), charSet.begin(), charSet.end(), inserter(resultSets[0], resultSets[0].begin()));
- set_intersection(resultSets[0].begin(), resultSets[0].end(), symbols.begin(), symbols.end(), inserter(resultSets[1], resultSets[1].begin()));
- return resultSets;
- }
- void outputAnswer(set<char>* sets) {
- bool isNotCorrect;
- string path;
- cout << "\nМножество Y = X1 * X2 * X3 = ";
- for (char elem : sets[0]) {
- cout << elem << " ";
- }
- cout << endl;
- if (size(sets[1]) == 0) {
- cout << "\nЦифры не были встречены в подмножестве Y1!" << endl;
- }
- else {
- cout << "\nЦифры, встретившиеся в подмножестве Y1: " << endl;
- for (char elem : sets[1]) {
- cout << elem << " ";
- }
- }
- do {
- isNotCorrect = false;
- cout << "\nВведите путь файла для вывода: " << endl;
- cin >> path;
- ofstream fout(path, fstream::app);
- if ((fout.is_open()) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
- cout << "Файл успешно открыт!" << endl;
- fout.close();
- }
- else {
- cout << "Ошибка открытия файла" << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- ofstream fout(path, fstream::app);
- fout << "Множество Y = X1 * X2 * X3 = ";
- for (char elem : sets[0]) {
- fout << elem << " ";
- }
- fout << endl;
- if (size(sets[1]) == 0) {
- fout << "\nЦифры не были встречены в подмножестве Y1!" << endl;
- }
- else {
- fout << "\nЦифры, встретившиеся в подмножестве Y1: " << endl;
- for (char elem : sets[2]) {
- fout << elem << " ";
- }
- }
- fout.close();
- cout << "Ответ записан в файл." << endl;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- system("chcp 1251");
- set<char>* sets;
- set<char>* resultSets;
- resultSets = new set<char>[2];
- outputTask();
- sets = choiceInput();
- resultSets = calculateSets(sets);
- outputAnswer(resultSets);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement