home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / fwrd / fraction.bas < prev    next >
BASIC Source File  |  1990-09-29  |  6KB  |  280 lines

  1. 10 ' ***************************************
  2. 20 ' **        FRACTIONS                  **
  3. 30 ' ***************************************
  4. 40 '
  5. 50 CLEAR
  6. 60 SCREEN 0,0,0,0
  7. 70 CLS
  8. 80 KEY OFF
  9. 90 DEFDBL A-Z
  10. 100 LOCATE 1,28
  11. 110 PRINT "* * * FRACTIONS * * *
  12. 120 LOCATE 3,1
  13. 130 PRINT  "FUNCTIONS FOR TWO FRACTIONS ...
  14. 140 PRINT
  15. 150 PRINT TAB(22)"F1.   FRACTION 1   +  FRACTION 2
  16. 160 PRINT TAB(22)"F2.   FRACTION 1   -  FRACTION 2
  17. 170 PRINT TAB(22)"F3.   FRACTION 1   *  FRACTION 2
  18. 180 PRINT TAB(22)"F4.   FRACTION 1   /  FRACTION 2
  19. 190 PRINT
  20. 200 PRINT "FUNCTIONS OF TWO NUMBERS ...
  21. 210 PRINT
  22. 220 PRINT TAB(22)"F5.   GREATEST COMMON DIVISOR
  23. 230 PRINT TAB(22)"F6.   LEAST COMMON MULTIPLE
  24. 240 PRINT TAB(22)"F7.   REDUCTION TO LOWEST TERMS
  25. 250 PRINT
  26. 260 PRINT "FUNCTION OF ONE NUMBER  ...
  27. 270 PRINT
  28. 280 PRINT TAB(22)"F8.   DECIMAL TO FRACTION APPROXIMATION
  29. 290 PRINT TAB(22)"F9.   FRACTION TO DECIMAL CONVERSION
  30. 300 PRINT
  31. 310 PRINT
  32. 320 PRINT TAB(22)"F10.  QUIT
  33. 330 LOCATE 25,22
  34. 340 PRINT "PRESS ANY SPECIAL FUNCTION KEY";
  35. 350 ON KEY(1) GOSUB 620
  36. 360 ON KEY(2) GOSUB 730
  37. 370 ON KEY(3) GOSUB 840
  38. 380 ON KEY(4) GOSUB 950
  39. 390 ON KEY(5) GOSUB 1060
  40. 400 ON KEY(6) GOSUB 1180
  41. 410 ON KEY(7) GOSUB 1300
  42. 420 ON KEY(8) GOSUB 1420
  43. 430 ON KEY(9) GOSUB 1790
  44. 440 ON KEY(10) GOSUB 1920
  45. 450 KEY(1) ON
  46. 460 KEY(2) ON
  47. 470 KEY(3) ON
  48. 480 KEY(4) ON
  49. 490 KEY(5) ON
  50. 500 KEY(6) ON
  51. 510 KEY(7) ON
  52. 520 KEY(8) ON
  53. 530 KEY(9) ON
  54. 540 KEY(10) ON
  55. 550 '
  56. 560 WHILE QUIT = NOT.YET
  57. 570 KEY.BUFFER.CLEAR$ = INKEY$
  58. 580 WEND
  59. 590 CLS
  60. 600 END
  61. 610 '
  62. 620 ' F1 SUBROUTINE
  63. 630 FUN$ = "+"
  64. 640 SCREEN 0,0,1,1
  65. 650 GOSUB 1970
  66. 660 N = N1 * D2 + N2 * D1
  67. 670 D = D1 * D2
  68. 680 GOSUB 2330
  69. 690 GOSUB 2440
  70. 700 SCREEN 0,0,0,0
  71. 710 RETURN
  72. 720 '
  73. 730 ' F2 SUBROUTINE
  74. 740 FUN$ = "-"
  75. 750 SCREEN 0,0,1,1
  76. 760 GOSUB 1970
  77. 770 N = N1 * D2 - N2 * D1
  78. 780 D = D1 * D2
  79. 790 GOSUB 2330
  80. 800 GOSUB 2440
  81. 810 SCREEN 0,0,0,0
  82. 820 RETURN
  83. 830 '
  84. 840 ' F3 SUBROUTINE
  85. 850 FUN$ = "*"
  86. 860 SCREEN 0,0,1,1
  87. 870 GOSUB 1970
  88. 880 N = N1 * N2
  89. 890 D = D1 * D2
  90. 900 GOSUB 2330
  91. 910 GOSUB 2440
  92. 920 SCREEN 0,0,0,0
  93. 930 RETURN
  94. 940 '
  95. 950 ' F4 SUBROUTINE
  96. 960 FUN$ = "/"
  97. 970 SCREEN 0,0,1,1
  98. 980 GOSUB 1970
  99. 990 N = N1 * D2
  100. 1000 D = D1 * N2
  101. 1010 GOSUB 2330
  102. 1020 GOSUB 2440
  103. 1030 SCREEN 0,0,0,0
  104. 1040 RETURN
  105. 1050 '
  106. 1060 ' F5 SUBROUTINE
  107. 1070 SCREEN 0,0,1,1
  108. 1080 CLS
  109. 1090 LOCATE 7,14
  110. 1100 INPUT "GREATEST COMMON DIVISOR. ENTER 'A,B' ";A,B
  111. 1110 GOSUB 2670
  112. 1120 LOCATE 14,14
  113. 1130 PRINT "GREATEST COMMON DIVISOR IS ";GCD
  114. 1140 GOSUB 2600
  115. 1150 SCREEN 0,0,0,0
  116. 1160 RETURN
  117. 1170 '
  118. 1180 ' F6 SUBROUTINE
  119. 1190 SCREEN 0,0,1,1
  120. 1200 CLS
  121. 1210 LOCATE 7,14
  122. 1220 INPUT "LEAST COMMON MULTIPLE. ENTER 'A,B' ";A,B
  123. 1230 GOSUB 2750
  124. 1240 LOCATE 14,14
  125. 1250 PRINT "LEAST COMMON MULTIPLE IS ";LCM
  126. 1260 GOSUB 2600
  127. 1270 SCREEN 0,0,0,0
  128. 1280 RETURN
  129. 1290 '
  130. 1300 ' F7 SUBROUTINE
  131. 1310 SCREEN 0,0,1,1
  132. 1320 CLS
  133. 1330 LOCATE 7,14
  134. 1340 INPUT "REDUCE TO LOWEST TERMS. ENTER 'A,B' ";N,D
  135. 1350 GOSUB 2330
  136. 1360 LOCATE 14,14
  137. 1370 PRINT "REDUCED TO LOWEST TERMS =  ";N;"  ";D
  138. 1380 GOSUB 2600
  139. 1390 SCREEN 0,0,0,0
  140. 1400 RETURN
  141. 1410 '
  142. 1420 ' F8 SUBROUTINE
  143. 1430 SCREEN 0,0,1,1
  144. 1440 CLS
  145. 1450 LOCATE 7,9
  146. 1460 INPUT "DECIMAL TO FRACTION CONVERSION.  ENTER X ";X
  147. 1470 PRINT
  148. 1480 PRINT TAB(14)"FRACTION"TAB(47)"ERROR FROM X"
  149. 1490 PRINT TAB(13)"-------------"TAB(44)"------------------"
  150. 1500 T1 = 1
  151. 1510 T2 = 1
  152. 1520 T3 = 1
  153. 1530 T4 = INT(X)
  154. 1540 T5 = X - T4
  155. 1550 T7 = 0
  156. 1560 T8 = 0
  157. 1570 DIF = 1
  158. 1580   WHILE ABS(DIF) > 1E-15
  159. 1590   NUM = T3 * T4 + T7
  160. 1600   DEN = T4 * T8 + T2
  161. 1610   DIF = NUM / DEN - X
  162. 1620   IF T5 = 0 THEN 1710
  163. 1630   T4 = INT(T1/T5)
  164. 1640   T6 = T5
  165. 1650   T5 = T1 - T4 * T5
  166. 1660   T1 = T6
  167. 1670   T7 = T3
  168. 1680   T3 = NUM
  169. 1690   T2 = T8
  170. 1700   T8 = DEN
  171. 1710   PRINT TAB(14)NUM;" / ";DEN;
  172. 1720   PRINT TAB(49);
  173. 1730   PRINT USING "+#.#^^^^" ;DIF
  174. 1740   WEND
  175. 1750 GOSUB 2600
  176. 1760 SCREEN 0,0,0,0
  177. 1770 RETURN
  178. 1780 '
  179. 1790 ' F9 SUBROUTINE
  180. 1800 SCREEN 0,0,1,1
  181. 1810 CLS
  182. 1820 LOCATE 7,1
  183. 1830 PRINT "ENTER A FRACTION,
  184. 1840 LINE INPUT "'NUMERATOR/DENOMINATOR' ...";FR$
  185. 1850 GOSUB 2160
  186. 1860 LOCATE 12,30
  187. 1870 PRINT "= ";NF/DF
  188. 1880 GOSUB 2600
  189. 1890 SCREEN 0,0,0,0
  190. 1900 RETURN
  191. 1910 '
  192. 1920 ' F10 SUBROUTINE
  193. 1930 QUIT = 1
  194. 1940 RETURN
  195. 1950 '
  196. 1960 ' SUBROUTINE, INPUT TWO FRACTIONS
  197. 1970 CLS
  198. 1980 LOCATE 7,1
  199. 1990 PRINT "ENTER FIRST FRACTION,
  200. 2000 LINE INPUT "'NUMERATOR/DENOMINATOR' ...";FR$
  201. 2010 GOSUB 2160
  202. 2020 N1=NF
  203. 2030 D1=DF
  204. 2040 PRINT "ENTER SECOND FRACTION,
  205. 2050 LINE INPUT "'NUMERATOR/DENOMINATOR' ...";FR$
  206. 2060 IF INSTR(FR$,".") = 0 THEN 2100
  207. 2070 BEEP
  208. 2080 PRINT TAB(40)"NO DECIMAL POINTS PLEASE"
  209. 2090 GOTO 2050
  210. 2100 GOSUB 2160
  211. 2110 N2 = NF
  212. 2120 D2 = DF
  213. 2130 RETURN
  214. 2140 '
  215. 2150 ' SUBROUTINE, FR$ TO NF AND DF
  216. 2160 IP = INSTR(FR$,",")
  217. 2170 IF IP =0 THEN 2200
  218. 2180 MID$(FR$,IP,1)="/"
  219. 2190 GOTO 2160
  220. 2200 IP =INSTR(FR$,"/")
  221. 2210 IF IP THEN 2240
  222. 2220 FR$=FR$ +"/1"
  223. 2230 GOTO 2200
  224. 2240 NF =VAL(LEFT$(FR$,IP))
  225. 2250 DF= VAL(MID$(FR$,IP+1))
  226. 2260 IF INSTR(FR$,"N") THEN NF=N
  227. 2270 IF INSTR(FR$,"n") THEN NF=N
  228. 2280 IF INSTR(FR$,"D") THEN DF=D
  229. 2290 IF INSTR(FR$,"d") THEN DF=D
  230. 2300 RETURN
  231. 2310 '
  232. 2320 'SUBROUTINE, REDUCTION OF N AND D TO LOWEST TERMS
  233. 2330 A = N
  234. 2340 B = D
  235. 2350 GOSUB 2670
  236. 2360 N = N / GCD
  237. 2370 D = D / GCD
  238. 2380 IF SGN(D) > -1 THEN 2410
  239. 2390 N = -N
  240. 2400 D = -D
  241. 2410 RETURN
  242. 2420 '
  243. 2430 ' SUBROUTINE OUTPUT OF TWO FRACTION PROBLEM RESULTS
  244. 2440 CLS
  245. 2450 LOCATE 7,27
  246. 2460 PRINT N1;"/";D1;"   ";FUN$;"   ";N2;"/";D2
  247. 2470 LOCATE 10,30
  248. 2480 IF D=<> 1 THEN 2510
  249. 2490 PRINT "=   ";N
  250. 2500 GOTO 2560
  251. 2510 PRINT"=  ";N;"/";D
  252. 2520 IF ABS(N) < D THEN 2560
  253. 2530 LOCATE 12,30
  254. 2540 NUM = VAL(LEFT$(STR$(N/D),INSTR(STR$(N/D),".")))
  255. 2550 PRINT "=   ";NUM;" AND ";N - NUM * D;"/";D
  256. 2560 GOSUB 2600
  257. 2570 RETURN
  258. 2580 '
  259. 2590 ' SUBROUTINE,WAIT UNTIL USER WANTS TO PROCEED
  260. 2600 LOCATE 25,25
  261. 2610 PRINT "PRESS THE SPACE BAR TO CONTINUE ";
  262. 2620 K$=INKEY$
  263. 2630 IF K$ <> " " THEN 2620
  264. 2640 RETURN
  265. 2650 '
  266. 2660 ' SUBROUTINE GREATEST COMMON DIVISOR OF A AND B
  267. 2670 TEMP = A - B * INT(A/B)
  268. 2680 A = B
  269. 2690 B = TEMP
  270. 2700 IF TEMP THEN 2670
  271. 2710 GCD = A
  272. 2720 RETURN
  273. 2730 '
  274. 2740 'SUBROUTINE , LEAST COMMON MULTIPLE OF A AND B
  275. 2750 A2=A
  276. 2760 B2=B
  277. 2770 GOSUB 2670
  278. 2780 LCM =ABS(A2*B2/ GCD)
  279. 2790 RETURN
  280.