Advertisement
Guest User

Untitled

a guest
Aug 13th, 2016
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.50 KB | None | 0 0
  1. object Program {
  2.   /* Класс для работы с ФНП */
  3.   class MultivariableFunc(f: (Double, Double) => Double) {
  4.     /* Функция вычисления площади поверхности */
  5.     def S(x1:Double, y1:Double, x2:Double, y2:Double):Double = {
  6.       val dx:Double = 0.001
  7.       val dy:Double = 0.001
  8.  
  9.       def dT(a:Double, b:Double, c:Double):Double ={
  10.         val p:Double = (a+b+c)/2
  11.         math.sqrt(p*(p-a)*(p-b)*(p-c))
  12.       }
  13.  
  14.       def dS(x:Double, y:Double):Double ={
  15.         val A:Double = math.sqrt(math.pow(dx, 2) + math.pow(f(x+dx, y)-f(x, y), 2))
  16.         val B:Double = math.sqrt(math.pow(dy, 2) + math.pow(f(x+dx, y+dy)-f(x+dx, y), 2))
  17.         val C:Double = math.sqrt(math.pow(dx, 2) + math.pow(f(x, y+dy)-f(x+dx, y+dy), 2))
  18.         val D:Double = math.sqrt(math.pow(dy, 2) + math.pow(f(x, y)-f(x, y+dy), 2))
  19.         val E:Double = math.sqrt(math.pow(dx, 2) + math.pow(dy, 2) + math.pow(f(x, y)-f(x+dx, y+dy), 2))
  20.         dT(A, B, E) + dT(C, D, E)
  21.       }
  22.  
  23.       var s:Double = 0
  24.       for(x:Double <- x1.to(x2, dx)){
  25.         for(y:Double <- y1.to(y2, dy))
  26.           s+=dS(x, y)
  27.       }
  28.       return s
  29.     }
  30.   }
  31.  
  32.   def main(args:Array[String]){
  33.     /* Создаём экземпляр класса для функции f(x,y)=xy */
  34.     val f = new MultivariableFunc((x:Double, y:Double) => x*y)
  35.     /* Считаем площадь поверхности от A:(-1;-1) до B(1;1) */
  36.     val S:Double = f.S(-1, -1, 1, 1)
  37.     Console.println(S)
  38.   }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement