demo_pascal_diff.htm

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

HTM
482
字号
    <font color="blue"><b>end</b></font>
    <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> A.length = 3 <font color="blue"><b>then</b></font>
    <font color="blue"><b>begin</b></font>
      Oper := A[0];
      LL := InOrder(A[1]);
      RR := InOrder(A[2]);

      <font color="blue"><b>if</b></font> (Copy(RR, 1, 1) = OP_SUB) <font color="blue"><b>and</b></font> (Oper = OP_ADD) <font color="blue"><b>then</b></font>
        Oper := <font color="Red">''</font>;

      result := <font color="Red">'('</font> + LL + oper + RR + <font color="Red">')'</font>;
    <font color="blue"><b>end</b></font>;
  <font color="blue"><b>end</b></font>
  <font color="blue"><b>else</b></font>
    result := toString(A);
<font color="blue"><b>end</b></font>;

<font color="blue"><b>procedure</b></font> Compress(R: Variant);
<font color="blue"><b>var</b></font>
  K: Integer;
  Oper: <font color="blue"><b>String</b></font>;
  X1, X2, U, V: Variant;
  Ground: Boolean;
<font color="blue"><b>begin</b></font>
  <font color="blue"><b>if</b></font> IsCompound(R) <font color="blue"><b>then</b></font>
    K := R.length
  <font color="blue"><b>else</b></font>
    K := 0;
    
  <font color="blue"><b>if</b></font> K = 2 <font color="blue"><b>then</b></font>
  <font color="blue"><b>begin</b></font>
    Oper := R[0];
    <font color="blue"><b>if</b></font> Oper = OP_UN <font color="blue"><b>then</b></font>
    <font color="blue"><b>begin</b></font>
      X1 := @ R[1];
      <font color="blue"><b>if</b></font> IsCompound(X1) <font color="blue"><b>then</b></font>
        Compress(X1);
      <font color="blue"><b>if</b></font> IsConstant(X1) <font color="blue"><b>then</b></font>
        X1 := - X1;
    <font color="blue"><b>end</b></font>;
  <font color="blue"><b>end</b></font>
  <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> K = 3 <font color="blue"><b>then</b></font>
  <font color="blue"><b>begin</b></font>
    Oper := R[0];
    X1 := @ R[1];
    X2 := @ R[2];

    <font color="blue"><b>if</b></font> IsCompound(X1) <font color="blue"><b>then</b></font>
      Compress(X1);
    <font color="blue"><b>if</b></font> IsCompound(X2) <font color="blue"><b>then</b></font>
      Compress(X2);

    Ground := IsConstant(X1) <font color="blue"><b>and</b></font> IsConstant(X2);

    <font color="blue"><b>if</b></font> Oper = OP_ADD <font color="blue"><b>then</b></font>
    <font color="blue"><b>begin</b></font>
      <font color="blue"><b>if</b></font> Ground <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := X1 + X2
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsZero(X1) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := X2
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsZero(X2) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := X1
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1 = X2 <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_MULT, 2, X1]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsNeg(X1) <font color="blue"><b>and</b></font> (<font color="blue"><b>not</b></font> IsNeg(X2)) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_SUB, X2, X1[1]]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsNeg(X2) <font color="blue"><b>and</b></font> (<font color="blue"><b>not</b></font> IsNeg(X1)) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_SUB, X1, X2[1]]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X1) <font color="blue"><b>and</b></font> IsMult(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font> X1[1] = X2[1] <font color="blue"><b>then</b></font>
          <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1[1], [OP_ADD, X1[2], X2[2]]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1[2] = X2[2] <font color="blue"><b>then</b></font>
          <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1[2], [OP_ADD, X1[1], X2[1]]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X1) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>  X1[1] = X2 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X2, [OP_ADD, X1[2], 1]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1[2] = X2 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X2, [OP_ADD, X1[1], 1]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>  X2[1] = X1 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1, [OP_ADD, X2[2], 1]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X2[2] = X1 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1, [OP_ADD, X2[1], 1]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsAdd(X1) <font color="blue"><b>and</b></font> IsConstant(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font> IsConstant(X1[1]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1[2], X1[1] + X2]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsConstant(X1[2]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1[1], X1[2] + X2];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsAdd(X2) <font color="blue"><b>and</b></font> IsConstant(X1) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font> IsConstant(X2[1]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X2[2], X2[1] + X1]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsConstant(X2[2]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X2[1], X2[2] + X1];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsSub(X1) <font color="blue"><b>and</b></font> IsConstant(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font> IsConstant(X1[1]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_SUB, X1[1] + X2, X1[2]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsConstant(X1[2]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X2 - X1[2], X1[1]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsSub(X2) <font color="blue"><b>and</b></font> IsConstant(X1) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font> IsConstant(X2[1]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_SUB, X1 + X2[1], X2[2]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsConstant(X2[2]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1 - X2[2], X2[1]];
      <font color="blue"><b>end</b></font>;
    <font color="blue"><b>end</b></font>
    <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> Oper = OP_SUB <font color="blue"><b>then</b></font>
    <font color="blue"><b>begin</b></font>
      <font color="blue"><b>if</b></font> Ground  <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := X1 - X2
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsZero(X1) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_UN, X2]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsZero(X2) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := X1
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1 = X2 <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := 0
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsNeg(X1) <font color="blue"><b>and</b></font> (<font color="blue"><b>not</b></font> IsNeg(X2)) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1[1], X2]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsNeg(X2) <font color="blue"><b>and</b></font> (<font color="blue"><b>not</b></font> IsNeg(X1)) <font color="blue"><b>then</b></font>
        <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1, X2[1]]
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X1) <font color="blue"><b>and</b></font> IsMult(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>      X1[1] = X2[1] <font color="blue"><b>then</b></font>
          <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1[1], [OP_SUB, X1[2], X2[2]]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1[2] = X2[2] <font color="blue"><b>then</b></font>
          <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1[2], [OP_SUB, X1[1], X2[1]]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X1) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>      X1[1] = X2 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X2, [OP_SUB, X1[2], 1]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X1[2] = X2 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X2, [OP_SUB, X1[1], 1]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsMult(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>      X2[1] = X1 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1, [OP_SUB, X2[2], 1]]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> X2[2] = X1 <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_MULT, X1, [OP_SUB, X2[1], 1]];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsAdd(X1) <font color="blue"><b>and</b></font> IsConstant(X2) <font color="blue"><b>then</b></font>
      <font color="blue"><b>begin</b></font>
        <font color="blue"><b>if</b></font>      IsConstant(X1[1]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1[2], X1[1] - X2]
        <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsConstant(X1[2]) <font color="blue"><b>then</b></font>
           <font color="blue"><b>reduced</b></font> R := [OP_ADD, X1[1], X1[2] - X2];
      <font color="blue"><b>end</b></font>
      <font color="blue"><b>else</b></font> <font color="blue"><b>if</b></font> IsAdd(X2) <font color="blue"><b>and</b></font> IsConstant(X1) <font color="blue"><b>then</b></font>

⌨️ 快捷键说明

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