1 ' DECRNUM.BAS 2 ' ... gwbasic & qbasic 3 ' hh ... 7/85 4 ' 10 GOTO 1000 599 ' 600 REM DEC. R.N. CONVERSION SUB-ROUTINE 605 X$ = "" 610 IF A > 999 THEN GOTO 640 620 IF A > 899 THEN X$ = X$ + "CM": A = A - 900 630 IF A < 900 GOTO 660 640 X$ = X$ + "M": A = A - 1000 650 IF A > 899 THEN GOTO 610 660 IF A > 499 THEN X$ = X$ + "D": A = A - 500 670 IF A > 399 THEN X$ = X$ + "CD": A = A - 400 680 IF A < 100 THEN GOTO 710 690 X$ = X$ + "C": A = A - 100 700 GOTO 680 710 IF A > 89 THEN X$ = X$ + "XC": A = A - 90 720 IF A > 49 THEN X$ = X$ + "L": A = A - 50 730 IF A > 39 THEN X$ = X$ + "XL": A = A - 40 740 IF A < 10 THEN GOTO 770 750 X$ = X$ + "X": A = A - 10 760 GOTO 740 770 IF A = 9 THEN X$ = X$ + "IX": GOTO 830 780 IF A > 4 THEN X$ = X$ + "V": A = A - 5: GOTO 800 790 IF A = 4 THEN X$ = X$ + "IV": GOTO 830 800 IF A = 0 THEN 830 810 X$ = X$ + "I": A = A - 1 820 GOTO 800 830 RETURN 899 ' 900 REM TITLE SUBROUTINE 910 CLS : PRINT : PRINT 915 LENGTH = LEN(TITLE$) 916 TOPSIDE$ = CHR$(201) + STRING$(LENGTH, CHR$(205)) + CHR$(187) 917 BOTTOM$ = CHR$(200) + STRING$(LENGTH, CHR$(205)) + CHR$(188) 920 LENGTH = LEN(TITLE$) 930 TOPSIDE$ = CHR$(201) + STRING$(LENGTH, CHR$(205)) + CHR$(187) 940 BOTTOM$ = CHR$(200) + STRING$(LENGTH, CHR$(205)) + CHR$(188) 950 PRINT TAB(20); TOPSIDE$ 960 PRINT TAB(20); CHR$(186); TITLE$; CHR$(186) 970 IF LEN(AUTHOR$) > 0 THEN PRINT TAB(20); CHR$(186); AUTHOR$; CHR$(186) 980 PRINT TAB(20); BOTTOM$ 990 RETURN 998 ' 999 REM MAINLINE PROGRAM 1000 TITLE$ = "ROMAN NUMERAL -- DECIMAL CONVERSION" 1010 AUTHOR$ = " H.Heinz Vancouver B.C. 07/85 " 1060 KEY OFF: REM TURN OFF SOFTKEY LABELS 1070 GOSUB 900 1110 LOCATE 10, 10 1120 PRINT "This program uses the more modern subtractive convention" 1130 PRINT TAB(10); "rather then the additive method used by the early Romans." 1140 PRINT TAB(13); "i.e. Decimal 4 is represented by IV, not by IIII." 1145 PRINT TAB(25); "Remember ... use upper case." 1150 PRINT : PRINT : PRINT 1160 PRINT TAB(30); "MENU OF OPTIONS" 1170 PRINT : PRINT TAB(20); "1. Decimal to Roman Numeral conversion" 1180 PRINT TAB(20); "2. Roman Numeral to Decimal conversion" 1190 PRINT TAB(20); "3. Count by Decimal and Roman Numeral" 1200 PRINT TAB(20); "4. Quit this program" 1210 PRINT : PRINT TAB(23); "Which option would you like "; : INPUT C 1220 IF C < 0 OR C > 4 THEN 1210 1230 ON C GOTO 1500, 3000, 2000, 3300 1499 ' 1500 REM DEC. TO R.N. CONVERSION 1510 TITLE$ = "Decimal to Roman Numeral Conversion" 1520 AUTHOR$ = "" 1530 GOSUB 900 1540 LOCATE 14, 10 1550 INPUT "Enter Decimal Integer (1 to 3899) "; A 1560 IF A < 1 OR A > 3899 THEN 1540 1570 GOSUB 600 1580 LOCATE 18, 10 1590 PRINT "Equivelent Roman Numeral Integer is "; X$ 1600 LOCATE 22, 10: INPUT "Do you want another number (Y/N) "; A$ 1610 IF A$ = "Y" OR A$ = "y" GOTO 1530 1620 GOTO 1000 1999 ' 2000 REM COUNT ROUTINE 2010 TITLE$ = "Count by Decimal & Roman Numeral" 2020 AUTHOR$ = "" 2030 GOSUB 900 2040 LOCATE 25, 10: COLOR 0, 7 2050 PRINT "Use PAUSE (or^S) to stop scroll--SPACEBAR to resume--M for menu"; 2060 LOCATE 6, 1: COLOR 7, 0 2070 FOR N = 1 TO 3899: A = N 2080 GOSUB 600 2090 A$ = INKEY$: IF LEN(A$) = 0 THEN 2110 2100 IF A$ = "M" OR A$ = "m" THEN 1000 2110 PRINT TAB(10); "For Decimal "; N, " Roman Numeral equivelent is "; X$ 2120 NEXT N 2130 GOTO 1000 2999 ' 3000 REM R.N. TO DEC. CONVERSION 3010 TITLE$ = "Roman Numeral to Decimal Conversion" 3020 AUTHOR$ = "" 3030 GOSUB 900 3040 LOCATE 10, 10 3050 PRINT "NOTE: This routine does NOT check for validity of input." 3060 PRINT TAB(10); " I=1....V=5....X=10....L=50....C=100....D=500....M=1000" 3070 PRINT 3080 R = 0: S = 0: T = 0 3090 LOCATE 14, 10 3100 INPUT "Enter Roman Numeral Integer"; A$ 3110 X = LEN(A$) 3120 FOR N = X TO 1 STEP -1 3130 R$ = MID$(A$, N, 1) 3140 IF R$ = "I" THEN R = 1 3150 IF R$ = "V" THEN R = 5 3160 IF R$ = "X" THEN R = 10 3170 IF R$ = "L" THEN R = 50 3180 IF R$ = "C" THEN R = 100 3190 IF R$ = "D" THEN R = 500 3200 IF R$ = "M" THEN R = 1000 3210 IF R < T THEN S = S - R: GOTO 3230 3220 S = S + R 3230 T = R: NEXT N 3240 LOCATE 18, 10: PRINT "Equivelent Decimal Integer is "; S 3250 LOCATE 22, 10: INPUT "Do you want another number (Y/N) "; A$ 3260 IF A$ = "Y" OR A$ = "y" GOTO 3030 3270 GOTO 1000 3300 CLS : KEY ON: END 3400 ' H.H. 07/85