home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib22a.dsk / JANUARY.1985 / SYSTEM.SOLVER.bas < prev   
BASIC Source File  |  2023-02-26  |  7KB  |  213 lines

  1. 10  REM  ************************
  2. 20  REM  *    SYSTEM.SOLVER     *
  3. 30  REM  *    BY BILL DAVIS     *
  4. 40  REM  *  COPYRIGHT (C) 1985  *
  5. 50  REM  *  BY MICROSPARC, INC  *
  6. 60  REM  *  CONCORD, MA. 01742  *
  7. 70  REM  ************************
  8. 80  HOME : VTAB 9: INVERSE : POKE 32,9: PRINT : PRINT "    SYSTEM SOLVER    "
  9. 90  PRINT "    BY BILL DAVIS    "
  10. 100  POKE 32,0: PRINT : NORMAL 
  11. 110  VTAB 20: HTAB 10: PRINT "PRESS ANY KEY TO BEGIN": VTAB 22: PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC. **": WAIT  -16384,128: POKE  -16368,0
  12. 120  REM 
  13. 130  REM  GLOSSARY OF VARIABLES
  14. 140  REM 
  15. 150  REM  M(M,N+1) WILL BE AN ARGUMENT MATRIX FOR A SYSTEM OF LINEAR EQUATIONS
  16. 160  REM  K$ IS A QUESTION RESPONSE
  17. 170  REM  B,I,J,KR,S,T,U, AND V ARE COUNTERS
  18. 180  REM  L IS A CONSTANT
  19. 190  REM  TEMP(N+1) WILL BE A TEMPORARY STORAGE ARRAY FOR SWITCHING EQUATIONS
  20. 200  REM  M IS THE # OF ROWS OR EQUATIONS
  21. 210  REM  N IS THE # OF VARIABLES IN THE EQUATIONS (N+1= # OF COLUMNS)
  22. 220  REM  FLAG IS USED TO CHECK CONDITIONS
  23. 230  REM  A IS THE # OF ZERO ROWS
  24. 240  REM 
  25. 250  DIM M(71,72): DIM TEM(72)
  26. 260  REM 
  27. 270  REM  MAIN PROGRAM
  28. 280  REM 
  29. 290  HOME 
  30. 300  PRINT "WOULD YOU LIKE THE RESULTS PRINTED      (Y OR N)?";: GET P$
  31. 310  IF P$ < >"Y"  THEN 360
  32. 320  PRINT : PRINT 
  33. 330  PRINT "WHAT SLOT# IS THE PRINTER IN?";: INPUT " ";SLN$
  34. 340 SLN =  INT( VAL(SLN$))
  35. 350  IF SLN >6  OR SLN <1  THEN 330
  36. 360  HOME 
  37. 370  PRINT "EQUATIONS MUST BY IN THE FORM           A1*X1 + A2*X2 +...+ AN*XN =B"
  38. 380  PRINT 
  39. 390  PRINT "HOW MANY EQUATIONS ARE THERE?"
  40. 400  INPUT "M= ";M
  41. 410  PRINT : PRINT "HOW MANY VARIABLES ARE THERE?"
  42. 420  INPUT "N= ";N
  43. 430 M =  INT(M):N =  INT(N)
  44. 440  IF M >70  OR N >70  THEN  HOME : PRINT "THE LARGEST POSSIBLE VALUE FOR M AND N IS 70.  TRY AGAIN.": FOR K = 1 TO 4000: NEXT K: HOME : GOTO 390
  45. 450  IF M < = 0  OR N < = 0  THEN  HOME : PRINT "M AND N MUST BOTH BE LARGER THE ZERO.  TRY AGAIN.": FOR K = 1 TO 4000: NEXT K: HOME : GOTO 390
  46. 460  PRINT 
  47. 470  PRINT "INPUT THE COEFFICIENTS AND CONSTANTS BY  ROW (EQUATIONS)."
  48. 480  FOR I = 1 TO M
  49. 490  PRINT 
  50. 500  PRINT "INPUT THE COEFFICIENTS AND CONSTANTS FOREQUATION #";I;"."
  51. 510  FOR J = 1 TO N +1
  52. 520  INPUT M(I,J)
  53. 530  NEXT J
  54. 540  NEXT I
  55. 550 D$ =  CHR$(4)
  56. 560 K$ = "N"
  57. 570  IF P$ = "Y"  AND K$ = "Y"  THEN  PRINT : PRINT D$;"PR#"SLN: GOTO 590
  58. 580  HOME 
  59. 590  PRINT "THE SYSTEM OF EQUATIONS IS:": PRINT 
  60. 600  FOR U = 1 TO M
  61. 610  IF P$ = "Y"  AND K$ = "Y"  THEN 640
  62. 620 CV =  PEEK(37): REM  PEEK(37) IS THE VALUE OF THE CURSOR'S CURRENT VERTICAL POSITION
  63. 630  IF CV >20  THEN  GOSUB 2120
  64. 640  PRINT "EQU. #";U
  65. 650  PRINT 
  66. 660  FOR V = 1 TO N +1
  67. 670  IF P$ = "Y"  AND K$ = "Y"  THEN 700
  68. 680 CV =  PEEK(37)
  69. 690  IF CV >20  THEN  GOSUB 2120
  70. 700  IF V = N +1  THEN  PRINT " =";M(U,N +1)
  71. 710  IF V = 1  THEN  PRINT M(U,V);"*X1";
  72. 720  IF V >1  AND V < >N +1  THEN  PRINT "+";M(U,V);"*X";V;
  73. 730  NEXT V
  74. 740  PRINT 
  75. 750  NEXT U
  76. 760  IF P$ = "Y"  AND K$ = "Y"  THEN  PRINT : PRINT D$;"PR#0"
  77. 770  IF K$ = "Y"  THEN 870
  78. 780  PRINT "ARE THESE THE CORRECT EQUATIONS         (Y OR N)? ";: GET K$: IF K$ = "Y"  AND P$ = "Y"  THEN  GOTO 570
  79. 790  IF K$ = "Y"  THEN 870
  80. 800  PRINT 
  81. 810  PRINT : PRINT "WHICH ENTRY IS INCORRECT?               INPUT (EQU. # AND VAR. #).";: INPUT "";U,V
  82. 820  IF U >M  OR V >N +1  OR U <1  OR V <1  THEN  PRINT "TRY AGAIN.": FOR T = 1 TO 4000: NEXT T: GOTO 580
  83. 830  PRINT 
  84. 840  PRINT "M(";U;",";V;") IS CURRENTLY ";M(U,V)
  85. 850  PRINT 
  86. 860  PRINT "WHAT IS THE CORRECT VALUE FOR           M(";U;","V;")?";: INPUT " ";M(U,V): GOTO 580
  87. 870  HOME : PRINT "               COMPUTING....":A = 0
  88. 880  GOSUB 1570
  89. 890 I = 0:J = 0
  90. 900 I = I +1
  91. 910 J = J +1
  92. 920  GOSUB 1850
  93. 930  IF FLAG = 0  THEN I = I -1: GOTO 1070
  94. 940 L = M(I,J)
  95. 950  FOR S = 1 TO N +1
  96. 960 M(I,S) = M(I,S)/L
  97. 970  NEXT S
  98. 980  FOR R = 1 TO M
  99. 990  IF R = I  OR M(R,J) = 0  THEN 1060
  100. 1000  FOR S = 1 TO N +1
  101. 1010 TEMP(S) = M(R,S) -M(R,J) *M(I,S)
  102. 1020  NEXT S
  103. 1030  FOR V = 1 TO N +1
  104. 1040 M(R,V) = TEMP(V)
  105. 1050  NEXT V
  106. 1060  NEXT R
  107. 1070  IF M > = I +1  AND N > = J +1  THEN 900
  108. 1080 A = 0
  109. 1090  GOSUB 1570
  110. 1100  HOME 
  111. 1110  PRINT "THE ARGUMENT MATRIX IN ROW ECHELON FORM IS:": PRINT 
  112. 1120  GOSUB 2010
  113. 1130  IF P$ = "Y"  THEN  PRINT : PRINT D$;"PR#"SLN
  114. 1140  IF M -A < >N  THEN 1240
  115. 1150  PRINT "THE SOLUTION TO THE SYSTEM OF EQUATIONS IS:"
  116. 1160  FOR T = 1 TO N
  117. 1170  IF P$ = "Y"  THEN 1200
  118. 1180 CV =  PEEK(37)
  119. 1190  IF CV >20  THEN  GOSUB 2120
  120. 1200  PRINT 
  121. 1210  PRINT "X";T;"= ";M(T,N +1)/M(T,T)
  122. 1220  NEXT T
  123. 1230  GOTO 1500
  124. 1240  PRINT "THE SOLUTION OF THE SYSTEM OF EQUATIONS IS:"
  125. 1250  PRINT 
  126. 1260 B = 0
  127. 1270  FOR T = 1 TO N
  128. 1280  IF P$ = "Y"  THEN 1310
  129. 1290 CV =  PEEK(37)
  130. 1300  IF CV >20  THEN  GOSUB 2120
  131. 1310 B = B +1
  132. 1320  IF B >N  THEN 1500
  133. 1330  IF M(T,B) = 0  THEN 1420
  134. 1340  PRINT "X";B;"= ";M(T,N +1)/M(T,B);
  135. 1350  FOR S = B +1 TO N
  136. 1360  IF P$ = "Y"  THEN 1390
  137. 1370 CV =  PEEK(37)
  138. 1380  IF CV >20  THEN  GOSUB 2120
  139. 1390  IF S >N  THEN 1500
  140. 1400  PRINT " -";M(T,S)/M(T,B);"*X";S;
  141. 1410  GOTO 1460
  142. 1420  IF B >N  THEN 1500
  143. 1430  PRINT "X";B;"= X";B
  144. 1440 T = T -1
  145. 1450  GOTO 1480
  146. 1460  NEXT S
  147. 1470  PRINT 
  148. 1480  PRINT 
  149. 1490  NEXT T
  150. 1500  IF P$ = "Y"  THEN  PRINT : PRINT D$;"PR#0"
  151. 1510  IF P$ < >"Y"  THEN  PRINT : PRINT : PRINT "WOULD YOU LIKE THE ANSWER DISPLAYED     AGAIN (Y OR N)? ";: GET K$: IF K$ = "Y"  THEN 1100
  152. 1520  PRINT : PRINT : PRINT "WOULD YOU LIKE TO SOLVE ANOTHER SYSTEM  OF EQUATIONS (Y OR N)? ";: GET K$: IF K$ = "Y"  THEN  CLEAR : GOTO 250
  153. 1530  END 
  154. 1540  REM 
  155. 1550  REM  **** END OF MAIN PROGRAM
  156. 1560  REM 
  157. 1570  REM  ZERO ROW CHECKING SUBROUTINE
  158. 1580  REM 
  159. 1590  FOR I = 1 TO M
  160. 1600 FLAG = 0
  161. 1610  FOR J = 1 TO N +1
  162. 1620  IF M(I,J) < >0  AND FLAG = 0  THEN FLAG = 1
  163. 1630  NEXT J
  164. 1640  IF FLAG = 1  THEN 1710
  165. 1650  FOR S = 1 TO N +1
  166. 1660 TEMP(S) = M(M -A,S)
  167. 1670 M(M -A,S) = 0
  168. 1680 M(I,S) = TEMP(S)
  169. 1690  NEXT S
  170. 1700 A = A +1
  171. 1710  NEXT I
  172. 1720  REM 
  173. 1730  REM  OVER-DETERMINED SYSTEM SUBROUTINE
  174. 1740  REM 
  175. 1750  FOR I = 1 TO M
  176. 1760 FLAG = 0
  177. 1770  FOR J = 1 TO N
  178. 1780  IF M(I,J) < >0  AND FLAG = 0  THEN FLAG = 1
  179. 1790  NEXT J
  180. 1800  IF FLAG = 0  AND M(I,N +1) < >0  AND P$ = "Y"  THEN  PRINT : PRINT D$;"PR#"SLN: PRINT : PRINT "THIS SYSTEM OF EQUATIONS IS OVER-DETERMINED.": PRINT : PRINT D$;"PR#0": GOTO 1520
  181. 1810  IF FLAG = 0  AND M(I,N +1) < >0  THEN  PRINT : PRINT "THIS SYSTEM OF EQUATIONS IS OVER-       DETERMINED.": GOTO 1520
  182. 1820  NEXT I
  183. 1830  RETURN 
  184. 1840  REM 
  185. 1850  REM  EQUATIONS SWITCHING SUBROUTINE
  186. 1860  REM 
  187. 1870  IF M(I,J) < >0  THEN 1950
  188. 1880  FOR T = I +1 TO M
  189. 1890  IF M(T,J) = 0  THEN 1970
  190. 1900  FOR R = 1 TO N +1
  191. 1910 TEMP(R) = M(I,R)
  192. 1920 M(I,R) = M(T,R)
  193. 1930 M(T,R) = TEMP(R)
  194. 1940  NEXT R
  195. 1950 FLAG = 1
  196. 1960  GOTO 1990
  197. 1970 FLAG = 0
  198. 1980  NEXT T
  199. 1990  RETURN 
  200. 2000  REM 
  201. 2010  REM  ARGUMENT MATRIX PRINTING SUBROUTINE
  202. 2020  REM 
  203. 2030  FOR U = 1 TO M
  204. 2040  FOR V = 1 TO N +1
  205. 2050 CV =  PEEK(37)
  206. 2060  IF CV >20  THEN  GOSUB 2120
  207. 2070  PRINT M(U,V),
  208. 2080  NEXT V
  209. 2090  PRINT 
  210. 2100  PRINT 
  211. 2110  NEXT U
  212. 2120  PRINT "PRESS ANY KEY TO CONTINUE. ";: GET K$: HOME 
  213. 2130  RETURN