Numbers


If you're a Roman who doesn't understand numbers to base 3, then this is the program for you. Convert between binary, hexadecimal, decimal and Roman numerals, plus any other number systems (to different bases) you care to invent. 7 fingered aliens catered for!

    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