Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
RT_BERSERKER
0 / 0 / 0
Регистрация: 07.09.2014
Сообщений: 13
#1

Вычислить площадь выпуклого четырёхугольника ABCD - C++

07.09.2014, 10:07. Просмотров 2626. Ответов 32
Метки нет (Все метки)

Задача на С++ (Не могу разобраться)

Нужно вычислить площадь выпуклого четырёхугольника ABCD, заданного длинами своих сторон a, b, c, d и одной из диагоналей e.
Нужно составить блок схему и саму программу,помогите с программой,и желательно бы объяснить,очень надеюсь на помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 10:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить площадь выпуклого четырёхугольника ABCD (C++):

Площадь четырёхугольника - C++
Определить площадь четырёхугольника с вершинами A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4). Входные данные В одной строке заданы...

Площадь четырёхугольника - C++
На е-олимпе задача засчиталась на 70%. Чего тут не хватает? #include <iostream> #include <cmath> #include <stdlib.h> #include...

Площадь выпуклого многоугольника - C++
Доброго времени суток! Собственно, задача звучит как: "Расчет площади выпуклого многоугольника при вводимых координатах вершин". ...

Площадь выпуклого многоугольника методом триангуляции - C++
ребят помогите разработать программу для расчёта площади выпуклого многоугольника методом триангуляции (разбиения на треугольники) по...

Площадь выпуклого многогранника методом триангуации по формуле Герона - C++
Разработать программу для расчета выпуклого многогранника методом триангуации (разбиения на треугольники) по формуле Герона (определение...

По заданным координатам вершин прямоугольника ABCD найти его площадь и периметр - C++
Известны координаты вершин прямоугольника ABCD , A(x1,y1), B(x2,y2), C(x3,y3). Найти площадь и периметр. Напишите пожалуйста полностью...

32
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
07.09.2014, 16:13 #16
C++
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/////////////////////////////////////////////////////////////////////////////////////////
//Нужно вычислить площадь выпуклого четырёхугольника ABCD, заданного длинами своих сторон 
//a, b, c, d и одной из диагоналей e.
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
const   T_str   COMMA_DELIM     =   ", ";
/////////////////////////////////////////////////////////////////////////////////////////
bool    successfully_for_triangle_with_sides_set_area
    (
        double      a,
        double      b,
        double      c,
        double  &   area
    )
{
    double  p   =   ( a + b + c ) / 2;
 
    area        =       p
                    *   ( p - a )
                    *   ( p - b )
                    *   ( p - c );
 
    bool    bool_res    =   area >= 0;
    area                =   sqrt( area );
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
void    calculate_area_and_print_results_for_tetragon_with_triangles
    (
        double  a,
        double  b,
        double  c,
 
        double  d,
        double  e,
        double  f
    )
{
    std::cout   <<  "Четырехугольник с треугольниками с длинами сторон ("
                <<  a   <<  COMMA_DELIM     <<  b   <<  COMMA_DELIM     <<  c   <<  ") и ("
                <<  d   <<  COMMA_DELIM     <<  e   <<  COMMA_DELIM     <<  f   <<  ")"
                <<  std::endl;
 
    double  area_abc    =   0;
    double  area_def    =   0;
 
    if  (
                successfully_for_triangle_with_sides_set_area( a, b, c, area_abc )
            &&  successfully_for_triangle_with_sides_set_area( d, e, f, area_def )
        )
    {
        std::cout   <<  " имеет площадь "
                    <<      area_abc
                        +   area_def
 
                    <<  ".";
    }
    else
    {
        std::cout   <<  "невозможен.";
    }
    std::cout   <<  std::endl
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
void    calculate_area_and_print_results_for_tetragon_with_sides_and_diagonal
    (
        double  a,
        double  b,
        double  c,
        double  d,
 
        double  e
    )
{
    std::cout   <<  "Длины сторон четырехугольника: ("
                <<  a   <<  COMMA_DELIM
                <<  b   <<  COMMA_DELIM
                <<  c   <<  COMMA_DELIM
                <<  d   <<  ")" <<  COMMA_DELIM
 
                <<  " длина диагонали "
                <<  e
                <<  "."
                <<  std::endl
                <<  std::endl;
 
    calculate_area_and_print_results_for_tetragon_with_triangles
        (
            a, b, e,
            c, d, e
        );
 
    calculate_area_and_print_results_for_tetragon_with_triangles
        (
            b, c, e,
            a, d, e
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_rand_val_from_segment
    (
        int     min_val,
        int     max_val
    )
{
    return  rand()  %   ( max_val - min_val + 1 ) + min_val;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    srand(unsigned(time(0)));
    const   int     SIDE_LEN_MIN    =   1;
    const   int     SIDE_LEN_MAX    =   5;
 
    calculate_area_and_print_results_for_tetragon_with_sides_and_diagonal
        (
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    )
        );
    std::cout   <<  std::endl;
 
    system("pause");
}
0
gru74ik
Модератор
Эксперт CЭксперт С++
4189 / 1837 / 198
Регистрация: 20.02.2013
Сообщений: 4,976
Записей в блоге: 21
08.09.2014, 06:45 #17
Цитата Сообщение от AndrSlav Посмотреть сообщение
Кстати, а не будет ли площадь зависеть от положения диагонали (AC или BD)?
Сам-то как думаешь? Есть разница как считать площадь нашего четырёхугольника: как сумму площадей треугольников ABD и BCD или как сумму треугольников ABC и ACD?
0
_Ivana
3180 / 1796 / 153
Регистрация: 01.03.2013
Сообщений: 5,010
Записей в блоге: 2
08.09.2014, 11:27 #18
Цитата Сообщение от gru74ik Посмотреть сообщение
Сам-то как думаешь?
А сам как думаешь? Если трудно в общем виде в буквах (хотя это несложное упражнение на уровне 7 класса), давай посчитаем в числах: пусть стороны четырехугольника (по часовой стрелке) равны 11, 11, 15, 15. А диагональ 20. Есть формула Герона, вот ее онлайн калькулятор.
0
gru74ik
08.09.2014, 13:23
  #19

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
А сам как думаешь?
Как я думаю? О_о

Я никак не думаю, я знаю. Думает AndrSlav, вроде как.

0
_Ivana
08.09.2014, 13:34
  #20

Не по теме:

Действительно, зачем думать, если знаешь. Эх, Семен Семеныч, чтож вас прошлые грабли ничему не учат!... И думать в том числе....

0
gru74ik
08.09.2014, 13:40
  #21

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
прошлые грабли ничему не учат!... И думать в том числе....
Ты хочешь сказать, что (SABD + SBCD) != (SABC + SACD) ?

0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
08.09.2014, 13:55 #22
Цитата Сообщение от gru74ik Посмотреть сообщение
с подачи местных гуру приучаю себя всегда писать std::Бла-бла-бла
Вот здесь вот можно помахать флажками чуток: using namespace std и std:: надоело смотреть!
0
_Ivana
08.09.2014, 14:00
  #23

Не по теме:

gru74ik, я дал тебе пример с числами и ссылку на калькулятор. Но ты ленишься проверить. Потому что ты все знаешь. Сам то как относишься к лентяям?

0
gru74ik
08.09.2014, 14:03
  #24

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
gru74ik, я дал тебе пример с числами и ссылку на калькулятор. Но ты ленишься проверить. Потому что ты все знаешь. Сам то как относишься к лентяям?
Сижу, проверяю.

0
Fallenworld
08.09.2014, 14:05
  #25

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Ты хочешь сказать, что (SABD + SBCD) != (SABC + SACD) ?
при условии, что АВСD- это один и тот же 4х угольник. А если диагонали поменять, то они будут разные.
Но на решение задачи это не влияет.

0
gru74ik
08.09.2014, 15:44
  #26

Не по теме:

_Ivana, я проверил. Получилась погрешность из-за вычислений с корнями. А по сути - одна и та же величина, как и должно быть. Какая разница как вычислять площадь выпуклого четырёхугольника ABCD - как сумму площадей составляющих его треугольников ABD и BCD, или как сумму площадей составляющих его треугольников ABC и ACD ?

0
_Ivana
3180 / 1796 / 153
Регистрация: 01.03.2013
Сообщений: 5,010
Записей в блоге: 2
08.09.2014, 15:50 #27
gru74ik, давай без тега оффтопа, раз пошла такая пьянка. Вылаживай сюда числовые значения площадей для первого и второго вариантов.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4189 / 1837 / 198
Регистрация: 20.02.2013
Сообщений: 4,976
Записей в блоге: 21
08.09.2014, 18:32 #28
AB = 11
BC = 11
AD = 15
CD = 15
AC = 20
BD = 15,762915582455
SABC + SACD = 157,62915582454788

SABD = SBCD = 78,81457791116506
SABD + SBCD = 157,62915582233012
0
Миниатюры
Вычислить площадь выпуклого четырёхугольника ABCD  
gru74ik
Модератор
Эксперт CЭксперт С++
4189 / 1837 / 198
Регистрация: 20.02.2013
Сообщений: 4,976
Записей в блоге: 21
08.09.2014, 18:51 #29
Всё, до меня дошло о чём речь. Приношу свои извинения 2AndrSlav и 2_Ivana. Действительно, по условию задачи ведь непонятно какая из диагоналей имеется ввиду. Поэтому у задачи, получается, два правильных ответа (если имеется ввиду одна диагональ - площадь четырёхугольника будет одна, а если имеется ввиду другая диагональ - площадь уже будет другая).
0
_Ivana
3180 / 1796 / 153
Регистрация: 01.03.2013
Сообщений: 5,010
Записей в блоге: 2
08.09.2014, 20:46 #30
Поэтому программа для данной задачи должна проверить несколько условий: возможен ли такой четырехугольник вообще (например, непросто построить четырехугольник со сторонами 1,2,3 и 500), сколько существует возможных конфигураций с данными сторонами и диагональю (если стороны заданы по кругу, то 0, 1 или 2, если допустимо произвольное расположение сторон, то может быть больше), отсечь из всех возможных конфигураций невыпуклые четырехугольники (если они будут), и выдать варианты ответа вместе с их конфигурациями. Написать такую программу несложно, но хоть немного поинтереснее, чем просто формулу забить.
1
08.09.2014, 20:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 20:46
Привет! Вот еще темы с ответами:

Вычислить площадь многоугольника с использованием функции,которая определяет площадь по координатам его вершин - C++
Народ помогите пож нужно очень срочно. совсем запутался с этим задание,буду благодарен за помощь. Вычислить площадь многоугольника с...

Два треугольника заданы координатами своих вершин A,B,C. Вычислить площадь треугольника и определить какой треугольник имеет большую площадь - C++
Два треугольника заданы координатами своих вершин A,B,C. Вычислить площадь треугольника и определить какой треугольник имеет большую...

Площадь квадрата равна S. Вычислить сторону квадрата а, диагональ d и площадь S1 описанного около этого квадрата круга - C++
Напишите код в C++ Пожалуйста :confusion:

Найти длины диагоналей четырёхугольника - C++
4) Известны координаты вершин некоторого четырёхугольника А(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4). Найти длины диагоналей этого...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru