Page 1 of 3

Math Function not found - решение здесь :)

Posted: 2006-04-16 16:00:12
by DerMeister =)
Может кому-то нужно :)
Последнее обновление: [28.04.06]

Факториал:

Code: Select all

sub factorial(x)
var i,result=2

if x<=0 then
return 1
end if

if x<3 then
return x
end if

for i = 3 to x
result=result*i
next

uo.print(str(x)+"! = "+str(result))
return result
end sub


Возведение в степень: (натуральную, у>0)

Code: Select all

sub XtoPowerY(x,y)

if not IsWholeNum(y) or y<0 or (x==0 and y==0) then
return 0
end if

var i,result=1

if y>0 then
 for i = 1 to y
 result=result*x
 next
else
return 1   
end if

uo.print(str(x)+"^"+str(y)+" = "+str(result))
return result
end sub


Модуль:

Code: Select all

sub abs(x) 
    if (x < 0) then
        x = -x
    end if
    return x
end sub


Корень квадратный:

Code: Select all

sub SQRT(x)
if x<0 then
return 0
end if

var tmp=int(2*len(str(x)))
var result=XtoPowerY(2,tmp)

repeat
tmp=result
result=0.5*(result+x/result)
until abs(tmp-result)<0.00001
uo.print("sqrt("+str(x)+") = "+str(result))
return result
end sub


Логарифм натуральный (жутко тормозной, зато работает :) ):

Code: Select all

sub ln(x)
var i=0,y,tmp,result=0

if x>1 then

 y=(x-1)/(x+1)

 repeat
 tmp=result
 result=result+(XtoPowerY(y,i))/(i+1)
 i=i+2
 until (result-tmp)<0.0001 and i>3

 result=result*2*y
 uo.print("ln("+str(x)+") = "+str(result,3))
 return result

else
 if x<=0 then
    return 0
 else
    x=x-1
    repeat
    tmp=result
    result=result+((XtoPowerY(-1,i))*(XtoPowerY(x,i+1)))/(i+1)
    i=i+1
    until (tmp-result)<0.0001 and i>5
    uo.print("ln("+str(x)+") = "+str(result,3))
    return result
 end if
end if
end sub


Логарифм:

Code: Select all

sub lg(base,x)
var result,tmp
tmp=ln(base)
result=(ln(x)/tmp)
uo.print("lg("+str(base)+","+str(x)+") = "+str(result,2))
return result
end sub


Проверка на целочисленность:

Code: Select all

sub IsWholeNum(num)
if (num-int(num)) == 0 then
uo.print("Is Whole Num")
return true
else
uo.print("Is Not Whole Num")
return false
end sub

Posted: 2006-04-16 16:19:14
by Grin
может быть интегральчик с логорифмами?;)

Posted: 2006-04-16 21:17:27
by DerMeister =)
Grin wrote:может быть интегральчик с логорифмами?;)


Скоро будет :) пока что времени нету :) + надо искать алгоритмы в математическам виде просто готовый код на с++ я не понимаю...

Posted: 2006-04-16 23:56:28
by DerMeister =)
Grin wrote:может быть интегральчик с логорифмами?;)


Логарифм сделал... :) :) :)

Может когданить и интегральчик сделю :)

ЗЫ: Сам не знаю зачем это может понадобится но для интереса можно попробовать :)

Posted: 2006-04-17 08:37:24
by Haxor
супер :)

Posted: 2006-04-26 16:59:13
by Destruction
Ну нифига ж себе фичи люди делают..

Я даже незнаю зачем оно надо, так вот, что сказать хотел, автор знает, что писать, но незнает как.

Грамотный скриптер, всегда пишет скрипт так, чтобы он занимал поменьше строк, а вот натуральный логарифм например, делает два одинаковых return в условии, когда достаточно сделать один после..

Если приглядеться, можно еще что-нибудь отыскать.

PS: Респект автору.

PPS: А можно писать так:

Code: Select all

Sub Math.Factorial()
Sub Math....

Posted: 2006-04-26 19:26:07
by Scripts Writer
Грин, так чего там скилы растут =) по какой синусоидной? =)

Posted: 2006-06-15 22:38:14
by Destruction
Последовательность фибонначи )

Code: Select all

Sub Fibonacci(num)
   if num == 0 then
      return 0
   endif
   if num == 1 then
      return 1
   endif
   return Fibonacci(num-1)+Fibonacci(num-2)
endsub


Кажись так..

Posted: 2006-06-16 13:14:27
by DerMeister =)
Тебя "Код Да Винчи" вдохновил? :wink:

Destruction: Не флуди! :!:

Posted: 2006-06-16 13:32:51
by Askaneli
мля
рекурсии ё

Факториал:

Code: Select all

sub factorial(x)
if x<=1 then
return 1
else
return x*factorial(x-1)
end if
end sub


Целая степень. Сюда мона прикрутить возведение в дробную степень с использованием логарифма.

Code: Select all

sub XtoPowerY(x,y)
if y<=1 then
return x
else
return x*XtoPowerY(x,y-1)
end if
end sub

Posted: 2006-06-16 18:31:35
by Edred
C рекурсией аккуратнее. После 100 вложений может рухнуть. Вместе с инжектом.

Posted: 2006-06-16 19:18:09
by DerMeister =)
Askaneli wrote:мля
рекурсии ё

Факториал:

Code: Select all

sub factorial(x)
if x<=1 then
return 1
else
return x*factorial(x-1)
end if
end sub


Целая степень. Сюда мона прикрутить возведение в дробную степень с использованием логарифма.

Code: Select all

sub XtoPowerY(x,y)
if y<=1 then
return x
else
return x*XtoPowerY(x,y-1)
end if
end sub


Ну рекурсия ет опасно и Едред про это уже сказал.
Насчёт логарифма, то он сам жутко тормозной, и сам по себе использует возведение в степень, поэтому замкнутый круг + краш из-за рекурсии...

Posted: 2006-06-16 23:30:50
by Edred
DerMeister =) wrote:Ну рекурсия ет опасно и Едред про это уже сказал.


Я не сказал, что рекурсия опасна, я сказал, что неконтролируемая рекурсия опасна. Лично я сам люблю применять рекурсию, так как считаю, что она придает программам добавочную стройность и, скажем так, некую изящность. Но когда применяешь рекурсию, надо всегда очень четко понимать для чего и как ты ее применяешь. Так как любая рекурсия жрет память и при большом количестве вложений опасна неустойчивостью работы. Автор скриптового модуля в своей доке писал, что для инжекта порог безопасных вложений рекурсии = 100. Примерно.

Posted: 2006-06-19 05:34:21
by Askaneli
Если есть возможность использовать простой цикл - то лучше его использовать, а не рекурсии. Но блин зато как красиво рекурсии то )))

Posted: 2006-11-23 14:38:25
by GrandMaster Ranger
Прощу прощения заранее за оффтоп.. если чтото совсем не так или я не правильно понял суть этого топика, то удалите мой меседж...
но кому все эти функции нафик нужны? специально ввёл в поиск названия sub'ов, не одного топика кроме этого не вывело!!!
или вы не для ультимы это все писали? :roll:

Posted: 2006-11-23 14:43:26
by Destruction
Плохо искали.

sub abs используется во многих (если не во всех) ходилках !!!

Posted: 2006-11-23 15:39:48
by GrandMaster Ranger
Destruction wrote:Плохо искали.

sub abs используется во многих (если не во всех) ходилках !!!

а рекурсии? :)

Posted: 2006-11-23 16:01:15
by Destruction
GrandMaster Ranger wrote:
Destruction wrote:Плохо искали.

sub abs используется во многих (если не во всех) ходилках !!!

а рекурсии? :)

А что с ними не так ?

Писалось для Injection, использовать просто надо аккуратно.

Posted: 2006-11-23 16:04:18
by GrandMaster Ranger
Destruction wrote:
GrandMaster Ranger wrote:
Destruction wrote:Плохо искали.

sub abs используется во многих (если не во всех) ходилках !!!

а рекурсии? :)

А что с ними не так ?

Писалось для Injection, использовать просто надо аккуратно.

1) а зачем в инжекте находить факториал? :shock: :lol:
2) в поиске не одного топика с юзом факториала кроме этого
3) эти функции- тоже самое что придумать водонепроницаемое полотенце :wink:

Posted: 2006-11-23 16:11:09
by Destruction
1. Факториал - очень нужная штука, главное - уметь применить.

Я в некоторых своих скриптах им задержки расставляю, для большей плавности так сказать :roll:

Пример не покажу, скрипты приватные -)

2. Ну дык, факториал требуется только в сложных скриптах, а где его используют - на паблки не кладут.

Учите мат. часть, такой вопрос отпадёт.

3. Отсутствие смекалки не даёт право делать такие выводы.

PS: А ты сам-то знаешь, что такое факториал ?