home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29b.dsk / POLAR.PLOTTER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  4KB  |  104 lines

  1. 10 PL = 2070: GOTO 790
  2. 20 R = R: REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3. 30  REM   191 COLONS AFTER REM IN LINE 20
  4. 40  REM  CHANGE VALUE OF PL (LINE 10) IF LINE 10 OR 20 IS CHANGED
  5. 50  RETURN 
  6. 100  REM  **********************
  7. 110  REM  *   POLAR.PLOTTER    *
  8. 120  REM  *   BY MARK JESKE    *
  9. 130  REM  * COPYRIGHT (C) 1986 *
  10. 140  REM  * BY MICROSPARC, INC *
  11. 150  REM  * CONCORD, MA  01742 *
  12. 160  REM  **********************
  13. 170  DIM R$(25),T(25)
  14. 180  FOR L = 1 TO 25
  15. 190  READ R$(L): READ T(L)
  16. 200  IF R$(L) = "END"  THEN 220
  17. 210  NEXT L
  18. 220  GOTO 420
  19. 230  HGR : HCOLOR= 3
  20. 240  HPLOT 139,0 TO 139,159
  21. 250  HPLOT 0,79 TO 279,79
  22. 260  HPLOT 0,0 TO 279,0 TO 279,159 TO 0,159 TO 0,0
  23. 270  FOR A = 0 TO 6.4  STEP .05
  24. 280 EF = 1: GOSUB 20:EF = 0
  25. 290 X = R * COS(A)
  26. 300 Y = R * SIN(A)
  27. 310 X = X *SC
  28. 320 Y = Y *SC
  29. 330 Y =  -Y
  30. 340  IF X < -139  THEN X =  -139
  31. 350  IF X >140  THEN X = 140
  32. 360  IF Y < -79  THEN Y =  -79
  33. 370  IF Y >80  THEN Y = 80
  34. 380  IF A = 0  THEN  HPLOT X +139,Y +79: GOTO 400
  35. 390  HPLOT  TO X +139,Y +79
  36. 400  NEXT A
  37. 410  VTAB 24: PRINT "PLOT FINISHED."
  38. 420  PRINT 
  39. 430  PRINT "ENTER EQUATION OR <RETURN> TO REUSE."
  40. 440  INPUT "R=";E$
  41. 450  IF E$ = "END"  THEN  GOSUB 1080: TEXT : HOME : END 
  42. 460  IF E$ = ""  THEN 610
  43. 470 E$ = "R=" +E$: IF  LEN(E$) >200  THEN  VTAB 21: HTAB 1: CALL  -958: VTAB 21: PRINT "EQUATION IS TOO LONG.": PRINT : PRINT "PRESS <RETURN> TO REENTER";: GET Z$: PRINT : HOME : VTAB 21: GOTO 430
  44. 480 PK = PL
  45. 490  GOSUB 1080
  46. 500  FOR L = 1 TO  LEN(E$)
  47. 510  FOR J = 1 TO 25
  48. 520  IF R$(J) = "END"  THEN 560
  49. 530  IF  MID$ (E$,L,1) = R$(J)  THEN  POKE PK,T(J): GOTO 570
  50. 540  IF  MID$ (E$,L,3) = R$(J)  THEN  POKE PK,T(J):L = L +2: GOTO 570
  51. 550  NEXT J
  52. 560  POKE PK, ASC( MID$ (E$,L,1))
  53. 570 PK = PK +1
  54. 580  NEXT L
  55. 590  POKE PK,58
  56. 600  POKE PK +1,178
  57. 610  PRINT : INPUT "ENTER SCALE (<RETURN> TO REUSE)? ";S$
  58. 620  IF S$ = ""  THEN 640
  59. 630 SC =  VAL(S$)
  60. 640  GOTO 230
  61. 650  DATA   +,200
  62. 660  DATA   -,201
  63. 670  DATA   *,202
  64. 680  DATA   /,203
  65. 690  DATA   ^,204
  66. 700  DATA   =,208
  67. 710  DATA   ABS,212
  68. 720  DATA   SQR,218
  69. 730  DATA   LOG,220
  70. 740  DATA   COS,222
  71. 750  DATA   SIN,223
  72. 760  DATA   TAN,224
  73. 770  DATA   ATN,225
  74. 780  DATA   END,0
  75. 790  TEXT : HOME : ONERR  GOTO 990
  76. 800  PRINT "****************************************";
  77. 810  PRINT "*       POLAR PLOT BY MARK JESKE       *";
  78. 820  PRINT "*  COPYRIGHT 1986 BY MICROSPARC, INC.  *";
  79. 830  PRINT "****************************************";
  80. 840  PRINT 
  81. 850  PRINT " THIS PROGRAM WILL PLOT POLAR EQUATIONS"
  82. 860  PRINT "IN THE FORM 'R=COS(A)' WHERE A IS THE"
  83. 870  PRINT "ANGLE AND R IS THE RADIUS."
  84. 880  PRINT 
  85. 890  PRINT "THE EQUATION MAY USE ANY OF THESE:"
  86. 900  PRINT 
  87. 910  PRINT "SIN, COS, TAN, SQR, ATN, ABS"
  88. 920  PRINT "LOG, +, -, *, /, ^, ="
  89. 930  PRINT 
  90. 940  PRINT " SCALE IS USED TO ADJUST THE EQUATIONS": PRINT "TO FIT THE SCREEN. SCALE USUALLY LIES": PRINT "BETWEEN 10 AND 70. EXPERIMENTING WILL"
  91. 950  PRINT "FIND THE BEST VALUE."
  92. 960  PRINT : PRINT "ENTER 'END' FOR THE EQUATION TO FINISH."
  93. 970  VTAB 24: PRINT "PRESS <RETURN> TO BEGIN? ";: GET Q$
  94. 980  HOME : GOTO 170
  95. 990 E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): CALL  -3288
  96. 1000  TEXT : HOME : VTAB 12
  97. 1010  IF E = 16  THEN  PRINT "SYNTAX ERROR IN LINE "EL: PRINT : PRINT "THERE MAY BE AN ERROR IN YOUR EQUATION.": GOTO 1050
  98. 1020  IF E = 53  THEN  PRINT "ILLEGAL QUANTITY ERROR IN LINE "EL: PRINT : PRINT "CHECK FOR LOG OF ZERO": PRINT " OR SQUARE ROOT OF NEGATIVE NUMBER.": GOTO 1050
  99. 1030  IF E = 133  THEN  PRINT "DIVISION BY ZERO ERROR IN LINE "EL: GOTO 1050
  100. 1040  PRINT "ERROR "E" IN LINE "EL
  101. 1050  VTAB 21: HTAB 1: PRINT "PRESS <RETURN> TO CONTINUE";: GET Z$: PRINT 
  102. 1060  IF EF  THEN  HOME : VTAB 12: PRINT "REENTER THE EQUATION": VTAB 21: GOTO 420
  103. 1070  TEXT : HOME : END 
  104. 1080  POKE PL,82: POKE PL +1,208: POKE PL +2,82: POKE PL +3,58: POKE PL +4,178: FOR I = PL +5 TO PL +195: POKE I,58: NEXT : RETURN