XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Toadcop

offline
Опыт: 54,313
Активность:
Кодировка Флагов
короче вот еще одна уже чуть сложней задачя !
начнём с самого начала... у нас есть например 10 флагов которые могут быть активированы или нет. типо так
1 (0) - false
2 (0) - false
3 (1) - true
4 (0) - false
5 (1) - true
6 (0) - false
7 (1) - true
8 (1) - true
9 (0) - false
10(1) - true

вот типо иммено так ! в чём задачя надо создать алгоритм который будет
1) кодировать активированые флаги в один инт (не бинарный код т.е. не 011010101 ! это просто !) а в простое число вроде 27, 87 или что такое как выйдет ;)
2) алгоритм который сможет узнавать из этого числа какой флаг активирован ! т.е. функция в которую задаётьса это кодированое число + номер флага (1 - 10) который надо узнать или он активирован ! если да то функция вернёт true если нет то false.

приверно так
Код:
function CodeFlags takes integer i retruns integer // как "i" идёт порядок флагов (их сумма) 
 endfunction
 // и возвращает уже готовое закодированое число которое представляет из себя сумму всех активированых флагов !


и вторая функция
Код:
function IsFlagOn takes integer flag,integer Coded returns boolean
  // если в этом кодированом числе содержитьса закодированый флаг тогда функция вернёт true если нет то false ;) !
 endfunction


вот так !
+ это всё должно решатьса без использования циклов или подобных конструкций ! и конечно как можно оптималней !
если не понятно спрашивайте ! желаю удачи =) !
Старый 23.03.2007, 00:02
Toadcop

offline
Опыт: 54,313
Активность:
чё так глухо ? или не знаете как можно риализовать ? могу подсказать...
Старый 24.03.2007, 15:28
Lord of Death
Потерянный надолго
offline
Опыт: 3,008
Активность:
Подскажи.
Старый 24.03.2007, 20:24
Toadcop

offline
Опыт: 54,313
Активность:
узайте степени 2-ки =) это уже ОЧЕНЬ сильная подсказка ! но не надо забывать что реализовать надо без циклов !
Старый 24.03.2007, 21:37
dk

offline
Опыт: 60,293
Активность:
Можно сделать как права доступа к файлам у люнуха
Старый 28.03.2007, 18:06
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
Можно сделать как права доступа к файлам у люнуха
и как это ?
Старый 28.03.2007, 21:13
dk

offline
Опыт: 60,293
Активность:
1 2 4 и т.д хотя это как раз и получатся степени 2) я невнимательно топик прочел...
Старый 29.03.2007, 04:05
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
1 2 4 и т.д хотя это как раз и получатся степени 2) я невнимательно топик прочел...

тк понятно =) но нужен алгоритм !
Старый 29.03.2007, 12:26
J
expert
offline
Опыт: 48,447
Активность:
ну... принцепи все довольно просто и понятно... единственная мне показалась сложность это:
Цитата:
Сообщение от Toadcop
+ это всё должно решатьса без использования циклов или подобных конструкций
Старый 30.03.2007, 09:54
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
+ это всё должно решатьса без использования циклов или подобных конструкций

это и есть главная задача ! ;)

Toadcop добавил:
да еще ! ТАКЖЕ нельзя использовать строки ! (ВООБЩЕ)
Старый 30.03.2007, 13:49
remal
нечто
offline
Опыт: 2,087
Активность:
замена цикла на рекурсию, например... что тут сложного-то? только вот "задача" не имеет никакого практического смысла...
Старый 03.04.2007, 20:55
DeT

offline
Опыт: 5,715
Активность:
Цитата:
без использования циклов или подобных конструкций

а ето не подобная конструкция?
Старый 03.04.2007, 21:59
remal
нечто
offline
Опыт: 2,087
Активность:
Цитата:
Сообщение от DeT
а ето не подобная конструкция?

не, ну можно использовать серию из n if-ов:) только вот какой смысл решать стандартную задачу по переводу числа из двоичной системы в 10-ичнуй через задницу?
Старый 03.04.2007, 22:57
Toadcop

offline
Опыт: 54,313
Активность:
Код:
function IsInNumberX2BR takes integer i,integer types returns boolean
    local integer x=R2I(Pow(2,i-1))
    local integer x2=Modulo(types,x*2)
  if x2>=x and x2<x*2 then
    return true
  endif
    return false
endfunction


вот всё решение !

Цитата:
только вот какой смысл решать стандартную задачу по переводу числа из двоичной системы в 10-ичнуй через задницу?
- ну у мну есть место где это надо вот я и сделал =)

кстати Pow можно на integer array заменить будет быстрей...

а как кодировать... очень просто =) я использую массив сумму значений из слотов массива ! потом покажу =)

Toadcop добавил:
юзать так IsInNumberX2BR(2,31) там 2 точно есть ;) можете проверить !
Старый 03.04.2007, 23:17
remal
нечто
offline
Опыт: 2,087
Активность:
2Toadcop:
Цитата:
1) кодировать активированые флаги в один инт (не бинарный код т.е. не 011010101 ! это просто !) а в простое число вроде 27, 87 или что такое как выйдет ;)
а теперь продемонстрируй как сделаешь это
Старый 04.04.2007, 18:49
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
а теперь продемонстрируй как сделаешь это
- ты мне хотел нихрена демострировать :Р ! но я конечно продимонстрирую...

короче вот это
Pow2[1]=1
Pow2[2]=2
Pow2[3]=4
Pow2[4]=8
Pow2[5]=16
Pow2[6]=32
Pow2[7]=64
Pow2[8]=128
и т.д.
до 31 степени...
и т.д. это надо желательно инциализировать где нибудь...

теперь просто ! 1 сразу задания нужного аргумнта или вот так !

Код:
integer mycodedshit = Pow2[1]+Pow2[3]+Pow2[7]+Pow2[5]  // в этом числе будут всё эти фдаги ! а точнее 1,3,7,5 (или 5,7 безразници !) ну вот полученое число даём в функцию и даём на кокое число надо проверить ! и если true то оно туда входит елси false то нет =) !

ну эти чила можно и самому писать =) как я напр делаю ! т.е. в уме высчитывать...
что вообще это даёт ? очень просто таким способом можно в одно число запихать кучу настроек ! (если производительность не главное =) )

кто не верит тестируйте !
Старый 04.04.2007, 19:18
remal
нечто
offline
Опыт: 2,087
Активность:
Toadcop, бугага. перевод в другую сичтему счисления делается циклом. что намного лучше и красивее
Старый 04.04.2007, 20:39
0pJl9lTa

offline
Опыт: 3,397
Активность:
Очень трудные задачи. очень
Старый 20.04.2007, 13:13
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:07.