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

Разработать класс "множество целых чисел" в соответствии со следующим заданием - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переделать под реккурсию http://www.cyberforum.ru/cpp-beginners/thread961602.html
Есть задача,поиск числа бинарным методом, в нее нужно добавить решение с помощью рекурсиипомогите пожалуйста! #include <iostream> #include <conio.h> using namespace std; int BinSearch(int *M, int n, int k); //(int *M, int n, int k)-÷òî çàä.â êà÷åñòâå ïàðàìåòðîâ?! int main() { const int n=9; // ÷òî îáîçíà÷àåò?
C++ Удалить вершины ДДП ,у которых только левый потомок Два дня сижу ,полностью рабочий алгоритмов не могу составить. Надеюсь на помощь. P.S поиск юзал ,много похожих тем пересмотрел.Но ничего адекватного и близкого к моей проблеме не нашел. Основную функцию не выкладываю ,ибо там просто вызов методов для создания ДДП. #include <iostream> using namespace std; class Node { public: Node *tree,*l,*r; http://www.cyberforum.ru/cpp-beginners/thread961595.html
Массив: Как реализировать изменения в массиве по заданным координатам на экране C++
есть двумерный масив 78 100, и как реализировать что будет изменятся в масиве только возле координат y x или i j. Я знаю только system ("cls"), а как чтобы по пару символов изменялось не шарю
C++ не могу найти ошибку в коде.1 курс (с++)
Объявить и заполнить двумерный вещественный массив числами по формуле: aj = сумма от n=0 по i (i+1)(j+5)\i+j+1. Отсортировать каждую строку массива по убыванию методом быстрой сортировки. #include "stdafx.h" #include <iostream> #include <conio.h> #include <stdio.h> #include <fstream> #include<time.h> using namespace std; void main() {
C++ Лабораторная 1 из павловской http://www.cyberforum.ru/cpp-beginners/thread961571.html
Здравствуйте господа программисты. У меня очень простая лаба но вот ничего не пойму. Задание: Напишите программу для расчёта по двум формулам. Предварительно подготовьте тестовые примеры по второй формуле с помощью калькулятора (результат вычисления по первой формуле должен совпадать со второй). Вот училка сказала что бы программа принимала значения в градусах, а не в радианах. И я не...
C++ Вычислить, сколько прошло часов и полных минут Идёт K секунда суток. Вычислить, сколько прошло часов и полных минут к этому моменту, при этом согласовать со значением слова (час, часа, часов, минуты, минут). подробнее

Показать сообщение отдельно
novyi1
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 3
29.09.2013, 21:20  [ТС]     Разработать класс "множество целых чисел" в соответствии со следующим заданием
Получилось вот что, проблема с вычитание, народ помогите пожалуйста завтра сдавать
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
class Array
{
   int *mas,k;
   void Add(int);
   void Sub(int);
public:
   Array():k(0),mas(new int(0)) {};
   Array(const Array &);
   ~Array() {delete[]mas;};
   void operator+=(int n) {Add(n);};
   void operator+=(Array &);
   void operator-=(int n) {Sub(n);};
   void operator-=(const Array &);
   Array operator*(const Array &)const;
   void operator*=(const Array &);
   friend bool operator==(Array &, Array &);
   friend bool operator<=(Array &, Array &);
   friend ostream& operator<<(ostream &, const Array &);
   friend istream& operator>>(istream &s, Array &);
   int HowMany() {return k;};
};
 
Array::Array(const Array &x):k(x.k)
{
   mas=new int[k];
   for(int i=0;i<k;i++)
      mas[i]=x.mas[i];
}
 
void Array::Add(int n)
{
   int *t,pos;
   for(pos=0;pos<k && mas[pos]<n;pos++) {}
   if (mas[pos]!=n)
   {
      t=new int[++k];
      for(int i=0;i<k-1;i++)
      t[i<pos?i:i+1]=mas[i];
      t[pos]=n;
      delete[]mas;
      mas=t;
   }
}
 
void Array::operator+=(Array &x)
{
   for(int i=0;i<x.k;i++)
      Add(x.mas[i]);
}
 
void Array::Sub(int n)
{
   if (k>0)
   {
      int *t,pos;
      for(pos=0;pos<k && mas[pos]<n;pos++) {}
      if (mas[pos]==n)
      {
         t=new int[--k];
         for(int i=0;i<k+1;i++)
         if (i!=pos) t[i<pos?i:i-1]=mas[i];
         delete[]mas;
         mas=t;
      }
   }
}
 
void Array::operator-=(const Array &x)
{
   for(int i=0;i<x.k;i++)
      return Sub(x.mas[i]);
}
 
Array Array::operator*(const Array &x)const
{
   Array t(*this),t2(*this);
   t-=x;
   for(int i=0;i<t.k;++i)
      t2.Sub(t.mas[i]);
      return t2;
}
 
void Array::operator*=(const Array &x)
{
   Array t(*this);
   t-=x;
   for(int i=0;i<t.k;i++)
      Sub(t.mas[i]);
}
 
bool operator==(Array &x, Array &y)
{
   if (x.k!=y.k) return false;
   for (int i=0;i<x.k;i++)
   if (x.mas[i]!=y.mas[i]) return false;
   return true;
}
 
bool operator<=(Array &x, Array &y)
{
   int s=0;
   for (int i=0;i<x.k;i++)
   while(x.mas[i]!=y.mas[i+s])
   {
      if (x.k+s>y.k) return false;
      s++;
   }
   return true;
}
 
ostream &operator<<(ostream &s, const Array &p)
{ 
   if (p.k!=0){
   s<<"(";
   for (int i=0;i<p.k-1;i++){
      s<<p.mas[i]<<",";
      }
      s<<p.mas[p.k-1];
      }
   return s<<")";
}
istream &operator>>(istream &s, Array &p)
{
  int tmp;
  char c;
  s>>c;
  
  while(c!=')')
  {
    s>>tmp>> c;
    p.Add(tmp);
    }
    return s;
  
  }
 
int main()
{
   Array a,b,c;
   cout<<" Введите множество А: "<<"\n";
   cin>>a;   
   cout<<a<<"\n";
   a-=9;
   cout<<"После вычитания из множества элемента 9: "<<a<<"\n";
   cout<<" Введите множество B: "<<"\n";
   cin>>b;  
   b+=7;
   cout<<"После добавления в множествo элементa 7 : "<<b<<"\n"; 
   cout<<" Пересечение множеств A и В: "<<"\n";
   cout<<a*b<<"\n";
   cout<<"Количество элементов в множестве В: "<<b.HowMany()<<"\n";
   if (a<=b)
      cout<<"А - подмножество В \n";
    else { if (b<=a)  
    cout<<"B - подмножество A \n";}
  cout<<" Объединение множеств А и B: "<<"\n";
     c=a;
     a+=b; 
   cout<<a<<"\n";
   cout<<" Разница множеств А и B: "<<"\n";
   c-=b;
   cout<<c<<"\n";
   return 1;
}
Добавлено через 1 час 38 минут
Вот есть решение задачи точь в точь как моей только она для множества символом, может кто-нибудь переделать под мое условие ?


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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
//Set.h
#pragma once
#include <iostream>
using namespace std;
 
class Set
{
    static const int max_power = 100; //максимальная мощность
    char set [max_power]; //массив символов
    int power; //мощность
public:
    Set () : power(0) {}; //• пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию;
    Set (const Set& s); //конструктор копирования
    Set (int p); //• создание экземпляров класса с инициализацией мощностью множества (начальное множество - символы, начиная с символа пробел);
    Set (const char* str);//• создание экземпляров класса с инициализацией значениями элементов множества как строки символов;
    ~Set () {}; //деструктор
 
    Set& operator = (const Set& s); //оператор присваивания
    Set& operator += (const char e);//• добавление нового элемента в множество (с помощью перегруженного оператора += );
    bool In (char e) const;//• определение, имеется ли некоторый заданный элемент в множестве.
    
    friend Set operator - (const Set &p1, const Set &p2); //• вычисление разности двух множеств (с помощью перегруженного оператора вычитания -; результирующее множество должно состоять из элементов первого множества без тех, которые есть во втором множестве);
    friend Set operator * (const Set &p1, const Set &p2); //• вычисление пересечения двух множеств (с помощью перегруженного оператора умножения *; результирующее множество должно состоять из элементов, имеющихся и в множестве 1, и в множестве 2);
    friend Set operator + (const Set &p1, const Set &p2); //• объединение двух множеств (с помощью перегруженного оператора сложения +; результирующее множество должно содержать элементы множества 1 и отличающиеся элементы множества 2);
    friend istream & operator >> ( istream & in, Set & p );     // ввод экземпляров класса из входного потока
    friend ostream & operator << ( ostream & out, const Set & p );  // вывод в выходной поток
};
 
//set.cpp
#include "StdAfx.h"
#include "Set.h"
 
Set::Set (const Set& s)
{
    power = s.power; //копируем мощность
    memcpy (set, s.set, sizeof(char)*power); //копируем данные
}
 
Set::Set (int p)
{
    if (p>max_power) { //если переданная мощность больше максимальной
        power = 0; //инициализируем по умолчанию
        return;
    }
    power = p; //сохраняем мощность
    for (int i = 0; i<p; i++) //заполняем символами от пробела
        set[i] = ' '+i;
}
 
Set::Set (const char* str)
{
    power = 0; //обнуляем мощность
    int len = strlen (str); //получаем длину строки
    if (len > max_power) return; //если она больше максимальной - выходим
    for (int i = 0; i<len; i++) //Заполняем символами из строки
        *this+=str[i];
}
 
Set& Set::operator = (const Set& s)
{ //аналогично конструктору копирования
    power = s.power;
    memcpy (set, s.set, sizeof(char)*power);
    return *this;
}
 
Set& Set::operator += (const char e)
{
    if (power+1>max_power || In(e)) return *this; //если максимальная мощность достигнута или такой элемент уже есть - выходим
    set[power] = e; //Добавляем в конец
    power++; //увеличиваем мощность
}
 
bool Set::In (char e) const
{
    for (int i = 0; i<power; i++) //ищем символ в массиве
        if (set[i] == e) return true; //нашли - возвращаем 1
    return false; //не нашли - 0
}
    
Set operator - (const Set &p1, const Set &p2)
{
    Set tmp; //буфер
    for (int i = 0; i<p1.power; i++) //идём по символам первого множества
        if (!p2.In(p1.set[i])) tmp+=p1.set[i]; //если символ первого не содержится во втором, добавляем  к результату
    return tmp; //возвращаем буфер
}
 
Set operator * (const Set &p1, const Set &p2)
{
    Set tmp;
    for (int i = 0; i<p1.power; i++) //если символ первого содержится во втором, добавляем к результату
        if (p2.In(p1.set[i])) tmp+=p1.set[i];
    return tmp;
}
 
Set operator + (const Set &p1, const Set &p2)
{
    Set tmp;
    for (int i = 0; i<p1.power; i++) //просто добавляем к результату все символы первого и второго множеств
        tmp+=p1.set[i]; //повторные не добавятся из-за реализации оператора +=
    for (int i = 0; i<p2.power; i++)
        tmp+=p2.set[i];
    return tmp;
}
 
istream & operator >> ( istream & in, Set & p )
{
    cout << "Enter power: ";
    in >> p.power;
    cout << "Enter chars: ";
    for (int i=0; i<p.power; i++)
        in >> p.set[i];
    return in;
}
 
ostream & operator << ( ostream & out, const Set & p )
{
    out << "{ ";
    for (int i = 0; i<p.power-1; i++)
        out << p.set[i] << ", ";
    out << p.set[p.power-1] << " }";
    return out;
}
 
 
 
 
/*int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}*/
 
//12.cpp
    #include "StdAfx.h"
    #include "Set.h"
    #include <conio.h>
    #include <stdlib.h>
   Set s2;
   Set s3("01234567");
 
 
 
 
char Menu ()
{
    system ("cls");
    cout << "1. Vyvod stand stroki.\n2.Dobavlenie novyh elementov vo mnozhestvo(+=).\n3.Vvod iz vhodnogo potoka - >>.\n4.Slojenie strok.\n5.Vychitanie strok.\n6.Umnojenie strok.\n7.Poisk elementa.\n8.Exit.\n";
    cout << "Enter menu item: ";
    char c;
    cin >> c;
    return c;
}
 
 
 
void f1()
{
    Set s1("01234567");
    cout << "\ns1:\n" << s1;
    cout << "\nPress any key to continue.";
    _getch ();
}
void f2()
{   char k;
    cout << "Vvedite elementy stroki"<<endl;
    for (char i='5'; i<='9'; i++)
    {
    cin >> k;
    s2+=k;
    }
    cout << "\ns1:\n" << s2;
    cout << "\nPress any key to continue.";
    _getch ();
}
void f3()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1+s2: \n" << s2+s3;
            _getch ();
}
void f4()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1-s2: \n" << s3-s2;
            _getch ();
}
void f5()
{
    cout << "\ns1:\n" << s3;
        cout << "\ns2:\n" << s2;
        cout << "\ns1*s2: \n" << s3*s2;
            _getch ();
}
void f6()
{   char d;
    cout << "Vvedite element"<<endl;
    cin >> d;
    if (s3.In (d)==true) 
        cout << "Element naiden";
    else
        cout << "Element NE naiden";
        _getch ();
}
 
void f7 ()
{
    cin >> s2; 
    cout << "\ns1:\n" << s2;
    cout << "\nPress any key to continue.";
    _getch ();
}
 
    int _tmain(int argc, _TCHAR* argv[])
    {
    bool b = true;
    while (b) {
        try 
    {
        char c = Menu ();
        switch (c) 
        {
        case '1': f1();
                break;
        case '2': f2();
                break;
        case '3': f7();
                break;
        case '4': f3();
                break;
        case '5': f4();
                break;
        case '6': f5();
                break;
        case '7': f6();
                break;
        case '8': b = false;
                break;
        }
    }
        catch (char* ex) 
        {
            cout << ex;
        }
    }
 
    return 0;
    }
 
Текущее время: 00:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru