home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / math.ark / QUADROOT.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-12-21  |  2.8 KB  |  105 lines

  1. REM PROGRAM QUADROOT;PROGRAMMER MICHAEL P FINERTY, 9/5/84
  2. REM THIS IS THE LISTING FOR PROGRAM QUADROOT.COM, AN S-BAISC PROGRAM
  3. REM THAT EVALUATES THE ROOTS OF QUADRATIC EQUATIONS USING THE
  4. REM COEFFICIENTS OF THE INDIVIDUAL TERMS: A,B,&C OF THE EQUATION:
  5. REM  A*X^2 + B*X + C = 0 TO FIND THE POINTS OF INTERSECTION (TWO)
  6. REM OF THE CURVE WITH THE LINE Y = 0. THE ROOTS MAY BE EITHER REAL
  7. REM OR COMPLEX AND EITHER EQUAL OR UNEQUAL. IN THIS IMPLEMENTATION
  8. REM "A" CANNOT BE EQUAL TO ZERO.
  9. REM
  10. REM *** DECLARATION OF VARIABLES ***
  11. REM
  12. 10 VAR AXIS, A, B, C, DIF, DISCRIM = REAL
  13. VAR ANS = STRING
  14. REM
  15. REM *** INPUT OF VARAIABLES AND MESSAGES ***
  16. REM
  17. CONSOLE
  18. PRINT "PLEASE INPUT THE COEFFICIENTS OF YOUR QUADRATIC"
  19. INPUT "A = ";A
  20. IF A = 0 THEN PRINT "YOUR EQUATION IS NOT QUADRATIC" 
  21. IF A = 0 THEN 10
  22.    LPRINTER
  23.    PRINT "A = ";A
  24.    CONSOLE
  25. REM
  26. INPUT "B = ";B
  27.    LPRINTER
  28.    PRINT "B = ";B
  29.    CONSOLE
  30. REM
  31. INPUT "C = ";C
  32.   LPRINTER
  33.   PRINT "C = ";C
  34.   CONSOLE
  35. REM
  36. REM *** AXIS IS AXIS OF SYMMETRY OF PARABOLA ***
  37. REM
  38.                   AXIS = -B/(2*A)
  39. REM
  40. REM *** ROOTS ARE AT DISTANCE DIF FROM AXIS ***
  41. REM
  42.           IF B*B = 4*A*C THEN DIF = 0
  43.           IF B*B = 4*A*C THEN 20
  44. REM
  45.           DIF = ((ABS(B*B - 4*A*C))^0.5)/(2*A)
  46. REM
  47. REM *** ROOTS ARE REAL OR COMPLEX DEPENDING ON SIGN OF DISCRIM ***
  48. REM      *** THEY ARE EQUAL IF DISCRIM IS ZERO *** 
  49. REM
  50. 20               DISCRIM = B*B - 4*A*C
  51. REM
  52. REM
  53. REM ***************************************************************** 
  54. REM
  55. REM LOGICAL PORTION OF PROGRAM : SGN(A) = 1 IF A GREATER THAN ZERO
  56. REM                                     = 0 IF A EQUALS ZERO
  57. REM                                     =-1 IF A LESS THAN ZERO
  58. REM
  59. CASE SGN(DISCRIM) OF
  60.   -1: BEGIN
  61.       PRINT "ROOTS ARE: "; AXIS;" +i*";DIF
  62.       PRINT "AND: "; AXIS;" -i*";DIF
  63.       PRINT "--ooO0Ooo--"
  64.       LPRINTER
  65.       PRINT "ROOTS ARE: "; AXIS;" +i*";DIF
  66.       PRINT "AND: "; AXIS;" -i*";DIF
  67.       PRINT "--ooO0Ooo--"
  68.       CONSOLE
  69.       END
  70.    0: BEGIN 
  71.       PRINT "ROOTS ARE: ";AXIS 
  72.       PRINT "AND: "; AXIS
  73.       PRINT "--ooO0Ooo--"
  74.       LPRINTER
  75.       PRINT "ROOTS ARE: ";AXIS
  76.       PRINT "AND: "; AXIS
  77.       PRINT "--ooO0Ooo--"
  78.       CONSOLE
  79.       END
  80.    1: BEGIN
  81.       PRINT "ROOTS ARE: "; AXIS + DIF
  82.       PRINT "AND: "; AXIS - DIF
  83.       PRINT "--ooO0Ooo--"
  84.       LPRINTER
  85.       PRINT "ROOTS ARE: "; AXIS + DIF
  86.       PRINT "AND: "; AXIS - DIF
  87.       PRINT "--ooO0Ooo--"
  88.       CONSOLE
  89.       END 
  90.  END
  91.  PRINT
  92.  LPRINTER
  93.  PRINT
  94.  CONSOLE
  95. REM
  96. REM   *** CONDITIONAL LOOP FOR MORE QUADRATICS *** 
  97. REM 
  98.  PRINT " DO YOU WANT TO USE ANOTHER QUADRATIC? Y/N?"
  99.  INPUT ANS
  100.  IF ANS = "Y" THEN 10 ELSE END
  101.           =-1 IF A LESS THAN ZERO
  102. REM
  103. CASE SGN(DISCRIM) OF
  104.   -1: BEGIN
  105.       PRINT "ROOTS ARE: "; AXIS;