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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kolter
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
#1

Множества . Найти разность полученного множества с заданным - C++

03.05.2014, 23:56. Просмотров 606. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток!
Необходима ваша помощь. Никак не могу сделать второй пункт задачи.Суть задачи-найти 1)объединение множества first и second, 2)разность полученного результата с множеством therd. Должно получится 1 3 4 15

Заранее спасибо.

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 "stdafx.h"
#include <iostream>     
#include <algorithm>    
#include <vector>       
using namespace std;
void main () {
  int first[] = {1,2,3,4,5};
  int second[] = {5,9,15,3,7};
  int therd[]={7,5,9,2,13};
   
 vector<int> v(10);  
 vector<int>::iterator it;
  sort (first,first+5);     
  sort (second,second+5);   
 
  it=set_union (first, first+5, second, second+5, v.begin());
  v.resize(it-v.begin());                      
    cout << "The union has " << (v.size()) << " elements:\n";
     cout << '\n';
    
  for (it=v.begin(); it!=v.end(); ++it)
    {cout << ' ' << *it;
 
  }
   
    system("pause");
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 23:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Множества . Найти разность полученного множества с заданным (C++):

Число изъять из множества А, если оно является элементом множества А, но не является элементом множества В - C++
Введено с клавиатуры число изъять из множества А, если оно является элементом множества А, но не является элементом множества В. ...

Множества. Вычислить количество элементов множества Q, связанного c исходными множествами - C++
В общем задание звучит так : Заданы 3 упорядоченных множества F, G и H, представленные файлами f, g и h соответственно. Вычислить...

Заданы два множества точек на плоскости. Построить пересечения и разность множеств - C++
начало примерно такое ,на мой взгляд должно быть, а вот со второй частью програмки возникает большая проблема.... Помогите...:( #include...

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

Квадрат с вершинами из первого множества накрывает все точки второго множества и имеет минимальную площадь - C++
Даны два множества точек на плоскости. Выбрать четыре различных точки первого множества так, чтобы квадрат с вершинами в этих точках...

Множества. Проверка множества на наличие элемента в нем - C++
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать множество элементов, добавлять в него новые элементы и проверять...

4
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
04.05.2014, 00:14 #2
Результат разности множеств А и В являются все х принадлежащие множеству А и не принадлежащие множеству В. Создай цикл и пробегись по всем элементам множества second и ищи каждый элемент в множестве third если таковой не найден то этот элемент входит в результирующее множество
1
Kolter
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
04.05.2014, 11:49  [ТС] #3
я понимаю теорию. я не понимаю как получившийся результат передать новому множеству, чтобы работать дальше с ним
0
Nienie
0 / 0 / 1
Регистрация: 02.05.2013
Сообщений: 9
04.05.2014, 14:26 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Чтобы получить объединение, нужно найти общую часть множества first и second (пусть оно будет С) и вырезать его, скажем, из множества first, а затем уже преобразованное first и нетронутое second слить в один массив.
Найти пересечение легко.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int C[10], k=0;
for(int i=0; i<5;i++)
{
for( int j=0; j<5; j++)
{
 
if(first[i]==second[j])
{
C[k++] = first[i];
}
 
}
}
Как вырезать сейчас так сразу в голову не приходит. Но,как мне кажется, должно быть что-то такое:
1) Берешь элемент из массива, который хочешь вырезать
2) Запоминаешь его номер в массиве n
3) Переписываешь из n+1-ого элемента в n, из n+2 в n+1 и так до конца.
4) Берешь следующий элемент и идешь дальше.
0
stawerfar
141 / 55 / 4
Регистрация: 14.12.2010
Сообщений: 347
Записей в блоге: 1
05.05.2014, 16:04 #5
вот набросал выше сказанное
set.hpp
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
#ifndef SET_HEADER_HPP
#define SET_HEADER_HPP
 
#include <vector>
#include <algorithm>
#include <iterator>
 
#if !defined( EXIT_SUCCESS )
 #define EXIT_SUCCESS 0x0
#endif
 
#if !defined( EXIT_FAILURE )
 #define EXIT_FAILURE 0x1
#endif
 
namespace sl
{
 
  enum SetMode
  {
    SM_SPMODE = 0x1,    // объединение множеств посредством stl
    SM_DEFAULT = 0x2,   // объединение множеств в ручную
    SM_SORT = 0x4        // сортировать множество
  };
 
  template <class type>
  class Set
  {
    std::vector<type> set;
    SetMode mode;
  public:
 
    Set(SetMode mode = SM_DEFAULT);
    Set(type* begSet, type* endSet,SetMode mode = SM_DEFAULT);
    Set(std::vector<type>& nSet,SetMode mode = SM_DEFAULT);
    
    Set<type>& operator+ (Set<type>& otherSet);
    Set<type>& operator- (Set<type>& otherSet);
    Set<type>& operator += (Set<type>& otherSet);
    Set<type>& operator -= (Set<type>& otherSet);
 
    std::vector<type> GetSetValue(void);
    std::ostream& GetSetValue(std::ostream& out);
    
    friend std::ostream& operator << (std::ostream& out, Set<type>& set)
    {return (set.GetSetValue(out));}
  };
}
 
#endif
set.cpp
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
#include "set.hpp"
 
namespace sl
{  
 
  template <class type>
  Set<type>::Set(SetMode mode = SM_DEFAULT):mode(mode){}
 
  template <class type>
  Set<type>::Set(type* begSet, type* endSet,SetMode mode = SM_DEFAULT):mode(mode)
  { std::copy(begSet,endSet,std::back_inserter(set));}
 
  template <class type>
  Set<type>::Set(std::vector<type>& nSet,SetMode mode = SM_DEFAULT):mode(mode)
  {set = nSet;}
 
  
  template <class type>
  std::vector<type> Set<type>::GetSetValue(void)
  {return (set);}
 
  template <class type>
  Set<type>& Set<type>::operator+ (Set<type>& otherSet)
  {
    if (this == &otherSet)
      return (*this);
 
    if (mode & SetMode::SM_SPMODE)
    {
      std::vector<type> temp = set;
      set.clear();
      temp.insert(temp.end(),otherSet.set.begin(),otherSet.set.end());
      std::sort(temp.begin(),temp.end());
      std::unique_copy(temp.begin(),temp.end(),std::back_inserter(set));
    }
    else
    {
      if (!set.size())
        set = otherSet.set;
      else
      {
        for (int i = 0x0; i < otherSet.set.size(); ++i)
          if (std::find(set.begin(),set.end(),otherSet.set.at(i)) == set.end())
            set.push_back(otherSet.set.at(i));
        
      }
    }
 
    return (*this);
  }
 
  template <class type>
  Set<type>& Set<type>::operator- (Set<type>& otherSet)
  {
    if (this == &otherSet || !set.size())
      return (*this);
 
    std::vector<type>::iterator it;
 
    for (int i = 0x0; i < otherSet.set.size(); ++i)
    {
        it = std::find(set.begin(),set.end(),otherSet.set.at(i));
 
        if (it != set.end())
         set.erase(it);
    }
 
    return (*this);
  }
 
  
  template<class type>
  Set<type>& Set<type>::operator += (Set<type>& otherSet)
  {return (*this + otherSet);}
 
  template<class type>
  Set<type>& Set<type>::operator -= (Set<type>& otherSet)
  {return (*this - otherSet);}
 
 
  template<class type>
  std::ostream& Set<type>::GetSetValue(std::ostream& out)
  {
    if (mode & SM_SORT)
      std::sort(set.begin(),set.end());
 
    for (int i = 0x0; i < set.size(); ++i)
      out << set.at(i) << ' ';
    out << std::endl;
    return (out);
  }
 
 
}
main.cpp
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
#include <iostream>
 
#include "set.hpp"
#include "set.cpp"
 
int main(void)
{
  int buff[] = {1,2,3,4,5};
  int buff2[] = {1,3,6,7,8,9,-12};
  int buff3[] = {8,9,-12,10,11,12};
 
  int size = sizeof(buff) / sizeof(buff[0x0]);
  int size2 = sizeof(buff2) / sizeof(buff2[0x0]);
  int size3 = sizeof(buff3) / sizeof(buff3[0x0]);
 
  sl::Set<int> firstSet(buff,buff+size,sl::SM_SORT);
  sl::Set<int> secondSet(buff2,buff2+size2,sl::SM_SORT);
  sl::Set<int> thirdSet(buff3,buff3+size3,sl::SM_SORT);
  
  std::cout << "First set is  : " << firstSet << std::endl
            << "Second set is : " << secondSet << std::endl
            << "Third set is  : " << thirdSet << std::endl;
 
  secondSet += firstSet;
 
  std::cout << "The second set after merging is : " << secondSet << std::endl;
  thirdSet -= secondSet;
  std::cout << "The third set afrer subtracting is : " << thirdSet << std::endl;
  system("pause");
  return (EXIT_SUCCESS);
}
0
05.05.2014, 16:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 16:04
Привет! Вот еще темы с ответами:

Удалить из множества А минимальный элемент множества В - C++
Удалить из множества А минимальный элемент множества В. могу удалить из A все елементи B. а минимальний нет( #include &lt;iostream&gt; ...

Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств. Дописать программу - C++
Помогите написать, дописать эту программу очень нужна ваша помощь... Задание:заданы два множества точек на плоскости. Построить...

Сформировать два множества, первое содержит все простые числа из данного множества, второе - все составные - C++
Условие задачи следующее:Имеется множество, содержащее натуральные числа из некоторого диапазона. Сформировать два множества, первое из...

Найти подмножество множества - C++
Программа должна позволять вводить с клавиатуры множество чисел, и находить подмножество множества. Т.е например если введено множество...


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

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

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