Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 31.01.2010
Сообщений: 18

класс с множествами

23.06.2010, 17:53. Показов 1252. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть задача. вроде простая: создать класс для работы с множествами целых чисел. макс кол-во эл. множества - 65534. перегрузить символы операций " = "," + " –," – " ," * ". понимаю, что просто, но не подскажете хотя б как эти множества создать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2010, 17:53
Ответы с готовыми решениями:

Можете объяснить разницу между массивами и множествами, а так же принцип работы с множествами
Можете объяснить разницу между массивами и множествами, а так же принцип работы с множествами, и их способ применения

Шаблонный класс "множества". Операции над множествами
Доброго времени суток. Суть моего задания заключается в создании шаблонного класса "множества" и затем операции над этими...

Класс "Множество", перегрузка операций с множествами
Здравствуйте. Возникла проблема при сложении множеств. Вот задание: Создать класс множество с элементами типа char. Перегрузить: ...

8
2 / 2 / 0
Регистрация: 31.01.2010
Сообщений: 18
25.06.2010, 22:09  [ТС]
написал для начала только с плюсом. не пашет. проблема с передачей массива в класс.
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
#include <iostream>
#include <conio.h>
using namespace std;
 
class myclass {
  int i, x[3], y[3], z[3]; 
public:
  myclass( int m1[3], int m2[3]) 
  {
      for (i=0; i<3;i++) 
      {
      x[i]=m1[i];
      y[i]=m2[i];
      z[i]=0;
      }
  }
 
  myclass operator+(myclass op2); 
  void show() ;
};
 
// Overload +.
myclass myclass::operator+(myclass op2)
{
      for (i=0; i<3;i++) {z[i] = x[i] + op2.y[i];}
      return *this;
}
void myclass::show()
{
    for (i=0; i<3;i++) {cout<<z[i];}
}
 
int main()
{
    int i, m1[3], m2[3];
      cout<<"Vedite 1 mnojestvo";
      for (i=0; i<3;i++) {cin>>m1[i];}
      cout<<"Vedite 2 mnojestvo";
      for (i=0; i<3;i++) {cin>>m2[i];}
 
  myclass a(m1[3]), b(m2[3]), c;
 
cout<<"+"<<"\n";
  c = a + b; 
  c.show();
  getch();
return 0;
}
подсобите? очень надо....
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
26.06.2010, 10:24
Арифметические операторы должны принимать константную ссылку на второй операнд, а возвращать вновь созданный объект. Изменять первый операнд им нельзя.
C++
1
2
3
4
5
6
myclass myclass::operator+(const myclass &op2) const
{
    myclass ReturnValue(*this);  // Создаём возвращаемое значение, копируем в него первый операнд
    ...      // Добавление op2 к ReturnValue
      return ReturnValue;
}
Кроме того, имеет смысл реализовать оператор += и подобные, которые как раз-таки изменяют первый операнд. Тогда в операторах +, - и так далее, троеточие из моего примера заменяется строчкой ReturnValue += op2;
Это было раз.

Далее, множество с такими ограничениями можно эффективно представить битовым массивом. Для этого понадобится 2048 значений типа unsigned long. Числу, входящему в такое множество, сопоставляется значение одного бита. При этом операция сложения реализуется побитовым "ИЛИ" (операция |), а вычитание - побитовым "И" (операция &) с инверсией второго операнда (операция ~). Умножение ещё проще вычитания - там и инверсия не нужна. Собственно чтение и запись бита осуществляется достаточно просто - находим индекс нужного элемента unsigned long в массиве I (делить искомое число нацело на 32, unsigned long содержит 32 бита), вычисляем номер бита в этом элементе J (остаток от деления на 32), делаем тестовое значение T = 1 << J;
Условие, проверяющее, равен ли искомый бит единице: if(array[I] & T)
Установка искомого бита в единицу: array[i] |= T;
Установка искомого бита в ноль: array[i] &= ~T;
Все эти вещи, конечно, надо реализовать в виде методов класса.

Чтобы ввести множество, получай в бесконечном цикле числа от пользователя. Если он введёт неправильное или заранее условленное число, обозначающее "хватит", выходи из цикла. А так - заноси в своё множество очередное значение.
0
2 / 2 / 0
Регистрация: 31.01.2010
Сообщений: 18
26.06.2010, 13:44  [ТС]
эээээээээээээ........ а по русски можно???? желательного на простеньком примере......
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
26.06.2010, 14:56
lRazZzoRl, как говорил Nick Alte передавайте в перегружаемый оператор константную ссылку. То есть:
C++
1
2
3
4
5
myclass myclass::operator+(const myclass op2)
{
          for (i=0; i<3;i++) {z[i] = x[i] + op2.y[i];}
      return *this;
}
, но не забывайте что при этом изменится и первый слагаемый объект.
А во вторых видно пару ошибок:

Цитата Сообщение от lRazZzoRl Посмотреть сообщение
myclass a(m1[3]), b(m2[3]), c;
Вы создали конструктор с двумя параметрами принимающие массивы а передаете по третьему элементу с массива. Также не создан конструктор без параметров для создания объекта с.
C++
1
myclass a(m1, m2), b(m1, m2), c;
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
26.06.2010, 18:47
Цитата Сообщение от lRazZzoRl Посмотреть сообщение
эээээээээээээ........ а по русски можно???? желательного на простеньком примере......
Я рассказал как раз по-русски, и примеры тоже привёл. Чтобы применить эти рекомендации на практике, разумеется, надо изучить вопрос переопределения арифметических операторов и побитовых операций. Первый вопрос, кажется, освещён у Скотта Майерса в "Эффективный С++" или в продолжении, "Более эффективный С++". В любом случае, обе книги обязательны к прочтению. По поводу второго есть разделы практически в любом учебнике по С и/или С++.

Выполнять всё задание я, конечно же, и не подумаю. Направления, в которых надо копать, я показал достаточно подробно, а за полным решением велкам в раздел "Фриланс".
0
2 / 2 / 0
Регистрация: 31.01.2010
Сообщений: 18
28.06.2010, 14:03  [ТС]
более или менее разобрался. спасибо IchMors за дельное замечание и просто "ОГРОМНОЕ" спасибо Nick Alte за стену непонятного для меня текста и нравоучений. в общем вот что получилось:
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
#include <iostream>
#include <conio.h>
using namespace std;
 
class myclass {
int i, n, *x, *y, *z; 
public:
  myclass(int r, int *l, int *k, int *j) 
  {
      n=r;
    int *x=new int [n];
    int *y=new int [n];
    int *z=new int [n];
      for (i=0; i<n;i++) 
      {
      x[i]=l[i];
      y[i]=k[i];
      z[i]=j[i];
      }
  }
 
  myclass operator+(myclass op2); 
  myclass operator-(myclass op2);
  myclass operator*(myclass op2);
  myclass operator=(myclass op2); 
  void show() ;
};
 
 
myclass myclass::operator+(const myclass op2)
{
      for (i=1; i<n;i++) {z[i] = op2.x[i] + op2.y[i];}
  return *this;
}
 
 
myclass myclass::operator-(const myclass op2)
{
      for (i=0; i<n;i++) {z[i] = op2.x[i] - op2.y[i];}
  return *this;
}
myclass myclass::operator*(const myclass op2)
{
      for (i=0; i<n;i++) {z[i] = op2.x[i]*op2.y[i];}
  return *this;
}
myclass myclass::operator=(const myclass op2)
{
          for (i=0; i<3;i++) 
      {
          z[i] = op2.x[i];
          y[i]= op2.x[i];
      }
  return *this;
}
 
void myclass::show()
{
    for (i=0; i<n;i++) {cout<<x[i]<<" ";}
    cout<<"\n";
    for (i=0; i<n;i++) {cout<<y[i]<<" ";}
    cout<<"\n";
    for (i=0; i<n;i++) {cout<<z[i]<<" ";}
}
 
int main()
{
    int i, n;
    cout<<"Vedite razmer mnojestva";
    cin>>n;
    int *m1=new int [n];
    int *m2=new int [n];
    int *m3=new int [n];
 
      cout<<"Vedite 1 mnojestvo"<<"\n";
      for (i=0; i<n;i++) {cin>>m1[i];}
      cout<<"Vedite 2 mnojestvo"<<"\n";
      for (i=0; i<n;i++) {cin>>m2[i];}
      for (i=0; i<n;i++) {m3[i]=0;}
 
  myclass a(n, m1, m2, m3), b(n, m1, m2, m3), c(n, m1, m2, m3);
 
cout<<"\n"<<"+"<<"\n";
  c = a + b; 
  c.show();
 
cout<<"\n"<<"-"<<"\n";
  c = a - b; 
  c.show();
 
cout<<"\n"<<"*"<<"\n";
  c = a*b; 
  c.show();
 
cout<<"\n"<<"="<<"\n";
  c = b = a; 
  c.show();
 
  getch();
return 0;
}
с обычными массивами все зашиблись, а с динамическими выдает ошибку уже в роботе програмы. плюс небольшой косячок с =.
0
2 / 2 / 0
Регистрация: 31.01.2010
Сообщений: 18
30.06.2010, 19:45  [ТС]
разобрался с массивами. чисто абстрактный вопрос: как создать динамический массив, чтобы под него не терялась память при переходе в другой блок?
0
98 / 94 / 16
Регистрация: 16.05.2010
Сообщений: 310
30.06.2010, 19:50
C++
1
int *p=new int [5];
и далее используется указатель, то есть если нужно в использование в другой функции то передается указатель.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2010, 19:50
Помогаю со студенческими работами здесь

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... Разработать абстрактный класс класс...

множествами.
Не могу разобраться. Дана последовательность символов. Напечатать все буквы, входящие в текст по одному разу. Программу написала, но...

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru