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

Anything and all.

Moderators: Murderator+, Murderator

DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

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

Post 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
Last edited by DerMeister =) on 2006-04-27 23:24:36, edited 6 times in total.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

может быть интегральчик с логорифмами?;)
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Grin wrote:может быть интегральчик с логорифмами?;)


Скоро будет :) пока что времени нету :) + надо искать алгоритмы в математическам виде просто готовый код на с++ я не понимаю...
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Grin wrote:может быть интегральчик с логорифмами?;)


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

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

ЗЫ: Сам не знаю зачем это может понадобится но для интереса можно попробовать :)
Haxor
Posts: 97
Joined: 2004-06-04 21:04:14

Post by Haxor »

супер :)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Ну нифига ж себе фичи люди делают..

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

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

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

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

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

Code: Select all

Sub Math.Factorial()
Sub Math....
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Грин, так чего там скилы растут =) по какой синусоидной? =)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post 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


Кажись так..
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post by DerMeister =) »

Тебя "Код Да Винчи" вдохновил? :wink:

Destruction: Не флуди! :!:
DerMeister сейчас на нейрале!
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post 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
Сделал дело - флуди смело !!!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

C рекурсией аккуратнее. После 100 вложений может рухнуть. Вместе с инжектом.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
DerMeister =)
Expert!
Posts: 1032
Joined: 2006-02-25 21:48:38

Post 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


Ну рекурсия ет опасно и Едред про это уже сказал.
Насчёт логарифма, то он сам жутко тормозной, и сам по себе использует возведение в степень, поэтому замкнутый круг + краш из-за рекурсии...
DerMeister сейчас на нейрале!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

DerMeister =) wrote:Ну рекурсия ет опасно и Едред про это уже сказал.


Я не сказал, что рекурсия опасна, я сказал, что неконтролируемая рекурсия опасна. Лично я сам люблю применять рекурсию, так как считаю, что она придает программам добавочную стройность и, скажем так, некую изящность. Но когда применяешь рекурсию, надо всегда очень четко понимать для чего и как ты ее применяешь. Так как любая рекурсия жрет память и при большом количестве вложений опасна неустойчивостью работы. Автор скриптового модуля в своей доке писал, что для инжекта порог безопасных вложений рекурсии = 100. Примерно.
Ни один скрипт не работает? Пора обновить Инжект...
Все работает, но хочется большего? Пора переходить на стелс...
Askaneli
Sphere expert
Posts: 1143
Joined: 2004-10-01 08:27:38
Location: Уфа

Post by Askaneli »

Если есть возможность использовать простой цикл - то лучше его использовать, а не рекурсии. Но блин зато как красиво рекурсии то )))
Сделал дело - флуди смело !!!
GrandMaster Ranger
Posts: 73
Joined: 2005-01-14 13:41:05
Location: Одесса - мама
Contact:

Post by GrandMaster Ranger »

Прощу прощения заранее за оффтоп.. если чтото совсем не так или я не правильно понял суть этого топика, то удалите мой меседж...
но кому все эти функции нафик нужны? специально ввёл в поиск названия sub'ов, не одного топика кроме этого не вывело!!!
или вы не для ультимы это все писали? :roll:
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Плохо искали.

sub abs используется во многих (если не во всех) ходилках !!!
GrandMaster Ranger
Posts: 73
Joined: 2005-01-14 13:41:05
Location: Одесса - мама
Contact:

Post by GrandMaster Ranger »

Destruction wrote:Плохо искали.

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

а рекурсии? :)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

GrandMaster Ranger wrote:
Destruction wrote:Плохо искали.

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

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

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

Писалось для Injection, использовать просто надо аккуратно.
GrandMaster Ranger
Posts: 73
Joined: 2005-01-14 13:41:05
Location: Одесса - мама
Contact:

Post by GrandMaster Ranger »

Destruction wrote:
GrandMaster Ranger wrote:
Destruction wrote:Плохо искали.

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

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

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

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

1) а зачем в инжекте находить факториал? :shock: :lol:
2) в поиске не одного топика с юзом факториала кроме этого
3) эти функции- тоже самое что придумать водонепроницаемое полотенце :wink:
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

1. Факториал - очень нужная штука, главное - уметь применить.

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

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

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

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

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

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