![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Если считатете, что тут сидят телепаты Вы ошибаетесь (по крайней мере я пока таких не встречал), и если надеетесь получить ответ от кого нибудь из форумчан, то проявите усердие и поставьте задачу ясно. Тут идет вопрос не о программисте или заказачике и не об их личных данных ![]() |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
задача была поставлена четко. Есть тип А, B и C. B и C могут существовать вместе как побитовая сумма, а А нет. Причем А исключает существование В и С. Необходимо реализовать это исключение битовыми операциями. Вроде все понятно. А пример приводился для наглядности (я уже пожалел, что его привел ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Наверно это : есть три константы, каждая из которых представлена одним битом.
тут вроде понятно. Т.е есть битовый набор который может принимать только определенные комбинации. А вот тут абсолютно непонятно. Вот есть число n. Как именно с ним реализовать это исключение ? ![]() Наверно имелось ввиду, что при добавлении битовой констаты к набору(т.е при операции OR), исключающие биты должны обнулиться ? В таком случае ответ был дан еще тут : http://forum.vingrad.ru/index.php?showtopi...t&p=1857621 Это сообщение отредактировал(а) mes - 1.5.2009, 17:04 |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так подходит решение или нет ?
если нет, то чего в нем не хватает ? Добавлено через 4 минуты и 51 секунду А понял что Вам надо.. сейчас Это сообщение отредактировал(а) mes - 1.5.2009, 17:28 |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот опять условным кодом:
исправлено так пойдет ? Это сообщение отредактировал(а) mes - 1.5.2009, 19:43 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Выбирай из трёх вариантов:
1. Пиши ifы, как собирался сам. 2. Составляй таблицу Rule rules[], как предлагал я. Возможно struct Rule будет сложнее, для хранения их можно выбрать какой нибудь контейнер stl, который позволит быстрее найти нужную/-ые запись/-и. 3. Пиши набор классов Archivator, как предложил mes. 4. ЭКЗОТИКА: Выбрать другой язык программирования типа LISP или Prolog или запрограммировать ПЛМ. Врядли можно придумать что-то ещё. IMHO, вариант mes лучше |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
из за написания на скорую руку, код содержал глюки - вот подправил А так применять нельзя, так как eB это не маска, а значение типа. Чтоб можно было за раз устанавливать оба бита, то можете добавить в список тип eBC с необходимыми масками. К тому же приведенный код лишь демонстрация и для заключительной версии требует доработки ![]() Добавлено через 5 минут и 25 секунд это тоже неправильное примение, так как как присваиваете набору значение типа.. Добавлено через 6 минут и 54 секунды Поэтому лучше подобные вещи разгружать через типы, а не значения. Тогда можно будет определить те операции которые требуется и компилятор сам будет следить за коректностью. Это сообщение отредактировал(а) mes - 1.5.2009, 19:49 |
|||
|
||||
math64 |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
По коду mes (1.5.2009, 17:51)
Так нельзя, eВ и eC - номера битов, их нельзя оъбединять по или
или
Добавлено через 14 минут и 27 секунд Вот тебе код без if:
Это сообщение отредактировал(а) math64 - 1.5.2009, 19:59 |
||||||||||||
|
|||||||||||||
KEHT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 17.7.2006 Репутация: нет Всего: 1 |
Минус реализации, что если тебе нужно будет, чтобы A = 00000001 B = 00000010 C = 00000011 С замещала B, то придеца указать B запрещающую маску 00000011, а это приведет к блокированию A Как вариант использовать vector<T>(или другой контейнер) для хранения масок |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Идея неплохая, но в реализации operator |= и operator | есть ошибки, нужно вычислять новую disallowed_mask и mask вычисляется не всегда правильно.
Можно добавить friend T operator |(const T&, const Mask&); чтобы искючить ненужное вычисление disallowed_mask. |
|||
|
||||
KEHT |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 17.7.2006 Репутация: нет Всего: 1 |
Я исходил из условия задачи, в котором следовало, что объект справа от оператора подается на вход левому, поэтому и disallowed_mask оставлял от левого объекта.
Тут да. В данной реализации к типу T предъявляются довольно существенные ограничения. Идеально было бы хранить контейнер со всем запрещенными масками.
Я так понял, что по условию задачи левый от оператора объект предъявляет требования к правому, поэтому скорее friend T operator |(const Mask&, const T&); Это сообщение отредактировал(а) KEHT - 4.5.2009, 14:05 |
||||||
|
|||||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |