"*** determinazione dell'espressione binaria di un numero naturale in forma ~ decimale ***" "******* funzioni utili *******" LUNG(v):=DIMENSION(v) ULT(v):=v SUB LUNG(v) TRONC(v):=v SUB [1,...,LUNG(v)-1] AGG(v,x):=APPEND(v,[x]) SOSTULT(v,x):=AGG(TRONC(v),x) "******* algoritmo ricorsivo *******" SUCBIN(v):=IF(v=[1],[1,0],IF(ULT(v)=0,SOSTULT(v,1),AGG(SUCBIN(TRONC(v)),0))) BIN(n):=ITERATE(SUCBIN(v),v,[0],n) "******* algoritmo iterativo *******" SUCBINAUS(v,c):=IF(ULT(v)=0,[SOSTULT(v,1),c],SUCBINAUS(TRONC(v),c+1)) PREFISSA(v):=APPEND([0],v) DEPREFISSA(v):=IF(v SUB 1=0,v SUB [2,...,LUNG(v)],v) COPIE(x,n):=ITERATE(AGG(v,x),v,[],n) SUCBIN1(v):=SUCBINAUS(PREFISSA(v),0) SUCBIN2(v):=APPEND((SUCBIN1(v)) SUB 1,COPIE(0,(SUCBIN1(v)) SUB 2)) SUCBINALT(v):=DEPREFISSA(SUCBIN2(v)) STORIA(v):=[[1,PREFISSA(v)],[2,SUCBIN1(v)],[3,SUCBIN2(v)],[4,SUCBINALT(v)]] STORIA([1,1,1,1]) ;Semplificazione(#20) [[1,[0,1,1,1,1]],[2,[[1],4]],[3,[1,0,0,0,0]],[4,[1,0,0,0,0]]] BINALT(n):=ITERATE(SUCBINALT(v),v,[0],n) "******* algoritmo iterativo dei quozienti e dei resti *******" QUOZIENTE(m,n):=FLOOR(m/n) RESTO(m,n):=m-QUOZIENTE(m,n)*n QUOZIENTI_BIN(n):=TRONC(TRONC(ITERATES(QUOZIENTE(x,2),x,n))) RESTI_BIN(n):=VECTOR(RESTO(x,2),x,QUOZIENTI_BIN(n)) ESPRESSIONE_BINARIA(n):=REVERSE_VECTOR(RESTI_BIN(n)) "******* conversione da lista binaria a numero decimale *******~ " DA_BIN_A_DEC(v):=SUM(v SUB n*2^(LUNG(v)-n),n,1,LUNG(v)) "************ verifiche di efficienza degli algoritmi precedenti ~ ************" BIN(700) ;Semplificazione(#32) [1,0,1,0,1,1,1,1,0,0] BINALT(700) ;Semplificazione(#34) [1,0,1,0,1,1,1,1,0,0] ESPRESSIONE_BINARIA(700) ;Semplificazione(#36) [1,0,1,0,1,1,1,1,0,0]