polyhelp.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 

class POLY_WRITE

class POLY_WRITE is str_parts(out timeC,out timeV,out power1,out power2,out ms,out me:STR) is -- default format is "text". str_parts("text", out timeC,out timeV,out power1,out power2,out ms,out me); end; str_parts(format:STR, out timeC,out timeV,out power1,out power2,out ms,out me:STR) is -- $ c * x^{ m } * y^{ n } $. -- 1 2 ~~3 4 5 6. -- 1: ms, 6:me. ms,me: start/end of the polynomial. -- 2: timeC: separator between coefficient and var. -- 5:timeV: separator between vars. -- 3: power1, 4. power2. power1, power2: start/end of exponent. -- (type)m set ms and me case format when "text" then -- parts of textm. -- 2*x*y^{3} timeC:="*"; timeV:="*"; power1:="^{"; power2:="}"; ms:=""; me:=""; when "textm" then -- ease for apply -- [2*x*y^{3}] timeC:="*"; timeV:="*"; power1:="^{"; power2:="}"; ms:="["; me:="]"; when "tex","texd" then -- parts of texm. -- 2x\,y^{3} part of LaTeX text math timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}"; ms:=""; me:=""; when "texm" then -- $2x\,y^{3}$ LaTeX text math timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}"; ms:="$"; me:="$"; when "texdm" then -- \[2x\,y^{3}\] LaTeX display math timeC:=""; timeV:="\\,"; power1:="^{"; power2:="}"; ms:="\\["; me:="\\]"; when "prog","progm" then -- 2*x*y^(3) for program timeC:="*"; timeV:="*"; power1:="^("; power2:=")"; ms:=""; me:=""; when "prog2","prog2m" then -- 2*x*y**(3) for program timeC:="*"; timeV:="*"; power1:="**("; power2:=")"; ms:=""; me:=""; end; end; -- formSw:=Reduce; wrCoeff(coeff:INTI, inout notFirst:BOOL, out flgSt:BOOL):STR is -- call: -- coeff: coefficient -- notFiest: true if it is not the first term -- return -- notFirst: always true -- flgSt: true if the coefficient is printed. -- So needen *, if some variable is follow after this. res:STR:=""; f:BOOL; if coeff<0.inti then f:=true; res:=res+"-"; coeff:=-coeff; elsif notFirst then f:=false; res:=res+"+"; end; flgSt:=(coeff>1.inti); if flgSt then res:=res+coeff.decimal_str; end; notFirst:=true; return res; end; wrVar( varChar:STR, deg:INT, last:BOOL, inout flgSt:BOOL):STR is res:STR:=""; pw1::="^{"; pw2::="}"; if deg.is_zero then if (~flgSt)and last then res:=res+"1"; end; else if flgSt then res:=res+"*"; end; flgSt:=true; res:=res+varChar; if (deg.is_neg)or(1.int<deg) then res:=res+pw1+deg.str+pw2; end; end; return res; end; end; -- class POLY_WRITE

class POLY_COEFF

class POLY_COEFF is AllocCP(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is -- array of (x+1)^n pw::=POLYS_INTI::gen_func(|(1).inti,1.inti|); res:ARRAY{POLYS_INTI}:=#(maxDeg+1); res[0]:=POLYS_INTI::one; loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end; return res; end; AllocCN(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is -- array of (x-1)^n pw::=POLYS_INTI::gen_func(|(-1).inti,1.inti|); res:ARRAY{POLYS_INTI}:=#(maxDeg+1); res[0]:=POLYS_INTI::one; loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end; return res; end; AllocCQ(maxDeg:CARD):ARRAY{POLYS_INTI} pre (maxDeg>=0) is -- array of (x-2)^n pw::=POLYS_INTI::gen_func(|(-2).inti,1.inti|); res:ARRAY{POLYS_INTI}:=#(maxDeg+1); res[0]:=POLYS_INTI::one; loop i::=1.upto!(maxDeg); res[i]:=res[i-1]*pw; end; return res; end; end; -- class POLY_COEFF