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

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

Закрытая тема
 
Toadcop

offline
Опыт: 54,313
Активность:
[Task] Логарифм двойки
привет всем =)
решил дать интересную задачьку =)
короче вот надо составить рабочий алгоритм которой бы работал как логарифм 2-ки.
т.е. в какую степень надо возвести 2-ку что бы получить заданый результат !
пример 2^x = 128 ... х = степень т.е. это будет 7 точнее 2 надо возвести в 7 стпень что бы получить 128 ! я надеюсь понятно ну вот мну нужен алгоритм на джассе который будет это делать !
какие правила ? очень просто составить алгоритм только для 2-ки и до 32 степени (31) как выйдет НО не меньше ! вот и вперёд ;) !
ЗЫ выйграет самый оптимальный (на практике) вариант !
Старый 20.03.2007, 14:49
DeT

offline
Опыт: 5,715
Активность:
через год-другой спроси -я буду знать(надеюсь) :):
Старый 20.03.2007, 15:16
Toadcop

offline
Опыт: 54,313
Активность:
а что здесь сложного пипец... блин
Старый 20.03.2007, 15:31
DeT

offline
Опыт: 5,715
Активность:
ну мы еще в школе не прошли :shy:
Старый 20.03.2007, 15:33
Toadcop

offline
Опыт: 54,313
Активность:
а =) т.к. какая разница я еще лутче объяснил ! что не знаешь что такое степень ?
кстати то что в школе я учил я забыл =) сам заново понял и еще лутче ! т.к. надо.
Старый 20.03.2007, 15:37
DeT

offline
Опыт: 5,715
Активность:
что есть логарифм?:)
хотя уже примерно помну..а в варе логарифма нету чтоли?
Старый 20.03.2007, 15:41
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Toadcop может твою функцию выставить
Старый 20.03.2007, 15:58
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Код:
function log takes real r1, real r2 returns real
    local real index = 0
    local real r = 1
    if (r1==1 or r1<=0 or r2<=0) then
      return -0.00
    endif
    if (r1>1) then
      loop
        exitwhen (r >= r2)
          set r = r*r1
          set index = index + 1
      endloop
    endif
    if (r1<1) then
      loop
        exitwhen (r == r2)
          set r = r*r1
          set index = index + 1
      endloop
    endif
    return index
endfunction
"logr1r2" Это будет работать, но значения показателя ф-ии будут приближенные, т.е. интегер Вычисления по школьной программе (a>0; a != 1; b > 0), еще какой-то косяк с определением 0<r<1

Цитата:
exitwhen (r == r2)
в третьем ифе, по идее, должен стоять <= чтобы ловить ближайшее число, если не произойдет точного совпадения при переборе, но при этом значении он выдает показатель (index) на один больше, в чем дело - хз
Старый 20.03.2007, 19:01
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
FellGuard - Tc говорил "выйграет самый оптимальный", а это не он точно. Читайте внимательно - "алгоритм только для 2-ки и до 32(31) степени"! Это ж елементарно! Дам подсказку(Тс надеюсь ругать не будет =) ) - "больше строк, меньше вычислений!".
Старый 20.03.2007, 19:02
HackeR
Art Of Mindgames
offline
Опыт: 7,688
Активность:
ну и сам решай!!!MrSmiLe
Старый 20.03.2007, 19:05
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
а, пофик, я написал вполне универсальную штуку) для вычисления степеней двойки надо просто забить соответствующую таблицу в ф-ию)
Код:
function log takes real a returns real
    local real r = 0
    loop
      exitwhen (Pow(2,r)>=a or r>32)
      set r = r + 1
    endloop
    return r
endfunction
вызываем с результирующим значением и получаем исходный показатель, хотя есчесно я недопонял задание)

Отредактировано FellGuard, 20.03.2007 в 19:21.
Старый 20.03.2007, 19:16
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
HackeR() - 1) я уже решил; 2) у меня алгоритм Toadcop-а есть :)
Старый 20.03.2007, 19:24
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Смайл, кинь мне в личку, всеравно я больше ниче больше родить не смогу)
Старый 20.03.2007, 19:26
x3Frozen

offline
Опыт: 20
Активность:
Toadcop
:o_god: Ты жиф..За тобой все Орлята скучает:)
Старый 21.03.2007, 02:08
newby

offline
Опыт: 840
Активность:
Ужасъ ты еще 2+2 задай прогу написать 8) Жесть 8)Ничего проще небывает 8)
Старый 21.03.2007, 02:26
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Цитата:
Сообщение от FellGuard
всеравно я больше ниче больше родить не смогу)
- не то рожаешь =) Тс дал задачу на алгоритм который вычисляет степень 2-ки от числа а не наоборот (не 2^4=16 a 16=2^4).
Старый 21.03.2007, 12:14
WordEdit

offline
Опыт: 11,597
Активность:
Цитата:
решил дать интересную задачьку =)

Тупая олимпиадная задача.
Вот решение без использования ф-ии Pow.
Цитата:
function log takes integer x returns integer;
local integer i=0
local integer rez
set rez = 1;
loop
exitwhen (rez>=x)
set rez=rez*2
set i=i+1
endloop
return i
endfunction;

Забыл трег кода...
Старый 21.03.2007, 13:06
Toadcop

offline
Опыт: 54,313
Активность:
WordEdit вы все задроты ! (кроме Смайла ;) ) я написал ОПТИМАЛЬНО + 32 степень ! и + только для 2 ! т.к. в ппрограмирование для других чисел это почти не нужно (очень редко) ! т.е. мне не нужно тупой перебор через цикл и т.д. ! это решаетьса простым вычесление в несколько строк ! (без циклов и подобного !)



Цитата:
Народ обращаюсь я начинаю карты делать и у меня вопрос как делать ролики


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

Toadcop добавил:
кстати ! если кто то думает что он крут с циклом то он просётсёт ! т.к. в варе инты 32 битные т.е. больше 31 степени и так не получиш ! т.е. как я говорю это правильней !

Toadcop добавил:
ну вообщем молодци хоть запостились =)
[+] 2 пункта от !: за "вы все задроты"... watch ur language.
Старый 21.03.2007, 14:12
WordEdit

offline
Опыт: 11,597
Активность:
Блин, тупая задача но если ты хочешь я напишу через длинное представление чисел в массиве.

Ну или подумаю и решу как ты хочешь.
Цитата:
т.к. в ппрограмирование для других чисел это почти не нужно (очень редко)

В програмирование для этих чисел есть ф-ия log, от неё можно плясатью

WordEdit добавил:
Toadcop, кстати как ты будешь передавать в ф-ию число 4294967296 это 2^32 ,если ты сам сказал что инты 32 битные? Релалом что-ли? Кстати какой диапозон рела в варке.
Старый 21.03.2007, 18:33
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Открой "Численые методы в программирвании" и ты узнаешь много нового...
Старый 21.03.2007, 22:09
Закрытая тема

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

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

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

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



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