Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
#1

Нужна помощь по Дискретке. Класс-группа: множество + бинарная операция - C++

27.09.2011, 16:40. Просмотров 895. Ответов 3
Метки нет (Все метки)

Здравствуйте.
В этом году в академии начали преподавать дискретную математику. Что-то не очень легко в начале это все дается. Помогите, пожалуйста, ступить на верный путь для решения задачи и разобраться в задании. С программированием обычно особых проблем не было, но тут зашел в ступор вообще.

Есть вот такое задание:
Создать класс группу, которая содержит определенное множество, на котором введено бинарную алгебраическую операцию (определены в задании 3 контрольной работы 1), и имеет конструктор, деструктор, функции доступа, метод-операцию на элементами множества, единичный (нейтральный) элемент, обратный элемент для каждого элемента множества. Реализовать операцию над элементами и вывести результаты выполнения операции на экран.
Замечание. Если множество с операцией не является группой, добавить в множество элементы, для которых нарушается какое -то свойство, чтобы она стала группой.

Не по теме:

Я не претендую на звание лучшего в мире переводчика, поэтому вот оригинал текста:
Створити клас група, що містить певну множину, на якій введено бінарну алгебраїчну операцію (визначені в завданні 3 контрольної роботи 1), і має конструктор, деструктор, функції доступу, метод-операцію над елементами множини, одиничний (нейтральний) елемент, зворотній елемент для кожного елемента множини. Реалізувати операцію над елементами і вивести результати виконання операції на екран.
Зауваження. Якщо множина з операцією не є групою, додати в множину елементи, для яких порушується якась властивість, щоб вона стала групою.



И вот задание из контрольной:
Определите, создает ли группу множество поворотов правильного шестиугольника в его плоскости, которые переводят вершины в вершины, относительно операции композиции поворотов?

Не по теме:

Аналогично, вот оригинал текста:
Визначте, чи утворює групу множина поворотів правильного шестикутника в його площині, що переводять вершини у вершини, відносно операції композиції поворотів?



Однозначно понятно, что должен быть класс, в нем должны быть конструктор(ы), деструктор, множество какое-то, функции доступа и метод-операция (как я понял это поворот углов шестиугольника), единичный элемент и обратный элемент.
Но вот как это все между собой связать не могу никак понять. И дополнительно запутывает замечание к заданию - получается, что нужно еще элементы и/или множество как-то проверять и куда-то что-то записывать. Плюс это все усугубляется тем, что раньше похожего не делали.
Если кто понял что тут нужно сделать или уже встречался с таким, помогите, пожалуйста, чем можете начинающему. Приветствуется абсолютно все на данную тему: размышления, алгоритмы, исходники, указания, разъяснения. А то ни в какую не идет вообще =((

Заранее спасибо.

Не по теме:

P.S.: Если у вас где-то под рукой совершенно случайно завалялась хорошая книжечка по дискретке ли ссылочка, можете дать, пожалуйста?



Добавлено через 23 часа 42 минуты
Неужели нет никаких мыслей по этой теме?
Если на втором курсе такие задания даются, то даже боюсь себе представить, что будет на пятом...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2011, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужна помощь по Дискретке. Класс-группа: множество + бинарная операция (C++):

Дискретная математика. Класс-Группа:множество+бинарная операция - C++
Здравствуйте, помогите пожалуйста. Начали изучать дискретку и как-то тяжело в начале это понять. Помогите пожалуйста разобраться в задании....

Бинарная(побитовая) операция - C++
Мне нужно написать функцию которая проверяет значение есть парным или нет bool IsEven(unsigned number) { return ((number | 0 << 0)...

Класс CPoint и ей производные, нужна помощь - C++
Создать класс CPoint – точка и производные от него классы CcoloredPoint и CLine. На основе классов CcoloredPoint и CLine создать класс...

Класс не создается группа студентов - C++
Всем привет! падает программа что я не так сделал? два класса группа студентов и сам студент я хочу динамично создать группу студентов...

Описать класс "Бинарная арифметическая операция" - Lazarus
Описати клас “двооперандна арифметична операція”, який характеризується двома операндами. Передбачити виконання двох арифметичних операцій...

Нужна помощь с работами по информатике за 10 класс - Информатика
Знаю что не туда пишу, просто не нашёл куда написать на этом форуме по этому вопросу! Нужно срочно что бы кто нибудь помог и информатикой...

3
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.09.2011, 18:48 #2
Ну тут на самом деле не все так сложно. Назовем наше множество поворотов http://www.cyberforum.ru/cgi-bin/latex.cgi?\mathbb{G}, а бинарную операцию (композицию поворотов) http://www.cyberforum.ru/cgi-bin/latex.cgi?*. Так как каждый поворот должен отобразить вершину в вершину, то очевидно, что каждый поворот будет происходить на угол http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\pi n}{3}, \, n \in \mathbb{Z}. Назовем число http://www.cyberforum.ru/cgi-bin/latex.cgi?n множителем (factor).
Доказательства того, что операция http://www.cyberforum.ru/cgi-bin/latex.cgi?* замкнута на множестве http://www.cyberforum.ru/cgi-bin/latex.cgi?\mathbb{G} и доказательсвто аксиом группы, я думаю, очевидны. Нейтральный элемент группы - это поворот на угол 0, обратный элемент - поворот на угол противоположного знака.
Очевидно, что группа http://www.cyberforum.ru/cgi-bin/latex.cgi?(\mathbb{G}, *) будет изоморфна группе http://www.cyberforum.ru/cgi-bin/latex.cgi?(\mathbb{Z}, +), т.е. операция композиции поворотов на углы http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\pi n_1}{3} и http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\pi n_2}{3}, \, n_1, n_2 \in \mathbb{Z} будет соответствовать сумме их множителей http://www.cyberforum.ru/cgi-bin/latex.cgi?n_1, n_2 в группе целых чисел с операцией сложения, с нейтральным элементом группы, равной нулю, и обратному элементу - множителю с противоположным знаком. Из этого следует, что в нашем представлении поворота можно хранить не угол (вещественное число, которое невозможно представить без погрешностей), а множитель этого угла (целое, точно число).
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
#include <iostream>
 
class rotation
{
public:
    rotation(int f = 0);    // конструктор
    ~rotation();        // деструктор
 
    // аксессоры
    void set_factor(int);
    int get_factor() const;
 
    // бинарная групповая операция (композиция поворотов)
    rotation operator * (const rotation&) const;
 
    static rotation identity(); // единица
    rotation inverse() const;         // обратный элемент
 
    bool operator == (const rotation&) const;
    bool operator != (const rotation&) const;
    
    // вывод на экран угла поворота
    friend std::ostream& operator << (std::ostream&,
                      const rotation&);
        
private:
    int factor;         // множитель угла поворота
};
 
#define PRINT(EXPR) \
    std::cout << #EXPR ": " << std::boolalpha << (EXPR) << std::endl
 
int main()
{
    rotation id = rotation::identity(); // Поворот на 0 градусов
    rotation half = rotation(3); // Поворот на 180 градусов (против часовой стрелки)
    rotation half_rev = half.inverse(); // Поворот на 180 градусов (по часовой стрелке)
    
    PRINT(id);
    PRINT(half);
    PRINT(half_rev);
    
    PRINT(id * half);
    PRINT(id * half == half);
    PRINT(half * id);
    PRINT(half * id == half);
 
    PRINT(half * half_rev);
    PRINT(half * half_rev == id);
    
    return 0;
}
 
rotation::rotation(int f)
    : factor(f)         // инициализация множителя
{
}
 
rotation::~rotation()
{               // деструктор пустой, выполнять нечего :(
}
 
void rotation::set_factor(int new_factor)
{
    factor = new_factor;
}
 
int rotation::get_factor() const
{
    return factor;
}
 
rotation rotation::operator * (const rotation& rhs) const
{
    return rotation(factor + rhs.factor);
}
 
rotation rotation::identity()
{
    return rotation();
}
 
rotation rotation::inverse() const
{
    return rotation(-factor);
}
 
bool rotation::operator == (const rotation& rhs) const
{
    return factor == rhs.factor;
}
 
bool rotation::operator != (const rotation& rhs) const
{
    return factor != rhs.factor;
}
 
std::ostream& operator << (std::ostream& os,
               const rotation& rhs)
{
    if(rhs.factor == 0)
    os << "0";
    else if(rhs.factor % 3 == 0)
    os << rhs.factor / 3 << " pi";
    else
    os << rhs.factor << " pi";
    
    return os;
}
В примере показаны некоторые аксиомы группы:
Код
[nameless@desktop cpp]$ ./sample 
id: 0
half: 1 pi
half_rev: -1 pi
id * half: 1 pi
id * half == half: true
half * id: 1 pi
half * id == half: true
half * half_rev: 0
half * half_rev == id: true
1
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
27.09.2011, 19:55  [ТС] #3
Спасибо огромное, Nameless One! Вроде начинает потихонечку проясняться вопрос.
Пожалуй, еще некоторые моменты нужно уточнить с преподавателем для полной ясности. В частности на счет замечания к заданию. Радует, что не так все сложно, как показалось =)))

Ну, а пока вопрос открытый, по прежнему приветствуются все мысли по поводу этого задания.
А в конце, если все пройдет удачно (на что я надеюсь) выложу сюда, что получится в результате.
0
DWand
13 / 13 / 1
Регистрация: 23.04.2011
Сообщений: 99
19.10.2011, 03:12  [ТС] #4
Вот что получилось в конце. Таки правда - все оказалось не так сложно, как показалось в начале.
:dance3:
0
Вложения
Тип файла: zip Lab2_A1_Group.zip (3.5 Кб, 8 просмотров)
19.10.2011, 03:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2011, 03:12
Привет! Вот еще темы с ответами:

Доказать , что множество целых чисел кратных 34 циклическая группа. - Алгебра
Пусть m натуральное число (m=34).Доказать , что множество целых чисел кратных 34 циклическая группа.Описать все порождающие элементы этой...

Описать класс «студенческая группа» - C#
Задание №1. Разработка классов согласно индивидуальному варианту задания. Разработать классы согласно варианту задания (таблица 1.1.1)....

Описать класс Студенческая группа - C#
Описать класс «студенческая группа». Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо...

Зачем нужна операция b= a% (a=b) при подсчёте НОД? - C#
Привет всем, объясните, зачем нам нужна операция b= a% (a=b)? Как она работает? Программа подсчитывает наибольший общий делитель ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru