INCLUDE "D2:SORT.ACT" ;from the Action! Tool Kit BYTE FUNC Contains(BYTE ARRAY a BYTE len,b) BYTE i IF len=0 THEN RETURN (0) FI FOR i=0 TO len-1 DO IF a(i)=b THEN RETURN (1) FI OD RETURN (0) BYTE FUNC Gcd(BYTE a,b) BYTE tmp IF a1 THEN ekg(len)=i EXIT FI i==+1 OD OD RETURN BYTE FUNC CalcConvergence(BYTE ARRAY a,b BYTE len) BYTE i FOR i=2 TO len-1 DO IF a(i)=b(i) AND AreSame(a,b,i)=1 THEN RETURN (i+1) FI OD RETURN (0) PROC PrintSeq(BYTE start BYTE ARRAY ekg BYTE len) BYTE i PrintF("EKG(%B)=",start) FOR i=0 TO len-1 DO IF i>0 THEN Put(32) FI PrintB(ekg(i)) OD PrintE("...") RETURN PROC Main() DEFINE PTR="CARD" DEFINE LIMIT="100" DEFINE SEQCOUNT="5" DEFINE PART="10" DEFINE EKG1="1" DEFINE EKG2="2" BYTE ARRAY buf(500),starts=[2 5 7 9 10] PTR ARRAY ekg(SEQCOUNT) BYTE i,conv Put(125) PutE() ;clear the screen FOR i=0 TO SEQCOUNT-1 DO ekg(i)=buf+LIMIT*i CalcEkg(starts(i),LIMIT,ekg(i)) PrintSeq(starts(i),ekg(i),PART) OD conv=CalcConvergence(ekg(EKG1),ekg(EKG2),LIMIT) PrintF("%EEKG(%B) and EKG(%B) ",starts(EKG1),starts(EKG2)) IF conv=0 THEN PrintF("do not converge within %B items",LIMIT) ELSE PrintF("converge at index %B",conv) FI RETURN