0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 18
1

Множество с неповторяющимися элементами

03.12.2015, 23:42. Показов 436. Ответов 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
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
#include<iostream>
 
using namespace std;
 
class Set
{
 
public:
    int aray[10];
    int num = 0;
 
    Set()
    {
 
    }
 
    Set(int x,int y, int z)
    {
        aray[0] = x;
        aray[1] = y;
        aray[2] = z;
        num = 3;
    }
 
    ~Set()
    {
 
    }
 
    friend void operator >> (istream& input, Set& x)
    {
        for (int i = 0; i < 7; i++)
        {
            input >> x.aray[i];
        }
        x.num = 7;
    }
 
    friend ostream& operator << (ostream& output, Set& x)
    {
        for (int i = 0; i < x.num; i++)
        {
            output << x.aray[i] << " ";
        }
        return output;
    }
 
    friend Set operator * (Set& x, Set& y)//пересечение
    {
        Set h;
 
        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                if (x.aray[i] == y.aray[j])
                {
                    h.aray[h.num] = x.aray[i];
                    h.num++;
                }
            }
        }
        return h;
    }
 
    friend Set operator + (Set& x, int k)//добавление
    {
        if (x.num < 10)
        {
            x.aray[x.num++] = k;
        }
        return x;
    }
 
    friend Set operator - (Set& x, int u)//удаление
    {
        for (int i = 0; i<x.num; i++)
        {
            for (int j = i + 1; j<x.num; j++)
            {
                if (x.aray[j] == u)
                {
                    x.aray[j] = x.aray[x.num - 1];
                    x.num--;
                }
            }
        }
        return x;
    }
 
    
 
    friend bool operator > (const Set& x, const Set& y)
    {
        bool f = 1;
        bool t = 0;
 
        for (int i = 0; i < y.num; i++)
        {
            for (int j = 0; j < x.num; j++)
            {
                if (x.aray[j] == y.aray[i])
                {
                    t = 1;
                }
            }
            if (t == 0)
            {
                f = 0;
            }
            else
            {
                t = 0;
            }
        }
        return f;
    }
 
    friend bool operator != (const Set& x, const Set& y)
    {
        bool f = 1;
        bool t = 0;
 
        for (int i = 0; i < 7; i++)
        {
            if (x.aray[i] != y.aray[i])
            {
                f = 0;
            }
        }
        return f;
    }
};
void main()
{
 
    Set a;
 
    Set b;
 
    Set c(1, 2, 3);
 
    cout << "Enter the set A: " << endl;
    cin >> a;
 
    cout << "Enter the set B: " << endl;
    cin >> b;
    cout << endl;
 
    cout << "Set A: " << a << endl;
 
    cout << "Set B: " << b << endl;
 
    cout << "A!=B: " << (a!=b) << endl;
 
    cout << "A*b: " << (a*b) << endl;
 
    cout << "A+5: " << (a+5) << endl;
 
    cout << "B-1: " << (b -1) << endl;
 
    cout << "Set C: " << c << endl;
 
    cout << "A>C: " << (a>c) << endl;
 
 
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2015, 23:42
Ответы с готовыми решениями:

Двумерный массив с неповторяющимися элементами
Добрый вечер! Столкнулся с проблемкой, нужна помощь. Цель задачи: составить программу, которая...

Заполнить массив неповторяющимися элементами
Заполнить массив из 20 элементов неповторяющимися элементами. Если пользователь вводит число,...

Определить количество столбцов с неповторяющимися элементами в двумерном массиве
подскажите алгоритм для того, как посчитать столбцы, в которых все элементы отличаются(с...

Создать множество, элементами которого являются значения заданной функции
Создать множество, элементами которого являются все 0.1&lt;=аі&lt;=1

4
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
03.12.2015, 23:47 2
Так делаете поиск по массиву и если уже есть - не добавляем
C++
1
2
3
4
bool t=true;
for(int i=0; i<n; ++i)
if (a[i]==n) {t=false; break;}
if (t) a[i] = n; // i какой кибудь static счетчик сделайте (или лучше динамический вектор сделайте и push_back - ом кидайте)
0
0 / 0 / 0
Регистрация: 20.10.2014
Сообщений: 18
04.12.2015, 00:12  [ТС] 3
Можно на этом примере показать как именно?
0
Dimension
585 / 453 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
04.12.2015, 10:42 4
умеете работать с классами ,перегружать операторы ,но не можете написать линейный поиск ?
1
828 / 631 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
04.12.2015, 14:00 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
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 <iostream>
#include <cstring>
#include <cstdlib>
int  set_bfind(int a[], int n, int k);
bool set_add(int a[], int& n, int k);
int  set_intersect(const int a[], int n1, const int b[], int n2, int c[]);
 
int main(void){
    const int N = 10;
    int a[N],   n1;
    int b[N],   n2;
    int c[N+N], n3, i;
    
    n1 = n2 = 0;
    for(i = 0; i < N; ++i){
        set_add(a, n1, rand() % 20);
        set_add(b, n2, rand() % 20);
    }
 
    for(i = 0; i < n1; ++i)
        std::cout << a[i] << ' ';
    std::cout << std::endl;
 
    for(i = 0; i < n2; ++i)
        std::cout << b[i] << ' ';
    std::cout << std::endl;
 
    n3 = set_intersect(a, n1, b, n2, c);
 
    for(i = 0; i < n3; ++i)
        std::cout << c[i] << ' ';
    return 0;
}
 
//двоичный поиск, возвращает позицию для вставки уникального элемента
int set_bfind(int a[], int n, int k){
    int i, j, m;
    if(! n || (k < a[0]))
        return 0;
    else if(k > a[n - 1])
        return n;
 
    i = 0;
    j = n;
    while(i < j){
        m = i + (j - i)/2;
        if(k == a[m]){
            i = -1;
            break;
        } else if(k < a[m])
            j = m;
        else
            i = m + 1;
    }
    return i;
}
 
//добавление элемента в массив в упорядоченном виде
bool set_add(int a[], int& n, int k){
    int i = set_bfind(a, n, k);
    if(i == -1)
        return false;
 
    if(! i && ! n)
        a[0] = k;
    else {
        memmove(&a[i + 1], &a[i], (n - i)*sizeof(a[0]));
        a[i] = k;
    }
    ++n;
    return true;
}
 
//пересечение
int set_intersect(const int a[], int n1, const int b[], int n2, int c[]){
    int n = 0, i = 0, j = 0;
    while((i < n1) && (j < n2)){
        if(a[i] < b[j])
            ++i;
        else if(a[i] > b[j])
            ++j;
        else {
            c[n++] = a[i];
            ++i;
            ++j;
        }
    }
    return n;
}
Пример работы кода
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2015, 14:00

Матрица с неповторяющимися числами
Решал задачу о &quot;магических квадратах&quot;,у меня 2 вопроса есть ли еше какой способ заполнить матрицу...

Заполнить двумерный массив неповторяющимися числами
Используя датчик случайных чисел, заполнить двумерный массив неповто- ряющимися числами.

Заполнить массив случайными неповторяющимися значениями
Уважаемые программисты, я новенькая в C++. Помогите, пожалуйста, с домашкой по одноразм. массивам....

Заполнить массив неповторяющимися случайными числами
#include &lt;ctime&gt; #include &lt;iostream&gt; using namespace std; int main() { int i, a, j, b,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru