fork(1) download
  1. data Tochka a = Tochka a a
  2. newtype Tochki a = Tochki {unTochki :: [a]}
  3.  
  4. instance (Show a) => Show (Tochka a) where
  5. show (Tochka x y) = show x ++ "\t" ++ show y
  6.  
  7. instance (Show a) => Show (Tochki a) where
  8. show = foldl (\acc x -> acc ++ show x ++ "\n") "Tochki:\n" . unTochki
  9.  
  10.  
  11. okrujnost r x0 y0 = \x -> sqrt (r ** 2 - (x - x0) ** 2) - y0
  12. liniya k x0 y0 = \x -> k * (x - x0) + y0
  13.  
  14. kusok0 = 0
  15. kusok1 r = negate . okrujnost r ((-2) * r) 0
  16. kusok2 r = liniya 1 (-r) 0
  17. kusok3 r = okrujnost r 0 0
  18. kusok4 r = liniya (-1) 0 r
  19. kusok5 r = liniya (3 / 6) r 0
  20.  
  21. funkciya r x
  22. | x < (-3) * r = kusok0
  23. | x < (-2) * r = kusok1 r x
  24. | x < (-r) = kusok2 r x
  25. | x < 0 = kusok3 r x
  26. | x < r = kusok4 r x
  27. | otherwise = kusok5 r x
  28.  
  29. main = do
  30. print "Enter R:"
  31. r <- readLn
  32. print $ Tochki $ map (\x -> Tochka x $ funkciya r x) [-9, -8.5 .. 9]
Success #stdin #stdout 0s 0KB
stdin
3
stdout
"Enter R:"
Tochki:
-9.0	-0.0
-8.5	-1.6583123951777
-8.0	-2.23606797749979
-7.5	-2.598076211353316
-7.0	-2.8284271247461903
-6.5	-2.958039891549808
-6.0	-3.0
-5.5	-2.5
-5.0	-2.0
-4.5	-1.5
-4.0	-1.0
-3.5	-0.5
-3.0	0.0
-2.5	1.6583123951777
-2.0	2.23606797749979
-1.5	2.598076211353316
-1.0	2.8284271247461903
-0.5	2.958039891549808
0.0	3.0
0.5	2.5
1.0	2.0
1.5	1.5
2.0	1.0
2.5	0.5
3.0	0.0
3.5	0.25
4.0	0.5
4.5	0.75
5.0	1.0
5.5	1.25
6.0	1.5
6.5	1.75
7.0	2.0
7.5	2.25
8.0	2.5
8.5	2.75
9.0	3.0