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

Проблемы с формированием объединения, пересечения множеств - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функции (вызов и тип возвращаемого значения) http://www.cyberforum.ru/cpp-beginners/thread702884.html
Доброй ночи! Кто может помочь мне по следующей задачей? Есть динамический массив в main(): double *m=new double ; Есть функция derivatives (int size, Embedded *emb_energy) Внутри функции происходят вычисления и формируется динамический список double *m_in_function=new double Я хочу, чтобы эта функция возвращала этот массив при вызове.
C++ Как обьявить и инициализировать массив константных значений? Пробовал вот таким вот образом в заголовочном файле const int big_numbers = { 1000, 2000, 3000 }; error C2059: syntax error : '{' error C2334: unexpected token(s) preceding '{'; skipping apparent function body подскажите как правильно сделать плиз http://www.cyberforum.ru/cpp-beginners/thread702880.html
Наследование C++
Подскажите пожалуйста, имеется вот такая схемка связей, прошу прощения за свое рисование: click (стрелки это наследование, где стрелка, тот класс более абстрактен). class A { public: int getData(); virtual void Ololo() = 0; private: int data;
Проверить содержит ли массив простые числа C++
Составить функцию, которая бы возвращала 1, если среди элементов массива есть хотя бы одно простое число, и возвращала 0, если массив не содержит простых чисел. Написал програмку, но она возвращает 1 только в том случае, если все числа массива простые и ноль в любом другом случае: #include <iostream> #include <math.h> using namespace std; bool fun () { const int n=4; int mas={7, 2, 19,...
C++ Метод Шелла http://www.cyberforum.ru/cpp-beginners/thread702870.html
Проверить упорядочены ли элементы строк матрицы. Если нет, то упорядочить их в порядке убывания методом Шелла.
C++ Записать элементы массива в обратном порядке: первый элемент должен оказаться на последнем месте, второй - на предпоследнем Записать элементы массива в обратном порядке: первый элемент должен оказать- ся на последнем месте, второй - на предпоследнем и т.д. спасибо всем заранее)))) Будьте внимательней при выборе раздела! подробнее

Показать сообщение отдельно
CaH_CaHbl4
 Аватар для CaH_CaHbl4
21 / 21 / 4
Регистрация: 12.02.2012
Сообщений: 137
21.11.2012, 22:16  [ТС]     Проблемы с формированием объединения, пересечения множеств
Разобрался с set_union и set_intersection
может кому будет полезно.
тут и работа со мн-вами, и перечислимый тип, и как сделать, чтобы индекс массива был перечислимым типом.
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <set>
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
 
using namespace std;
typedef enum {pig, cow, chick, duck, turkey, rabbit} TAnimals;
typedef set<TAnimals> FermSet;
 
//---------------------------------------------------------------------------
 
//вывод мн-ва как слов из передавемого массива
void printset(FermSet settoout, string name[])
{
  int i =-1;
  TAnimals a;
   do
     {
       i++;
       a = TAnimals(i);
       if (settoout.find(a)!=settoout.end())
       cout<<name[a]<<endl;
     }
   while (a!=rabbit);    
}
 
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  FermSet BD[3]; //массив множеств, соответственно
                                 //для каждой из 3х ферм свое множество
  string name[rabbit+1]; //массив нужный для того, чтобы выводить названия
                                           //в соответствии с перечислимым типом
  name[pig] = "Свинья";
  name[cow] = "Корова";
  name[chick] = "Курица";
  name[duck] = "Утка";
  name[turkey] = "Индюк";
  name[rabbit] = "Кролик";
 
  cout<<"Если животное есть на ферме, нажмите -y- "<<endl;
  cout<<"В противном случае, введите любой символ"<<endl;
 
  TAnimals a; //понадобится, чтобы бегать по названиям животных
                          //и проверять наличие элемента в множестве
  int nomferm; //номер фермы
 
  for (nomferm = 0; nomferm <= 2 ; nomferm++)
    {
        cout<<"Перечислите животных фермы №"<<nomferm+1<<endl;
        int i =-1;
        do
          {
            i++;
            a = TAnimals(i);
            cout<<name[a]<<"?"<<endl; //спрашивает, есть ли живность в ферме
            char ThereIs='y';
            cin>>ThereIs; //получает ответ
            if (ThereIs == 'y' | ThereIs == 'Y') BD[nomferm].insert(a) ;
                //и если он да, тогда засовывает элемент в множество
                //соответствующее номеру фермы
          }
        while (a!=rabbit);
     }
 
   //вывод ввиде таблички. Форматирование не столь ровное, но суть понятна
   cout<<"Введенные данные"<<endl;
   cout.width(10);
   cout.fill(' ');
   cout<<"";
   int i =-1;
   //как в Екселе выводим сначала строку животных.
   do
     {
       i++;
       a = TAnimals(i);
       cout.width(8);
       cout.fill(' ');
       cout<<name[a];
     }
   while (a!=rabbit);
   cout<<endl;
   
   for (nomferm = 0; nomferm <= 2 ; nomferm++)
   {
     cout.width(8);
     cout.fill(' ');
     cout<<"Ферма №"<<nomferm+1;
     i =-1;
     do
       {
         i++;
         a = TAnimals(i);
         string str;
         if (BD[nomferm].find(a)!=BD[nomferm].end()) str="Есть"; else str="Нет";
         cout.width(8);
         cout.fill(' ');
         cout<<str;
      }
     while (a!=rabbit);
     cout<<endl;
   }
  FermSet inBD, all, onlyone, tempset;
  //inBD - мн-во животных, которые вообще есть на 3ех фермах - по сути объединение
  //all - мн-во животных, которые есть на каждой из 3ех ферм  - по сути пересечение
  //onlyone - животные, которых можно найти лишь в одной ферме
 
  //объединение множеств всех ферм
  for (nomferm=0; nomferm<2; nomferm++)
    set_union(BD[nomferm].begin(),BD[nomferm].end(),BD[nomferm+1].begin(),BD[nomferm+1].end(),inserter(inBD,inBD.end()));
 
  //пересеченение мн-во
  set_intersection(BD[0].begin(),BD[0].end(),BD[1].begin(),BD[1].end(),inserter(tempset,tempset.end()));
  set_intersection(BD[2].begin(),BD[2].end(),tempset.begin(),tempset.end(),inserter(all,all.end()));
 
  tempset.clear();     
  for (nomferm = 0; nomferm <= 2; nomferm++)
  {  
    if (nomferm==0)
      set_union(BD[1].begin(),BD[1].end(),BD[2].begin(),BD[2].end(),inserter(tempset,tempset.end()));
   
    if (nomferm==1)
      set_union(BD[0].begin(),BD[0].end(),BD[2].begin(),BD[2].end(),inserter(tempset,tempset.end()));
     
    if (nomferm==2)
      set_union(BD[1].begin(),BD[1].end(),BD[0].begin(),BD[0].end(),inserter(tempset,tempset.end()));
   
    i =-1;
     do
       {
         i++;
         a = TAnimals(i);
         if (BD[nomferm].find(a)!=BD[nomferm].end() && tempset.find(a)==tempset.end()) onlyone.insert(a);
       }
     while (a!=rabbit);
   
    tempset.clear();
   
  }
 
  cout<<endl;
  cout<<"Встретившиеся животные на фермах"<<endl;
  printset(inBD,name);
 
  cout<<endl;
  cout<<"Животные, которые есть в каждой ферме"<<endl;
  printset(all,name);
 
  cout<<endl;
  cout<<"Животные, которые есть лишь в одной ферме"<<endl;
  printset(onlyone,name);
 
  getch();
  return 0;
}
 
Текущее время: 13:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru