INCLUDE "H6:REALMATH.ACT" DEFINE SIZE="10000" DEFINE HIST_SIZE="10" BYTE ARRAY data(SIZE) CARD ARRAY hist(HIST_SIZE) PROC Generate() INT i FOR i=0 TO SIZE-1 DO data(i)=Rand(0) OD RETURN PROC CalcMean(INT count REAL POINTER mean) REAL tmp1,tmp2,r255 INT i IntToReal(0,mean) IntToReal(255,r255) FOR i=0 TO count-1 DO IntToReal(data(i),tmp1) RealDiv(tmp1,r255,tmp2) RealAdd(mean,tmp2,tmp1) RealAssign(tmp1,mean) OD IntToReal(count,tmp1) RealDiv(mean,tmp1,tmp2) RealAssign(tmp2,mean) RETURN PROC CalcStdDev(INT count REAL POINTER mean,sdev) REAL tmp1,tmp2,r255 INT i IntToReal(0,sdev) IntToReal(255,r255) FOR i=0 TO count-1 DO IntToReal(data(i),tmp1) RealDiv(tmp1,r255,tmp2) RealSub(tmp2,mean,tmp1) RealMult(tmp1,tmp1,tmp2) RealAdd(sdev,tmp2,tmp1) RealAssign(tmp1,sdev) OD IntToReal(count,tmp1) RealDiv(sdev,tmp1,tmp2) Sqrt(tmp2,sdev) RETURN PROC ClearHistogram() BYTE i FOR i=0 TO HIST_SIZE-1 DO hist(i)=0 OD RETURN PROC CalcHistogram(INT count) INT i,index ClearHistogram() FOR i=0 TO count-1 DO index=data(i)*10/256 hist(index)==+1 OD RETURN PROC PrintHistogram() BYTE i,j,n INT max REAL tmp1,tmp2,rmax,rlen max=0 FOR i=0 TO HIST_SIZE-1 DO IF hist(i)>max THEN max=hist(i) FI OD IntToReal(max,rmax) IntToReal(25,rlen) FOR i=0 TO HIST_SIZE-1 DO PrintF("0.%Bx: ",i) IntToReal(hist(i),tmp1) RealMult(tmp1,rlen,tmp2) RealDiv(tmp2,rmax,tmp1) n=RealToInt(tmp1) FOR j=0 TO n DO Put('*) OD PrintF(" %U",hist(i)) IF i