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

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

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

Работа с множествами(символы) - C++

30.01.2014, 15:46. Просмотров 742. Ответов 11
Метки нет (Все метки)

Здравствуйте, столкнулась с такой проблемой. Вот само задание:осуществить все операции над элементами множеств: пересечение, разность, проверку эквивалентности и неэквивалентности,возможность исключения элемента из множества, проверку принадлежности каждому из множеств любого элемента, введенного пользователем. А- множество из символов, имеющих код в диапазоне от 224 до 240; Множество В-множество из символов, имеющих код в диапазоне от 230 до 255.. Работаю в билдере.

А проблема такая: когда я пытаюсь вывести содержимое самого множества, то ничего не выводится.
А еще в подобный строках(
C++
1
for (symbol='!'; symbol='~';symbol++){
) идет предупреждение-
[C++ Warning] Unit1.cpp(57): W8060 Possibly incorrect assignment.
Помогите, пожалуйста

Сам код:
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#include <conio.h>
#include <tchar.h>
#include <stdio.h>
#include <vcl.h>
#include <iostream.h>
#include <windows.h>
#include <locale.h>
void correct_display(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
}
int main()
{
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
}
 
 char s;
 unsigned char symbol;
 Set <char,'!','~'> A,B,S;
  for ( ;;)
  {
    cout<<"0.Аннотация к программе"<<"\n";
    cout<<"1.Заполнить множество А"<<"\n";
    cout<<"2.Заполнить множество В"<<"\n";
    cout<<"3.Пересечение множеств А и В"<<"\n";
    cout<<"4.Разность множеств А от В"<<"\n";
    cout<<"5.Разность множеств В от А"<<"\n";
    cout<<"6.Объединение множеств А и В"<<"\n";
    cout<<"7.Эквивалентность множеств А и В"<<"\n";
    cout<<"8.Удалить элемент из множества А"<<"\n";
    cout<<"9.Удалить элемент из множества В"<<"\n";
    cout<<"10.Добавить элемент в множество А"<<"\n";
    cout<<"11.Добавить элемент в множество В"<<"\n";
    cout<<"12.Принадлежность элемента каждому из множеств"<<"\n";
    cout<<"13.Выход"<<"\n";
    cout<<"Введите пункт меню: ";
    s = getchar();
 switch (s)
 {
        case '0':
                clrscr();
                cout<<"Эта программа позволяет осуществить все операции над элементами множеств: пересечение, разность, проверку эквивалентности и неэквивалентности,возможность исключения элемента из множества, проверку принадлежности каждому из множеств любого элемента, введенного пользователем.Множество А- множество из символов, имеющих код в диапазоне от 224 до 240; Множество В-множество из символов, имеющих код в диапазоне от 230 до 255.\n";
                getchar();
                break;
        case '1':
                clrscr();
                cout << "Введите элементы множества А(ввод будет окончен, когда вы введете } )={ ";
        while (symbol != '}')
        {
            cin>>symbol;
               if (int(symbol) > 223 && int(symbol) < 241)A<<symbol;
            else cout << "Данный символ не входит в заданный диапазон." << endl;
        }
                cout<<"Множество A ={";
        for (symbol='!'; symbol='~';symbol++){
                        if (A.Contains(symbol)) cout <<" "<<symbol;}
                cout<<"}";
        getchar();
                break;
        case '2':
                clrscr();
                cout << "Введите элементы множества B(ввод будет окончен, когда вы введете } )= { ";
        while (symbol!='}')
        {
            cin >> symbol;
            if (int(symbol) > 231 && int(symbol) < 256)
                B<<symbol;
            else cout << "Данный символ не входит в заданный диапазон." << endl;
        }
                cout<<"Множество В ={";
        for (symbol='!'; symbol='~';symbol++)
                        if (B.Contains(symbol)) cout <<" "<<symbol;
                cout<<"}";
        getchar();
                break;
 
        case '3':
                clrscr();
                S=A*B;
                cout<<"Пересечение множеств А и В = {";
                for (symbol='!'; symbol='~';symbol++)
                        if (S.Contains(symbol)) cout <<" "<<symbol;
                cout<<"}";
                getchar();
                break;
        case '4':
                clrscr();
                S=A-B;
                cout<<"Разность множеств А от В = {";
                for (symbol='!'; symbol='~';symbol++)
                        if (S.Contains(symbol)) cout <<" "<<symbol;
                cout<<"}";
                getchar();
                break;
        case '5':
                clrscr();
                S=B-A;
                cout<<"Разность множеств B от A = {";
                for (symbol='!'; symbol='~';symbol++)
                        if (S.Contains(symbol)) cout <<" "<<symbol;
                cout<<"}";
                getchar();
                break;
 
        case '6':
                clrscr();
                S=A+B;
                cout<<"Объединение множеств А и В = {";
                for (symbol='!'; symbol='~';symbol++)
                        if (S.Contains(symbol)) cout <<" "<<symbol;
                cout<<"}";
                getchar();
                break;
 
         case '7':
                clrscr();
                cout<<"Эквивалентность множеств А и В: ";
                if (A==B)cout<<"Множества эквивалентны.\n";
                else cout<<"Множества неэквивалентны.\n";
                getchar();
                break;
         case '8':
                clrscr();
                do
                {
                        clrscr();
                        cout<<"Множество A ={";
                for (symbol='!'; symbol='~';symbol++)
                                if (A.Contains(symbol)) cout <<" "<<symbol;
                        cout<<"}";
                        cout<<"\nВведите символ, который хотите удалить из множества(для прекращения удаления введите } ): ";
                        cin>>symbol;
                        A>>symbol;
                }while(symbol!='}');
                getchar();
                getchar();
                break;
 
         case '9':
                clrscr();
                do
                {
                        clrscr();
                        cout<<"Множество B ={";
                for (symbol='!'; symbol='~';symbol++)
                                if (B.Contains(symbol)) cout <<" "<<symbol;
                        cout<<"}";
                        cout<<"\nВведите символ, который хотите удалить из множества(для прекращения удаления введите } ): ";
                        cin>>symbol;
                        B>>symbol;
                }while(symbol!='}');
                getchar();
                break;
         case '10':
                clrscr();
                do
                {
                        clrscr();
                        cout<<"Множество A ={";
                for (symbol='!'; symbol='~';symbol++)
                                if (A.Contains(symbol)) cout <<" "<<symbol;
                        cout<<"}";
                        cout<<"\nВведите символ, который хотите добавить в множество(для прекращения добавления введите } ): ";
                        cin>>symbol;
                        A<<symbol;
                }while(symbol!='}');
                getchar();
                break;
         case '11':
                clrscr();
                do
                {
                        clrscr();
                        cout<<"Множество B ={";
                        for (symbol='!'; symbol='~';symbol++)
                                if (B.Contains(symbol)) cout <<" "<<symbol;
                        cout<<"}";
                        cout<<"\nВведите символ, который хотите добавить в множество(для прекращения добавления введите } ): ";
                        cin>>symbol;
                        B<<symbol;
                }while(symbol!='}');
                getchar();
                break;
         case '12':
               clrscr();
               do
                {
                        cout<<"Введите символ, который хотите проверить на принадлежность к множествам(для прекращения проверки нажмите введите }): ";
                        cin>>symbol;
                        if (A.Contains(symbol) && B.Contains(symbol)) cout<<"\nДанный символ принадлежит множествам А и B";
                        else if (A.Contains(symbol)) cout <<"\n Данный символ принадлежит множеству А.";
                        if (B.Contains(symbol)) cout<<"\n Данный символ принадлежит множеству B.";
                } while (symbol!='}');
                getchar();
                break;
         case '13':
                exit (1);
                break;
 }
}
getche();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 15:46     Работа с множествами(символы)
Посмотрите здесь:

работа с множествами - C++
подскажите как все значения следующей переменной &quot;о&quot; занести в множество.... вот часть кода, если это поможет код ......код...... ...

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

работа с множествами - C++
я думаю что не обходимо задавать их как массивы, не могу разобраться как. Задание звучит так: 3 множества A,B,C уже заданы заранее любые по...

Работа над множествами,STL - C++
Собственно есть задача: Дан некий текст.Нужно в алфавитном порядке напечатать все гласные буквы входящие в этот текст более двух раз и...

Работа с множествами, операция коньюнкции - C++
Пользователь вводит элементы 2 множеств и потом необходимо будет проделать с ними некоторые операции. Одна из операций - коньюнкция которую...

Работа с множествами: объединение, пересечение, симметрическая разность - C++
В общем нужно задать 3 множества (a,b,c) (массивы) И на выходе получить (&quot;A&quot; объединение с &quot;B&quot;) симметрическая разность этой дроби с...

Работа со строками. Удалить символы между скобками () - C++
Работа со строками. Удалить символы между скобками (), включая сами скобки. Язык С++.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 16:35     Работа с множествами(символы) #2
Диапазоны
от 224 до 240
и
от 230 до 255
, насколько я понимаю выбираются из кодировки 1251, но почему вы думаете, что символы '!' и '~' тоже в 1251? Да SetConsoleCP - меняет кодировку консоли, но Вы же их не с консоли вводите. А в ASCII, например, это 33 и 126.

Добавлено через 3 минуты
А ещё цикл
C++
1
for (symbol='!'; symbol='~';symbol++){
никогда не будет работать., так как
C++
1
symbol='~';
не условие, а присваивание.

Добавлено через 1 минуту
Надо, скорее, так:
C++
1
for (symbol='!'; symbol=='~';symbol++){
или
C++
1
for (symbol='!'; symbol<='~';symbol++){
Nerdtime
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 9
30.01.2014, 16:45  [ТС]     Работа с множествами(символы) #3
Цитата Сообщение от НеСказочник Посмотреть сообщение
Диапазоны и , насколько я понимаю выбираются из кодировки 1251, но почему вы думаете, что символы '!' и '~' тоже в 1251? Да SetConsoleCP - меняет кодировку консоли, но Вы же их не с консоли вводите. А в ASCII, например, это 33 и 126.
]
Про цикл поняла, исправила, но все так же не выводит содержимое множества. Не поняла ваша замечание по поводу кодировки. В общем в этот диапазон входят русские буквы от "а" до "р", как я помню.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 17:18     Работа с множествами(символы) #4
Я так понимаю, что код:

Цитата Сообщение от Nerdtime Посмотреть сообщение
C++
1
2
for (symbol='!'; symbol='~';symbol++)
if (B.Contains(symbol)) cout <<" "<<symbol;
Должен выводить множество?

'!' - имеет код 33, а '~' - 126. Вы запускаете цикл от 33 до 126 с проверкой B.Contains(symbol) на вхождение символа в множество, в котором могут быть только символы удовлетворяющие:

Цитата Сообщение от Nerdtime Посмотреть сообщение
C++
1
if (int(symbol) > 231 && int(symbol) < 256)
Вот они и не попадают в диапазон.

Добавлено через 1 минуту
Напишите границы в цикла тоже цифрами, при чём, желательно в соответствии с условиями, прописанными при вводе соответствующих символов.
Nerdtime
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 9
30.01.2014, 17:48  [ТС]     Работа с множествами(символы) #5
Цитата Сообщение от НеСказочник Посмотреть сообщение
Напишите границы в цикла тоже цифрами, при чём, желательно в соответствии с условиями, прописанными при вводе соответствующих символов.
C++
1
for (int(symbol)=223; int(symbol)==241;(int)symbol++){
Написала так, не сработало
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 17:51     Работа с множествами(символы) #6
А тут:
C++
1
Set <char,'!','~'> A,B,S;
тоже исправили?

Добавлено через 54 секунды
И вообще, внимательнее проверьте, что бы у Вас везде совпадали диапазоны кодов символов.

Добавлено через 42 секунды
А то, если Вы пишите под одним номером, а читаете под другим, ничего хорошего не будет.
Nerdtime
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 9
30.01.2014, 18:02  [ТС]     Работа с множествами(символы) #7
Цитата Сообщение от НеСказочник Посмотреть сообщение
А тут:
C++
1
Set <char,'!','~'> A,B,S;
тоже исправили?
Вот начало кода с изменениями. Не выводит содержимое А и всё тут:С
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
#include <conio.h>
#include <tchar.h>
#include <stdio.h>
#include <vcl.h>
#include <iostream.h>
#include <windows.h>
#include <locale.h>
void correct_display(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
}
int main()
{
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
}
 
 int s;
 unsigned char symbol;
 Set <char,'а','я'> A,B,S;
  for ( ;;)
  {
    cout<<endl<<endl<<"0.Аннотация к программе"<<"\n";
    cout<<"1.Заполнить множество А"<<"\n";
    cout<<"2.Заполнить множество В"<<"\n";
    cout<<"3.Пересечение множеств А и В"<<"\n";
    cout<<"4.Разность множеств А от В"<<"\n";
    cout<<"5.Разность множеств В от А"<<"\n";
    cout<<"6.Объединение множеств А и В"<<"\n";
    cout<<"7.Эквивалентность множеств А и В"<<"\n";
    cout<<"8.Удалить элемент из множества А"<<"\n";
    cout<<"9.Удалить элемент из множества В"<<"\n";
    cout<<"10.Добавить элемент в множество А"<<"\n";
    cout<<"11.Добавить элемент в множество В"<<"\n";
    cout<<"12.Принадлежность элемента каждому из множеств"<<"\n";
    cout<<"13.Выход"<<"\n";
    cout<<"Введите пункт меню: ";
    cin>>s;
 switch (s)
 {
        case 0:
                clrscr();
                cout<<"Эта программа позволяет осуществить все операции над элементами множеств: пересечение, разность, проверку эквивалентности и неэквивалентности,возможность исключения элемента из множества, проверку принадлежности каждому из множеств любого элемента, введенного пользователем.Множество А- множество из символов, имеющих код в диапазоне от 224 до 240; Множество В-множество из символов, имеющих код в диапазоне от 230 до 255.\n";
                getchar();
                break;
        case 1:
                clrscr();
                cout << "Введите элементы множества А(ввод будет окончен, когда вы введете } )={ ";
        while (symbol != '}')
        {
            cin>>symbol;
               if (int(symbol) > 223 && int(symbol) < 241)A<<symbol;
            else cout << "Данный символ не входит в заданный диапазон." << endl;
        }
                cout<<"Множество A ={";
        for (int(symbol)=223; int(symbol)==241;(int)symbol++){
                        if (A.Contains(symbol)) cout <<" "<<symbol;}
                cout<<"}";
        getchar();
                break;
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 18:05     Работа с множествами(символы) #8
Цитата Сообщение от Nerdtime Посмотреть сообщение
Set <char,'а','я'> A,B,S;
Говорю же цифрами. Коды символов из исходника распознаются компилятором, а он свободно может 'а' и 'я' записать в ASCII, в которой коды отличаются от кодов тех же букв, но в 1251, в которой Вы работаете.
Nerdtime
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 9
30.01.2014, 18:08  [ТС]     Работа с множествами(символы) #9
Цитата Сообщение от НеСказочник Посмотреть сообщение
Говорю же цифрами. Коды символов из исходника распознаются компилятором, а он свободно может 'а' и 'я' записать в ASCII, в которой коды отличаются от кодов тех же букв, но в 1251, в которой Вы работаете.
А не подскажете, как именно записать? А то я не знаю.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 18:10     Работа с множествами(символы) #10
Ну например так:
C++
1
Set <char,((char)223),((char)241)> A,B,S;
И теперь независимо от кодировки все символы будут в одном диапазоне, так как указаны строго цифрами.
Nerdtime
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 9
30.01.2014, 18:24  [ТС]     Работа с множествами(символы) #11
Цитата Сообщение от НеСказочник Посмотреть сообщение
Ну например так:
C++
1
Set <char,((char)223),((char)241)> A,B,S;
И теперь независимо от кодировки все символы будут в одном диапазоне, так как указаны строго цифрами.
Не помогло
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 18:25     Работа с множествами(символы)
Еще ссылки по теме:

Работа с базой данных SQLITE3 [Русские символы] - C++
Здравствуйте. Есть программа: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &quot;sqlite3.h&quot; int main() { sqlite3* db; ...

Работа с типизированным файлом, элементами которого являются отдельные символы - C++
По теме файлы! Имеется типизированный файл, элементами которого являются отдельные символы. а) Выяснить, являются ли первые два...

Работа с текстовым файлом (записать в файл строки и символы в строках в обратном порядке) - C++
Всем привет. Извиняюсь может повторяюсь с задачей, но все же... Задача: Дан txt файл с парой строк, нужно создать результирующий файл и...

Работа со строками ( сделать так, чтобы введенные символы с пробелом выводились в виде идентификаторов) - C++
Здравствуйте! Столкнулась с такой проблемой: Не получается сделать так, чтобы введеные символы с пробелом выводились в виде...

Операции над множествами - C++
Найти A B C, A ∩ B ∩ C, (A ∩ B) C, A ∩ (B C), если A={{1;2},{1;3},{2}}, B={{1;2;4},{2;3},{1}}, C={{1;3},{1}} Как вручную...


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

Или воспользуйтесь поиском по форуму:
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
30.01.2014, 18:25     Работа с множествами(символы) #12
Вы на чём пишите? Пришлите как Ваш проект целиком, я посмотрю.
Yandex
Объявления
30.01.2014, 18:25     Работа с множествами(символы)
Ответ Создать тему
Опции темы

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