home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib25a.dsk / AUGUST.1985 / INTEGRATOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  2KB  |  49 lines

  1. 1  REM **********************
  2. 2  REM *     INTEGRATOR     *
  3. 3  REM *   BY GLEN BREDON   *
  4. 4  REM * COPYRIGHT (C) 1985 *
  5. 5  REM * BY MICROSPARC, INC *
  6. 6  REM * CONCORD, MA  01742 *
  7. 7  REM **********************
  8. 10  REM *** INITIALIZE VARIABLES FOR MORE SPEED
  9. 20 S = 0:X = 0:Y = 0:L = 0:D = 0:I = 0:J = 0:N = 0
  10. 30  PRINT  CHR$(4)"BRUN DEF.AND.VAL"
  11. 40  HOME : VTAB 2: HTAB 9: INVERSE : PRINT  SPC( 22): PRINT : ONERR  GOTO 400
  12. 50  HTAB 9: PRINT " NUMERICAL INTEGRATOR "
  13. 60  HTAB 9: PRINT  SPC( 22): PRINT 
  14. 70  NORMAL 
  15. 80  PRINT : PRINT  TAB( 8)"(SIMPSON'S RULE ROUTINE)": PRINT : PRINT "* COPYRIGHT 1985 BY MICROSPARC, INC. *"
  16. 90  VTAB 10: HTAB 1: CALL  -958: PRINT "ENTER YOUR FUNCTION  F(X).  YOU MAY USE 'PI' IN YOUR FORMULA.": PRINT : INPUT "Y=";F$
  17. 100 Z$ = F$: &  DEF Z$
  18. 110  HOME : VTAB 3: PRINT "  Y=";F$
  19. 120 PI =  ATN(1) *4
  20. 130  PRINT : PRINT : INPUT "GIVE LEFT END POINT->";L$:T$ = L$: &  DEF T$: &  VALT$ TO L
  21. 140  PRINT : PRINT : INPUT "GIVE RIGHT END POINT->";R$:T$ = R$: &  DEF T$: &  VALT$ TO R
  22. 150 SG =  SGN(R -L): IF L <R  THEN 170
  23. 160 LL = R:R = L:L = LL
  24. 170  PRINT : PRINT : INPUT "GIVE THE NUMBER OF (DOUBLE) SUBDIVISIONSYOU WISH TO USE->";N
  25. 180  IF N >0  AND N =  INT(N)  THEN 200
  26. 190  HOME : PRINT : PRINT " N  SHOULD BE A POSITIVE INTEGER.       PLEASE TRY AGAIN.": GOTO 170
  27. 200  IF N > = 2000  THEN  VTAB 15: HTAB 5: FLASH : PRINT "YOU ARE IN FOR A LONG, LONG WAIT!!": GOTO 230
  28. 210  IF N > = 500  THEN  VTAB 15: HTAB 7: FLASH : PRINT "THIS MAY TAKE QUITE A WHILE!": GOTO 230
  29. 220  VTAB 15: HTAB 10: FLASH : PRINT "ONE MOMENT PLEASE."
  30. 230  NORMAL 
  31. 240 D = (R -L)/(N +N)
  32. 250 S = 0
  33. 260  FOR I = 0 TO N: FOR J = 0 TO 1
  34. 270 X = L +(I +I +J) *D
  35. 280  &  VALZ$ TO Y: IF J  THEN Y = Y +Y
  36. 290 S = S +Y: NEXT : NEXT 
  37. 300 S = S -Y
  38. 310 X = L: &  VALZ$ TO Y:X = R: &  VALZ$ TO YY:S = 2 *S -(Y +YY)
  39. 320 S = SG *D *S/3
  40. 330  PRINT ""
  41. 340  HOME : VTAB 10: PRINT "THE INTEGRAL OF ";F$: PRINT : PRINT "FROM X="L$" TO X="R$" IS": PRINT : PRINT  TAB( 5)S
  42. 350  VTAB 20: PRINT "PRESS 'S' TO REUSE THE SAME FUNCTION.": PRINT : PRINT "PRESS 'E' TO EXIT OR 'R' TO RERUN.";
  43. 360  GET A$: IF A$ = "E"  THEN  END 
  44. 370  IF A$ = "S"  THEN  PRINT : GOTO 110
  45. 380  IF A$ < >"R"  THEN 360
  46. 390  RUN 
  47. 400  CALL  -3288:E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): POKE 216,0
  48. 410  HOME : VTAB 12: PRINT "ERROR "E" IN LINE "EL"."
  49. 420  PRINT : PRINT "PRESS ANY KEY TO CONTINUE.": GET Z$: PRINT : GOTO 40