Continued fraction: Difference between revisions
Content added Content deleted
(Added code for Liberty Basic) |
(Removed Liberty Basic code: Incorrect task) |
||
Line 541: | Line 541: | ||
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274 |
2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274 |
||
</lang> |
</lang> |
||
=={{header|Liberty BASIC}}== |
|||
<lang lb> |
|||
dim terms(100) |
|||
input "Enter a number:";n$ |
|||
if instr(n$,"/")=0 then |
|||
n$=castToFraction$(val(n$)) |
|||
end if |
|||
if castToReal(n$)<=0 then notice "N must be positive!":end |
|||
print "["; |
|||
if termoverride=0 then |
|||
nterms=1 |
|||
[start] |
|||
term=int2(n$):n$=subtract$(n$,castToFraction$(term)) |
|||
print term; |
|||
terms(nterms)=term |
|||
if equal(n$,"0/1")=0 then n$=reciprocal$(n$) |
|||
if compare(n$,"1/100")=1 and nterms<100 then print ",";:nterms=nterms+1:goto [start] |
|||
print "]" |
|||
end if |
|||
print "Convergents:" |
|||
for x=1 to nterms |
|||
sum=terms(x) |
|||
sum$=castToFraction$(terms(x)) |
|||
for y=x-1 to 1 step -1 |
|||
sum=terms(y)+1/sum |
|||
sum$=add$(castToFraction$(terms(y)),reciprocal$(sum$)) |
|||
next y |
|||
print sum$;"=";sum |
|||
next x |
|||
function int2(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
int2=int(aNumerator/aDenominator) |
|||
end function |
|||
function abs$(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
bNumerator=abs(aNumerator) |
|||
bDenominator=abs(aDenominator) |
|||
b$=str$(bNumerator)+"/"+str$(bDenominator) |
|||
abs$=simplify$(b$) |
|||
end function |
|||
function negate$(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
bNumerator=-1*aNumerator |
|||
bDenominator=aDenominator |
|||
b$=str$(bNumerator)+"/"+str$(bDenominator) |
|||
negate$=simplify$(b$) |
|||
end function |
|||
function add$(a$,b$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
bNumerator=val(word$(b$,1,"/")) |
|||
bDenominator=val(word$(b$,2,"/")) |
|||
cNumerator=(aNumerator*bDenominator+bNumerator*aDenominator) |
|||
cDenominator=aDenominator*bDenominator |
|||
c$=str$(cNumerator)+"/"+str$(cDenominator) |
|||
add$=simplify$(c$) |
|||
end function |
|||
function subtract$(a$,b$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
bNumerator=val(word$(b$,1,"/")) |
|||
bDenominator=val(word$(b$,2,"/")) |
|||
cNumerator=(aNumerator*bDenominator-bNumerator*aDenominator) |
|||
cDenominator=aDenominator*bDenominator |
|||
c$=str$(cNumerator)+"/"+str$(cDenominator) |
|||
subtract$=simplify$(c$) |
|||
end function |
|||
function multiply$(a$,b$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
bNumerator=val(word$(b$,1,"/")) |
|||
bDenominator=val(word$(b$,2,"/")) |
|||
cNumerator=aNumerator*bNumerator |
|||
cDenominator=aDenominator*bDenominator |
|||
c$=str$(cNumerator)+"/"+str$(cDenominator) |
|||
multiply$=simplify$(c$) |
|||
end function |
|||
function divide$(a$,b$) |
|||
divide$=multiply$(a$,reciprocal$(b$)) |
|||
end function |
|||
function simplify$(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
gcd=GCD(aNumerator,aDenominator) |
|||
if aNumerator<0 and aDenominator<0 then gcd=-1*gcd |
|||
bNumerator=aNumerator/gcd |
|||
bDenominator=aDenominator/gcd |
|||
b$=str$(bNumerator)+"/"+str$(bDenominator) |
|||
simplify$=b$ |
|||
end function |
|||
function reciprocal$(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
reciprocal$=str$(aDenominator)+"/"+str$(aNumerator) |
|||
end function |
|||
function equal(a$,b$) |
|||
if simplify$(a$)=simplify$(b$) then equal=1:else equal=0 |
|||
end function |
|||
function castToFraction$(a) |
|||
do |
|||
exp=exp+1 |
|||
a=a*10 |
|||
loop until abs(a-int(a+0.001))<0.001 |
|||
castToFraction$=simplify$(str$(a)+"/"+str$(10^exp)) |
|||
end function |
|||
function castToReal(a$) |
|||
aNumerator=val(word$(a$,1,"/")) |
|||
aDenominator=val(word$(a$,2,"/")) |
|||
castToReal=aNumerator/aDenominator |
|||
end function |
|||
function castToInt(a$) |
|||
castToInt=int(castToReal(a$)) |
|||
end function |
|||
function compare(a$,b$) |
|||
if abs$(subtract$(a$,b$))=subtract$(a$,b$) then compare=1:else compare=-1 |
|||
end function |
|||
function GCD(a,b) |
|||
if a=0 then |
|||
GCD=1 |
|||
else |
|||
if a>=b then |
|||
while b |
|||
c = a |
|||
a = b |
|||
b = c mod b |
|||
GCD = abs(a) |
|||
wend |
|||
else |
|||
GCD=GCD(b,a) |
|||
end if |
|||
end if |
|||
end function |
|||
</lang> |
|||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |
||
<lang Mathematica> |
<lang Mathematica> |