| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #DICTIONARY
- -- This test shows use of traditional tree and of atomic table utility
- -- It creates dictionary of all words in given file
- -- and removes all words which appear more than once.
- -- Information comes through parameters of task or interactively;
- $B:=#PARM(T);
- OPEN S ' ';
- $MEMORY:=$B[1];
- IF NOT $MEMORY ->
- LOOP
- $MEMORY:=
- #CALL_PAS(1 'Enter size of the table {elements, <=total / 5} ');
- -- 21=VAL 1=WRITE/READ
- IF $MEMORY>0 -> BREAK FI;
- END;
- FI;
- $TAB:=#CALL_PAS(61 $MEMORY); -- create
- $TAB2:=#CALL_PAS(61 $MEMORY); -- create
- IF ($TAB<=0)OR($TAB2<=0)
- -> #CALL_PAS( 1 'STOP ! ERROR IN CREATION ');FI;
- $FILE:=$B[2];
- IF NOT $FILE ->
- $FILE:=#CALL_PAS(1 'Enter file name ');
- FI;
- $LIST:=#CALL_PAS(3 $FILE); -- Pascal scanner
- S<<' Tree creation ';
- FORALL $E IN $LIST DO
- IF #IDENT($E) ->
- IF $DICT.$E -> $DICT.$E+:=1
- ELSIF T -> $DICT++:=<.$E:1.>
- FI;
- FI;
- OD;
- S<<' Tree copy ';
- $DICT1:=COPY($DICT);
- S<<' Tree update ';
- FORALL $E IN $DICT DO
- IF $DICT.$E>1 -> $DICT1.$E:=NULL FI;OD;
- S<<' Table creation ';
- FORALL $E IN $LIST DO
- IF #IDENT($E) ->
- $V:=#CALL_PAS(63 $TAB $E); -- get n
- IF $V->#CALL_PAS(62 $TAB $E $V+1) -- put n+1
- ELSIF T-> #CALL_PAS(62 $TAB $E 1) -- put 1
- FI;
- FI;
- OD;
- S<<' Table copy ';
- $TABCOPY:=#CALL_PAS(65 $TAB); -- unpack
- #CALL_PAS(66 $TAB2 $TABCOPY); -- pack
- S<<' Table update ';
- $I:=1;
- $ENDLOOP:=#CALL_PAS(64 $TAB); -- card
- LOOP
- $SEL:=#CALL_PAS(67 $TAB $I); -- num to sel
- $VAL:=#CALL_PAS(63 $TAB $SEL); -- get
- IF $VAL>1 -> #CALL_PAS(62 $TAB2 $SEL NULL); -- put null
- FI;
- IF $I=$ENDLOOP -> BREAK; FI;
- $I+:=1;
- END;
- S<<' End of work ; test for correctness:';
- IF $DICT=#CALL_PAS(65 $TAB) -> -- card
- S<< SOURCES ARE EQUAL
- ELSIF T->
- S<< SOURCES ARE DIFFERENT;
- FI;
- IF $DICT1=#CALL_PAS(65 $TAB2) -> -- card
- S<< RESULTS ARE EQUAL
- ELSIF T->
- S<< RESULTS ARE DIFFERENT;
- FI;
- S<< 'TOTAL WORDS=' #CALL_PAS(64 $TAB)
- ' ONCE OCCURED=' #CALL_PAS(64 $TAB2) ;
- ##
|