Форум программистов, компьютерный форум CyberForum.ru

Объединение, пересечение, разность, симметрическая разность множеств - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.98
Жанерке
 Аватар для Жанерке
34 / 34 / 2
Регистрация: 22.09.2013
Сообщений: 170
06.10.2013, 22:36     Объединение, пересечение, разность, симметрическая разность множеств #1
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти: объединение множеств А, В и С, пересечение множеств А, В и С, разность А\В, разность В\А, симметрическую разность множеств А и В.
можете показать один пример с использованием множеств из букв.

Добавлено через 2 часа 21 минуту
удалила повторяющиеся элементы и сделала объединение :

помогите сделать пересечение (a*b*c) и разность (a-b)

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
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include<stdio.h>
#include<math.h>
#pragma hdrstop
  void
povtor(char *str){
 char alphabet[256] = { 0 };
    char *ptr, *current;
    for(ptr = str; *ptr; ++ptr)
        if(!(alphabet[(int)*ptr]))
            alphabet[(int)*ptr] = 1;
    for(ptr = str, current = str; *ptr; ++ptr)
        if(alphabet[(int)*ptr])
        {
            *current++ = *ptr;
            alphabet[(int)*ptr] = 0;
        }
    *current = '\0';
    printf("%s\n", str);}
 
 
int main() {
char
a[]="kenjebek" ,
b[]="janerke",
c[]="kenjebekkizi" ;
char ob[1],peres_abc[1],peres_ab[1],raza_b[1],razb_a[1],simraz[1];
 int i,j,g,k;
  povtor(a);
  povtor(b);
  povtor(c);
 strcat(ob,a);
 strcat(ob,b);
 strcat(ob,c);
  povtor(ob);
 
      getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2013, 22:36     Объединение, пересечение, разность, симметрическая разность множеств
Посмотрите здесь:

Реализовать классические операции над множествами - объединение, пересечение и симметричная разность C++
C++ Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств. Дописать программу
Разность множеств: найти недочеты в коде C++
Работа с множествами: объединение, пересечение, симметрическая разность C++
C++ Функция вычисляющая разность двух множеств
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexdemath
 Аватар для Alexdemath
125 / 122 / 6
Регистрация: 11.04.2010
Сообщений: 253
07.10.2013, 06:45     Объединение, пересечение, разность, симметрическая разность множеств #2
Цитата Сообщение от Жанерке Посмотреть сообщение
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти: объединение множеств А, В и С, пересечение множеств А, В и С, разность А\В, разность В\А, симметрическую разность множеств А и В.
можете показать один пример с использованием множеств из букв.
Пример нахождения пересечения (повторяющиеся элементы не проходят)

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
#include <iostream>
using namespace std;
 
int main()  // Пересечение A, B и С
{
    char A[] = "kenjebek", B[] = "janerke", C[] = "kenjebekkizi";
    int size_A = 8, size_B = 7, size_C = 12, d = 0, f = 0;
    char D[12], F[12];
     
    for (int i = 0; i < size_A; i++)
     { int j = 0, k = 0;
       while (j < size_B && B[j] != A[i]) j++;
       while (k < d && D[k] != A[i]) k++;
       if (j != size_B && k == d) D[d++] = A[i];
     }
 
    for (int i = 0; i < size_C; i++)
     { int j = 0, k = 0;
       while (j < d && D[j] != C[i]) j++;
       while (k < f && F[k] != C[i]) k++;
       if (j != d && k == f){ F[f++] = C[i];  cout << C[i] << "\t"; }
     }
 
    cout << "\n" << endl;
    return 0;
}
Добавлено через 27 минут
Вот пример нахождения разности A\B (симметрическая разность A и B = (A\B) U (B\A))


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main()
{
    char A[] = "kenjubin", B[] = "janerky";
    int size_A = 8, size_B = 7;
 
    for (int i = 0; i < size_A; i++)
     { int j = 0;
       while (j < size_B && B[j] != A[i]) j++;
       if (j == size_B) cout << A[i] << "\t";
     }
 
    cout << "\n" << endl;
    return 0;
}
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
07.10.2013, 07:14     Объединение, пересечение, разность, симметрическая разность множеств #3
Цитата Сообщение от Жанерке Посмотреть сообщение
объединение множеств А, В и С, пересечение множеств А, В и С, разность А\В, разность В\А, симметрическую разность множеств А и В.
Как-то так можно сделать через множества:
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
#include <set>
#include <iterator>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
int main() {
    char a[] = "kenjebek",
         b[] = "janerke",
         c[] = "kenjebekkizi";
 
    set<char> sa(begin(a), prev(end(a))),
              sb(begin(b), prev(end(b))),
              sc(begin(c), prev(end(c)));
 
    set<char> abc_union;
    set_union(begin(sa), end(sa),
              begin(sb), end(sb),
              inserter(abc_union, begin(abc_union)));
    set_union(begin(abc_union), end(abc_union),
              begin(sc), end(sc),
              inserter(abc_union, begin(abc_union)));
    cout << "Union of abc: ";
    ostream_iterator<char> out(cout, "");
    copy(begin(abc_union), end(abc_union), out);
 
    set<char> abc_inter;
    set_intersection(begin(sa), end(sa),
                     begin(sb), end(sb),
                     inserter(abc_inter, begin(abc_inter)));
    set_intersection(begin(abc_inter), end(abc_inter),
                     begin(sc), end(sc),
                     inserter(abc_inter, begin(abc_inter)));
    cout << "\nIntersection of abc: ";
    copy(begin(abc_inter), end(abc_inter), out);
 
    set<char> ab_diff;
    set_difference(begin(sa), end(sa),
                   begin(sb), end(sb),
                   inserter(ab_diff, begin(ab_diff)));
    cout << "\nDifference of a and b: ";
    copy(begin(ab_diff), end(ab_diff), out);
 
    set<char> ba_diff;
    set_difference(begin(sb), end(sb),
                   begin(sa), end(sa),
                   inserter(ba_diff, begin(ba_diff)));
    cout << "\nDifference of b and a: ";
    copy(begin(ba_diff), end(ba_diff), out);
 
    set<char> ab_sym_diff;
    set_symmetric_difference(begin(sa), end(sa),
                             begin(sb), end(sb),
                             inserter(ab_sym_diff, begin(ab_sym_diff)));
    cout << "\nSymmetric difference of a and b: ";
    copy(begin(ab_sym_diff), end(ab_sym_diff), out);
}
Union of abc: abeijknrz
Intersection of abc: ejkn
Difference of a and b: b
Difference of b and a: ar
Symmetric difference of a and b: abr
Жанерке
 Аватар для Жанерке
34 / 34 / 2
Регистрация: 22.09.2013
Сообщений: 170
07.10.2013, 21:40  [ТС]     Объединение, пересечение, разность, симметрическая разность множеств #4
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include<stdio.h>
#include<math.h>
#pragma hdrstop
  void
povtor(char *str){  // удаляет повторяющиеся элементы  (правда взяла в инете )
 char alphabet[256] = { 0 };
    char *ptr, *current;
    for(ptr = str; *ptr; ++ptr)
        if(!(alphabet[(int)*ptr]))
            alphabet[(int)*ptr] = 1;
    for(ptr = str, current = str; *ptr; ++ptr)
        if(alphabet[(int)*ptr])
        {
            *current++ = *ptr;
            alphabet[(int)*ptr] = 0;
        }
    *current = '\0';
    printf("%s\n", str);}
//дальше сама додумалась 
 
int main() {
char
a[]="kenjebek" ,
b[]="janerke",
c[]="kenjebekkizi" ;
char ob[1],peres_abc[1],peres_ab[1],raza_b[1],razb_a[1],simraz[1];
 int i,j,g,k,t=0,n=0;
 cout<<"familia :  " ;
  povtor(a);
  cout<<" imia :  " ;
  povtor(b);
  cout<<"ochestvo  :  " ;
  povtor(c);
 
 
 strcat(ob,a); // объединение с помощью функции
 strcat(ob,b);
 strcat(ob,c);
 cout<<"ob'edinenie  :  " ;
  povtor(ob);
 
 
 char simbol,simbol1; // разница а-б
for(i=0;i<strlen(a);i++)
{
  simbol=a[i];
for(j=0;j<strlen(b);j++)
if(strchr(b,simbol)==0)         { 
                   raza_b[t++]=simbol;break;
                                  }
 }
cout<<"raznica a-b  :  " ;
for(k=0;k<t;k++)
cout<<raza_b[k] ;
 cout<<endl;
 
 
 
for(j=0;j<strlen(b);j++)
{  разница б-а//
  simbol1=b[j];
for(i=0;i<strlen(a);i++)
if(strchr(a,simbol1)==0) 
{
razb_a[n++]=simbol1; break;
}
}
cout<<"raznica b-a  :  " ;
for(g=0;g<n;g++)
cout<<razb_a[g] ;
 cout<<endl;
 
 
// СИММИТРИЧЕСКАЯ РАЗНОСТЬ 
 strcat(simraz,razb_a);
 strcat(simraz,raza_b);
 cout<<"simm raznica а^b :  " ;
 for(int l=1;l<=n+t+1;l++)
cout<<simraz[l] ;
 cout<<endl;
 
//пересечение а и b
 char simvol1,simvol;
 int v=0,w=0;
 for(i=0;i<strlen(a);i++){
  simvol=a[i];
for(j=0;j<strlen(b);j++)
if(strchr(b,simvol)!=0){ peres_ab[v++]=simvol;break;} }
 
// пересечение а и b и с
for(j=0;j<strlen(c);j++)
{
  simvol1=c[j];
for(int d=0;d<strlen(peres_ab);d++)
if(strchr(peres_ab,simvol1)!=0) 
{
peres_abc[w++]=simvol1; break;
}
}
cout<<"\n peresechenie  a*b*c :  " ;
for(int p=0;p<w-1;p++)
cout<<peres_abc[p] ;
 cout<<endl;
 
        getch();
    return 0;
}
Добавлено через 2 часа 44 минуты
kamre, тот код на visul C++ да:?
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
07.10.2013, 21:51     Объединение, пересечение, разность, симметрическая разность множеств #5
Цитата Сообщение от Жанерке Посмотреть сообщение
kamre, тот код на visul C++ да:?
Почему? Любым нормальным компилятором с поддержкой с++11 должно собираться: msvc 2013, g++ 4.8.1, clang 3.3

Да и можно переписать под старый стандарт, если вместо
C++
1
begin(sa)
писать
C++
1
sa.begin()
вроде все остальное было и в старом стандарте.
Yandex
Объявления
07.10.2013, 21:51     Объединение, пересечение, разность, симметрическая разность множеств
Ответ Создать тему
Опции темы

Текущее время: 15:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru