Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Разработать класс "множество целых чисел" 
:(
    Опции темы
Iluxych
Дата 25.9.2013, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.9.2013

Репутация: нет
Всего: нет



Форумчане помогите с программой, только начался С++ 

1. Разработать класс "множество целых чисел" в соответствии со следующим заданием
Состояние класса - 
Множество состоит из элементов типа int (в множестве не может быть двух элементов с одинаковыми значениями) и определяется мощностью (количеством элементов в множестве) и значениями своих элементов, например: множество из 5 элементов {12, 8, 5,-3, 11} Память под множество выделяется статически во время компиляции, и задается массивом фиксированного предельного значения (например максимальная мощность множества 100 элементов). 
Протокол класса -
Определяет возможности создания и инициализации экземпляров класса и правила использования их (методы класса). 
Предусмотреть следующие возможности: 
• пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию;
• создание экземпляров класса с инициализацией мощностью множества (начальные значения элементов - натуральные числа); 
• создание экземпляров класса с инициализацией мощностью и значениями элементов множества; 
• ввод экземпляров класса из входного потока и вывод их значений в выходной поток 
(с помощью перегруженных операторов » и «); 
• объединение двух множеств (с помощью перегруженного оператора сложения +; результирующее множество должно содержать элементы множества 1 и отличающиеся элементы множества 2); 
• добавление нового элемента в множество (с помощью перегруженного оператора +=); 
• вычисление пересечения двух множеств (с помощью перегруженного оператора умножения *; 
результирующее множество должно состоять из элементов, имеющихся и в множестве 1, и в множестве 2); 
• вычисление разности двух множеств ( с помощью перегруженного оператора -; результирующее множество должно состоять из элементов первого множества без тех, которые есть во втором множестве)
• определение, имеется ли некоторый заданный элемент в множестве. 
2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего 
заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для отладки и исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов. Для обработки ошибочных ситуаций использовать механизм исключительных ситуаций. 


3. Повторить разработку класса при условии, что память под множество необходимой длины выделяется динамически, во время выполнения программы (с помощью оператора new; память задастся указателем на int в состоянии класса). 
Дополнить интерфейс класса следующими возможностями: 
• создание экземпляра класса с его инициализацией другим экземпляром класса (копирующий конструктор); 
• переопределение экземпляра класса (с помощью перегруженного оператора присваивания). 
4. Написать прикладную программу, использующую разработанный класс.

PM MAIL   Вверх
baldina
Дата 25.9.2013, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Задание противоречиво. Нельзя одновременно обеспечить
Цитата(Iluxych @  25.9.2013,  09:22 Найти цитируемый пост)
 Память под множество выделяется статически во время компиляции

и
Цитата(Iluxych @  25.9.2013,  09:22 Найти цитируемый пост)
 создание экземпляров класса с инициализацией мощностью множества


а вообще такие классы уже есть: динамически распределяемая - std::vector<int> или std::set<int>
можно наследоваться от этих классов и дополнить операторами +, *, которые будут вызывать соотв. функции из <algorithm> (set_intersection и т.д.)

со статическим распределением памяти немного сложнее. можно взять std::array<int>, но непонятно как получать новые множества (например пересечение множеств), т.е. в какую структуру помещать, т.к. мощность пересечения в момент компиляции неизвестна
PM MAIL   Вверх
Iluxych
Дата 25.9.2013, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.9.2013

Репутация: нет
Всего: нет



Ну вот мне надо, чтобы память выделядась статически, те первую часть программы , можете помочь с реализацией пожалуйста?
PM MAIL   Вверх
feodorv
Дата 25.9.2013, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: нет
Всего: 45



Цитата(baldina @  25.9.2013,  10:44 Найти цитируемый пост)
со статическим распределением памяти немного сложнее.

Я так понял, что под статическим распределением понимается нечто-то вроде:
Код

const int max_cardinality = 100;

class assembling 
{
...

private:
  int cardinality;
  int elements[max_cardinality];
};




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
bsa
Дата 28.9.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
Iluxych
Дата 29.9.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 25.9.2013

Репутация: нет
Всего: нет



Дорогие форумчане спасайте, 1 и 2-ой пункт этой сдачи кровь из носу нужен 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.