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. timeC: separator between coefficient and var. -- 5:timeV. 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. timeC:="*"; timeV:="*"; power1:="^{"; power2:="}"; ms:=""; me:=""; when "textm" then -- ease for apply timeC:="*"; timeV:="*"; power1:="^{"; power2:="}"; ms:="["; me:="]"; when "tex","texd" then -- parts of texm. timeC:=" "; timeV:=" \\, "; power1:="^{"; power2:="}"; ms:=""; me:=""; when "texm" then timeC:=" "; timeV:=" \\, "; power1:="^{"; power2:="}"; ms:="$"; me:="$"; when "texdm" then timeC:=" "; timeV:=" \\, "; power1:="^{"; power2:="}"; ms:="\\["; me:="\\]"; when "prog","progm" then timeC:="*"; timeV:="*"; power1:="^("; power2:=")"; ms:=""; me:=""; when "prog2","prog2m" then timeC:="*"; timeV:="*"; power1:="**("; power2:=")"; ms:=""; me:=""; end; end; -- formSw:=Reduce; wrCoeff(coeff:INTI, inout notFirst:BOOL, out flgSt:BOOL) 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. f:BOOL; if coeff<0.inti then f:=true; #LOGOUT+"-"; coeff:=-coeff; elsif notFirst then f:=false; #LOGOUT+"+"; end; flgSt:=(coeff>1.inti); if flgSt then #LOGOUT+coeff.str; end; notFirst:=true; end; wrVar( varChar:STR, deg:INT, last:BOOL, inout flgSt:BOOL) is pw1::="^{"; pw2::="}"; if deg=0 then if (~flgSt)and last then #LOGOUT+"1"; end; else if flgSt then #LOGOUT+"*"; end; flgSt:=true; #LOGOUT+varChar; if (deg<0)or(1<deg) then #LOGOUT+pw1+deg.str+pw2; end; end; end; end; -- class POLY_WRITE

class POLY_COEFF

class POLY_COEFF is AllocCP(maxDeg:INT):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:INT):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:INT):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