Wolfram
11:06 09-12-2010 Фух!
Сдал основы функционального программирования (Хаскель) на отлично. Начало сессии положено. Первый экзамен - завтра (охрана труда).


Часть работы на память:

absolut :: Double -> Double
absolut x = if x > 0 then x
else x*(-1)

--Вычисление расстояния между точками (длину отрезка)
getLenPrime :: (Integer, Integer) -> (Integer, Integer) -> Double
getLenPrime (x1, y1) (x2, y2) = sqrt((fromInteger((x1-x2)^2))+(fromInteger((y1-y2)^2)))

getTypeCoeff :: Typegraph -> Double
getTypeCoeff Courier = 1.1
getTypeCoeff Lucida = 1.3
getTypeCoeff Fixedsys = 1.0


{-goodTriangle :: (Integer, Integer) (Integer, Integer) (Integer, Integer) > Bool
goodTriangle (x1, y1) (x2, y2) (x3, y3) = if x1 - -}


data Typegraph = Courier | Lucida | Fixedsys
deriving (Show, Eq)

data Geometry = Circle (Integer, Integer) Double |
Rectangle (Double, Double) (Double, Double) |
Triangle (Integer, Integer) (Integer, Integer) (Integer, Integer) |
TextArea (Integer, Integer) Typegraph String
deriving (Show, Eq)

area :: Geometry -> Double
area (Circle (x, y) r) = 2*3.14*r
area (Rectangle (x1, y1) (x2, y2)) = (absolut (x1-x2)) * (absolut (y1-y2))
area (Triangle (x1, y1) (x2, y2) (x3, y3)) = 0.0
area (TextArea (x, y) ty str) = area (Rectangle (fromInteger(x), fromInteger(y)) ((fromInteger(x)+(fromInteger(toInteger(length(str)))*(getTypeCoeff ty)), fromInteger(y)+(getTypeCoeff ty))))

getBound :: Geometry -> Geometry
getBound (Circle (x, y) r) = Rectangle (fromInteger(x)-r, fromInteger(x)+r) (fromInteger(y)+r, (fromInteger(y)-r))
getBound (Rectangle (x1, y1) (x2, y2)) = Rectangle (x1, y1) (x2, y2)
getBound (TextArea (x, y) ty str) = Rectangle (fromInteger(x), fromInteger(y)) ((fromInteger(x)+(fromInteger(toInteger(length(str)))*(getTypeCoeff ty)), fromInteger(y)+(getTypeCoeff ty)))
getBound (Triangle (x1, y1) (x2, y2) (x3, y3)) = Rectangle (0.0, 0.0) (0.0, 0.0)

Так и не дописал самое фкусное.
Комментарии:
Гость
12:15 09-12-2010
клас. умница.
Wolfram
12:59 09-12-2010
Спасибо! Сейчас работаю над Прологом...