Author |
Topic: more fractions (Read 135 times) |
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
more fractions
« Thread started on: Mar 4th, 2017, 10:26pm » |
|
Set of functions to work with fractions (+-*/, printing as improper fractions / as mixed numbers, reducing to lower terms)
Feel free to break it ;) Code:'set of functions to work with fractions
'tested along this page
'https://www.varsitytutors.com/hotmath/hotmath_help/topics/fraction-operations
'tsh73 march 2017
'1) fractions to be stored as string, "numenator denominator" (to be used by val(word$()))
' "-" is to be stored at first part
'2) add sub div mul to be created as functions
'3) to visualise, fracToStr$ (actually improper fraction, like 4/3)
'4) to visualise, fracToMixed$ ( 1 1/3)
'5) to use in computations, fracVal
'============================
f1$="1 3"
print fracToStr$(f1$)
f2$=frac$(5, 3)
print fracToStr$(f2$)
print fracToMixed$(f2$)
print fracVal(f2$)
print
print fracToMixed$("8 4")
print fracToMixed$("2 4")
print fracToMixed$("0 4")
print
print toLowestTerms$("3 7")
print toLowestTerms$("45 75")
print
print fracToMixed$(toLowestTerms$("3 7"))
print fracToMixed$(toLowestTerms$("45 75"))
print fracToMixed$(toLowestTerms$("75 45"))
print
print fracAdd$("1 3", "3 7")
print fracAdd$("1 3", "1 2")
print fracAdd$("1 2", "-1 3" ) 'hackety hack
print fracAdd$("1 3", "5 3")
print fracToMixed$(fracAdd$("1 3", "5 3"))
print
print fracNegate$("1 2")
print fracNegate$("2 2")
print fracNegate$("3 2")
print fracNegate$("0 2")
print fracToMixed$(fracNegate$("1 2"))
print fracToMixed$(fracNegate$("2 2"))
print fracToMixed$(fracNegate$("3 2"))
print fracToMixed$(fracNegate$("0 2"))
print
print fracSub$("1 3", "3 7")
print fracSub$("1 3", "1 2")
print fracSub$("1 2", "-1 2" )
print fracSub$("1 2", "1 2" )
print fracSub$("1 3", "5 3")
print fracToMixed$(fracSub$("1 3", "5 3"))
print
print fracMul$("1 4", "5 6")
print fracRecipr$("3 4")
print fracDiv$("3 4", "5 7")
print fracToMixed$(fracDiv$("3 4", "5 7"))
'============================
function fracToStr$(frac$)
num=val(word$(frac$,1))
if num = 0 then fracToStr$="0": exit function
'else
fracToStr$ = word$(frac$,1);"/"; word$(frac$,2)
end function
function frac$(num, denom)
'from numenator denominator
frac$ = num;" ";denom
end function
function fracToMixed$(frac$)
fracToMixed$=fracToStr$(frac$) 'default
num=val(word$(frac$,1))
denom=val(word$(frac$,2))
if num <0 then sgn$ = "-": num = 0-num
if num >= denom then
intPart = int(num / denom)
fracToMixed$=sgn$;str$( intPart)
num = num mod denom
if num<>0 then fracToMixed$=fracToMixed$;" ";num;"/";denom
end if
end function
function fracVal(frac$)
num=val(word$(frac$,1))
denom=val(word$(frac$,2))
fracVal = num/denom
end function
function toLowestTerms$(frac$)
toLowestTerms$ = frac$
num=val(word$(frac$,1))
denom=val(word$(frac$,2))
if num <0 then sgn$ = "-": num = 0-num
gcd = gcd(num, denom)
if gcd>1 then
num=num/gcd
denom=denom/gcd
toLowestTerms$ = sgn$;num;" ";denom
END IF
end function
function gcd(a,b)
while a<>0 and b<>0
if a>b then
a = a mod b
else
b = b mod a
end if
wend
gcd=a+b
end function
function lcm(m,n)
' least common multiple ( LCM ), for least common denominator
lcm = m*n/gcd(m,n)
end function
function fracAdd$(f1$, f2$)
num1=val(word$(f1$,1))
denom1=val(word$(f1$,2))
num2=val(word$(f2$,1))
denom2=val(word$(f2$,2))
denom = denom1*denom2
num = num1*denom2+num2*denom1
fracAdd$=toLowestTerms$(frac$(num, denom))
end function
function fracNegate$(frac$)
num=val(word$(frac$,1))
denom=val(word$(frac$,2))
fracNegate$ = frac$(0-num, denom)
end function
function fracSub$(f1$, f2$)
fracSub$ = fracAdd$(f1$, fracNegate$(f2$))
end function
function fracMul$(f1$, f2$)
num1=val(word$(f1$,1))
denom1=val(word$(f1$,2))
num2=val(word$(f2$,1))
denom2=val(word$(f2$,2))
denom = denom1*denom2
num = num1*num2
fracMul$=toLowestTerms$(frac$(num, denom))
end function
function fracRecipr$(frac$)
'fracToStr$ = word$(frac$,2);" "; word$(frac$,1)
num=val(word$(frac$,1))
denom=val(word$(frac$,2))
if num <0 then sgn$ = "-": num = 0-num
fracRecipr$ = sgn$;frac$(denom, num)
end function
function fracDiv$(f1$, f2$)
fracDiv$=fracMul$(f1$, fracRecipr$(f2$))
end function
|
« Last Edit: Mar 4th, 2017, 10:33pm by tsh73 » |
Logged
|
|
|
|
SarmedNafi
Junior Member
member is offline
Posts: 93
|
|
Re: more fractions
« Reply #1 on: Mar 6th, 2017, 2:32pm » |
|
Quote:Feel free to break it
|
|
Interested functions indeed. Thank you, Anatoly.
Regards, Sarmed
|
|
Logged
|
|
|
|
|