Advertisement
Ladies_Man

Quadric eq Квад. уравнение

Mar 11th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 4.21 KB | None | 0 0
  1. package main
  2. import "fmt"
  3. import "math"
  4. import "math/cmplx"
  5.  
  6. var s_flt string = "float"
  7. var s_cmp string = "complex"
  8.  
  9. type mytype_f float64
  10. type mytype_c complex128
  11.  
  12. type Number interface {
  13.         Add(x Number) Number
  14.     Sub(x Number) Number
  15.     Mul(x Number) Number
  16.     Div(x Number) Number
  17.     MulInt(k int) Number
  18.     Sqrt() Number
  19.     String() string
  20. }
  21. //==============================================
  22. func (a mytype_f) Add(x Number) Number {
  23.     var ret, ok = x.(mytype_f)
  24.         var bad_ret mytype_f = 0
  25.     if ok { return a + ret }
  26.     return bad_ret
  27. }
  28. func (a mytype_c) Add(x Number) Number {
  29.     var ret, ok = x.(mytype_c)
  30.         var bad_ret mytype_c = 0
  31.     if ok { return a + ret }
  32.     return bad_ret
  33. }
  34. //==============================================
  35. func (a mytype_f) Sub(x Number) Number {
  36.     var ret, ok = x.(mytype_f)
  37.         var bad_ret mytype_f = 0
  38.     if ok { return a - ret }
  39.     return bad_ret
  40. }
  41. func (a mytype_c) Sub(x Number) Number {
  42.     var ret, ok = x.(mytype_c)
  43.         var bad_ret mytype_c = 0
  44.     if ok { return a - ret }
  45.     return bad_ret
  46. }
  47. //==============================================
  48. func (a mytype_f) Mul(x Number) Number {
  49.     var ret, ok = x.(mytype_f)
  50.         var bad_ret mytype_f = 0
  51.     if ok { return a * ret }
  52.     return bad_ret
  53. }
  54. func (a mytype_c) Mul(x Number) Number {
  55.     var ret, ok = x.(mytype_c)
  56.         var bad_ret mytype_c = 0
  57.     if ok { return a * ret }
  58.     return bad_ret
  59. }
  60. //==============================================
  61. func (a mytype_f) Div(x Number) Number {
  62.     var ret, ok = x.(mytype_f)
  63.         var bad_ret mytype_f = 0
  64.     if ok { return a / ret }
  65.     return bad_ret
  66. }
  67. func (a mytype_c) Div(x Number) Number {
  68.     var ret, ok = x.(mytype_c)
  69.         var bad_ret mytype_c = 0
  70.     if ok { return a / ret }
  71.     return bad_ret
  72. }
  73. //==============================================
  74. func (a mytype_f) MulInt(k int) Number {
  75.     var ret = mytype_f(k)
  76.     return a * ret
  77. }
  78. func (a mytype_c) MulInt(k int) Number {
  79.     int_part := float64(k)
  80.     var i_part float64 = 0
  81.     comp_construct := complex(int_part, i_part)
  82.     t_c_c := mytype_c(comp_construct)
  83.     return a * t_c_c
  84. }
  85. //==============================================
  86. func (a mytype_f) Sqrt() Number {
  87.     var t_a = float64(a)
  88.     ret := math.Sqrt(t_a)
  89.     return mytype_f(ret)
  90. }
  91. func (a mytype_c) Sqrt() Number {
  92.     var t_a = complex128(a)
  93.     ret := cmplx.Sqrt(t_a)
  94.     return mytype_c(ret)
  95. }
  96. //==============================================
  97. func (a mytype_f) String() string { return fmt.Sprintln(a) }
  98. func (a mytype_c) String() string { return fmt.Sprintln(a) }
  99. //==============================================
  100.  
  101. func solve(a, b, c Number) (x1, x2 Number) {
  102.         x1 = ((b.MulInt(-1)).Add(((b.Mul(b)).Sub((a.Mul(c)).MulInt(4))).Sqrt())).Div(a.MulInt(2))
  103.     x2 = ((b.MulInt(-1)).Sub(((b.Mul(b)).Sub((a.Mul(c)).MulInt(4))).Sqrt())).Div(a.MulInt(2))
  104.     return x1, x2
  105. }
  106.  
  107. func type_change(a, b, c mytype_f, ptr int) {
  108.         var x1, x2, in_a, in_b, in_c Number
  109.  
  110.     if 1 == ptr {
  111.         in_a, in_b, in_c = a, b, c
  112.  
  113.         x1, x2 = solve(in_a, in_b, in_c)
  114.  
  115.         var temp_x2 mytype_f = x2.(mytype_f)
  116.         var temp_x1 mytype_f = x1.(mytype_f)
  117.         var zero_f mytype_f = 0.00
  118.         if (temp_x1 == -temp_x2) && (temp_x1 == zero_f) { x2 = x1 }
  119.         fmt.Printf("%.2f %.2f", x1, x2)
  120.     }
  121.     if 2 == ptr {
  122.         var i_part mytype_f = 0
  123.  
  124.         t_a_c := mytype_c(complex(a, i_part))
  125.         t_b_c := mytype_c(complex(b, i_part))
  126.         t_c_c := mytype_c(complex(c, i_part))
  127.  
  128.         in_a, in_b, in_c = t_a_c, t_b_c, t_c_c
  129.  
  130.         x1, x2 = solve(in_a, in_b, in_c)
  131.  
  132.         var temp_x2 mytype_c = x2.(mytype_c)
  133.         var ret_val_real float64 = float64(real(temp_x2))
  134.         var ret_val_imag float64 = float64(imag(temp_x2))
  135.         var zero_c float64 = 0.00
  136.  
  137.         if ret_val_imag == zero_c {
  138.             ret_val_imag = ret_val_imag
  139.             //fmt.Printf("imaginable new  =%.2f\n", ret_val_imag)
  140.             new_x2 := mytype_c(complex(ret_val_real, zero_c))
  141.             fmt.Printf("%.2f ", x1)
  142.             fmt.Printf("%.2f", new_x2)
  143.             return
  144.         }
  145.  
  146.         fmt.Printf("%.2f %.2f", x1, x2)
  147.     }
  148. }
  149.  
  150. func main() {
  151.     var s_type string
  152.     input.Scanf("%s", &s_type)
  153.     var tc_a, tc_b, tc_c float64
  154.     input.Scanf("%f %f %f", &tc_a, &tc_b, &tc_c)
  155.         var a, b, c mytype_f = mytype_f(tc_a), mytype_f(tc_b), mytype_f(tc_c)
  156.     if s_type == s_flt {
  157.         p := 1
  158.         type_change(a, b, c, p)
  159.     } else {
  160.         p := 2
  161.         type_change(a, b, c, p)
  162.     }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement