Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Область на плоскости является либо прямоугольником
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
sheldon sheldon вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.11.2010
Unhappy Область на плоскости является либо прямоугольником - 08.11.2010, 02:49

не могу сделать лабу (номер 4)))

помогите добрые люди

Область на плоскости является либо прямоугольником, либо кругом, либо объединением областей, либо их пересечением. Прямоугольник характеризуется координатами левого нижнего и правого верхнего углов, круг — координатами центра и радиусом. Разработайте структуру данных, представляющую область описанного вида. Определите следующие функции:


1) contains, проверяющая, что заданная точка попадает в область.
2) isRectangular, проверяющая, что область задается только прямоугольниками.
3) isEmpty, проверяющая, что область пуста, т. е. ни одна точка плоскости не попадает в нее.
Ответить с цитированием
  (#2 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 08.11.2010, 10:03

здесь


Don't fear the Monad
Ответить с цитированием
  (#3 (permalink)) Старый
sheldon sheldon вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.11.2010
По умолчанию 08.11.2010, 23:27

спасибо, прям совпадение такое прикольное
Ответить с цитированием
  (#4 (permalink)) Старый
Enlighter Enlighter вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.11.2010
По умолчанию 10.11.2010, 23:53

Хаскель не моя стихия,помогите пожалуйста-
Определите тип, представлюящий геометрические фигуры на плоскости. Фигура может быть окружностью ( х-ся координатами центра и радиусом), прямоугольником(х-ся координатами верхнего левого и нижнего правого углов),
треугольником(координаты вершин) и текстовым полем ( для него необходимо хранить положение левого нижнего угла, шрифт и строку, представляющую надпись) Шрифт задаётся из множества возможных шрифтов: Courier, Lucida и Fixedsys. Определить след.функции:
1) функция area , возвращающая площадь фигуры. Для текс.поля площадь зависит от высоты и ширины буквы в шрифте.Поскольку ширина букв в шрифтах одинакова, необходимо также определить вспомогательную фун-ию , для каждого шрифта возвращающая его габариты
2) фун-ия getrectangles, выбирает из списка только прямоугольники
3) фун-ия getbound , по заданной фигуре возвращающая ограничивающий её прямоугольник
4) как и фун-ия 3, по списку фигур -только возвращает список ограничивающих прямоугольников
5) фун-ия getFigure , по заданному списку фигур и координатам точки возв-ая первую фигуру, для которой точка попадает в её огран-ий прямоугольник. Использовать можно Maybe для возв-его значнеия
6) фун-ия move , по заданной фигуре и вектору сдвига возр-ая новую фигуру , сдвинутую относительно заданный на указанный вектор
Ответить с цитированием
  (#5 (permalink)) Старый
Enlighter Enlighter вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.11.2010
По умолчанию 11.11.2010, 22:06

Придётся самому мучаться с этими тугими шрифтами и фигурами...
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 11.11.2010, 22:22

[CPP]type Point2 = (Float, Float)

data Figure = Circle Point2 Float
| Rectangle Point2 Point2
| Triangle Point2 Point2 Point2
| Text Point2 Font String
deriving Show
data Font = Lucida | Courier | Fixedsys deriving Show
(x, y) .+ (x1, y1) = (x + x1, y + y1)
(x, y) .- (x1, y1) = (x - x1, y - y1)
(x, y) #+ x1 = (x + x1, y + x1)
fontProp font = case font of
Lucida -> (1, 2)
Courier -> (3, 4)
Fixedsys -> (5, 6)
dst (a, b) (c, d) = sqrt $ (a - c) ^ 2 + (b - d) ^ 2
area figure = case figure of
Circle _ r -> pi * r ^ 2
Rectangle x y ->
let (h, w) = y .- x in h * w
Triangle x y z ->
let
(x0, x1, x2, p) = (dst x y, dst y z, dst z x, (x0 + x1 + x2) / 2)
in
sqrt (p * (p - x0) * (p - x1) * (p - x2))
Text x f s ->
let
(h, w) = fontProp f
in h * fromIntegral(length s) * w
getrectangles xs = [ x | x @ (Rectangle _ _) <- xs ]
getbound figure = case figure of
Circle x r -> Rectangle (x #+ (- r)) (x #+ r)
Triangle
(x0, y0) (x1, y1) (x2, y2) ->
let
xs = [x0, x1, x2]
ys = [y0, y1, y2]
in Rectangle (minimum xs, minimum ys) (maximum xs, maximum ys)
Text x f s ->
let
(h, w) = fontProp f
in Rectangle x (x .+ (h, fromIntegral (length s) * w))

_ -> figure
getbounds = map getbound
getFigure (x2, y2) = listToMaybe . filter (contain . getbound) where
contain (Rectangle (x, y) (x1, y1))
= and [x <= x2, x1 >= x2,
y <= y2, y1 >= y2]
move figure x1 = case figure of
Circle x r -> Circle (x .+ x1) r
Rectangle x y -> Rectangle (x .+ x1) (y .+ x1)
Triangle x y z -> Triangle (x .+ x1) (y .+ x1) (z .+ x1)
Text x f s -> Text (x .+ x1) f s
[/CPP]


Don't fear the Monad
Ответить с цитированием
  (#7 (permalink)) Старый
Enlighter Enlighter вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.11.2010
По умолчанию 12.11.2010, 00:30

Спасибо Вам огромное, что бы я без Вас делал)
Ответить с цитированием
  (#8 (permalink)) Старый
Enlighter Enlighter вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.11.2010
Exclamation 12.11.2010, 17:59

Цитата:
Сообщение от calabi-yau Посмотреть сообщение
[CPP]type Point2 = (Float, Float)

data Figure = Circle Point2 Float
| Rectangle Point2 Point2
| Triangle Point2 Point2 Point2
| Text Point2 Font String
deriving Show
data Font = Lucida | Courier | Fixedsys deriving Show
(x, y) .+ (x1, y1) = (x + x1, y + y1)
(x, y) .- (x1, y1) = (x - x1, y - y1)
(x, y) #+ x1 = (x + x1, y + x1)
fontProp font = case font of
Lucida -> (1, 2)
Courier -> (3, 4)
Fixedsys -> (5, 6)
dst (a, b) (c, d) = sqrt $ (a - c) ^ 2 + (b - d) ^ 2
area figure = case figure of
Circle _ r -> pi * r ^ 2
Rectangle x y ->
let (h, w) = y .- x in h * w
Triangle x y z ->
let
(x0, x1, x2, p) = (dst x y, dst y z, dst z x, (x0 + x1 + x2) / 2)
in
sqrt (p * (p - x0) * (p - x1) * (p - x2))
Text x f s ->
let
(h, w) = fontProp f
in h * fromIntegral(length s) * w
getrectangles xs = [ x | x @ (Rectangle _ _) <- xs ]
getbound figure = case figure of
Circle x r -> Rectangle (x #+ (- r)) (x #+ r)
Triangle
(x0, y0) (x1, y1) (x2, y2) ->
let
xs = [x0, x1, x2]
ys = [y0, y1, y2]
in Rectangle (minimum xs, minimum ys) (maximum xs, maximum ys)
Text x f s ->
let
(h, w) = fontProp f
in Rectangle x (x .+ (h, fromIntegral (length s) * w))

_ -> figure
getbounds = map getbound
getFigure (x2, y2) = listToMaybe . filter (contain . getbound) where
contain (Rectangle (x, y) (x1, y1))
= and [x <= x2, x1 >= x2,
y <= y2, y1 >= y2]
move figure x1 = case figure of
Circle x r -> Circle (x .+ x1) r
Rectangle x y -> Rectangle (x .+ x1) (y .+ x1)
Triangle x y z -> Triangle (x .+ x1) (y .+ x1) (z .+ x1)
Text x f s -> Text (x .+ x1) f s
[/CPP]
Syntax error in input (unexpected keyword "deriving") пишет, копировал после скобок [CPP].
Ответить с цитированием
  (#9 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 12.11.2010, 18:46

движек форматирование съел.
Код:
type Point2 = (Float, Float)

data Figure = Circle Point2 Float
            | Rectangle Point2 Point2
            | Triangle Point2 Point2 Point2
            | Text Point2 Font String
            deriving Show

data Font = Lucida | Courier | Fixedsys deriving Show

(x, y) .+ (x1, y1) = (x + x1, y + y1)
(x, y) .- (x1, y1) = (x - x1, y - y1)
(x, y) #+ x1 = (x + x1, y + x1)

fontProp font = case font of
  Lucida -> (1, 2)
  Courier -> (3, 4)
  Fixedsys -> (5, 6)
 
dst (a, b) (c, d) = sqrt $ (a - c) ^ 2 + (b - d) ^ 2

area figure = case figure of
    Circle _ r -> pi * r ^ 2
    Rectangle x y ->
      let (h, w) = y .- x in h * w
    Triangle x y z ->
      let
        (x0, x1, x2, p) = (dst x y, dst y z, dst z x, (x0 + x1 + x2) / 2)
      in
       sqrt (p * (p - x0) * (p - x1) * (p - x2))
    Text x f s ->
      let
        (h, w) = fontProp f
      in h * fromIntegral(length s) * w
         
getrectangles xs = [ x | x @ (Rectangle _ _) <- xs ]

getbound figure = case figure of
  Circle x r -> Rectangle (x #+ (- r)) (x #+ r)
  Triangle
    (x0, y0) (x1, y1) (x2, y2) ->
      let
        xs = [x0, x1, x2]
        ys = [y0, y1, y2]
      in Rectangle (minimum xs, minimum ys) (maximum xs, maximum ys)
  Text x f s ->
    let
      (h, w) = fontProp f
    in Rectangle x (x .+ (h, fromIntegral (length s) * w))

  _ -> figure
 
getbounds = map getbound

getFigure (x2, y2) = listToMaybe . filter (contain . getbound) where
  contain (Rectangle (x, y) (x1, y1))
    = and [x <= x2, x1 >= x2,
           y <= y2, y1 >= y2]

move figure x1 = case figure of
  Circle x r -> Circle (x .+ x1) r
  Rectangle x y -> Rectangle (x .+ x1) (y .+ x1)
  Triangle x y z -> Triangle (x .+ x1) (y .+ x1) (z .+ x1)
  Text x f s -> Text (x .+ x1) f s


Don't fear the Monad
Ответить с цитированием
  (#10 (permalink)) Старый
Enlighter Enlighter вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.11.2010
По умолчанию 14.11.2010, 15:08

А можно ещё указать хотя бы 2 примера функций,что вводить,а то синтаксис немного смущает ?
Ответить с цитированием
  (#11 (permalink)) Старый
calabi-yau calabi-yau вне форума
Member
 
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 10 сообщениях
Регистрация: 28.09.2009
По умолчанию 14.11.2010, 16:25

использование:
haskell Код:
*Main> area (Circle (0, 4) 10)
314.15927

*Main> getrectangles [Rectangle (0,0) (1,1), Text (0,0) Fixedsys "string"]
[Rectangle (0.0,0.0) (1.0,1.0)]

*Main> getbound (Triangle (0,0) (1,1) (0,-4))
Rectangle (0.0,-4.0) (1.0,1.0)

*Main> getbounds [Triangle (0,0) (1,1) (0,-4), Circle (0,0) 3, Text (1,4) Fixedsys "haskell"]
[Rectangle (0.0,-4.0) (1.0,1.0),Rectangle (-3.0,-3.0) (3.0,3.0),Rectangle (1.0,4.0) (6.0,46.0)]

*Main> getFigure (0,1) [Triangle (0,0) (1,1) (0,-4), Circle (0,0) 3, Text (1,4) Fixedsys "haskell"]
Just (Triangle (0.0,0.0) (1.0,1.0) (0.0,-4.0))

*Main> move (Rectangle (0,0) (1,1)) (1,1)
Rectangle (1.0,1.0) (2.0,2.0)

движек форматирование съел №2.
haskell Код:
type Point2 = (Float, Float)
data Figure = Circle Point2 Float
            | Rectangle Point2 Point2
            | Triangle Point2 Point2 Point2
            | Text Point2 Font String
            deriving Show

data Font = Lucida | Courier | Fixedsys deriving Show

(x, y) .+ (x1, y1) = (x + x1, y + y1)
(x, y) .- (x1, y1) = (x - x1, y - y1)
(x, y) #+ x1 = (x + x1, y + x1)

fontProp font = case font of
  Lucida -> (1, 2)
  Courier -> (3, 4)
  Fixedsys -> (5, 6)

dst (a, b) (c, d) = sqrt $ (a - c) ^ 2 + (b - d) ^ 2

area figure = case figure of
  Circle _ r -> pi * r ^ 2
  Rectangle x y ->
    let (h, w) = y .- x in h * w
  Triangle x y z ->
    let
      (x0, x1, x2, p) = (dst x y, dst y z, dst z x, (x0 + x1 + x2) / 2)
    in
     sqrt (p * (p - x0) * (p - x1) * (p - x2))
  Text x f s ->
    let
      (h, w) = fontProp f
    in h * fromIntegral(length s) * w

getrectangles xs = [ x | x @ (Rectangle _ _) <- xs ]

getbound figure = case figure of
  Circle x r -> Rectangle (x #+ (- r)) (x #+ r)
  Triangle
    (x0, y0) (x1, y1) (x2, y2) ->
      let
        xs = [x0, x1, x2]
        ys = [y0, y1, y2]
      in Rectangle (minimum xs, minimum ys) (maximum xs, maximum ys)
  Text x f s ->
    let
      (h, w) = fontProp f
    in Rectangle x (x .+ (h, fromIntegral (length s) * w))

  _ -> figure

getbounds = map getbound

getFigure (x2, y2) = listToMaybe . filter (contain . getbound) where
  contain (Rectangle (x, y) (x1, y1))
    = and [x <= x2, x1 >= x2,
           y <= y2, y1 >= y2]

move figure x1 = case figure of
  Circle x r -> Circle (x .+ x1) r
  Rectangle x y -> Rectangle (x .+ x1) (y .+ x1)
  Triangle x y z -> Triangle (x .+ x1) (y .+ x1) (z .+ x1)
  Text x f s -> Text (x .+ x1) f s


Don't fear the Monad
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Либо АМД тупит, либо я scovoroda Процессоры 11 24.01.2012 20:54
Область на плоскости является либо прямоугольником, либо кругом amorita Haskell 13 15.12.2011 00:37
Круг на плоскости qwertyo Pascal 2 23.09.2011 22:57
Компьютер загружается только в безопасном режиме, в обычном - либо не грузится, либо ElusiveMoth Любые вопросы от новичков 21 20.09.2011 04:27
Либо с Линуксом, либо с компом... Анджей LINUX 2 26.08.2010 00:42
Клавиши на клавиатуре могут быть либо управляющими,либо алфавитно-цифровыми Amatory Haskell 8 09.12.2009 01:27
Диапазон содержит либо текст, либо цифры bank_notes Visual Basic 3 06.10.2008 21:46
Вакансия: Разработчик С/С++либо C# либо Java leto Работа 0 11.10.2006 13:14
Выделение данных прямоугольником ik C++ Builder 9 11.04.2006 02:19
Выделение детали прямоугольником ik C++ Builder 5 21.03.2006 09:06
Как определить пересекается ли круг с прямоугольником или нет Gopher Вопросы начинающих программистов 7 24.11.2004 17:11



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов