Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2018, 22:22   #1
todorov
Новичок
Джуниор
 
Регистрация: 01.11.2018
Сообщений: 2
По умолчанию Нужно найти ошибку

Помогите найти ошибку в коде
Суть программы:
Разработка программы с разветвлениями
Четыре отрезка на плоскости заданы координатами своих концов. Проверить, можно ли составить из них параллелограмм. Если параллелограмм существует, определить, попадает точка с координатами (x, y) внутрь параллелограмма.

Код:
#include 
#include 
#include 

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 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;
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 01.11.2018 в 23:22.
todorov вне форума Ответить с цитированием
Старый 01.11.2018, 23:11   #2
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Во первых:

Код:
#include 
#include 
#include
Подключать за вас библиотеки дядя Федор будет?

Во вторых конструкцию:

Код:
std::cout
На пример, можно было бы сократить до

Код:
cout
прописав после объявления библиотек следующее:

Код:
using namespace std;
В четвертых:

для вставки кода в сообщение есть значок '#' и писать все сплошным текстом неуважение по отношению к другим форумчанам.

В пятых: что в ошибке?
vasek123 вне форума Ответить с цитированием
Старый 01.11.2018, 23:23   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от vasek123 Посмотреть сообщение
На пример, можно было бы сократить до
И засрать глобальное пространство имен. Не надо так.
p51x вне форума Ответить с цитированием
Старый 02.11.2018, 00:20   #4
todorov
Новичок
Джуниор
 
Регистрация: 01.11.2018
Сообщений: 2
По умолчанию

библиотеки есть, просто не скопировались, а по поводу того что код неправильно вставил извините)
todorov вне форума Ответить с цитированием
Старый 02.11.2018, 02:57   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от vasek123 Посмотреть сообщение
using namespace std;
НЕ НАДО ТАК ДЕЛАТЬ.

std::cout лучше всегда!
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 02.11.2018, 03:36   #6
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Цитата:
Сообщение от todorov Посмотреть сообщение
std::vector used = {0};
Код:
std::vector<int> used = { 0 };
Если это сделать, то скомпилируется.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В паскале нужно найти ошибку. ProstooStudent Помощь студентам 1 11.03.2017 05:18
Нужно найти ошибку. Gnomowar Общие вопросы C/C++ 2 15.12.2012 18:15
нужно найти ошибку pandaaaaa Помощь студентам 0 27.12.2011 21:26
нужно найти ошибку!!!!! C++ Wector Visual C++ 1 09.12.2011 18:49
нужно найти ошибку Стёпыш Помощь студентам 5 08.12.2009 18:13