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

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

Войти
Регистрация
Восстановить пароль
 
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
#1

Вывод множества - C++

15.06.2011, 09:40. Просмотров 609. Ответов 3
Метки нет (Все метки)

Есть программа, помогите добавить вывод в программу. Вывод какой гость, к кому сходил в гости.
Я так понимаю в эту программу нужно добавить циклический вывод - но недогоню(
Сама задача:
Дано следующее описание:
type
nаmе=(Вася, Володя, Ира, Марина, Миша, Наташа, Оля, Света, Юля);
gosti=set of name;
group=array[name] of gosti;
Написать программу, определяющую, есть в группе g:group хотя бы один человек, побывавший в гостях у всех остальных из группы (g[x]-множество людей, бывших в гостях у человека с именем х; х не входит в g[x]).

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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <map>
#include <set>
#include <string>
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////
enum  T_name // объявляет тип перечисление 
{
    Vasya,
    Volodya,
    Ira,
 
    Marina,
    Misha,
    Natasha,
 
    Olya,
    Sveta,
    Julya,
 
    names_total
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                   T_str;
typedef std::set<T_name>              T_visitors; 
typedef std::map<T_name, T_visitors>  T_group;
typedef std::map<T_name, size_t>      T_name_visits_total;
typedef std::map<T_name, T_str>       T_rus_name; // для русских имен
/////////////////////////////////////////////////////////////////////////////////////////
void  random_fill_group(T_group&  group) //процедура - рендомно заполняем группы
{
    for(int  i = 0; i < names_total; ++i)
    {        
        T_visitors  visitors;  // разбрасываем по гостям
        for(int  j = 0; j < names_total; ++j)
        {
            if(j == i) continue;
            if(rand() % 23) // (изменяем на что делить, получаем разных гостей)
            {
                visitors.insert(T_name(j)); // в j добавляем новую запись при тру
                              
            }
        }
        group[T_name(i)] = visitors; 
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
T_visitors  get_persons_who_has_visited_all(const T_group&  group) // выбераем гостя..
{   //объявляем
    T_visitors           visitors_res; 
    T_name_visits_total  name_visits_total;
    ///////////
    if(!group.empty())
    {//.empty возращает истину если в стеке нет элементов
     // если есть то цикл
     
        for(T_group::const_iterator  host_visitors_it = group.begin();
      // бегин возратит итератор на первый элемент множества
      // когда 
      // функция end возратит на последнее место, после последнего элемента 
            host_visitors_it != group.end(); ++host_visitors_it)
        {        // где нейм ит счетчик людей удовлетворяющих условию
            for(T_visitors::const_iterator  name_it = host_visitors_it->second.begin();
                name_it != host_visitors_it->second.end(); ++name_it)
            { //накапливаем имена гостей указывая в массиве(множестве) на эти имена
                ++name_visits_total[*name_it];
            }
        }
        //заупускаем цикл для имен гостей присваивая первый элемент множества,
        for(T_name_visits_total::const_iterator  name_visits_total_it = name_visits_total.begin();
            // пока не станет равно последнему элементу - инкремент
            name_visits_total_it != name_visits_total.end(); ++name_visits_total_it)
        { //если у нас обращение к данным разименованного общего количества гостей
        // равно предыдущему члену
            if(name_visits_total_it->second == names_total - 1)
            { // присваиваем имени разъименованный участок общего колва гостей
            // 
                visitors_res.insert(name_visits_total_it->first);
            }
        }    
    }
 // возращаем кого мы получили..
    return visitors_res;    
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
        setlocale (LC_CTYPE, "rus");
    srand(static_cast<unsigned>(time(0))); // динамически рендомим по времени
    T_rus_name  rus_name;
    rus_name[Vasya   ]  = "Вася";
    rus_name[Volodya ]  = "Володя";
    rus_name[Ira     ]  = "Ира";
 
    rus_name[Marina  ]  = "Марина";
    rus_name[Misha   ]  = "Миша";
    rus_name[Natasha ]  = "Наташа";
 
    rus_name[Olya    ]  = "Оля";
    rus_name[Sveta   ]  = "Света";
    rus_name[Julya   ]  = "Юля";
 
    T_group  group;
    random_fill_group(group);    
    T_visitors  visitors_best = get_persons_who_has_visited_all(group);
    cout << get_persons_who_has_visited_all << endl;    
    if(visitors_best.empty()) // если есть..
    {
        std::cout << "В группе не существует человека, побывавшего в гостях у всех остальных."
                  << std::endl;    
    }
    else
    {
        std::cout << "Побывали в гостях у всех остальных:" << std::endl;
        for(T_visitors::iterator  visitor_it = visitors_best.begin();
            visitor_it != visitors_best.end(); ++visitor_it)
        {
            std::cout << rus_name[*visitor_it] << std::endl; 
        }
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 3 часа 39 минут
upd...

Добавлено через 2 часа 44 минуты
upd...

Добавлено через 1 час 44 минуты
upd...(((

Добавлено через 11 часов 2 минуты
ребят подскажите...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 09:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод множества (C++):

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

Вывод элементов множества на экран - C++
Здравствуйте. Столкнулся с такой проблемой, объявил и заполнил множество элементами, но не знаю как выводятся на экран элементы множества: ...

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

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

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

Множества . Найти разность полученного множества с заданным - C++
Всем доброго времени суток! Необходима ваша помощь. Никак не могу сделать второй пункт задачи.Суть задачи-найти 1)объединение множества...

3
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
28.06.2011, 21:29  [ТС] #2
::upd::

Добавлено через 2 часа 2 минуты
жаль не одного ответа не увидеть...
0
kravam
быдлокодер
1702 / 889 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
28.06.2011, 21:53 #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
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
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <map>
#include <set>
#include <string>
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////
enum  T_name // объявляет тип перечисление 
{
    Vasya,
    Volodya,
    Ira,
 
    Marina,
    Misha,
    Natasha,
 
    Olya,
    Sveta,
    Julya,
 
    names_total
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                   T_str;
typedef std::set<T_name>              T_visitors; 
typedef std::map<T_name, T_visitors>  T_group;
typedef std::map<T_name, size_t>      T_name_visits_total;
typedef std::map<T_name, T_str>       T_rus_name; // для русских имен
/////////////////////////////////////////////////////////////////////////////////////////
void  random_fill_group(T_group&  group) //процедура - рендомно заполняем группы
{
 
    for(int  i = 0; i < names_total; ++i)
    {        
        T_visitors  visitors;  // разбрасываем по гостям
        for(int  j = 0; j < names_total; ++j)
        {
            if(j == i) continue;
            if(rand() % 23) // (изменяем на что делить, получаем разных гостей)
            {
                visitors.insert(T_name(j)); // в j добавляем новую запись при тру
                                              
            }
        }
        group[T_name(i)] = visitors; 
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
T_visitors  get_persons_who_has_visited_all(const T_group&  group) // выбераем гостя..
{   //объявляем
    T_visitors           visitors_res; 
    T_name_visits_total  name_visits_total;
    ///////////
    if(!group.empty())
    {//.empty возращает истину если в стеке нет элементов
     // если есть то цикл
     
        for(T_group::const_iterator  host_visitors_it = group.begin();
      // бегин возратит итератор на первый элемент множества
      // когда 
      // функция end возратит на последнее место, после последнего элемента 
                host_visitors_it != group.end(); ++host_visitors_it)
        {        // где нейм ит счетчик людей удовлетворяющих условию
            for(T_visitors::const_iterator  name_it = host_visitors_it->second.begin();
                name_it != host_visitors_it->second.end(); ++name_it)
            { //накапливаем имена гостей указывая в массиве(множестве) на эти имена
                ++name_visits_total[*name_it];
            }
        }
        //заупускаем цикл для имен гостей присваивая первый элемент множества,
        for(T_name_visits_total::const_iterator  name_visits_total_it = name_visits_total.begin();
            // пока не станет равно последнему элементу - инкремент
                        name_visits_total_it != name_visits_total.end(); ++name_visits_total_it)
        { //если у нас обращение к данным разименованного общего количества гостей
        // равно предыдущему члену
            if(name_visits_total_it->second == names_total - 1)
            { // присваиваем имени разъименованный участок общего колва гостей
                        // 
                visitors_res.insert(name_visits_total_it->first);
            }
        }    
    }
 // возращаем кого мы получили..
    return visitors_res;    
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 
        setlocale (LC_CTYPE, "rus");
    srand(static_cast<unsigned>(time(0))); // динамически рендомим по времени
    T_rus_name  rus_name;
    rus_name[Vasya   ]  = "Вася";
    rus_name[Volodya ]  = "Володя";
    rus_name[Ira     ]  = "Ира";
 
    rus_name[Marina  ]  = "Марина";
    rus_name[Misha   ]  = "Миша";
    rus_name[Natasha ]  = "Наташа";
 
    rus_name[Olya    ]  = "Оля";
    rus_name[Sveta   ]  = "Света";
    rus_name[Julya   ]  = "Юля";
 
    T_group  group;
    random_fill_group(group);    
 
    
    //Вот эта переменная используется в двух циклах, незачем её два раза объявлять
    T_visitors::iterator  visitor_it; 
   
    //Вот вывод, который тебе нуден 
    for(T_group::iterator  group_it = group.begin();group_it != group.end(); ++group_it) {  
     std::cout <<"В гостях у " << rus_name[group_it->first] << " были "<< std::endl; 
        for(visitor_it= group_it->second.begin();
         visitor_it!= group_it->second.end(); ++visitor_it) {
          std::cout << rus_name[*visitor_it] << std::endl; 
         }
    }
 
    printf ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
 
    T_visitors  visitors_best = get_persons_who_has_visited_all(group);
 
//А вот это место я закомментил потому, что это чушь собачья.
//    cout << get_persons_who_has_visited_all << endl;    
        if(visitors_best.empty()) // если есть..
    {
        std::cout << "В группе не существует человека, побывавшего в гостях у всех остальных."
                  << std::endl;    
    }
    else
    {
        std::cout << "Побывали в гостях у всех остальных:" << std::endl;
        for(visitor_it = visitors_best.begin();
            visitor_it != visitors_best.end(); ++visitor_it)
        {
            std::cout << rus_name[*visitor_it] << std::endl; 
                }
    }
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
IIIa66uMEM6eP
заставил Бендера
436 / 292 / 10
Регистрация: 05.12.2010
Сообщений: 1,648
Записей в блоге: 6
28.06.2011, 22:02  [ТС] #4
Цитата Сообщение от kravam Посмотреть сообщение
как проверять
лучше помогите)

Добавлено через 3 минуты
kravam, вообще все супер, как надо)
0
28.06.2011, 22:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2011, 22:02
Привет! Вот еще темы с ответами:

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

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

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

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод) - C++
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; ...


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

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

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