%CONTROL K'001001' %EXTERNALROUTINE AVAR(%INTEGERARRAYNAME NUM,%C %INTEGER N,START,OP,VAL,GAP) !W.S.C. 1ST MARCH 1977 !LAST UPDATED 15/03/77 11:40 ! TO COMPUTE THE AVERAGE OF THE NUMBERS IN THE ARRAY !NUM AND THEIR STANDARD DEVIATION. THE COEFFICIENT OF VARIATION !IS ALSO COMPUTED. ! THERE ARE N NUMBERS IN NUM,STARTING FROM START.VAL !IS THE AVERAGE VALUE OF THE FIRST HISTOGRAM BIN(OP=4 ONLY) !AND GAP IS THE DIFFERENCE BETWEEN ADJACENT BINS. ! OP=0 INTEGER AVERAGE ONLY ! OP=1 INTEGER AVERAGE AND S.D. ONLY ! OP=2 DECIMAL AVERAGE ONLY ! OP=3 DECIMAL AVERAGE AND S.D. ONLY ! OP=4 INTEGER AVERAGE & S.D. OF FREQUENCY GROUPED DATA. %EXTERNALROUTINESPEC ARITH(%INTEGERNAME N1,N2,%C %INTEGER BY1,BY2,OP) %EXTERNALROUTINESPEC PRINTD(%INTEGER N1,N2,SP,DEC) %EXTERNALROUTINESPEC SQRT(%INTEGERNAME N1,N2) %INTEGER I,S1,S2,SQ1,SQ2,SQT1,SQT2,V,CVAL,VAR1,VAR2,TN %CONSTINTEGER ADD=0 %CONSTINTEGER SUB=1 %CONSTINTEGER MPY=2 %CONSTINTEGER DIV=3 S1=0;S2=0 SQT1=0;SQT2=0 CVAL=VAL;TN=0 %CYCLE I=START,1,N+START-1 SQ1=0 SQ2=NUM(I) %IF OP=4 %START ARITH(SQ1,SQ2,0,CVAL,MPY); !FREQUENCY*VALUE ARITH(S1,S2,SQ1,SQ2,ADD); !SUM SQ1=0 SQ2=CVAL ARITH(SQ1,SQ2,0,CVAL,MPY); !SQUARE VALUE ARITH(SQ1,SQ2,0,NUM(I),MPY); !TIMES FREQUENCY ARITH(SQT1,SQT2,SQ1,SQ2,ADD) TN=TN+NUM(I) CVAL=CVAL+GAP %FINISH %ELSE %START ARITH(S1,S2,0,NUM(I),ADD); !ADD THE NUMBERS %IF OP=1 %OR OP>2 %START ARITH(SQ1,SQ2,0,NUM(I),MPY); !SQUARE THE NUMBER ARITH(SQT1,SQT2,SQ1,SQ2,ADD); !SUM THE SQUARES %FINISH TN=TN+1 %FINISH %REPEAT %IF OP=4 %START PRINTSTRING('NUMBER IN SAMPLE=') WRITE(TN,1) NEWLINE %FINISH %IF OP=2 %OR OP=3 %THEN ARITH(S1,S2,0,100,MPY); !MAKE SUM DECIMAL ARITH(S1,S2,0,TN,DIV); !GET AVERAGE PRINTSTRING('AVERAGE =') %IF OP<2 %OR OP=4 %THEN V=0 %ELSE V=1 PRINTD(S1,S2,8,V) NEWLINE %RETURN %IF OP=0 %OR OP=2 ! COMPUTE STANDARD DEVIATION I=S2+(S1*1000) ARITH(S1,S2,0,I,MPY); !SQUARE THE RESULT %IF OP=3 %START ARITH(S1,S2,0,100,DIV); !REDUCE TO 2 DEC. PLACES ARITH(SQT1,SQT2,0,100,MPY); !MAKE SUM OF SQUARES DECIMAL %FINISH ARITH(SQT1,SQT2,0,TN,DIV); !GET AVERAGE OF SQUARES ARITH(SQT1,SQT2,S1,S2,SUB); !GET VARIANCE VAR1=SQT1 VAR2=SQT2 SQRT(SQT1,SQT2) %IF OP=3 %THEN ARITH(SQT1,SQT2,0,10,MPY); !FACTOR OF 10 OUT PRINTSTRING('STANDARD DEVIATION=') %IF OP=1 %OR OP=4 %THEN V=0 %ELSE V=1 PRINTD(SQT1,SQT2,8,V) NEWLINE ! COMPUTE COEFFICIENT OF VARIATION ARITH(VAR1,VAR2,0,100,MPY); !DECIMAL I=S2+(S1*1000) ARITH(VAR1,VAR2,0,I,DIV); !S.D. DIVIDED BY MEAN PRINTSTRING('SQUARED COEFFICIENT OF VARIATION=') PRINTD(VAR1,VAR2,8,1) NEWLINE %END %ENDOFFILE