home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / units / mathbox.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  8KB  |  299 lines

  1. unit Mathbox;
  2. {$N+}
  3.  
  4.   This unit contains routines that are useful when you need to work 
  5. with numbers. The routines you find here are of one basic type:
  6.  
  7.   + Conversion programs which translate numbers into strings.
  8.  
  9. }
  10.  
  11. interface
  12.  
  13. function ArcCos(x: Real): Real;
  14. function ArcSin(x: Real): Real;
  15. function Comp2Str(N: Comp): String;
  16. function Int2StrPad0(N: LongInt; Len: Integer): String;
  17. function Int2Str(N: LongInt): String;
  18. function IsEqual(R1, R2: Double): Boolean;
  19. function LogXY(x, y: Real): Real;
  20. function Pennies2Dollars(C: Comp): String;
  21. function Power(X: Integer; Y: Integer): Real;
  22. function Real2Str(N: Real; Width, Places: integer): String;
  23. function Str2Comp(MyString: string): Comp;
  24. function Str2Pennies(S: String): Comp;
  25. function Str2Real(MyString: string): Real;
  26. function XToTheY(x, y: Real): Real;
  27.  
  28. implementation
  29.  
  30. uses
  31.   StrBox;
  32.  
  33. {----------------------------------------------------
  34.        Name: ArcCos function
  35. Declaration: function ArcCos(x: Real): Real;
  36.        Unit: MathBox
  37.        Code: N
  38.        Date: 02/20/94
  39. Description: Find the ArcCos of a Real
  40. -----------------------------------------------------}
  41. function ArcCos(x: Real): Real;
  42. begin
  43.   ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x);
  44. end;
  45.  
  46.  
  47. {----------------------------------------------------
  48.        Name: ArcSin function
  49. Declaration: function ArcSin(x: Real): Real;
  50.        Unit: MathBox
  51.        Code: N
  52.        Date: 02/20/94
  53. Description: Find the ArcSin of a Real
  54. -----------------------------------------------------}
  55. function ArcSin(x: Real): Real;
  56. begin
  57.   ArcSin := ArcTan(x / Sqrt( 1 - Sqr(x)) / x);
  58. end;
  59.  
  60. {----------------------------------------------------
  61.        Name: Comp2Str function
  62. Declaration: Comp2Str(N: real; Width, Places: integer)
  63.        Unit: MathBox
  64.        Code: N
  65.        Date: 02/17/94
  66. Description: Converts a Comp into a String
  67. -----------------------------------------------------}
  68. function Comp2Str(N: Comp): String;
  69. var
  70.   TempString: String;
  71. begin
  72.   Str(N:0:0, TempString);
  73.   Comp2Str := TempString;
  74. end;
  75.  
  76. {----------------------------------------------------
  77.        Name: Int2Str function
  78. Declaration: Int2Str(N: LongInt): String;
  79.        Unit: MathBox
  80.        Code: N
  81.        Date: 06/25/94
  82. Description: Converts a number into a string and pads
  83.              the string with zeros if it is less than
  84.              Len characters long.
  85. -----------------------------------------------------}
  86. function Int2Str(N: LongInt): String;
  87. var
  88.   S : String;
  89. begin
  90.   Str(N:0,S);
  91.   Int2Str := S;
  92. end;
  93.  
  94. {----------------------------------------------------
  95.        Name: Int2StrPad0 function
  96. Declaration: Int2StrPad0(N: LongInt; Len: Integer): String;
  97.        Unit: MathBox
  98.        Code: N
  99.        Date: 03/01/94
  100. Description: Converts a number into a string and pads
  101.              the string with zeros if it is less than
  102.              Len characters long.
  103. -----------------------------------------------------}
  104. function Int2StrPad0(N: LongInt; Len: Integer): String;
  105. var
  106.   S : String;
  107. begin
  108.   Str(N:0,S);
  109.   while Length(S) < Len do
  110.     S := '0' + S;
  111.   Int2StrPad0 := S;
  112. end;
  113.  
  114. {----------------------------------------------------
  115.        Name: IsEqual function
  116. Declaration: IsEqual(R1, R2: Double): Boolean;
  117.        Unit: MathBox
  118.        Code: N
  119.        Date: 07/04/94
  120. Description: Tests to see if two doubles are effectively
  121.              equal. Floating point numbers are never
  122.              exact, so we need an approximation.
  123. -----------------------------------------------------}
  124. function IsEqual(R1, R2: Double): Boolean;
  125. var
  126.   R : Double;
  127. begin
  128.   R := Abs(R1 - R2);
  129.   if R > 0.0001 then
  130.     IsEqual := False
  131.   else
  132.     IsEqual := True;
  133. end;
  134.  
  135. {----------------------------------------------------
  136.        Name: LogXY function
  137. Declaration: function LogXY(x: Real): Real;
  138.        Unit: MathBox
  139.        Code: N
  140.        Date: 02/20/94
  141. Description: Log of X Y
  142. -----------------------------------------------------}
  143. function LogXY(x, y: Real): Real;
  144. begin
  145.   LogXY := Ln(x) / Ln(y);
  146. end;
  147.  
  148. {----------------------------------------------------
  149.        Name: Pennies2Dollars function
  150. Declaration: Pennies2Dollars(C: Comp): String;
  151.        Unit: MathBox
  152.        Code: N
  153.        Date: 02/17/94    
  154. Description: Converts a Comp type that represents a
  155.          certain number of pennies into a string
  156.              with two decimal places. 123 => $1.23
  157. -----------------------------------------------------}
  158. function Pennies2Dollars(C: Comp): String;
  159. var
  160.   S: string;
  161. begin
  162.   S := Comp2Str(C);
  163.   Insert('.', S, Length(S) - 1);
  164.  
  165.   if S[1] = '-' then begin           { Number negative? }
  166.     S := StripFrontChars(S, '-');
  167.     S := '-$' + S;
  168.   end else
  169.     S := '$' + S;
  170.  
  171.   Pennies2Dollars := S;
  172. end;
  173.  
  174. {----------------------------------------------------
  175.        Name: Power function
  176. Declaration: Power(X: Integer; Y: Integer): Real;
  177.        Unit: MathBox
  178.        Code: N
  179.        Date: 02/20/94
  180. Description: Raise X to the Y power
  181. -----------------------------------------------------}
  182. function Power(X: Integer; Y: Integer): Real;
  183. var
  184.   Count: Integer;
  185.   OutCome: Real;
  186. begin
  187.   OutCome := 1;
  188.   for Count := 1 to Y do
  189.     OutCome := OutCome * X;
  190.   Power := OutCome;
  191. end;
  192.  
  193. {----------------------------------------------------
  194.        Name: Real2Str function
  195. Declaration: Real2Str(N: real; Width, Places: integer)
  196.        Unit: MathBox
  197.        Code: N
  198.        Date: 02/17/94
  199. Description: Converts a Real number into a String
  200. -----------------------------------------------------}
  201. function Real2Str(N: Real; Width, Places: integer): String;
  202. var
  203.   TempString: String;
  204. begin
  205.   Str(N:Width:Places, TempString);
  206.   Real2Str := TempString;
  207. end;
  208.  
  209. {----------------------------------------------------
  210.        Name: Str2Comp function
  211. Declaration: Str2Real(MyString: string)
  212.        Unit: MathBox
  213.        Code: N
  214.        Date: 02/17/94
  215. Description: Converts a String to a Comp
  216. -----------------------------------------------------}
  217. function Str2Comp(MyString: string): Comp;
  218. var
  219.   ErrCode: Integer;
  220.   Temp: Comp;
  221. begin
  222.   If Mystring[0] = #0 then Str2Comp := 0
  223.   else begin
  224.     Val(Mystring, Temp, ErrCode);
  225.     if ErrCode = 0 then
  226.       Str2Comp := temp
  227.     else
  228.       Str2Comp := 0;
  229.   end;
  230. end;
  231.  
  232. {----------------------------------------------------
  233.        Name: Str2Pennies function
  234. Declaration: Str2Pennies(MyString: string)
  235.        Unit: MathBox
  236.        Code: N
  237.        Date: 02/17/94    
  238. Description: Converts a String to a Comp
  239. -----------------------------------------------------}
  240. function Str2Pennies(S: String): Comp;
  241. var
  242.   C: Comp;
  243.   i: Integer;
  244.   begin
  245.     if S[1] = '$' then Delete(S, 1, 1);
  246.     i := Pos('.', S);
  247.     if i = Length(S) then begin   { Is last character a period? }
  248.       Delete(S, i, 1);
  249.       S := S + '00';
  250.     end else
  251.       if i <> 0 then begin        { Some pennies?               }
  252.         Delete(S, i, 1);
  253.         if i = (Length(S)) then   { Only one char after decimal?}
  254.           S := S + '0'
  255.       end else
  256.         S := S + '00';            { No decimal, no pennies       }
  257.     C := Str2Comp(S);
  258.     Str2Pennies := C;
  259. end;
  260.  
  261. {----------------------------------------------------
  262.        Name: Str2Real function
  263. Declaration: Str2Real(MyString: string)
  264.        Unit: MathBox
  265.        Code: N
  266.        Date: 02/17/94
  267. Description: Converts a String to Real number
  268. -----------------------------------------------------}
  269. function Str2Real(MyString: string): Real;
  270. var
  271.   ErrCode: Integer;
  272.   Temp: Real;
  273. begin
  274.   If Mystring[0] = #0 then Str2Real := 0
  275.   else begin
  276.     Val(Mystring, Temp, ErrCode);
  277.     if ErrCode = 0 then
  278.       Str2Real := temp
  279.     else
  280.       Str2Real := 0;
  281.   end;
  282. end;
  283.  
  284. {----------------------------------------------------
  285.        Name: XToTheY function
  286. Declaration: XToTheY(x, y: Real): Real;
  287.        Unit: MathBox
  288.        Code: N
  289.        Date: 02/20/94
  290. Description: Raise X to the Y Power
  291. -----------------------------------------------------}
  292. function XToTheY(x, y: Real): Real;
  293. begin
  294.   XToTheY := Exp(y * Ln(x));
  295. end;
  296.  
  297. end.
  298.