ChipMaster's bwBASIC This also includes history going back to v2.10. *WARN* some binary files might have been corrupted by CRLF.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
1.8 KiB

  1. 10 PRINT "ROOTS OF POLYNOMIALS: HALF-INTERVAL SEARCH"
  2. 20 PRINT
  3. 30 REM - ENTER FUNCTION ("DEFFNR(x)="FUNCTION") HERE
  4. 35 DEF FNR(X)=4*X[4-2.5*X[2-X+.5
  5. 40 DIM D(3)
  6. 50 PRINT "(TO END SEARCH ENTER 0,0)"
  7. 59 REM - ESTABLISH INTERVAL OF RANDOM SEARCH
  8. 60 PRINT "INTERVAL (LOWER, UPPER LIMIT)";
  9. 70 INPUT A,B
  10. 79 REM - TEST FOR USABLE LIMITS ENTERED
  11. 80 IF A<>B THEN 120
  12. 89 REM - END PROGRAM?
  13. 90 IF A=0 THEN 430
  14. 100 PRINT "--INTERVAL LIMITS CANNOT BE EQUAL--"
  15. 110 GOTO 60
  16. 120 IF A<B THEN 150
  17. 130 PRINT "--LOWER LIMIT MUST BE ENTERED FIRST--"
  18. 140 GOTO 60
  19. 150 A1=SGN(FNR(A))
  20. 160 B1=SGN(FNR(B))
  21. 169 REM - TEST FOR ROOT AT EITHER LIMIT
  22. 170 IF A1*B1=0 THEN 360
  23. 179 REM - TEST FOR OPPOSITE SIGNS AT INTERVAL LIMITS
  24. 180 IF A1*B1<0 THEN 280
  25. 189 REM - LOOP TO SEARCH 1000 NUMBER FOR OPPOSITE SIGNS IN FUNCTION
  26. 190 FOR I=1 TO 1000
  27. 200 X=A+RND(2)*(B-A)
  28. 210 X1=SGN(FNR(X))
  29. 219 REM - TEST FOR ROOT AT RANDOM NUMBER; IF YES, END SEARCH, PRINT
  30. 220 IF X1=0 THEN 400
  31. 229 REM - TEST FOR OPPOSITE SIGNS AT RANDOM NUMBER AND LOWER LIMIT
  32. 230 IF A1*X1<0 THEN 270
  33. 239 REM - TRY ANOTHER RANDOM NUMBER
  34. 240 NEXT I
  35. 250 PRINT "NO CHANGE OF SIGN FOUND"
  36. 260 GOTO 60
  37. 269 REM - CHANGE OF SIGN FOUND; CALCULATE ROOT
  38. 270 B=X
  39. 278 REM - STORE POSITIVE POINT IN D(3), NEGATIVE POINT IN D(1)
  40. 279 REM - D(3) BECOME INTERVAL LIMITS
  41. 280 D(2+A1)=A
  42. 290 D(2-A1)=B
  43. 299 REM - CALCULATE MIDPOINT BETWEEN THE TWO LIMITS
  44. 300 Y=(D(1)+D(3))/2
  45. 310 Y1=SGN(FNR(Y))
  46. 319 REM - TEST FOR ROOT AT MIDPOINT
  47. 320 IF Y1=0 THEN 400
  48. 329 REM - GET A NEW LIMIT TO CLOSE IN ON ROOT
  49. 330 D(2+Y1)=Y
  50. 339 REM - TEST FOR A VALUE CLOSE ENOUGH TO ZERO TO ASSUME A ROOT
  51. 340 IF ABS(D(1)-D(3))/ABS(D(1)+ABS(D(3)))<5E-6 THEN 400
  52. 349 REM - RETEST WITH NEW LIMITS
  53. 350 GOTO 300
  54. 359 REM - ROOT AT AN INTERVAL LIMIT; FIND WHICH LIMIT, PRINT
  55. 360 IF A1=0 THEN 390
  56. 370 Y=B1
  57. 380 GOTO 400
  58. 390 Y=A1
  59. 400 PRINT "ROOT =";Y
  60. 410 PRINT
  61. 419 REM - RESTART PROGRAM
  62. 420 GOTO 60
  63. 430 END