Advertisement
kokokozhina

Untitled

Dec 12th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 4.27 KB | None | 0 0
  1. # подгружаются основные определения
  2. require_relative './task16-math'
  3.  
  4. class Pi < Number
  5.   PI = Math::PI
  6. end
  7.  
  8. class Sin < MathExpression
  9.   def initialize(e = Number.new(1)) # e - выражение, для которого ищется синус
  10.     @e = e  # - аргумент
  11.   end
  12.  
  13.   def eval env
  14.     e = @e.eval env
  15.     e.evalExp
  16.   end
  17.  
  18.   def derivative var
  19.     e = @e.derivative var
  20.     e.multiply #cos @sin
  21.  
  22.   end
  23.  
  24. end
  25.  
  26. class Cos < MathExpression
  27.  
  28. end
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. # ПРИМЕРЫ
  36. puts(Derivative.new(
  37.         Multiply.new(
  38.           Add.new(
  39.             Add.new(
  40.               Multiply.new(Number.new(2),      
  41.                            Variable.new("x")),
  42.               Multiply.new(Number.new(3),
  43.                            Variable.new("y"))),
  44.             Negate.new(Variable.new("z"))),
  45.           Add.new(Number.new(5),
  46.                   Variable.new("x"))),
  47.         "x"))  
  48.  
  49. puts(Let.new("a", Multiply.new(Number.new(2),
  50.                                Variable.new("x")),        # a = 2x
  51.        Let.new("b", Multiply.new(Number.new(3),
  52.                                  Variable.new("y")),      # b = 3y
  53.          Let.new("e", Add.new(Variable.new("a"),        
  54.                               Variable.new("b")),         # e = a + b
  55.             Multiply.new(Multiply.new(Variable.new("e"),
  56.                                       Variable.new("e")),
  57.                          Variable.new("e"))))))            
  58.  
  59. puts(Let.new("a", Multiply.new(Number.new(2),
  60.                                Variable.new("x")),   # a = 2x
  61.        Let.new("b", Multiply.new(Number.new(3),
  62.                                  Variable.new("y")), # b = 3y
  63.          Let.new("cube",                             # cube(e) = e * e * e
  64.                  MyFunc.new(nil, "e",
  65.                    Multiply.new(Multiply.new(Variable.new("e"),
  66.                                              Variable.new("e")),
  67.                                 Variable.new("e"))),
  68.            # вычисление cube(a + b) + cube(b)
  69.            Add.new(Call.new(Variable.new("cube"),        # вызов cube(a + b)
  70.                             Add.new(Variable.new("a"),
  71.                                     Variable.new("b"))),
  72.                    Call.new(Variable.new("cube"),        # вызов cube(b)
  73.                             Variable.new("b")))))))
  74.  
  75. # вычисление выражений
  76. puts(Derivative.new(
  77.         Multiply.new(
  78.           Add.new(
  79.             Add.new(
  80.               Multiply.new(Number.new(2),      
  81.                            Variable.new("x")),
  82.               Multiply.new(Number.new(3),
  83.                            Variable.new("y"))),
  84.             Negate.new(Variable.new("z"))),
  85.           Add.new(Number.new(5),
  86.                   Variable.new("x"))),
  87.         "x").eval_exp)  
  88.  
  89. puts(Let.new("a", Multiply.new(Number.new(2),
  90.                                Variable.new("x")),        # a = 2x
  91.        Let.new("b", Multiply.new(Number.new(3),
  92.                                  Variable.new("y")),      # b = 3y
  93.          Let.new("e", Add.new(Variable.new("a"),        
  94.                               Variable.new("b")),         # e = a + b
  95.             Multiply.new(Multiply.new(Variable.new("e"),
  96.                                       Variable.new("e")),
  97.                          Variable.new("e"))))).eval_exp)            
  98.  
  99. puts(Let.new("a", Multiply.new(Number.new(2),
  100.                                Variable.new("x")),   # a = 2x
  101.        Let.new("b", Multiply.new(Number.new(3),
  102.                                  Variable.new("y")), # b = 3y
  103.          Let.new("cube",                             # cube(e) = e * e * e
  104.                  MyFunc.new(nil, "e",
  105.                    Multiply.new(Multiply.new(Variable.new("e"),
  106.                                              Variable.new("e")),
  107.                                 Variable.new("e"))),
  108.            # вычисление cube(a + b) + cube(b)
  109.            Add.new(Call.new(Variable.new("cube"),        # вызов cube(a + b)
  110.                             Add.new(Variable.new("a"),
  111.                                     Variable.new("b"))),
  112.                    Call.new(Variable.new("cube"),        # вызов cube(b)
  113.                             Variable.new("b")))))).eval_exp)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement