1 / 1 / 0
Регистрация: 08.12.2013
Сообщений: 72
1

Определение геометрической фигуры

30.06.2016, 10:13. Показов 2520. Ответов 5
Метки нет (Все метки)

Определите тип, представляющий геометрические фигуры на плоскости. Фигура может быть либо окружностью (характеризуется координатами центра и радиусом), прямоугольником(характеризуется координатами верхнего левого и нижнего правого углов), треугольником ( координаты вершин) и текстовым полем (для него необходимо хранить положение левого нижнего угла, шрифт и строку, представляющую надпись). Шрифт задается из множества трех возможных шрифтов: Courier, Lucida и Fixedsys. Определите следующие функции:
1) Функция area, возвращающая площадь фигуры. Для текстового поля площадь зависит от высоты и ширины буквы в шрифте. Поскольку выбранные нами шрифты моноширинные (т.е. ширина всех букв в них одинаково), вам необходимо также определить вспомогательную функцию, для каждого шрифта возвращающую его габариты.
2) Функция getRectangles, из списка фигур выбирающая только прямоугольники.
3) Функция getBound, по заданной фигуре возвращающая ограничивающий её прямоугольник.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2016, 10:13
Ответы с готовыми решениями:

Определение типа представляющего геометрические фигуры на плоскости
Помогите пожалуйста,мало что понимаю в этом языке,половину программы написал,что-то загуглил,выдает...

Определение одного параметра геометрической фигуры
Сделать программу в pascal: Найти минимальное значение высоты усечённого прямого конуса h1(h1...

Разработать программу на Delphi 7. Определение площади геометрической фигуры
Разработать программу для определения площади геометрической фигуры. Фигура получается при...

Построение геометрической фигуры
#include <vcl.h> #include <iostream.h> #include <iomanip.h> #include <conio.h> void main() {...

5
Модератор
Эксперт функциональных языков программированияЭксперт Python
33869 / 18898 / 3979
Регистрация: 12.02.2012
Сообщений: 31,679
Записей в блоге: 13
30.06.2016, 10:48 2
Лучший ответ Сообщение было отмечено Arrakktour как решение

Решение

Оно?

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
data Font = Courier | Fixedsys | Lucida deriving (Eq, Show)
 
data Figure = Circle Float Float Float | Rectangle Float Float Float Float | Triangle Float Float Float Float Float Float 
              | TextBox  Float Float Font String deriving (Eq, Show)
 
fromJust :: Maybe a -> a
fromJust (Just a) = a
fromJust Nothing  = error "bad value"
              
getLetterSize :: Font -> Float
getLetterSize Courier  = 8
getLetterSize Fixedsys = 10
getLetterSize Lucida   = 12
 
getArea :: Figure -> Float
getArea (Rectangle x1 y1 x2 y2) = (x2-x1)*(y2-y1)
getArea (Circle _ _ r) = 3.14159536 * r * r
getArea (Triangle x1 y1 x2 y2 x3 y3) = x1*x2-y1*y2
getArea (TextBox _ _ f s) = (fromIntegral (length s)) * (getLetterSize f)
 
getRectangles :: [Figure] -> [Figure]
getRectangles [] = []
getRectangles ((Rectangle x1 y1 x2 y2):fs) = (Rectangle x1 y1 x2 y2) : (getRectangles fs)
getRectangles ((Circle _ _ _):fs)          = (getRectangles fs)
getRectangles ((Triangle _ _ _ _ _ _):fs)  = (getRectangles fs)
getRectangles ((TextBox _ _ _ _):fs)       = (getRectangles fs)
 
move :: Figure -> Float -> Float -> Figure
move (Rectangle x1 y1 x2 y2) dx dy      = (Rectangle (x1+dx) (y1+dy) (x2+dx) (y2+dy))
move (Circle x y r) dx dy               = (Circle (x+dx) (y+dy) r)
move (TextBox x y f s) dx dy            = (TextBox (x+dx) (y+dy) f s)
move (Triangle x1 y1 x2 y2 x3 y3) dx dy = (Triangle (x1+dx) (y1+dy) (x2+dx) (y2+dy) (x3+dx) (y3+dy))
              
getBound :: Figure -> Figure
getBound (Rectangle x1 y1 x2 y2)     = (Rectangle x1 y1 x2 y2)            
getBound (Circle x y r)              = (Rectangle (x-r) (y-r) (x+r) (y+r))
getBound (TextBox x y f s)           = (Rectangle x (y-(getLetterSize f)) (x+(fromIntegral (length s)) * (getLetterSize f)) y)
getBound (Triangle x1 y1 x2 y2 x3 y3)= (Rectangle (min x1 (min x2 x3)) (max y1 (max y2 y3)) (max x1 (max x2 x3)) (min y1 (min y2 y3)))
 
getX1 :: Figure -> Maybe Float
getX1 (Rectangle x1 _ _ _ )  = Just x1
getX1 (Triangle _ _ _ _ _ _) = Nothing
getX1 (Circle  _ _ _)        = Nothing
getX1 (TextBox _ _ _ _)      = Nothing
 
getX2 :: Figure -> Maybe Float
getX2 (Rectangle _ _ x2 _)   = Just x2
getX2 (Triangle _ _ _ _ _ _) = Nothing
getX2 (Circle  _ _ _)        = Nothing
getX2 (TextBox _ _ _ _)      = Nothing
 
getY1 :: Figure -> Maybe Float
getY1 (Rectangle _ y1 _ _ )  = Just y1
getY1 (Triangle _ _ _ _ _ _) = Nothing
getY1 (Circle  _ _ _)        = Nothing
getY1 (TextBox _ _ _ _)      = Nothing
 
getY2 :: Figure -> Maybe Float
getY2 (Rectangle _ _ _ y2)   = Just y2
getY2 (Triangle _ _ _ _ _ _) = Nothing
getY2 (Circle  _ _ _)        = Nothing
getY2 (TextBox _ _ _ _)      = Nothing
 
getFigure :: [Figure] -> (Float,Float) -> Maybe Figure
getFigure [] (_,_) = Nothing
getFigure (fg:fgs) (xx,yy) |  ((xx <= x2) && (xx >= x1) && (yy <= y1) && (yy >= y2)) = Just fg
                           |  otherwise = getFigure fgs (xx,yy)
                              where x1=(fromJust (getX1 (getBound fg)));
                                    x2=(fromJust (getX2 (getBound fg))); 
                                    y1=(fromJust (getY1 (getBound fg)));
                                    y2=(fromJust (getY2 (getBound fg)))
1
1 / 1 / 0
Регистрация: 08.12.2013
Сообщений: 72
30.06.2016, 12:34  [ТС] 3
да, оно самое, спасибо

Добавлено через 1 час 24 минуты
а как правильно задать запрос ? на мой getRectangles [2,5] программа ругается.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33869 / 18898 / 3979
Регистрация: 12.02.2012
Сообщений: 31,679
Записей в блоге: 13
30.06.2016, 16:29 4
Лучший ответ Сообщение было отмечено Arrakktour как решение

Решение

Цитата Сообщение от Arrakktour Посмотреть сообщение
на мой getRectangles [2,5] программа ругается.
- естественно... Нужно, к примеру, так:

Haskell
1
getRectangles [(Circle 1 2 3), (Rectangle 1 2 3 4), (Rectangle 11 22 33 44), (Circle 11 22 33)]
1
43 / 41 / 8
Регистрация: 17.04.2016
Сообщений: 39
30.06.2016, 19:59 5
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Кстати говоря, геттеры можно было написать и покороче

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
getRectangles :: [Figure] -> [Figure]
getRectangles [] = []
getRectangles ((Rectangle x1 y1 x2 y2):fs) = (Rectangle x1 y1 x2 y2) : (getRectangles fs)
getRectangles (_:fs)          = (getRectangles fs)
 
getX1 :: Figure -> Maybe Float
getX1 (Rectangle x1 _ _ _ ) = Just x1
getX1 _                     = Nothing
 
getX2 :: Figure -> Maybe Float
getX2 (Rectangle _ _ x2 _)  = Just x2
getX2 _                     = Nothing
 
getY1 :: Figure -> Maybe Float
getY1 (Rectangle _ y1 _ _ ) = Just y1
getY1 _                     = Nothing
 
getY2 :: Figure -> Maybe Float
getY2 (Rectangle _ _ _ y2) = Just y2
getY2 _                    = Nothing
1
4814 / 2275 / 287
Регистрация: 01.03.2013
Сообщений: 5,936
Записей в блоге: 26
30.06.2016, 22:24 6
Цитата Сообщение от yegorov Посмотреть сообщение
Кстати говоря, геттеры можно было написать и покороче
Haskell
1
2
3
4
isRectangle (Rectangle _ _ _ _) = True
isRectangle _ = False
 
getRectangles = filter isRectangle
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2016, 22:24
Помогаю со студенческими работами здесь

Визуализация геометрической фигуры
Визуализация простой геометрической фигуры и управление ею при помощи мыши и клавиатуры: •...

Построение геометрической фигуры
Извините, что за вечер прошу у вас помощи несколько раз. Думал справлюсь, но, увы. первый файл -...

Перемещение геометрической фигуры
Нарисовать заданную геометрическую фигуру, которая перемещается по заданной траектории и постоянно...

Движение геометрической фигуры
Прошу помочь Нужно реализовать движение по экрану геометрической фигуры в каком-либо направлении,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru