Консультация № 182145
09.02.2011, 06:45
97.13 руб.
0 37 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Сразу предупреждаю, хотя задание и по программированию, но меня интересует именно мнение математиков, т.к. в математике я не силён.
Есть такая задача:
Определить базовый класс «Множество» и производный класс «Кольцо» (операции сложения и умножения обе коммутативные и ас-
социативные, связанные законом дистрибутивности; сложение обладает обратной операцией – вычитанием). Ввести кольца целых чисел,
многочленов, систему классов целых чисел, сравнимых по модулю. Кольцо является полем, если в нем определена операция деления,
кроме деления на нуль. Рациональные числа, дробно рациональные функции.

и краткое пояснение:
Кольцом называют непустое множество R, для элементов которого определены две операции — сложение и умножение, сопоставляющие любым двум элементам а, b из R, взятым в определённом порядке, один элемент а + b из R — их сумму и один элемент ab из R — их произведение, причём предполагаются выполненными следующие условия (аксиомы К.):

I. Коммутативность сложения:
а+b=b+ а.
II. Ассоциативность сложения:
а + (b + с) = (а + b) + с.
III. Обратимость сложения (возможность вычитания):
уравнение а + х = b допускает решение х = b—a.
IV. Дистрибутивность: а (b + с) = ab+ac, (b + с) а = ba + са.

Очевидно, что простейшим случаем кольца является множество -1, 1. Также очевидно, что множества целых, рациональных, действительных и комплексных чисел по операциям сложения и умножения чисел также образуют кольца. По сути, требуется создать класс для работы с множеством (перечислением) целых чисел, имеющий в своём составе два метода (операции) для работы с целыми числами (т.е. собственно, с кольцом) - сложение и умножение.

Проблема в том, что я понимаю все слова по отдельности, но окончательная картина того, что должно получится в результате, у меня никак не складывается. Я себе представляю, что у меня есть некий набор данных, который потом подвергнется обработке, но вот каким образом осуществить проверку правильности этого набора, чтобы они соответствовали предъявленным требованиям, не знаю. Точно так же затрудняюсь с составлением минимального набора формул-действий над этими данными, опять же, чтобы они соответствовали представленным требованиям.
В общем, мне нужны реальные примеры с формулами, примеры расчётов над неким набором тестовых данных и что там должно получаться в результате.

Обсуждение

давно
Мастер-Эксперт
425
4118
09.02.2011, 09:31
общий
Адресаты:
Вы на слова "класс" и всё что относится к программированию не обращайте внимания. Начинайте со слова "Кольцо" и далее...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
09.02.2011, 09:33
общий
Адресаты:
Полагаю, что возможной причиной Ваших затруднений является отсутствие времени для ознакомления с основными сведениями по полям и многочленам. Рекомендовал бы Вам, несмотря на всё, прочитать материал, изложенный на страницах 266 - 276 классического учебника А. Г. Куроша "Курс высшей алгебры" (М.: Наука, 1971).

Ведь так или иначе, но прежде всего Вам следует уточнить, что именно Вам непонятно из математики, чтобы эксперты смогли Вам помочь.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
425
4118
09.02.2011, 09:33
общий
Адресаты:
С данными я как-нибудь сам разберусь. Мне нужны примеры вот этого самого "кольца" на бумажке, а не в программной реализации.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
09.02.2011, 09:34
общий
Адресаты:
Полагаю так, что элементами множеств, с которыми будет иметь дело программа, являются рациональные числа и дробно-рациональные функции?
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
425
4118
09.02.2011, 09:40
общий
Адресаты:
Цитата: Гордиенко Андрей Владимирович
следует уточнить, что именно Вам непонятно из математики, чтобы эксперты смогли Вам помочь.

Я там немножко выше уже написал.
Правильно ли я понял, что если два любых члена из ряда представленных в наборе данных удовлетворяют всем четырём условиям сразу (см. цитату 2 в вопросе), то это можно считать как "Кольцо"?
За ссылку на материал спасибо, я почитаю.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Профессор
230118
3054
09.02.2011, 09:42
общий
Адресаты:
Множество многочленов является кольцом. Сумма многочленов [$8721$]anxn и [$8721$]bnxn определяется как [$8721$](an+bn)xn
Единичный элемент - 0 (многочлен со всеми коэффициентами 0)
Нулевой элемент - тоже 0.
давно
Профессор
230118
3054
09.02.2011, 09:42
общий
Адресаты:
Я все равно не понимаю, при чем тут данные. Условия касаются не данных, а операций.
давно
Мастер-Эксперт
425
4118
09.02.2011, 09:44
общий
Адресаты:
В качестве данных будут использоваться либо наборы целых чисел, либо некие уравнения, т.к. в задании речь идёт о многочленах. Но с многочленами я ещё уточню.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
09.02.2011, 09:46
общий
Адресаты:
Цитата: Асмик Гаряка
Я все равно не понимаю, при чем тут данные. Условия касаются не данных, а операций.

Без данных невозможно проводить никакие операции. Даже хирургические. Мне проще опираться на данные, с которыми я буду проводить некий набор операций.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
09.02.2011, 09:49
общий
Адресаты:
Простейший пример кольца Вы привели сами. Это множество, состоящее из чисел -1, 0, 1.

Прежде чем перейти к примерам колец, обращаю Ваше внимание теперь на то, что система всех рациональных чисел (а также системы всех комплексных и всех действительных чисел) обладают тем свойством, что в каждой из них не только сложение и умножение, но и вычитание можно выполнять, оставаясь в пределах самОй этой системы. Это свойство указанных числовых систем отличает их, например, от системы положительных целых или положительных действительных чисел.

Теперь переходим к примерам.

ВСЯКАЯ СИСТЕМА ЧИСЕЛ, СОДЕРЖАЩАЯ СУММУ, РАЗНОСТЬ И ПРОИЗВЕДЕНИЕ ДВУХ ЛЮБЫХ СВОИХ ЧИСЕЛ, является ЧИСЛОВЫМ КОЛЬЦОМ.

Следовательно, если имеющееся в Вашем распоряжении множество чисел удовлетворяет данному условию, то оно является числовым кольцом. Пока мы ведём речь о ЧИСЛОВЫХ КОЛЬЦАХ.

Это понятно? Пример сами подберёте?

В частности, никакая система положительных чисел не будет кольцом, потому что если a и b - два различных положительных числа, то либо a - b, либо b - a отрицательно. Никакая система отрицательных чисел тоже не будет кольцом, ведь, например, произведение двух отрицательных чисел положительно.

Идём дальше?
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
425
4118
09.02.2011, 09:51
общий
Адресаты:
Вот, уже стало намного понятней.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
09.02.2011, 09:55
общий
Адресаты:
Не просто любые два элемента множества должны удовлетворять перечисленным в пунктах I - IV условиям, но ещё и в совокупности с третьим элементом. Кстати, бывают и неассоциативные кольца. Вам они нужны?
Об авторе:
Facta loquuntur.
давно
Профессор
230118
3054
09.02.2011, 09:55
общий
Адресаты:
Если к выше разбираемому множеству {-1,0,1} Добавить хотя бы 2, значит, в нем должна быть и сумма 1+2, то есть 3. А если есть 3, должно быть и 4. То есть мы должны будем включить в множество все целые числа.
Множество остатков от деления по модулю 3 будет кольцом. Для простоты определим их как {0,1,2}
Сложение определим как
1+2=0
2+2=1
Для 1 обратный элемент 2.
Остальные как обычно.

давно
Мастер-Эксперт
17387
18345
09.02.2011, 09:56
общий
Адресаты:

Если будет непонятно, обращайтесь. Не уверен, правда, что отвечу на любой вопрос оперативно, ведь я на работе...
Об авторе:
Facta loquuntur.
давно
Профессор
230118
3054
09.02.2011, 09:57
общий
Множество многочленов является кольцом. Но это тоже должны быть все возможные многочлены хотя бы с рациональными коэффициентами.
давно
Мастер-Эксперт
425
4118
09.02.2011, 10:12
общий
Адресаты:
Цитата: Гордиенко Андрей Владимирович
...но ещё и в совокупности с третьим элементом.

Вот это очень ценное замечание.
Цитата: Гордиенко Андрей Владимирович
Кстати, бывают и неассоциативные кольца. Вам они нужны?

Не знаю. Думаю, пока не нужны.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
425
4118
09.02.2011, 10:14
общий
Адресаты:

Я сегодня вечером поиграюсь с тем, что Вы мне рассказали, потом отпишусь.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
09.02.2011, 10:36
общий
Здравствуйте, Асмик!

Вы пишете:
В данной Вам теории не хватает той аксиомы, что в кольце должны быть 0 и 1.


Какую именно теорию Вы имеете в виду: ту, которую изложил автор вопроса, или ту, которую изложил А. Г. Курош в своей книге? Да и не является, на мой взгляд, указанное Вами утверждение аксиомой. Например, на с. 274 "Курса высшей алгебры" относительно нуля сказано так: "Всякое кольцо R обладает однозначно определённым элементом, сумма которого с любым элементом a этого кольца равна a. Будем называть этот элемент нулём кольца R...". Само же утверждение доказывается автором на предыдущей странице книги.

С уважением.
Об авторе:
Facta loquuntur.
Неизвестный
09.02.2011, 10:39
общий
Адресаты:
Фактически, чтобы реализовать кольцо для каждого типа объекта, вам нужно корректно запрограммировать три операции:
1) Сложение
2) Умножение
3) Получение обратного элемента по сложению.
Кроме того должны быть два специальных конструктора: нейтральный элемент по сложению и нейтральный элемент по умножению (если последний существует).

Для проверки на соответствие аксиомам кольца пишется специальный тест.

Я бы рекомендовал сначала реализовать кольцо вычетов по заданному модулю. Это достаточно просто: объекты - обычные целые числа, операции определяются элементарно.
давно
Академик
20764
1861
09.02.2011, 11:41
общий
Адресаты:
По-моему, вы слишком углубились в математику. Раз задание по программированию, то, похоже оно на template class inheritance, а математика тут весьма сбоку.
Соответственно определяется template class <typename Type> Set с одним полем со значением и методами для его загрузки и чтения и его наследник Ring с тремя операторами + - и *
И это всё!
Сами операторы надо реализовать в используемых классах, в частности для int и double делать ничего не надо. Как-то так:
Код:
template <typename Type> class Set {
Type value;
public:
Set();
Set(Type const &value): value(value) {}
operator Type &() {return value;}
operator Type const &() const {return value;}
bool operator == (Set const &other) {return value == other.value;}
};

template <typename Type> class Ring: public Set<Type> {
public:
Ring(): Set<Type>() {}
Ring(Type const &value): Set<Type>(value) {}
Ring operator +(Ring const &other) {return Ring((Type)*this + (Type)other);}
Ring operator -(Ring const &other) {return Ring((Type)*this - (Type)other);}
Ring operator *(Ring const &other) {return Ring((Type)*this * (Type)other);}
};

#include <iostream>

int main() {
Ring<int> a(1), b(2);
Ring<double> x(1.4), y(2.8);
std::cerr << (int)(a+b) << ", " << (double)(x*y) << std::endl;
return 0;
}
Неизвестный
09.02.2011, 14:39
общий
Цитата: Гордиенко Андрей Владимирович
Простейший пример кольца Вы привели сами. Это множество, состоящее из чисел -1, 0, 1.

Извините, но это множество будет кольцом только при условии, что вы зададите условия для операций (-1)+(-1) и 1+1. Т.к. при использовании нормальной арифметики результат выходит за пределы множества.

Кстати, простейшее кольцо - это мн-во {0}. При этом оно еще характеризуется тем, что нейтральный элемент по сложению совпадает с нейтральным элементом по умножению.

Кольцом будет мн-во {-1, 0, 1} при условии, что это остатки от деления на 3 (кольцо вычетов по модулю 3). Вообще, любое мн-во остатков от деления на n будет кольцом (кольцо вычетов по модулю n). Если n - простое, то такое кольцо будет полем.
давно
Профессор
230118
3054
09.02.2011, 15:45
общий
Да, Вы правы.
давно
Мастер-Эксперт
17387
18345
09.02.2011, 16:03
общий
Да, естественно (досадно, что по невнимательности согласился с ошибочным утверждением). Здесь нуль играет роль и мультипликативной единицы. Как я понимаю, единственное числовое кольцо, состоящее из конечного числа элементов (если исключить те множества, о которых было сказано в предшествующем сообщении, но эти кольца являются результатами операций, выполняемых над другими множествами). Остальные числовые кольца - бесконечные множества.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
319965
1463
09.02.2011, 22:50
общий
Адресаты:
Согласен с точкой зрения Сергей Хватова. Скорее всего это задача на использование шаблонов. Они доступны и в последних версиях Delphi. Правда, для Win32 перегрузка операций допускается только в записях и нужно использвать функции. Например, базовый класс "Множество" служит просто для задания типа элементов кольца:

TSet<T> = class(TObject)
end;

Класс "Кольцо", фактически, является интерфейсом:

TRing<T> = class(TSet<T>)
class function Add(x,y: T): T; virtual; abstract;
class function Product(x,y: T): T; virtual; abstract;
class function Subtract(x,y: T): T; virtual; abstract;
end;

Далее можно создавать реальные кольца, специфицируя базовый тип:

TIntegerRing = class(TRing<Integer>)
class function Add(x,y: Integer): Integer; override;
class function Product(x,y: Integer): Integer; override;
class function Subtract(x,y: Integer): Integer; override;
end;
давно
Мастер-Эксперт
17387
18345
10.02.2011, 00:33
общий
Адресаты:

Как видите, эксперты, сведущие в программировании, пришли к выводу, что Ваш вопрос не относится к компетенции данной рассылки. Поэтому прошу Вас перенести вопрос в другой раздел портала (куда именно, не знаю). Хотя бы потому, что непонятно, кто и как должен оформлять ответ, а мне как и. о. администратора рассылки совсем не хочется подвергнуться известным санкциям за вопрос, оставшийся без ответа.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
425
4118
10.02.2011, 08:35
общий
Адресаты:
Вот как раз то, что писали тут программисты, мне немножко не в тему, по той простой причине, что о том, что они писали, будет совершенно отдельное задание. А лезть поперёк батьки в пекло (т.е. опережать учебный план ) не есть комильфо. Зато Ваши пояснения мне больше всего понравились.
Ещё раз повторюсь - программирование меня интересует достаточно мало, т.к. я способен запрограммировать всё, что я понял, самостоятельно.
Те программные иллюстрации что уже есть, пусть, наверное, остаются, но они от вопроса достаточно далеки.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
10.02.2011, 09:07
общий
Адресаты:

Тогда давайте оформим ответ. Что бы Вы ешё хотели узнать о кольцах?
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
425
4118
10.02.2011, 09:29
общий
Адресаты:
Пока оформляйте то, что Вы уже написали (с учётом некоторых поправок, например на счёт нуля ), а я потом ещё что-нибудь спрошу, а то меня на работе немного напрягли сейчас.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Мастер-Эксперт
17387
18345
10.02.2011, 09:33
общий
Адресаты:
Хорошо.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18345
10.02.2011, 09:51
общий
это ответ
Здравствуйте, sir Henry!

Полагаю, что возможной причиной Ваших затруднений является отсутствие времени для ознакомления с основными сведениями по полям и многочленам. Рекомендовал бы Вам, несмотря на всё, прочитать материал, изложенный на страницах 266 - 276 классического учебника А. Г. Куроша "Курс высшей алгебры" (М.: Наука, 1971).

Простейший пример кольца Вы привели сами. Это множество, состоящее из чисел -1, 0, 1. Но нельзя не согласиться с тем, что написал в мини-форуме вопроса эксперт Абаянцев Юрий Леонидович: "Извините, но это множество будет кольцом только при условии, что вы зададите условия для операций (-1)+(-1) и 1+1. Т.к. при использовании нормальной арифметики результат выходит за пределы множества.

Кстати, простейшее кольцо - это мн-во {0}. При этом оно еще характеризуется тем, что нейтральный элемент по сложению совпадает с нейтральным элементом по умножению.

Кольцом будет мн-во {-1, 0, 1} при условии, что это остатки от деления на 3 (кольцо вычетов по модулю 3). Вообще, любое мн-во остатков от деления на n будет кольцом (кольцо вычетов по модулю n). Если n - простое, то такое кольцо будет полем
".

Прежде чем перейти к примерам колец, обращаю Ваше внимание на то, что система всех рациональных чисел (а также системы всех комплексных и всех действительных чисел) обладают тем свойством, что в каждой из них не только сложение и умножение, но и вычитание можно выполнять, оставаясь в пределах самОй этой системы. Это свойство указанных числовых систем отличает их, например, от системы положительных целых или положительных действительных чисел.

Теперь переходим к примерам.

ВСЯКАЯ СИСТЕМА ЧИСЕЛ, СОДЕРЖАЩАЯ СУММУ, РАЗНОСТЬ И ПРОИЗВЕДЕНИЕ ДВУХ ЛЮБЫХ СВОИХ ЧИСЕЛ, является ЧИСЛОВЫМ КОЛЬЦОМ.

Следовательно, если имеющееся в Вашем распоряжении множество чисел удовлетворяет данному условию, то оно является числовым кольцом. Пока мы ведём речь о ЧИСЛОВЫХ КОЛЬЦАХ.

В частности, никакая система положительных чисел не будет кольцом, потому что если a и b - два различных положительных числа, то либо a - b, либо b - a отрицательно. Никакая система отрицательных чисел тоже не будет кольцом, ведь, например, произведение двух отрицательных чисел положительно.

Вопрос о существовании нулевого и единичного элементов в кольце заслуживает отдельного рассмотрения. Так, например, эксперт Гаряка Асмик написала в мини-форуме: "В данной Вам теории не хватает той аксиомы, что в кольце должны быть 0 и 1". Уточняя, замечу, что это утверждение не является аксиомой. Например, на с. 274 "Курса высшей алгебры" относительно нуля сказано так: "Всякое кольцо R обладает однозначно определённым элементом, сумма которого с любым элементом a этого кольца равна a. Будем называть этот элемент нулём кольца R...". Само же утверждение доказывается автором на предыдущей странице книги. А в примере кольца {0} сам элемент кольца является мультипликативной единицей...

Хорошо было написано экспертом Гарякой Асмик: "Если к выше разбираемому множеству {-1,0,1} Добавить хотя бы 2, значит, в нем должна быть и сумма 1+2, то есть 3. А если есть 3, должно быть и 4. То есть мы должны будем включить в множество все целые числа.
Множество остатков от деления по модулю 3 будет кольцом. Для простоты определим их как {0,1,2}
Сложение определим как
1+2=0
2+2=1
Для 1 обратный элемент 2.
Остальные как обычно
".

Будут вопросы - обращайтесь.

С уважением.
5
Большое спасибо! Благодаря Вам начал понимать, что такое "Кольцо". :)
Об авторе:
Facta loquuntur.
Форма ответа