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

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

23.06.2010, 17:53. Показов 1264. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru