######################################################### # knihovnicka na praci s Greyovym kodem # Jan Prochazka, 2007 ######################################################### ## DEC vs. GREY def dec2grey(c): #prevede dekadicke cislo na Greyuv kod rad=2 ret=[] pom=2 while(pom>=1.5): pom=(c*1.0)/rad + 0.5 if(int(pom)%2 == 0): ret=[0]+ret else: ret=[1]+ret rad*=2 if(c==0): ret=[0] return ret def grey2dec(g): #prevede Greyuv kod na dekadicke cislo ret=0 pom=1 sgn=1 for i in range(len(g)): if(g[-1-i]==1): #od konce ret+=sgn*pom sgn=-sgn pom=((pom+1)*2)-1 #1,3,7,15,..,[(2**n)-1] return abs(ret) ######################################################### ## BIN vs. GREY def bin2grey(b): #prevede dvojkovy zapis cisla do Greyova kodu pole=[0]+b ret =[] for i in range(1,len(pole)): if(pole[i-1]==pole[i]): ret+=[0] else: ret+=[1] return ret def grey2bin(g): #prevede Greyuv kod do dvojkoveho zapisu cisla pole=g ret=[0] for i in range(len(pole)): if(pole[i]==ret[-1]): #ret[-1] ~ posl. mezivysledek ret+=[0] else: ret+=[1] return ret[1:] ######################################################### ## BIN vs. DEC def bin2dec(b): #prevede dvojkovy zapis cisla na dekadicky ret=0 pom=1 for i in xrange(len(b)): if(b[-1-i]==1): ret+=pom pom*=2 return ret def dec2bin(d): #prevede dekadicky zapis cisla na dvojkovy ret=[] while (d>0): ret=[d%2]+ret d=d/2 if (ret==[]): ret=[0] return ret ######################################################### ## debug: #def test(od,po): # err=False # for i in xrange(od,po): # if(i!=grey2dec(dec2grey(i))): # err=True # print "Nefunguje pro", i # return err # #a=0 #b=100000 #print "TEST pro interval [",a,";",b,"]:" #if (test(a,b)): # print "TEST dokoncen neuspesne!" #else: # print "TEST dokoncen uspesne!" # ##### ##### #for i in xrange(40000): # a=bin2grey(dec2bin(i)) # b=dec2grey(i) # if(a!=b): # print i, a==b # print " ", a, "mam:",b # #########################################################