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

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

Закрытая тема
 
J
expert
offline
Опыт: 48,747
Активность:
[Task] Нахождение корня (решено)
Задача решена ShadoW DaemoN-ом, ему перечисленно 350 опыта. (пост)


Еще одна задача, и опять на алгоритмику.. хоть эта задача неимеет никакого практического применения, но по сути она должна быть проще предыдущей...
вообщем нужно сделать функцию:
Код:
function root takes real X, integer N returns real
    //------
endfunction

Которая находит корень (хотябы примерный) N-ой степени из числа X.
Неиспользуя ниодной native функции (к примеру Pow()), пользуясь только if-ами, loop-ами и арифметическими действиями.

Делайте как угодно, проявляйте смекалку, работать должно с любыми X (естествено не отрицательными).

у меня вышло в 3 функции, 50 строчек вместе взятые...

P.S.
Плиз... проверяйте свои коды на работоспособность перед тем как выкладывать...

Отредактировано ShadoW DaemoN, 07.08.2008 в 00:23.
Старый 28.06.2007, 21:41
DearFear

offline
Опыт: 1,299
Активность:
Да... Если бы я знал хорошо джазз, то я бы решил. С точными науками у меня всё хорошо.
Старый 28.06.2007, 23:07
DearFear

offline
Опыт: 1,299
Активность:
Нахождением корня я забиваю мозги уже долго лет. Правда с использованием математических формул.
А триггером можно это сделать?

Отредактировано Jon, 22.07.2007 в 02:45.
Старый 28.06.2007, 23:54
J
expert
offline
Опыт: 48,747
Активность:
DearFear конечно можно... есть нативка Pow, она это и делает.

Отредактировано Jon, 30.06.2007 в 23:15.
Старый 28.06.2007, 23:56
DearFear

offline
Опыт: 1,299
Активность:
Цитата:
нативка Pow

недогнал, обьясни
Старый 29.06.2007, 00:01
J
expert
offline
Опыт: 48,747
Активность:
call Pow(Число, степень)
если хочеш найти корень N степени то возведи число в степень 1/N
и все.. небудем об этом.. давайте уж решийте задачу.. такая легкая...
думаю уже нестоит подсказывать что ее нужно решать методом перебора, только оптимального перебора
Старый 29.06.2007, 00:30
p01nTT

offline
Опыт: 10,760
Активность:
Цитата:
думаю уже нестоит подсказывать что ее нужно решать методом перебора, только оптимального перебора

да ещё бы :)
Старый 29.06.2007, 00:46
J
expert
offline
Опыт: 48,747
Активность:
ответ есть, он находится у меня в первом посте в адмен теге.. т.е. задача решаема.. такчто go go go
Старый 29.06.2007, 00:50
WordEdit

offline
Опыт: 11,597
Активность:
Так?
Код:
function root takes real X, integer N returns real
 local real y=0
 local real y1=1
 local integer i=0
 loop
  set y1 = 1
  set i = 0
  set y = y + 0.1
   loop
    set i = i + 1
    set y1 = y1 * y
    exitwhen i>=N
   endloop  
  exitwhen y1>=X       
 endloop
 return y
endfunction

Отредактировано Jon, 30.06.2007 в 23:10.
Старый 29.06.2007, 11:11
J
expert
offline
Опыт: 48,747
Активность:
WordEdit а если я захочу найти корень 3-ей степени из 200201625, с точностью до 0,001
твоя функция справится?
Старый 29.06.2007, 13:37
p01nTT

offline
Опыт: 10,760
Активность:
Код:
function GetKolichestvoZnakov takes integer number returns integer
    local integer i = 0
    loop
         exitwhen number == 0
         set number = number/10
         set i=i+1 
    endloop
    return i
endfunction

я думаю это одна из функций
Старый 29.06.2007, 14:10
J
expert
offline
Опыт: 48,747
Активность:
p01nTT неугадал

Jon добавил:
вам ненужно сделать в точности как у меня.. вам нужно сделать свой вариаент, полностью работоспособый
Старый 29.06.2007, 14:36
DearFear

offline
Опыт: 1,299
Активность:
Математика это такая вещь, где нет понятия "угадать".
Как я понял именно поэтому её называют точной.
Старый 29.06.2007, 14:58
Кет

offline
Опыт: 111,234
Активность:
Это не математека, это кодинг.
А кодинг по определению шаманизм.
Старый 29.06.2007, 15:29
WordEdit

offline
Опыт: 11,597
Активность:
Jon
Блин у меня щас worldeditor не пашет, проверить не смогу :(.
Точность можно подогнать, изменив
Цитата:
set y = y + 0.1

на
set y = y + 0.001

А так вообще идея правильная, или юзать др алгоритм(более сложный)?
Старый 29.06.2007, 20:56
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
WordEdit, такой цикл ты представляеш с какой "бешеной" скоростью будет работать? Уж не говоря о том что вар лишь определенное кол-во раз его выполнит - далее цикл просто прекратит выполнение.
Старый 29.06.2007, 20:58
J
expert
offline
Опыт: 48,747
Активность:
WordEdit о ужас... и с твоей прибовкой по 0,001
Цитата:
WordEdit а если я захочу найти корень 3-ей степени из 200201625, с точностью до 0,001
чтобы посчитать этот корень цыкл выполнится 585000 раз, несмотря на то что даже сам вар не дас ему выполнится стока, и сочтет за зависший поток и грохнет его...
мой же цыкл чтобы посчитать этот корень выполняется 36 раз...
Старый 29.06.2007, 21:20
YellowStar
poon
offline
Опыт: 15,144
Активность:
Не дошло что делать. Но как понял я надо типа чтото в степень ввести. Короче записывавем число в переменную стринг и перемножаем нужное количество раз. пока под рукой нет ВЕУ поэтому функцию показать не могу:)
Старый 29.06.2007, 21:23
J
expert
offline
Опыт: 48,747
Активность:
NaRaYaN надо не степень находить, а корень произвольной степени
Старый 29.06.2007, 21:24
YellowStar
poon
offline
Опыт: 15,144
Активность:
А можно это число уменьшить. Который написал горд эдит
Старый 29.06.2007, 21:25
Закрытая тема

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

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

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

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



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