demo_complex.htm

来自「Delphi脚本控件」· HTM 代码 · 共 429 行 · 第 1/2 页

HTM
429
字号
<html>
<head>
<link rel=stylesheet type="text/css" href="styles.css">
</head>

<body>

<h3>
Operator Overloading. Complex Numbers in paxJavaScript, paxPascal, paxBasic and paxC.
</h3>
<hr>

<H4>
paxJavaScript
</H4>


<blockquote>
<pre>
<font color="blue"><b>function</b></font> Complex(re, im)
{
  <font color="blue"><b>this</b></font>.re = re;
  <font color="blue"><b>this</b></font>.im = im;

  <font color="blue"><b>this</b></font>.op_Addition = <font color="blue"><b>function</b></font> (x, y){ <font color="blue"><b>return</b></font> <font color="blue"><b>new</b></font> Complex(x.re + y.re, x.im + y.im); }
  <font color="blue"><b>this</b></font>.op_Subtraction = <font color="blue"><b>function</b></font> (x, y){ <font color="blue"><b>return</b></font> <font color="blue"><b>new</b></font> Complex(x.re - y.re, x.im - y.im); }
  <font color="blue"><b>this</b></font>.op_Multiply = <font color="blue"><b>function</b></font> (x, y){ <font color="blue"><b>return</b></font> <font color="blue"><b>new</b></font> Complex(x.re * y.re - x.im * y.im,
                                                         x.re * y.im + y.re * x.im); }
  <font color="blue"><b>this</b></font>.op_Division = <font color="blue"><b>function</b></font> (x, y)
                     {
                       result = <font color="blue"><b>new</b></font> Complex(0, 0);
                       d = y.re * y.re + y.im * y.im;
                       result.re = (x.re * y.re + x.im * y.im) / d;
                       result.im = (x.im * y.re - x.re * y.im) / d;
                       <font color="blue"><b>return</b></font> result;
                     }
  <font color="blue"><b>this</b></font>.op_Negation = <font color="blue"><b>function</b></font> (x){ <font color="blue"><b>return</b></font> <font color="blue"><b>new</b></font> Complex(- x.re, - x.im); }
  <font color="blue"><b>this</b></font>.op_Equality = <font color="blue"><b>function</b></font> op_Equality(x, y) { <font color="blue"><b>return</b></font> (x.re == y.re) && (x.im == y.im); }
  <font color="blue"><b>this</b></font>.op_Inequality = <font color="blue"><b>function</b></font> op_Inequality(x, y) { <font color="blue"><b>return</b></font> (x.re != y.re) || (x.im != y.im); }
}

c1 = <font color="blue"><b>new</b></font> Complex(10, 20);
c2 = <font color="blue"><b>new</b></font> Complex(30, 40);
c3 = c1 + c2;
<font color="blue"><b>println</b></font> c3.re, <font color="Red">" "</font>, c3.im;
c3 = c1 - c2;
<font color="blue"><b>println</b></font> c3.re, <font color="Red">" "</font>, c3.im;
c3 = c1 * c2;
<font color="blue"><b>println</b></font> c3.re, <font color="Red">" "</font>, c3.im;
c3 = c1 / c2;
<font color="blue"><b>println</b></font> c3.re, <font color="Red">" "</font>, c3.im;
c3 = - c3;
<font color="blue"><b>println</b></font> c3.re, <font color="Red">" "</font>, c3.im;
<font color="blue"><b>println</b></font> c1 == c2;
<font color="blue"><b>println</b></font> c1 != c2;
</pre>
</blockquote>

<H4>
paxPascal
</H4>
<blockquote>
<pre>
<font color="blue"><b>type</b></font>
  Complex = <font color="blue"><b>record</b></font>
    re, im: Double;
    <font color="blue"><b>static</b></font> <font color="blue"><b>const</b></font> i: Complex = (0.0, 1.0);
    // +
    <font color="blue"><b>operator</b></font> + (x, y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re + y.re;
      result.im := x.im + y.im;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> + (x: Complex; y: Double): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re + y;
      result.im := x.im;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> + (x: Double; y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x + y.re;
      result.im := y.im;
    <font color="blue"><b>end</b></font>;
    // -
    <font color="blue"><b>operator</b></font> - (x, y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re - y.re;
      result.im := x.im - y.im;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> - (x: Complex; y: Double): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re - y;
      result.im := x.im;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> - (x: Double; y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x - y.re;
      result.im := - y.im;
    <font color="blue"><b>end</b></font>;
    // unary -
    <font color="blue"><b>operator</b></font> - (x: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := -x.re;
      result.im := -x.im;
    <font color="blue"><b>end</b></font>;
    // *
    <font color="blue"><b>operator</b></font> * (x, y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re * y.re - x.im * y.im;
      result.im := x.re * y.im + y.re * x.im;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> * (x: Complex; y: Double): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re * y;
      result.im := x.im * y;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> * (x: Double; y: Complex): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := y.re * x;
      result.im := y.im * x;
    <font color="blue"><b>end</b></font>;
    // /
    <font color="blue"><b>operator</b></font> / (x, y: Complex): Complex;
    <font color="blue"><b>var</b></font>
      d: Double;
    <font color="blue"><b>begin</b></font>
      d := y.re * y.re + y.im * y.im;
      result.re := (x.re * y.re + x.im * y.im) / d;
      result.im := (x.im * y.re - x.re * y.im) / d;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> / (x: Complex; y: Double): Complex;
    <font color="blue"><b>begin</b></font>
      result.re := x.re / y;
      result.im := x.im / y;
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> / (x: Double; y: Complex): Complex;
    <font color="blue"><b>var</b></font>
      d: Double;
    <font color="blue"><b>begin</b></font>
      d := y.re * y.re + y.im * y.im;
      result.re := x * y.re / d;
      result.im := - x * y.im / d;
    <font color="blue"><b>end</b></font>;
    // =
    <font color="blue"><b>operator</b></font> = (x, y: Complex): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x.re = y.re) <font color="blue"><b>and</b></font> (x.im = y.im);
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> = (x: Double; y: Complex): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x = y.re) <font color="blue"><b>and</b></font> (0.0 = y.im);
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> = (x: Complex; y: Double): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x.re = y) <font color="blue"><b>and</b></font> (x.im = 0.0);
    <font color="blue"><b>end</b></font>;
    // <>
    <font color="blue"><b>operator</b></font> <> (x, y: Complex): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x.re <> y.re) <font color="blue"><b>or</b></font> (x.im <> y.im);
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> <> (x: Double; y: Complex): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x <> y.re) <font color="blue"><b>or</b></font> (0.0 <> y.im);
    <font color="blue"><b>end</b></font>;
    <font color="blue"><b>operator</b></font> <> (x: Complex; y: Double): Boolean;
    <font color="blue"><b>begin</b></font>
      result := (x.re <> y) <font color="blue"><b>or</b></font> (x.im <> 0.0);
    <font color="blue"><b>end</b></font>;
  <font color="blue"><b>end</b></font>;
<font color="blue"><b>var</b></font>
  x, y, z: Complex;
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>println</b></font> Complex.i.re;
  <font color="blue"><b>println</b></font> Complex.i.im;

  x.re := 10.3;
  x.im := 100.2;
  y.re := 5.3;
  y.im := 5.5;
  
  <font color="blue"><b>println</b></font> x = y;
  <font color="blue"><b>println</b></font> x <> y;

  z := x + y;
  <font color="blue"><b>println</b></font> z.re;
  <font color="blue"><b>println</b></font> z.im;
  z := z + 5.5;
  <font color="blue"><b>println</b></font> z.re;
  <font color="blue"><b>println</b></font> z.im;
  z := 7 + z;
  <font color="blue"><b>println</b></font> z.re;
  <font color="blue"><b>println</b></font> z.im;
  z := -z;
  <font color="blue"><b>println</b></font> z.re;
  <font color="blue"><b>println</b></font> z.im;
<font color="blue"><b>end</b></font>.
</pre>
</blockquote>


<H4>
paxBasic
</H4>
<blockquote>
<pre>
<font color="blue"><b>Structure</b></font> Complex
  <font color="blue"><b>Dim</b></font> re <font color="blue"><b>As</b></font> <font color="blue"><b>Double</b></font>
  <font color="blue"><b>Dim</b></font> im <font color="blue"><b>As</b></font> <font color="blue"><b>Double</b></font>
  <font color="blue"><b>Shared</b></font> <font color="blue"><b>Dim</b></font> i <font color="blue"><b>As</b></font> Complex = (0.0, 1.0)
  ' +
  <font color="blue"><b>Operator</b></font> + (x <font color="blue"><b>As</b></font> Complex, y <font color="blue"><b>As</b></font> Complex) <font color="blue"><b>As</b></font> Complex
    <font color="blue"><b>Dim</b></font> result <font color="blue"><b>As</b></font> Complex = (x.re + y.re, x.im + y.im)
    <font color="blue"><b>return</b></font> result
  <font color="blue"><b>End</b></font> <font color="blue"><b>Operator</b></font>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?