Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
1

Выполнить логические операции над множествами, записанными в файлы

14.12.2016, 17:39. Просмотров 729. Ответов 10

Помогите пожалуйста написать программу на C++
Дано 3 множества А, В, С. Элементы множеств сохранены в файлах A.txt, B.txt, C.txt
Провести операции над множествами, вывести на экран и в файл result.txt результирующее множество.
(А\B)U(A\C)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 17:39
Ответы с готовыми решениями:

Выполнить поразрядные логические операции над машинными кодами
99 OR -17 99 AND 17 17 ← 2 (18 OR NOT –8) AND NOT –7 XOR 3 еще блок схему сделайте пожалуйста...

Операции над множествами
Найти A B C, A ∩ B ∩ C, (A ∩ B) C, A ∩ (B C), если A={{1;2},{1;3},{2}},...

Операции над множествами
Прошу помочь с написанием программы на с++. Нужно чтобы выполнялись операции над множествами,...

Реализовать операции над множествами
Собственно только началась учеба на первом курсе,и вот препод задал написать програму,которая...

Операции над множествами - прокомментировать строку кода
Это оперции над множествами Объясните пожалуйста что делает в case2. Хотя бы одну объясните пжл ...

10
Fixer_84
1313 / 824 / 754
Регистрация: 30.04.2016
Сообщений: 2,759
14.12.2016, 18:58 2
AnastasiaM24, какой тип данных вам нужен? Цифры, символы, строки?

Добавлено через 32 минуты
AnastasiaM24, я с множествами почти не работал, но, вроде, все получилось. Программа работает для целых чисел. Числа в файлах где угодно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <set>
 
using namespace std;
 
int main()
{
    ifstream finA("A.txt");
    ifstream finB("B.txt");
    ifstream finC("C.txt");
    ofstream fout("result.txt");
    set<int> A;
    set<int> B;
    set<int> C;
    set<int> R[3];
    int N;
    //Считываем цифры из файлов
    while (finA >> N)
    {
        A.insert(N);
    }
    while (finB >> N)
    {
        B.insert(N);
    }
    while (finC >> N)
    {
        C.insert(N);
    }
    //Выполняем операции на множествами
    set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(R[0], R[0].begin()));
    set_difference(A.begin(), A.end(), C.begin(), C.end(), inserter(R[1], R[1].begin()));
    set_union(R[0].begin(), R[0].end(), R[1].begin(), R[1].end(), inserter(R[2], R[2].begin()));
    //Выводим результат
    copy(R[2].begin(), R[2].end(), ostream_iterator<int>(fout, " "));
    fout << endl;
    finA.close();
    finB.close();
    finC.close();
    fout.close();
    system("pause");
    return 0;
}
1
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
14.12.2016, 21:37  [ТС] 3
Fixer_84, мне нужен символьный тип. + результат также еще должен выводится на консоль и пользователь должен сам вводить числа
0
Fixer_84
1313 / 824 / 754
Регистрация: 30.04.2016
Сообщений: 2,759
14.12.2016, 21:55 4
AnastasiaM24, Подтвердите, пожалуйста, что нужно сделать:

1. Считать символы (любые?) из файла A.txt, B.txt, C.txt
2. Вывести результат в текстовый файл result.txt и в консоль.
3. Символы (перед запуском программы) вводятся в текстовых файлах A.txt, B.txt, C.txt вручную
4. Что у вас не работает? Я вводил числа в 3 файла и он выводил результат (А \ B) U (A \ C)
0
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
14.12.2016, 22:04  [ТС] 5
Fixer_84, в вашем коде все верно,работает. Нужно чтоб еще вот что было выведено на экран :
Введите 5 различных чисел для массива А:
Введите 5 различных чисел для массива В:
Введите 5 различных чисел для массива С:
А\В:
А\С:
(А \ B) U (A \ C):
0
Fixer_84
1313 / 824 / 754
Регистрация: 30.04.2016
Сообщений: 2,759
14.12.2016, 22:31 6
AnastasiaM24, то есть, вы хотите записать символы (числа) из консоли в файлы (A, B, C) и потом считать их обратно? Может быть, просто ввести три массива для каждого множества и обработать их в консоли? Вам, все-таки, нужны числа или символы?

Добавлено через 3 минуты
AnastasiaM24, Я предлагаю все сделать в консоли. Задать количество элементов для каждого множества и вывести результат. Такой вариант вас устроит?
0
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
15.12.2016, 16:18  [ТС] 7
Fixer_84, нужно ввести числа в консоли (для каждого множества ,для а для б и для с(3 массива) )и сохранить их в файлы. далее проделать с ними операции и вывести результат на консоль и + сохранить в файл

Добавлено через 8 минут
Fixer_84, И,если не сложно, напишите пожалуйста комментарии где что происходит, чтобы разобраться
0
Fixer_84
1313 / 824 / 754
Регистрация: 30.04.2016
Сообщений: 2,759
15.12.2016, 18:29 8
AnastasiaM24, вот ваша программа.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <set>
 
using namespace std;
 
int main()
{
    ofstream foutA("A.txt");
    ofstream foutB("B.txt");
    ofstream foutC("C.txt");
    ofstream foutR("result.txt");
    set<int> A;
    set<int> B;
    set<int> C;
    set<int> R[3];
    int NX, NY, NZ;
    cout << "Введите размер массива X:" << endl;
    cout << "NX = ";
    cin >> NX; //Вводим размер массива X
    int* X = new int[NX];
    cout << "Введите массив X:" << endl;
    for (int i = 0; i < NX; i++)
    {
        cin >> X[i]; //Вводим элементы массива X
        A.insert(X[i]); //Помещаем элементы массива X в множество A
        foutA << X[i] << " "; //Помещаем массив в файл A.txt
    }
    cout << "Введите размер массива Y:" << endl;
    cout << "NY = ";
    cin >> NY; //Вводим размер массива Y
    int* Y = new int[NY];
    cout << "Введите массив Y:" << endl;
    for (int i = 0; i < NY; i++)
    {
        cin >> Y[i]; //Вводим элементы массива Y
        B.insert(Y[i]); //Помещаем элементы массива Y в множество B
        foutB << Y[i] << " "; //Помещаем массив в файл B.txt
    }
    cout << "Введите размер массива Z:" << endl;
    cout << "NZ = ";
    cin >> NZ; //Вводим размер массива Z
    int* Z = new int[NZ];
    cout << "Введите массив Z:" << endl;
    for (int i = 0; i < NZ; i++)
    {
        cin >> Z[i]; //Вводим элементы массива Z
        C.insert(Z[i]); //Помещаем элементы массива Z в множество C
        foutC << Z[i] << " "; //Помещаем массив в файл C.txt
    }
    //Выполняем операции на множествами
    set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(R[0], R[0].begin()));
    set_difference(A.begin(), A.end(), C.begin(), C.end(), inserter(R[1], R[1].begin()));
    set_union(R[0].begin(), R[0].end(), R[1].begin(), R[1].end(), inserter(R[2], R[2].begin()));
    //Выводим результат
    cout << "Результат работы с множествами:" << endl;
    copy(R[2].begin(), R[2].end(), ostream_iterator<int>(cout, " ")); //Выводим в консоль
    cout << endl;
    copy(R[2].begin(), R[2].end(), ostream_iterator<int>(foutR, " ")); //Выводим в файл
    foutR << endl;
    foutA.close(); //Закрываем файл A.txt
    foutB.close(); //Закрываем файл B.txt
    foutC.close(); //Закрываем файл C.txt
    foutR.close(); //Закрываем файл result.txt
    delete[] X;
    delete[] Y;
    delete[] Z;
    system("pause");
    return 0;
}
Добавлено через 11 минут
AnastasiaM24, Прошу обратить внимание, что я нее считывал множества из файла, а делал это при вводе массива. То есть, если записать цифры в файл не через консоль, считывания не будет.
1
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
15.12.2016, 20:20  [ТС] 9
Fixer_84, спасибо большое это то что нужно было
0
AnastasiaM24
3 / 3 / 0
Регистрация: 14.12.2016
Сообщений: 33
25.12.2016, 08:21  [ТС] 10
Fixer_84, можете пожалуйста объяснить для чего здесь переменная N?и что делают функции begin end со множествами. Как это работает? И есть ли какое то ограничение на количество элементов ,которые можно записать файле в первой программе которую вы писали
0
Fixer_84
1313 / 824 / 754
Регистрация: 30.04.2016
Сообщений: 2,759
25.12.2016, 18:09 11
AnastasiaM24, здравствуйте. Переменная N в первой программе - это числа, которые мы пробегаем при считывании файла. Переменные NX, NY, NZ во второй программе - размеры каждого массива, то есть максимальное количество элементов, которые каждый из них может содержать. Функции begin() и end() - это диапазон значений элементов множества. После помещения элементов в множество, нам нужно по ним пробежать от начала (функция begin() и до конца (функция end()). Что касается количества элементов, то, мне кажется, лучше написать программу для их подсчета, чтобы не ошибиться. Для более профессионального ответа, обращайтесь в google или к более опытным программистам.
1
25.12.2016, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2016, 18:09

Множества. Выполнить действия над множествами: (B - A) * C (по заданным условиям).
Доброго времени суток. Помогите пожалуйста решить задачку по множествам. условие: Задан...

Операции над множествами - переписать код для работы с буквами
Здравствуйте,помогите пожалуйста подкорректировать код. В общем есть код, который выполняет...

Реализовать базовые операции над множествами: объединение, пересечение, дополнение
Вот как звучит задание: &quot;Объект: множество символов алфавита. Реализовать базовые операции над...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru