Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 22
1

Разветвления: проверить, можно ли из 4-х отрезков на плоскости составить параллелограмм

29.10.2018, 19:50. Показов 1405. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста
Четыре отрезка на плоскости заданы координатами своих концов. Проверить, можно ли составить из них параллелограмм. Если параллелограмм существует, определить, попадает ли точка с координатами (x, y) внутрь параллелограмма.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2018, 19:50
Ответы с готовыми решениями:

Проверить, можно ли из 4 отрезков составить параллелограмм
Суть программы: Разработка программы с разветвлениями Четыре отрезка на плоскости заданы...

Проверить, можно ли из четырех данных отрезков составить параллелограмм
Проверить, можно ли из четырех данных отрезков составить параллелограмм. Данные произвольные......

Проверить, можно ли из четырех данных отрезков составить параллелограмм
Здравствуйте, помогите пожалуйста решить задачу: Проверить, можно ли из четырех данных отрезков...

Можно ли из четырех данных отрезков составить параллелограмм
Проверить, можно ли из четырех данных отрезков составить параллелограмм. Написать программу,...

1
0 / 0 / 0
Регистрация: 10.06.2016
Сообщений: 22
30.10.2018, 01:03  [ТС] 2
Нужно найти ошибку в коде
Разработка программы с разветвлениями
Четыре отрезка на плоскости заданы координатами своих концов. Проверить, можно ли составить из них параллелограмм. Если параллелограмм существует, определить, попадает точка с координатами (x, y) внутрь параллелограмма.
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
#include <iostream>
#include <vector>
#include <algorithm>
 
struct Point{
 double x, y;
 
 Point(){
 x = 0;
 y = 0;
 }
 
 Point(double x, double y){
 this->x = x;
 this->y = y;
 };
 
 friend bool operator==(const Point& a, const Point& b){
 return a.x == b.x && a.y == b.y;
 }
 
 friend bool operator!=(const Point& a, const Point& b){
 return !(a == b);
 }
};
 
std::istream& operator>>(std::istream& is, Point& p){
 is >> p.x >> p.y;
 return is;
}
 
struct Vector{
 Point begin, end;
 
 Point StandardForm(){
 return Point(end.x - begin.x, end.y - begin.y);
 }
 
 Vector(){
 begin = {0, 0};
 end = {0, 0};
 }
 
 Vector(Point begin, Point end){
 this->begin = begin;
 this->end = end;
 }
};
 
std::istream& operator>>(std::istream& is, Vector& v){
 is >> v.begin >> v.end;
 return is;
}
 
int main(){
 Vector v[4];
 Point p;
 
 for(int i = 0; i < 4; i++)
 std::cin >> v[i];
 std::cin >> p;
 
 Vector order[4];
 
 order[0] = v[0];
 std::vector<int> used = {0};
 for(int i = 0; i < 4; i++)
 for(int j = 1; j < 4; j++)
 if(std::find(used.cbegin(), used.cend(), j) != used.cend()){
 continue;
 }
 else if(order[i].end == v[j].begin){
 order[i + 1] = v[j];
 break;
 }
 else if(order[i].end == v[j].end){
 order[i + 1] = {v[j].end, v[j].begin};
 used.push_back(j);
 break;
 }
 
 if(order[0].begin != order[3].end){
 std::cout << "Не замкнутая фигура" << std::endl;
 return 0;
 }
 
 if(order[0].StandardForm() != Vector(order[2].end, order[2].begin).StandardForm() && order[1].StandardForm() != Vector(order[3].end, order[3].begin).StandardForm()){
 std::cout << "Не параллелограмм" << std::endl;
 return 0;
 }
 
 Point v1(order[0].end.x - order[0].begin.x, order[0].end.y - order[0].begin.y);
 Point v2(order[3].begin.x - order[3].end.x, order[3].begin.y - order[3].end.y);
 p = {p.x - order[0].begin.x, p.y - order[0].begin.y};
 
 double n = (v1.x * p.y - v1.y * p.x) / (v1.x * v2.y - v1.y * v2.x);
 double m = (p.x - v2.x * n) / (v1.x);
 
 if(n >= 0 && n <= 1 && m >= 0 && m <= 1){
 std::cout << "Точка лежит в параллелограмме" << std::endl;
 }
 else{
 std::cout << "Точка не лежит в параллелограмме" << std::endl;
 }
 
 return 0;
}
0
30.10.2018, 01:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2018, 01:03
Помогаю со студенческими работами здесь

Проверьте, можно ли построить параллелограмм из отрезков с длинами x, y, v, w
Проверьте, можно ли построить параллелограмм из отрезков с длинами x, y, v, w #include&lt;iostream&gt;...

Дан набор из N отрезков различной длины.Сколькими способами можно выбрать из этих отрезков три,из которых можно составить треугольник?
Дан набор из N отрезков различной длины.Сколькими способами можно выбрать из этих отрезков три,из...

Даны длины трех отрезков. Проверить, можно ли из заданных отрезков построить прямоугольный треугольник.
Даны длины трех отрезков. Проверить, можно ли из заданных отрезков построить прямоугольный...

Даны длины трех отрезков. Проверить, можно ли из заданных отрезков построить прямоугольный треугольник
Даны длины трех отрезков. Проверить, можно ли из заданных отрезков построить прямоугольный...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru