1 REM *** BBC VERSION *** 10 REM ROMAN NUMBERS @1983 MICHAEL BEWS 20 REM CONVERTED TO BBC MICRO BY C.R.TANNE R 25 GOTO40 30 ON ERROR IF ERR<>17 THEN GOTO 790 ELSE MODE 7:PRINT TAB(14,12);CHR$(141);CHR$(129);" GOOD BYE"'TAB(14);CHR$(141);CHR$(131);"GOOD B YE":END 40 DIM K(8),A$(8),C(30):MODE 6 50 GOTO 680 70 L=5:CLS:PRINT " ROMAN NUMBERS @1983 MICHAEL BEWS" 80 PRINT TAB(0,2);"ENTER A COMPLETE ROMAN NUMBER eg MCLXIV" 90 PRINT TAB(0,21);"PRESS <RETURN> TO RE TURN TO MENU" 100 PRINT TAB(8,22);" ";TAB(0,22);:INPUT "ROMAN NUMBER " ;T$ 110 PRINT TAB(0,20);" " 120 IF T$="" THEN GOTO 790 130 PRINT TAB(0,L);" ";TAB(0,L);"ROMAN NUMBER: "; T$; 140 FOR B=1 TO 3:SOUND 1,-15,120,1:SOUND 1, -15,180,1:NEXT B 150 FOR X=1 TO LEN(T$) 160 IF MID$(T$,X,1)="M" THEN C(X)=1000 170 IF MID$(T$,X,1)="D" THEN C(X)=C(X)+50 0 180 IF MID$(T$,X,1)="C" THEN C(X)=C(X)+10 0 190 IF MID$(T$,X,1)="L" THEN C(X)=C(X)+50 200 IF MID$(T$,X,1)="X" THEN C(X)=C(X)+10 210 IF MID$(T$,X,1)="V" THEN C(X)=C(X)+5 220 IF MID$(T$,X,1)="I" OR MID$(T$,X,1)=" 1" THEN C(X)=C(X)+1 230 IF C(X)<1 THEN PRINT TAB(4,20);MID$(T$, X,1);" IS NOT A ROMAN NUMBER !!":X=LEN(T$):NE XT:GOTO 90 240 NEXT X 250 T=0 260 FOR X=1 TO LEN(T$) 270 IF C(X+1)>C(X) THEN C(X)=-C(X) 280 T=T+C(X):C(X)=0 290 NEXT X 300 X=0:IF LEN(T$)>16 THEN X=1 310 PRINT TAB(30,L+X);"= ";T 320 FOR B=1 TO 3:SOUND 1,-15,40,1:SOUND 1,- 15,160,1:NEXT B 330 L=L+2:IF L>18 THEN PRINT TAB(0,21);STRI NG$(79," ");TAB(0,21);:INPUT "PRESS <RETURN> TO RETURN TO MENU";X$:GOTO 790 340 GOTO 90 350 CLS:PRINT " VARIABSE CALCULATOR @19 83 M.BEWS" 360 PRINT TAB(0,8);"CHOOSE ANY BASE BETWEEN 2 AND 24(Decimalequivalent). WE SHALL USE LE TTERS 'A to N' FOR SYMBOLS REQUIRED AFTER 9 U P TO ONE LESS THAN THE CHOSEN BASE VALUE" 370 PRINT TAB(25,17);" ";TAB (0,17);:INPUT "ENTER CHOSEN BASE(2 to 24)";X$ 380 IF LEN(X$)<1 OR LEN(X$)>2 OR VAL(X$)<2 OR VAL(X$)>24 THEN GOTO 370 390 B=VAL(X$) 400 CLS:PRINT " VARIBASE CALCULATOR @19 83 M.BEWS" 410 PRINT TAB(1,3);"Base: ";TAB(6,3);B;TAB (28,2);"Decimal";TAB(28,3);"Equivalent." 420 X$="":IF B<10 THEN X$=" " 430 PRINT TAB(0,5);X$;B;CHR$(230);X$;B;CHR$ (229);X$;B;CHR$(228);X$;B;CHR$(227);X$;B;CHR$ (226);X$;B;CHR$(225);X$;B;CHR$(224);X$;B;CHR$ (231) 440 KO=99999:IF B=3 THEN KO=6560 450 IF B=2 THEN KO=255 460 FOR X=1 TO 8:N=K(X):PRINT TAB(28,6+X);" =";N;TAB(30,6+X);TAB(0,5+X);:GOSUB 500 470 FOR Y=8 TO 1 STEP -1:PRINT TAB(25-Y*3 );A$(Y);:NEXT Y 480 NEXT X 490 GOTO 560 500 FOR Z=1 TO 8:A$(Z)="":NEXT Z 510 NA=N:FOR Z=1 TO 8 520 I=INT(NA/B):IF NA-B*I>9 THEN A$(Z)=CH R$(55+(NA-B*I)) ELSE A$(Z)=CHR$(48+(NA-B*I)) 530 IF I>=B THEN NA=I:NEXT Z ELSE A%=Z:Z= 8:NEXT:Z=A% 540 IF I>9 THEN A$(Z+1)=CHR$(55+I) ELSE A$( Z+1)=CHR$(48+I) 550 RETURN 560 PRINT TAB(0,19);"INPUT A DECIMAL NUMBER FOR CONVERSION TOBASE";TAB(5,20);B; 570 PRINT " OR PRESS <RETURN> TO RETURN TO MENU "; 580 PRINT "(BETWEEN 1 AND ";KO;") ";TAB(27,21);:INPUT X$ 590 IF X$="" THEN GOTO 790 600 FOR X=1 TO LEN(X$):IF MID$(X$,X,1)<"0" OR MID$(X$,X,1)>"9" THEN X=LEN(X$):NEXT:GOTO 560 610 NEXT X:N=INT(VAL(X$)):IF N<1 OR N>KO TH EN GOTO 560 620 GOSUB 500 630 PRINT TAB(0,16);" ";TAB(0,15); 640 FOR Y=8 TO 1 STEP -1:PRINT TAB(25-Y*3); A$(Y);:NEXT Y 650 PRINT TAB(28);"=";N 660 GOTO 560 670 STOP 680 VDU 23,224,32,96,32,32,0,0,0,0 690 VDU 23,225,240,16,32,64,240,0,0,0 700 VDU 23,226,240,16,112,16,240,0,0,0 710 VDU 23,227,128,128,160,240,32,0,0,0 720 VDU 23,228,240,128,240,16,240,0,0,0 730 VDU 23,229,192,128,240,144,240,0,0,0 740 VDU 23,230,240,16,32,64,128,0,0,0 750 VDU 23,231,96,144,144,144,96,0,0,0 760 VDU 23,232,240,144,96,144,240,0,0,0 770 DATA 1,5,8,10,16,20,32,255 780 FOR X=1 TO 8:READ K(X):NEXT X 790 MODE7:VDU 23;8202;0;0;0;:PRINT CHR$(141 );CHR$(129);"-NUMBER SYSTEMS @1983 MICHAEL B EWS-"'CHR$(141);CHR$(131);"-NUMBER SYSTEMS @1 983 MICHAEL BEWS-"' 800 PRINT " THIS PROGRAM EXAMINES A FEW OF THE MANYCOUNTING SYSTEMS AND ENABLES YOU TO INVENT SOME OF YOUR OWN!" 810 PRINT TAB(12,8);CHR$(141);CHR$(129);"-- M E N U--"'TAB(12);CHR$(141);CHR$(131);"--M E N U--" 820 PRINT TAB(6,11);"1.........ROMAN NUMBER S"''TAB(6);"2.........DECIMAL SYSTEM"''TAB(6) ;"3.........BINARY SYSTEM"''TAB(6);"4........ .HEXADECIMAL"''TAB(6);"5.........INVENT YOUR OWN!" 830 PRINT TAB(11,24);CHR$(136);"SELECT KEY NUMBER"; 840 A=INKEY(1000):IF A=-1 THEN GOTO 840 850 SOUND 1,-15,150,1 860 IF A<49 OR A>53 THEN GOTO 840 ELSE MODE 6:VDU 23;8202;0;0;0; 870 A=A-48:ON A GOTO 880,950,1110,1180,350 880 CLS:PRINT " ROMAN NUMBERS @1983 MIC HAEL BEWS" 890 PRINT TAB(10,3);"IN THE ROMAN SYSTEM"'' 900 PRINT "M=1000 D=500 C=100 L=50 X=10 V=5 I=1"'' 910 PRINT " A LOWER VALUE LETTER COMING IMM EDIATELYIN FRONT OF A HIGHER VALUE LETTER IS SUBTRACTED FROM THE TOTAL INSTEAD OF BE ING ADDED SO THAT LX=60 AND XL=40" 920 PRINT TAB(7,24);"PRESS ANY KEY TO CONTI NUE"; 930 IF INKEY$(1000)="" THEN GOTO 930 940 RF=1:GOTO 70 950 CLS:PRINT "DECIMAL SYSTEM (Base 10)" 960 PRINT '"ORIGIN: Ten fingers and thumb s make it convenient to count in groups of ten!" 970 PRINT '"METHOD: All counting systems need enough symblos to represen t the count from zero up to one less than the base number."; 980 PRINT " This means that symbols 0 1 2 3 4 5 6 7 8 9 ar e needed for DECIMAL. There is no separate symbol for the"; 990 PRINT " BASE (Ten in the case of Decimal), the BASE being rep resented by 1 0 to 1 comple te group of ten items, plus 0 remai nder." 1000 PRINT TAB(6,24);"PRESS ANY KEY TO CONTI NUE"; 1010 IF INKEY$(1000)="" THEN GOTO 1010 1020 CLS:PRINT "DECIMAL SYSTEM (Base 10)" 1030 PRINT '" '1 0 0' therefore means the g roups of ten and '1000' is ten times ten gr oupsof ten or 10 x 10 x 10 which is the samea s 10";CHR$(226);" (10 to the power of 3)." 1040 PRINT '" 10";CHR$(230);" ";"10";CHR$ (229);" ";"10";CHR$(228);" ";"10";CHR$(227);" ";"10";CHR$(226);" ";"10";CHR$(225);" ";"10" ;CHR$(224);" ";"10";CHR$(231) 1050 PRINT " 1 0 0 0" 1060 PRINT '" NOTE: ANY NUMBER RAISED TO THE POWER OF 1 (eg 10";CHR$(2 24);") IS ITSELF AND ANY NUMB ER RAISED TO POWER 0 (eg 10";CHR$( 231);") IS ALWAYS 1."' 1070 PRINT " Using this convention, relat ing ascending powers of the BASE value, y ou can create a counting system to any BASEyo u wish!" 1080 PRINT TAB(6,24);"PRESS ANY KEY TO CONTI NUE"; 1090 IF INKEY$(1000)="" THEN GOTO 1090 ELSE B=10:GOTO 400 1100 GOTO 790 1110 CLS:PRINT "BINARY SYSTEM (Base 2)" 1120 PRINT '"MECHANICAL AND ELECTRICAL SWTIC HES ARE SIMPLEST AND MOST RELIABLE WHEN THEY HAVE ONLY TWO POSSIBLE STATES, 'ON' AND ' OFF'."; 1130 PRINT " FROM OUR NOTES ON THE DECIMAL SYSTEM WE CAN SEE THAT BINARY NEEDS ONLYTWO SYMBLES '0' AND '1' TO COUNT UP TO ANY EQUI VALENT"; 1140 PRINT "DECIMAL VALUE. USING THE 'OFF' STATE OF A SWITCH OR CIRCUIT TO REPRESENT 0 AND THE 'ON' STATE TO REPRESENT 1, IT IS POSSIBLE TO REPRESENTANY DECIMAL NUMBER "; 1150 PRINT "USING A CHAIN OF VERYSIMPLE TWO- STATE DEVICES." 1160 PRINT TAB(6,24);"PRESS ANY KEY TO CONTI NUE"; 1170 IF INKEY$(1000)="" THEN GOTO 1090 ELSE B=2:GOTO 400 1180 CLS:PRINT "HEXADECIMAL (Base 16)" 1190 PRINT TAB(0,5);" Computers work best in binary." 1200 PRINT "Unfottunately humans do not! 18 7 decimalis 10111010 in binary. "; 1210 PRINT " This computer uses 8-bit byte s. Each byte can hold numbers from 0 to 255 (ie 11111111 binary). 16 (DEC) is 2"; CHR$(227);". "; 1220 PRINT "So hexadecimalis a good compromi se between computers and human and numbers f rom 0 to 255 (DEC) are all just two hex d igits." 1230 PRINT TAB(6,24);"PRESS ANY KEY TO CONTI NUE"; 1240 IF INKEY$(1000)="" THEN GOTO 1240 ELSE B=16:GOTO 400