Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
14 / 14 / 6
Регистрация: 26.11.2010
Сообщений: 235
1

Пересечение множеств

12.09.2011, 22:54. Просмотров 2389. Ответов 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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class mnozh
{
    int *m;
    int size;
    int pos;
public:
    mnozh();
    mnozh(int s);
    void add(int e);
    void del(int k);
    void show();
    friend void peresech(const mnozh &,const mnozh &);
};
mnozh::mnozh(int s)
{
    size = s;
    pos = 0;
    m = new int [size];
    for(int i=0;i<size;i++)
    {
        m[i]=0;
    };
};
 
void mnozh::add(int e)
{
    if(pos==size) cout<<"full";
    else { m[pos]=e; pos++;};
};
 
void mnozh::del(int k)
{
    if(size==0){ cout<<"Mnozh. pusto"<<endl;};
    for(int i=k;i<size;i++)
    {
        m[i]=m[i+1];
    };
    size--;
    
};
 
void peresech(const mnozh &o,const mnozh &o1)
{
    int s;
    s=o.size+o1.size;
    mnozh temp(s);
    int kol=0;
    for(int i=0,k=0;i<o.size, k<o1.size;i++,k++)
    {
        if(o.m[i]==o1.m[k]) 
        {
            temp.m[kol]=o.m[i];
            kol++;
        }
    };
    for(int i=0;i<kol;i++)
    {
        cout<<temp.m[i]<<" ";
    };
 
};
void mnozh::show()
{
    for(int i=0;i<size;i++)
    {
        cout<<m[i]<<" ";
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
 
    mnozh a(4),b(4);
    a.add(7);
    a.add(2);
    a.add(1);
    a.add(5);
    
    b.add(7);
    b.add(2);
    b.add(5);
    b.add(2);
    peresech(a,b);
    system("pause");
    return 0;
}
Т.е. я понимаю, почему оно у меня не так работает, но не могу исправить. Мб, кто подскажет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2011, 22:54
Ответы с готовыми решениями:

Пересечение множеств
Вход — два множества натуральных чисел. Выход — их пересечение (перечисление элементов через...

пересечение множеств
найти пересечение мнжества А и В. Результат вывести в другом множестве. заранее спс. извиняюсь...

Пересечение множеств
Здравствуйте. У меня следующая задача: Даны 2 множества A и B, причем множество B отсортировано...

Объединение, пересечение, разность множеств
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

4
Заблокирован
12.09.2011, 23:06 2
немного неправильно алгоритм конструктора составлен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int mnoz1[4] = {1, 2, 3, 4}
int mnoz2[5] = {1, 2, 3, 4, 5}
int *tmp, count = 0;
 
for (int i = 0; i != 4; ++i)
      for(int k = 0; k != 5; ++k)
            if(mnoz1[i] == mnoz2[k]) ++count;
if(!count) std::cout << "пересечение пусто\n";
else{
 
tmp = new tmp[count];
count = 0;
 
for (int i = 0; i != 4; ++i)
      for(int k = 0; k != 5; ++k)
            if(mnoz1[i] == mnoz2[k]) tmp[count++] = mnoz1[i];
.............................
delete []tmp;
}
но тут не учитан случай повтора элемента в множесте... в принципе множество и не подразумевает повторения элементов

подправил немного
1
14 / 14 / 6
Регистрация: 26.11.2010
Сообщений: 235
12.09.2011, 23:17  [ТС] 3
Всё исправил, большое спасибо.
0
Заблокирован
12.09.2011, 23:33 4
вот скомпилировал, отредактировал. там 1 лишний инкремент count++
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
    int mnoz1[4] = {1, 2, 3, 4};
    int mnoz2[5] = {1, 2, 3, 4, 5};
    int *tmp, count = 0;
 
    for (int i = 0; i != 4; ++i)
        for(int k = 0; k != 5; ++k)
            if(mnoz1[i] == mnoz2[k]) ++count;
 
    if(!count) std::cout << "пересечение пусто\n";
    else{
 
        tmp = new int[count];
        count = 0;
 
        for (int i = 0; i != 4; ++i)
            for(int k = 0; k != 5; ++k)
                if(mnoz1[i] == mnoz2[k]) tmp[count++/* вот тут */] = mnoz1[i];
        /* тут восстанавливаем */
        --count;
 
        while(count >= 0)
            std::cout << tmp[count--];
 
        delete []tmp;
    }
как альтернатива без восстановление счетчика
C++
1
2
while(count > 0)
            std::cout << tmp[--count];
0
14 / 14 / 6
Регистрация: 26.11.2010
Сообщений: 235
12.09.2011, 23:56  [ТС] 5
Я думаю, и такой вариант сойдёт :
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
void peresech(const mnozh &o,const mnozh &o1)
{
    int count=0;
    for(int i=0;i<o.size;i++)
        for(int k=0;k<o1.size;k++)
            if(o.m[i]==o1.m[k]) ++count;
    if(!count) {cout<<"Pusto"<<endl;}
    else
    {
    mnozh temp(count);
    int kol=0;
    for(int i=0;i<o.size;i++)
    for(int k=0;k<o1.size;k++)
        if(o.m[i]==o1.m[k]) 
        {
            temp.m[kol]=o.m[i];
            kol++;
        }
    
    for(int i=0;i<kol;i++)
    {
        cout<<temp.m[i]<<" ";
    };
    }
};
Единственное, что я лишнюю переменную создал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2011, 23:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти пересечение и объединения заданных множеств
Здравствуйте. У меня следующая задача: Даны множества U={1,2,3,4,…,25} та три ее подмножества...

Пересечение, ообъединение, наименьший элемент пересечения множеств
&quot;Даны два множества A и B байтовых чисел. Найдите пересечение и объединение этих множеств и...

Найти пересечение множеств ключей двух map
Добрый день! Имеется 2 map'а: map&lt;string, double&gt; map1; map&lt;string, double&gt; map2; Требуется...

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


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

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

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