home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l180 / 2.ddi / TRIANGLE.BAS < prev    next >
Encoding:
BASIC Source File  |  1989-02-07  |  7.6 KB  |  244 lines

  1.   ' ************************************************
  2.   ' **  Name:          TRIANGLE                   **
  3.   ' **  Type:          Toolbox                    **
  4.   ' **  Module:        TRIANGLE.BAS               **
  5.   ' **  Language:      Microsoft QuickBASIC 4.00  **
  6.   ' ************************************************
  7.   '
  8.   ' USAGE:          No command line parameters
  9.   ' REQUIREMENTS:   CGA
  10.   ' .MAK FILE:      TRIANGLE.BAS
  11.   '                 QCALMATH.BAS
  12.   ' PARAMETERS:     (none)
  13.   ' VARIABLES:      sA$        User input of side a
  14.   '                 sB$        User input of side b
  15.   '                 sC$        User input of side c
  16.   '                 aA$        User input of angle A
  17.   '                 aB$        User input of angle B
  18.   '                 aC$        User input of angle C
  19.   '                 sA#        Side A
  20.   '                 sB#        Side B
  21.   '                 sC#        Side C
  22.   '                 aA#        Angle A
  23.   '                 aB#        Angle B
  24.   '                 aC#        Angle C
  25.   
  26.   ' Functions
  27.     DECLARE FUNCTION Deg2Rad# (deg#)
  28.     DECLARE FUNCTION Rad2Deg# (rad#)
  29.     DECLARE FUNCTION ArcCosine# (x#)
  30.     DECLARE FUNCTION ArcSine# (x#)
  31.     DECLARE FUNCTION TriangleArea# (sA#, sB#, sC#)
  32.   
  33.   ' Subprograms
  34.     DECLARE SUB Triangle (sA#, sB#, sC#, aA#, aB#, aC#)
  35.   
  36.   ' Initialization
  37.     SCREEN 2
  38.     CLS
  39.     PRINT "TRIANGLE"
  40.   
  41.   ' Draw a representative triangle
  42.     WINDOW (0, 0)-(1, 1)
  43.     LINE (.3, .7)-(.8, .7)
  44.     LINE -(.4, 1)
  45.     LINE -(.3, .7)
  46.   
  47.   ' Label the triangle sides
  48.     LOCATE 4, 26
  49.     PRINT "a"
  50.     LOCATE 3, 48
  51.     PRINT "b"
  52.     LOCATE 9, 42
  53.     PRINT "c"
  54.   
  55.   ' Label the triangle angles
  56.     LOCATE 7, 55
  57.     PRINT "A"
  58.     LOCATE 7, 28
  59.     PRINT "B"
  60.     LOCATE 2, 33
  61.     PRINT "C"
  62.   
  63.   ' Ask user for the known data
  64.     LOCATE 12, 1
  65.     PRINT "Enter known sides and angles (deg),"
  66.     PRINT "and press Enter for unknowns..."
  67.     LOCATE 16, 1
  68.     LINE INPUT "Side  a  "; sA$
  69.     LINE INPUT "Side  b  "; sB$
  70.     LINE INPUT "Side  c  "; sC$
  71.     PRINT
  72.     LINE INPUT "Angle A  "; aA$
  73.     LINE INPUT "Angle B  "; aB$
  74.     LINE INPUT "Angle C  "; aC$
  75.     PRINT
  76.   
  77.   ' Convert to numeric values
  78.     sA# = VAL(sA$)
  79.     sB# = VAL(sB$)
  80.     sC# = VAL(sC$)
  81.     aA# = Deg2Rad#(VAL(aA$))
  82.     aB# = Deg2Rad#(VAL(aB$))
  83.     aC# = Deg2Rad#(VAL(aC$))
  84.   
  85.   ' Solve for the unknowns
  86.     Triangle sA#, sB#, sC#, aA#, aB#, aC#
  87.   
  88.   ' Output the results
  89.     LOCATE 16, 1
  90.     PRINT "Side  a  "; sA#
  91.     PRINT "Side  b  "; sB#
  92.     PRINT "Side  c  "; sC#
  93.     PRINT
  94.     PRINT "Angle A  "; Rad2Deg#(aA#); "Deg"
  95.     PRINT "Angle B  "; Rad2Deg#(aB#); "Deg"
  96.     PRINT "Angle C  "; Rad2Deg#(aC#); "Deg"
  97.     LOCATE 20, 40
  98.     PRINT "Area = "; TriangleArea#(sA#, sB#, sC#)
  99.  
  100.   ' All done
  101.     LOCATE 24, 1
  102.     PRINT "Press any key to continue";
  103.     DO
  104.     LOOP WHILE INKEY$ = ""
  105.     SCREEN 0
  106.     END
  107.  
  108.   ' ************************************************
  109.   ' **  Name:          Deg2Rad#                   **
  110.   ' **  Type:          Function                   **
  111.   ' **  Module:        TRIANGLE.BAS               **
  112.   ' **  Language:      Microsoft QuickBASIC 4.00  **
  113.   ' ************************************************
  114.   '
  115.   ' Converts degree angular units to radians.
  116.   '
  117.   ' EXAMPLE OF USE:  r# = Deg2Rad#(deg#)
  118.   ' PARAMETERS:      deg#       Degrees
  119.   ' VARIABLES:       (none)
  120.   ' MODULE LEVEL
  121.   '   DECLARATIONS:  DECLARE FUNCTION Deg2Rad# (deg#)
  122.   '
  123.     FUNCTION Deg2Rad# (deg#) STATIC
  124.         Deg2Rad# = deg# / 57.29577951308232#
  125.     END FUNCTION
  126.  
  127.   ' ************************************************
  128.   ' **  Name:          Rad2Deg#                   **
  129.   ' **  Type:          Function                   **
  130.   ' **  Module:        TRIANGLE.BAS               **
  131.   ' **  Language:      Microsoft QuickBASIC 4.00  **
  132.   ' ************************************************
  133.   '
  134.   ' Converts radian angular units to degrees.
  135.   '
  136.   ' EXAMPLE OF USE:  d# = Rad2Deg#(rad#)
  137.   ' PARAMETERS:      rad#       Radians
  138.   ' VARIABLES:       (none)
  139.   ' MODULE LEVEL
  140.   '   DECLARATIONS:  DECLARE FUNCTION Rad2Deg# (rad#)
  141.   '
  142.     FUNCTION Rad2Deg# (rad#) STATIC
  143.         Rad2Deg# = rad# * 57.29577951308232#
  144.     END FUNCTION
  145.  
  146.   ' ************************************************
  147.   ' **  Name:          Triangle                   **
  148.   ' **  Type:          Subprogram                 **
  149.   ' **  Module:        TRIANGLE.BAS               **
  150.   ' **  Language:      Microsoft QuickBASIC 4.00  **
  151.   ' ************************************************
  152.   '
  153.   ' Calculates all sides and angles of a triangle,
  154.   ' assuming enough sides and angles are given.
  155.   '
  156.   ' EXAMPLE OF USE:  Triangle sA#, sB#, sC#, aA#, aB#, aC#
  157.   ' PARAMETERS:      sA#        Side A
  158.   '                  sB#        Side B
  159.   '                  sC#        Side C
  160.   '                  aA#        Angle A
  161.   '                  aB#        Angle B
  162.   '                  aC#        Angle C
  163.   ' VARIABLES:       i%         Looping index
  164.   ' MODULE LEVEL
  165.   '   DECLARATIONS:  DECLARE SUB Triangle (sA#, sB#, sC#, aA#, aB#, aC#)
  166.   '
  167.     SUB Triangle (sA#, sB#, sC#, aA#, aB#, aC#) STATIC
  168.       
  169.         FOR i% = 1 TO 18
  170.           
  171.             IF aA# = 0# THEN
  172.                 IF sA# <> 0# AND sB# <> 0# AND sC# <> 0# THEN
  173.                     t# = sB# * sB# + sC# * sC# - sA# * sA#
  174.                     aA# = ArcCosine#(t# / 2# / sB# / sC#)
  175.                 END IF
  176.             END IF
  177.           
  178.             IF aB# = 0# THEN
  179.                 IF sA# <> 0# AND sB# <> 0# AND aA# <> 0# THEN
  180.                     aB# = ArcSine#(sB# * SIN(aA#) / sA#)
  181.                 END IF
  182.             END IF
  183.           
  184.             IF aC# = 0# THEN
  185.                 IF aA# <> 0# AND aB# <> 0# THEN
  186.                     aC# = 3.141592653589793# - aA# - aB#
  187.                 END IF
  188.             END IF
  189.           
  190.             IF sB# = 0# THEN
  191.                 IF sA# <> 0# AND aB# <> 0# AND aA# <> 0# THEN
  192.                     sB# = sA# * SIN(aB#) / SIN(aA#)
  193.                 END IF
  194.             END IF
  195.           
  196.             IF sC# = 0# THEN
  197.                 IF sA# <> 0# AND sB# <> 0# AND aC# <> 0# THEN
  198.                     t# = sA# * sA# + sB# * sB#
  199.                     sC# = SQR(t# - 2# * sA# * sB# * COS(aC#))
  200.                 END IF
  201.             END IF
  202.           
  203.             IF i% MOD 2 THEN
  204.                 SWAP sB#, sC#
  205.                 SWAP aB#, aC#
  206.             ELSE
  207.                 SWAP sA#, sB#
  208.                 SWAP aA#, aB#
  209.             END IF
  210.           
  211.         NEXT i%
  212.       
  213.     END SUB
  214.  
  215.   ' ************************************************
  216.   ' **  Name:          TriangleArea#              **
  217.   ' **  Type:          Function                   **
  218.   ' **  Module:        TRIANGLE.BAS               **
  219.   ' **  Language:      Microsoft QuickBASIC 4.00  **
  220.   ' ************************************************
  221.   '
  222.   ' Returns the area of a triangle given the three sides.
  223.   '
  224.   ' EXAMPLE OF USE:  TriangleArea# sA#, sB#, sC#
  225.   ' PARAMETERS:      sA#        Side A
  226.   '                  sB#        Side B
  227.   '                  sC#        Side C
  228.   ' VARIABLES:       s#         Sum of the three sides of the triangle
  229.   '                             divided by two
  230.   '                  t1#        Temporary variable
  231.   '                  t2#        Temporary variable
  232.   '                  t3#        Temporary variable
  233.   ' MODULE LEVEL
  234.   '   DECLARATIONS:  DECLARE FUNCTION TriangleArea# (sA#, sB#, sC#)
  235.   '
  236.     FUNCTION TriangleArea# (sA#, sB#, sC#) STATIC
  237.         s# = (sA# + sB# + sC#) / 2#
  238.         t1# = s# - sA#
  239.         t2# = s# - sB#
  240.         t3# = s# - sC#
  241.         TriangleArea# = SQR(s# * t1# * t2# * t3#)
  242.     END FUNCTION
  243.  
  244.