fpoly.sa


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

class POLY3

class POLY3 is -- Copyright (C) 1986 1996 Kouji KODAMA -- 1998/1 LongInt version -- 1996/10 -- LINUX version -- 1989/8 -- Modula-2 version -- 1986/3 Q-poly., F-poly. Basic version. -- Compute F-polynomial & Q-polynomial
shared Alloc0:INT; shared Poly:ARRAY{ARRAY{INTI}}; -- [0..Alloc0][0..Alloc0*2] shared TCodeRes:ARRAY{RTCODE}; -- [0..Alloc0*2] shared TdRes:ARRAY{ARRAY{INT}}; -- [0..Alloc0*2] [0..4] shared TraceDeg:ARRAY{INT}; -- [0..4] ([1..2]) shared TraceRes:ARRAY{RES_MARK}; -- [0..Alloc0*2] shared ResFlg:ARRAY{BOOL}; -- [0..Alloc0] shared CN,CP,CQ:ARRAY{POLYS_INTI}; -- [0..Alloc0][0..Alloc0] shared TCodeTmp,TCodePtr,TCodePtr1:RTCODE; shared endTc:VERTEXP; shared i:INT; shared r0,r1,r2:INT; shared o1,o2,o3:INT; shared n,n1,n2:INT; shared enp,stp:INT; shared tmp,tmpMax,tmpMp:INT; shared c0p,c0n,compo0,compo:INT; shared resPtr,tPtr,tPtr1,tPtr2:INT; shared wr,wr0,wr1:INT; shared tPtr3:INT; shared wrC:INT; shared wPtr1,wPtr2:INT; shared count:INT; -- count resolution ------------------ init ------------------ closeRes is Poly:=#; TCodeRes:=#; TraceRes:=#; TdRes:=#; TraceDeg:=#; ResFlg:=#; CP:=#; CN:=#; CQ:=#; end; initRes(TCode:TCODE, tstep, cvRes, cvTime:FLT):BOOL is if TCode.has_band then return false; end; c0::=0; c0p:=0; c0n:=0; compo0:=0; b0::=0; TCode.numbers_count(inout c0,inout c0p,inout c0n,inout compo0,inout b0); Alloc0:=c0p+c0n+compo0; wr0:=c0p-c0n; POLYS_INTI::init; Poly:=#(Alloc0+1); loop i::=Poly.ind!; Poly[i]:=#(Alloc0*2+1); loop j::=Poly[i].ind!; Poly[i][j]:=0.inti; end; end; TCodeRes:=#(Alloc0*2+1); loop i::=TCodeRes.ind!; TCodeRes[i]:=#; end; TraceRes:=#(Alloc0*2+1); loop i::=TraceRes.ind!; TraceRes[i]:=#; end; TdRes:=#(Alloc0*2+1); loop i::=TdRes.ind!; TdRes[i]:=#(5); end; TraceDeg:=#(5); loop i::=TraceDeg.ind!; TraceDeg[i]:=0; end; ResFlg:=#(Alloc0*2+1); loop i::=ResFlg.ind!; ResFlg[i]:=false; end; endTc:=#; endTc.sep:=TCode[TCode.length].sep.clone; endTc.companion:=0; tmpMax:=TCode.length; compo:=compo0; wr:=wr0; TCodeTmp:=#(TCode); RTCODE_TRIM::SCode(inout TCodeTmp, tstep, cvRes, cvTime); tmpMax:=TCodeTmp.length; tmp:=0; tPtr:=0; tmp:=0; TCodeRes[0]:=TCodeTmp; TraceRes[tmp].p:=tPtr; TraceRes[tmp].m:=TCodeTmp.length; TraceRes[tmp].c:=compo; TraceRes[tmp].w:=wr0; TdRes[tmp]:=TraceDeg.copy; ResFlg[tmp]:=false; tmp:=tmp+1; TCodeRes[tmp]:=TCodeTmp.clone; TraceRes[tmp]:=TraceRes[tmp-1].clone; TdRes[tmp]:=TraceDeg.copy; ResFlg[tmp]:=true; resPtr:=tmp; TCodeTmp:=TCodeRes[tmp].clone; count:=0; return true; end; -- assert (tmpMax=TCodeTmp.length); --------- resolution------------- MakeRes201 is -- TCodeTmp, out TCodePtr, i,n1,tPtr1,tPtr2, -- local n n::=TCodeTmp[i].companion; TCodePtr.k[n1]:=#; if n<tPtr1 then TCodePtr[n1].companion:= n; elsif n<=tPtr2 then TCodePtr[n1].companion:= n+r2; elsif n<=enp then TCodePtr[n1].companion:= n-r1; else TCodePtr[n1].companion:=n; end; TCodePtr[n1].sep:=TCodeTmp[i].sep; end; MakeRes2 is -- TCodeTmp, i,n1,tPtr1,tPtr2, resPtr:=resPtr+1; TCodePtr:=#; TCodePtr.k:=#(TCodeTmp.size); r1:=tPtr2-tPtr1+1; r2:=enp-tPtr2; loop i:=tPtr1.upto!(tPtr2) ; n1:=i+r2; MakeRes201; end; loop i:=(tPtr2+1).upto!(enp) ; n1:=i-r1; MakeRes201; end; loop i:=(enp+1).upto!(tmpMax-1); n1:=i; MakeRes201; end; TCodePtr[tmpMax]:=endTc; TCodePtr[tPtr1+r2].sep:=VERTEXC::knot_s; TCodePtr[tPtr2+r2].sep:=VERTEXC::knot_e; end; MakeRes2T is TCodePtr.TrimC(tPtr,tPtr1+r2); TCodeRes[resPtr]:=TCodePtr; TraceRes[resPtr].p:=tPtr; TraceRes[resPtr].m:=TCodePtr.length; TraceRes[resPtr].c:=compo+1; --if tmpMp<=enp then tmpRes[resPtr]:=-1; --else tmpRes[resPtr]:=tmpMp+tmpMaxT-tmpMax; --end; end; MakeRes2R01 is n::=TCodeTmp[i].companion; TCodePtr.k[n1]:=#; if n<tPtr1 then TCodePtr[n1].companion:= n; elsif n<=tPtr2 then TCodePtr[n1].companion:= r0-n; else TCodePtr[n1].companion:=n-2; end; TCodePtr[n1].sep:=TCodeTmp[i].sep; end; MakeRes2R is resPtr:=resPtr+1; TCodePtr:=#; TCodePtr.k:=#(TCodeTmp.k.size-2); r0:=tPtr2+tPtr1-1; loop i:=(tPtr1+1).upto!(tPtr2-1) ; n1:=r0-i; MakeRes2R01; end; loop i:=(tPtr2+1).upto!(tmpMax-1) ; n1:=i-2; MakeRes2R01; end; TCodePtr[tmpMax-2]:=endTc; tPtr2:=tPtr2-2; -- Prepare for FWrithe end; MakeRes2RT is TCodePtr.TrimL(tPtr,tPtr2); TCodeRes[resPtr]:=TCodePtr; TraceRes[resPtr].p:=tPtr; TraceRes[resPtr].m:=TCodePtr.length; TraceRes[resPtr].c:=compo; --if enp>=tmpMp then tmpRes[resPtr]:=-1; --else tmpRes[resPtr]:=tmpMp-2; --end; end; MakeRes301 is n:=TCodeTmp[i].companion; TCodePtr.k[n1]:=#; if n<tPtr1 then TCodePtr[n1].companion:= n; elsif n<stp then TCodePtr[n1].companion:= n+o1; elsif n<tPtr2 then TCodePtr[n1].companion:= n+o2; elsif n<enp then TCodePtr[n1].companion:= n+o3; else TCodePtr[n1].companion:= n-4; end; TCodePtr[n1].sep:=TCodeTmp[i].sep; end; MakeRes3 is resPtr:=resPtr+1; TCodePtr:=#; TCodePtr.k:=#(TCodeTmp.k.size-4); r0:=stp-tPtr1-1; r1:=tPtr2-stp-1; r2:=enp-tPtr2-1; o1:=r1+r2-1; o2:=r2-r0-2; o3:=-r0-r1-3; loop i:=(tPtr1+1).upto!(stp-1) ; n1:=i+o1; MakeRes301; end; loop i:=(stp+1).upto!(tPtr2-1) ; n1:=i+o2; MakeRes301; end; loop i:=(tPtr2+1).upto!(enp-1) ; n1:=i+o3; MakeRes301; end; loop i:=(enp+1).upto!(tmpMax-1) ; n1:=i-4; MakeRes301; end; TCodePtr[tmpMax-4]:=endTc; TCodePtr1:=TCodePtr; end; shared trimPtr3T:INT; shared resPtr3T:INT; MakeRes3TPre is trimPtr3T:=tPtr2-1+o2; resPtr3T:=resPtr; end; MakeRes3TPost is TCodePtr1.TrimL(tPtr, trimPtr3T); TCodeRes[resPtr3T]:=TCodePtr1; TraceRes[resPtr3T].p:=tPtr; TraceRes[resPtr3T].m:=TCodePtr1.length; TraceRes[resPtr3T].c:=compo-1; -- if enp>=tmpMp then tmpRes[resPtr]:=-1; --else tmpRes[resPtr]:=tmpMp-4; --end; end; MakeRes3R01 is n::=TCodePtr1[i].companion; TCodePtr.k[n1]:=#; if n<tPtr1 then TCodePtr[n1].companion:= n; elsif n<=tPtr2 then TCodePtr[n1].companion:= r0-n; else TCodePtr[n1].companion:=n; end; TCodePtr[n1].sep:=TCodePtr1[i].sep; end; MakeRes3R is resPtr:=resPtr+1; TCodePtr:=#; TCodePtr.k:=#(TCodeTmp.k.size-4); tPtr2:=tPtr1+r1+r2-1; r0:=tPtr1+tPtr2; -- tPtr2: prepare for FWrithe loop i:=(tPtr1).upto!(tPtr2) ; n1:=r0-i; MakeRes3R01; end; loop i:=(tPtr2+1).upto!(tmpMax-5) ; n1:=i; MakeRes3R01; end; TCodePtr[tmpMax-4]:=endTc; end; MakeRes3RT is TCodePtr.TrimL(tPtr,tPtr2); TCodeRes[resPtr]:=TCodePtr; TraceRes[resPtr].p:=tPtr; TraceRes[resPtr].m:=TCodePtr.length; TraceRes[resPtr].c:=compo-1; -- if enp>=tmpMp then tmpRes[resPtr]:=-1; --else tmpRes[resPtr]:=tmpMp-4; --end; end; SetMp is if tmpMp>tPtr then flg:BOOL:=~VERTEXC::ks.in(TCodeTmp[tmpMp].sep); chf:ARRAY{BOOL}:=#(TCodeTmp.size); loop i:=tmpMp.upto!(tmpMax-1) ; chf[i]:=flg; end; tmpMp:=tmpMp-1; loop while!(tmpMp>= tPtr) ; -- TCodeTmp.printV; -- #OUT+"tPtr="+tPtr.str+" tmpMp="+tmpMp.str+"\n"; if TCodeTmp[tmpMp].companion<(tmpMp+2) then chf[tmpMp]:=true; tmpMp:=tmpMp-1; else tPtr1:=TCodeTmp[tmpMp].companion; if chf[tPtr1] then loop i:=tmpMp.upto!(tPtr1); chf[i]:=false; end; tmpMp:=tmpMp-1; elsif VERTEXC::over.in(TCodeTmp[tmpMp].sep) then tmpMp:=tmpMp-1; elsif VERTEXC::ks.in(TCodeTmp[tmpMp].sep) then loop i:=tmpMp.upto!(tPtr1); chf[i]:=false; end; tmpMp:=tmpMp-2; else tmpMp:=tmpMp+1; return; end; end; end; end; end; SetMpC is stp:=tmpMax; loop enp:=stp-1; stp:=TCodeTmp[enp].companion; until!(stp<=tPtr); end; tmpMp:=enp+1; if tmpMp=tmpMax then tmpMp:=tmpMax-4; end; SetMp; end; SetMpCn is stp:=tmpMax; loop enp:=stp-1; stp:=TCodeTmp[enp].companion; until!(stp<=tPtr); end; stp:=enp+1; tPtr:=stp; -- head of a compo. -- TCodeTmp.TrimDelPC(tPtr); -- TCodeTmp.TrimRotOV(inout tPtr); tmpMax:=TCodeTmp.length; tmpMp:=TCodeTmp[stp].companion+1; if tmpMp=tmpMax then tmpMp:=tmpMax-4; end; SetMp; assert (tmpMax=TCodeTmp.length); end; SetNotWell:BOOL is loop if (tPtr>=tmpMp) then return false; --if TCodeTmp[tmpMax-1].companion<=tPtr then return false; end; --SetMpCn; elsif ((tPtr+2) < TCodeTmp[tPtr].companion) and (VERTEXC::under.in(TCodeTmp[tPtr].sep)) then return true; elsif VERTEXC::ks.in(TCodeTmp[tPtr].sep) then TCodeTmp.TrimDelPC(tPtr); TCodeTmp.TrimRotOV(inout tPtr); -- TCodeTmp.TrimC(tPtr); tmpMax:=TCodeTmp.length; tmpMp:=tmpMax-4; SetMp; assert (tmpMax=TCodeTmp.length); end; tPtr:=tPtr+1; end; end; SetTCodeTmp is loop while!(ResFlg[resPtr]); resPtr:=resPtr-1; end; tmp:=resPtr; TraceDeg:=TdRes[tmp].copy; ResFlg[tmp]:=true; tPtr:=TraceRes[tmp].p; tmpMax:=TraceRes[tmp].m; compo:=TraceRes[tmp].c; wr:=TraceRes[tmp].w; TCodeTmp:=TCodeRes[tmp].clone(tPtr); --if compo=1 then -- DelPC; --end; assert (tmpMax=TCodeTmp.length); end; end; -- class POLY3

class FPOLY

class FPOLY is include POLY3; --------------------------F.poly------------------ -- f + f = x { f + f }. -- L+ L- L0 Ls -- -- f := a^(wr). -- (trivial knot) -- -- F := f * a^(-wr0). -- L L -- exg=VERTEXC{minus,plus}; -- exg2=VERTEXC{under,over,minus,plus}; -- un=VERTEXC{under,minus,crossing}; -- up=VERTEXC{under,plus,crossing}; -- on=VERTEXC{over,minus,crossing}; -- op=VERTEXC{over,plus,crossing}; FWrithe is -- Assume that tPtr1<tPtr2. loop i::=tPtr1.upto!(tPtr2); -- WITH TCodePtr[i]. ; j::=TCodePtr[i].companion; if j<tPtr1 then if VERTEXC::positive.in(TCodePtr[i].sep) then wr1:=wr1-2; else wr1:=wr1+2; end; TCodePtr[i].sep:=TCodePtr[i].sep.xor(VERTEXC::cross_exs); elsif j>tPtr2 then if VERTEXC::positive.in(TCodePtr[i].sep) then wr1:=wr1-2; else wr1:=wr1+2; end; TCodePtr[j].sep:=TCodePtr[j].sep.xor(VERTEXC::cross_exs); TCodePtr[i].sep:=TCodePtr[i].sep.xor(VERTEXC::cross_exs); end; end; TraceRes[resPtr].w:=wr1; end; MakeRes is tPtr1:=tPtr; tPtr2:=TCodeTmp[tPtr].companion; cod0::=TCodeTmp[tPtr].sep; if VERTEXC::positive.in(cod0) then wr1:=wr-1; TCodeTmp[tPtr2].sep:=VERTEXC::cross_nu; wr:=wr-2; else wr1:=wr+1; TCodeTmp[tPtr2].sep:=VERTEXC::cross_pu; wr:=wr+2; end; stp:=tmpMax; loop enp:=stp-1; stp:=TCodeTmp[enp].companion; until!(stp<=tPtr2); end; if stp<tPtr1 then MakeRes2; TraceRes[resPtr].w:=wr1; MakeRes2T; TdRes[resPtr]:=TraceDeg.copy; TdRes[resPtr][2]:=TdRes[resPtr][2]+1; ResFlg[resPtr]:=false; MakeRes2R; FWrithe; MakeRes2RT; TdRes[resPtr]:=TdRes[resPtr-1]; ResFlg[resPtr]:=false; else MakeRes3; TraceRes[resPtr].w:=wr1; MakeRes3TPre; TdRes[resPtr]:=TraceDeg.copy; TdRes[resPtr][2]:=TdRes[resPtr][2]+1; ResFlg[resPtr]:=false; MakeRes3R; FWrithe; MakeRes3RT; MakeRes3TPost; TdRes[resPtr]:=TdRes[resPtr-1]; ResFlg[resPtr]:=false; end; TraceDeg[1]:=TraceDeg[1]+1; tPtr:=tPtr+1; end; SetPoly is degX::=TraceDeg[2]+compo0-1; -- shifted compo0-1 wrC::=wr+Alloc0; -- shifted Alloc0 case compo when 1 then if TraceDeg[1].is_odd then Poly[degX][wrC]:=Poly[degX][wrC]-1.inti; else Poly[degX][wrC]:=Poly[degX][wrC]+1.inti; end; when 2 then if TraceDeg[1].is_odd then Poly[degX][wrC]:=Poly[degX][wrC]+1.inti; Poly[degX-1][wrC+1]:=Poly[degX-1][wrC+1]-1.inti; Poly[degX-1][wrC-1]:=Poly[degX-1][wrC-1]-1.inti; else Poly[degX][wrC]:=Poly[degX][wrC]-1.inti; Poly[degX-1][wrC+1]:=Poly[degX-1][wrC+1]+1.inti; Poly[degX-1][wrC-1]:=Poly[degX-1][wrC-1]+1.inti; end; when 3 then if TraceDeg[1].is_odd then Poly[degX][wrC]:=Poly[degX][wrC]-1.inti; degX:=degX-1; Poly[degX][wrC+1]:=Poly[degX][wrC+1]+2.inti; Poly[degX][wrC-1]:=Poly[degX][wrC-1]+2.inti; degX:=degX-1; Poly[degX][wrC+2]:=Poly[degX][wrC+2]-1.inti; Poly[degX][wrC]:=Poly[degX][wrC]-2.inti; Poly[degX][wrC-2]:=Poly[degX][wrC-2]-1.inti; else Poly[degX][wrC]:=Poly[degX][wrC]+1.inti; degX:=degX-1; Poly[degX][wrC+1]:=Poly[degX][wrC+1]-2.inti; Poly[degX][wrC-1]:=Poly[degX][wrC-1]-2.inti; degX:=degX-1; Poly[degX][wrC+2]:=Poly[degX][wrC+2]+1.inti; Poly[degX][wrC]:=Poly[degX][wrC]+2.inti; Poly[degX][wrC-2]:=Poly[degX][wrC-2]+1.inti; end; else degC::=compo-1; if TraceDeg[1].is_odd then loop i:=0.upto!(degC); degA::=wrC-i; cn::=CN[degC][i]; loop j::=0.upto!(i); Poly[degX][degA]:=Poly[degX][degA]-cn*CP[i][j]; degA:=degA+2; end; degX:=degX-1; end; else loop i:=0.upto!(degC); degA::=wrC-i; cn::=CN[degC][i]; loop j::=0.upto!(i); Poly[degX][degA]:=Poly[degX][degA]+cn*CP[i][j]; degA:=degA+2; end; degX:=degX-1; end; end; end; end; FPrint is count:INT; flg,flg2:BOOL; flg1,flgSt:BOOL; wofs:INT; wofs:=wr0; -- wofs= 0:f-poly, wr0:F-poly wofs:=wofs+Alloc0; LOGOUT::Title("F-polynomial:" , "f_{L+}+f_{L-} = x*(f_{L0}+f_{L\infty}), " "F_L = a^{-w(L)}*f_L"); flg:=false; cw::=0.inti; loop i::=Poly.ind!; degX::=i+1-compo0; count:=0; loop j::=Poly[i].ind!; if Poly[i][j]/=0.inti then count:=count+1; end; end; if count=1 then loop j::=Poly[i].ind!; if Poly[i][j]/=0.inti then POLY_WRITE::wrCoeff(Poly[i][j],inout flg,out flgSt); POLY_WRITE::wrVar("a",j-wofs,false,inout flgSt); POLY_WRITE::wrVar("x",degX,true,inout flgSt); end; end; #LOGOUT+"\n"; elsif count>1 then cw:=1.inti; POLY_WRITE::wrCoeff(cw,inout flg, out flgSt); POLY_WRITE::wrVar("x",degX,false,inout flgSt); if flgSt then #LOGOUT+"*"; end; #LOGOUT+"("; flg2:=false; loop j::=Poly[i].ind!; if Poly[i][j]/=0.inti then POLY_WRITE::wrCoeff(Poly[i][j],inout flg2,out flgSt); POLY_WRITE::wrVar("a",j-wofs,true,inout flgSt); end; end; #LOGOUT+")\n"; end; end; #LOGOUT+"\n"; LOGOUT::flush; end; Fpoly(TCode:TCODE) is count:=0; if ~ initRes(TCode,1.402, 0.17, POLY_TIME::rateCl*0.97) then closeRes; return; end; time:TIME_MEASURE:=#; CP:=POLY_COEFF::AllocCP(Alloc0); CN:=POLY_COEFF::AllocCN(Alloc0); loop while!(resPtr>0); count:=count+1; -- if tmpRes[tmp]<0 then tmpMp:=tmpMax-4; SetMp; --else tmpMp:=tmpRes[tmp]; --end; tmpMp:=tmpMax-4; SetMp; -- SetMpC; loop while!(SetNotWell); MakeRes; end; SetPoly; SetTCodeTmp; end; -- WriteWrap; WriteLn; POLY_TIME::SetR(count.flt,"FPoly"); -- WriteCount; FPrint; closeRes; end; -- note: --On a knot of 16 crossings: --Fpoly 12 sec -- xor /=12686: 742msec -- "xor" needed much time? end; -- class FPOLY

class QPOLY

class QPOLY is include POLY3; ----------------------Q.poly--------------------- MakeRes is tPtr1:=tPtr; tPtr2:=TCodeTmp[tPtr].companion; stp:=tmpMax; loop enp:=stp-1; stp:=TCodeTmp[enp].companion; until!(stp<=tPtr2); end; if stp<tPtr1 then MakeRes2; MakeRes2T; TdRes[resPtr]:=TraceDeg.copy; TdRes[resPtr][2]:=TdRes[resPtr][2]+1; ResFlg[resPtr]:=false; MakeRes2R; MakeRes2RT; TdRes[resPtr]:=TdRes[resPtr-1].copy; ResFlg[resPtr]:=false; else MakeRes3; MakeRes3TPre; -- MakeRes3T TdRes[resPtr]:=TraceDeg.copy; TdRes[resPtr][2]:=TdRes[resPtr][2]+1; ResFlg[resPtr]:=false; MakeRes3R; MakeRes3RT; MakeRes3TPost; TdRes[resPtr]:=TdRes[resPtr-1].copy; ResFlg[resPtr]:=false; end; TraceDeg[1]:=TraceDeg[1]+1; tPtr:=tPtr+1; end; SetPoly(inout PolyQ:ARRAY{INTI}) is degX::=TraceDeg[2]-compo+compo0; if compo=1 then if TraceDeg[1].is_odd then PolyQ[degX]:=PolyQ[degX]-1.inti; else PolyQ[degX]:=PolyQ[degX]+1.inti; end; else degC::=compo-1; if (TraceDeg[1]+degC).is_odd then loop i::=0.upto!(degC); j::=degX.up!; PolyQ[j]:=PolyQ[j]-CQ[degC][i]; end; else loop i::=0.upto!(degC); j::=degX.up!; PolyQ[j]:=PolyQ[j]+CQ[degC][i]; end; end; end; end; QPrint(PolyQ:ARRAY{INTI}) is x:INT; flg,flgSt:BOOL; LOGOUT::Title("Q-polynomial:", "Q_{L+} + Q_{L-} = x*(Q_{L0} + Q_{L\infty})"); flg:=false; loop x1::=PolyQ.ind!; -- upto!(Alloc0) x:=x1-compo0+1; if PolyQ[x1]/=0.inti then POLY_WRITE::wrCoeff(PolyQ[x1],inout flg,out flgSt); POLY_WRITE::wrVar("x",x,true,inout flgSt); end; end; #LOGOUT+"\n"; LOGOUT::flush; end; Qpoly(TCode:TCODE) is count:=0; -- 1.400..1.402 if ~initRes(TCode,1.402, 0.17 ,POLY_TIME::rateCl*1.08) then closeRes; return; end; time:TIME_MEASURE:=#; PolyQ:ARRAY{INTI}:=#(Alloc0); loop i::=PolyQ.ind!; PolyQ[i]:=0.inti; end; CQ:=POLY_COEFF::AllocCQ(Alloc0); loop while!(resPtr>0); count:=count+1; tmpMp:=tmpMax-4; SetMp; loop while!(SetNotWell) ; MakeRes; end; SetPoly(inout PolyQ); SetTCodeTmp; end; -- WriteWrap; WriteLn; POLY_TIME::SetR(count.flt,"QPoly"); QPrint(PolyQ); closeRes; end; end; -- class QPOLY