'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
|