ЗАДАЧА: Даны действительные числа X1, X2, X3, Y1, Y2, Y3. Принадлежит ли начало координат треугольнику с вершинами (X1,Y1), (X2,Y2), (X3,Y3)?
КОД:
#include
#include
using namespace std;
int main()
{
float x1, x2, x3, y1, y2, y3, so, s1, s2, s3, p, p1, p2, p3, ab, bc, ac, ao, bo, co;
float x=0, y=0;
cin>> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
/*Находим длины сторон треугольника*/
ab = sqrt(pow((x2-x1), 2)+ pow((y-y2), 2));
bc = sqrt(pow((x3-x2), 2)+ pow((y3-y2), 2));
ac = sqrt(pow((x3-x1), 2)+ pow((y3-y1), 2));
p = (ab+bc+ac)/2;
so = sqrt(p*(p-ab)*(p-bc)*(p-ac));
/*Треугольник на основании ab*/
bo = sqrt(pow((x-x2), 2)+ pow((y-y2), 2));
ao = sqrt(pow((x-x1), 2)+ pow((y-y1), 2));
p1 = (ab+bo+ao)/2;
s1 = sqrt(p1*(p1-ab)*(p1-bo)*(p1-ao));
/*Треугольник на основании bc*/
bo = sqrt(pow((x-x2), 2)+ pow((y-y2), 2));
co = sqrt(pow((x-x3), 2)+ pow((y-y3), 2));
p2 = (ab+bc+ac)/2;
s2 = sqrt(p2*(p2-bo)*(p2-bc)*(p2-co));
/*Треугольник на основании ac*/
co = sqrt(pow((x-x3), 2)+ pow((y-y3), 2));
ao = sqrt(pow((x-x1), 2)+ pow((y-y1), 2));
p3 = (ab+bc+ac)/2;
s3 = sqrt(p2*(p2-ac)*(p2-co)*(p2-ao));
if(so = (s1+s2+s3))
{
cout<<"Начало координат принадлежит этому треугольнику"<<endl;
}
else
{
cout<<"Начало координат не принадлежит этому треугольнику"<<endl;
}
return 0;
При тестировании, если ввести данные: x1 = 2, y1 = 1, x2 = -1, y2 = -2, x3 = 2, y3 = -2
Ответ должен быть НЕ ПРИНАДЛЕЖИТ
А он пишет, что ПРИНАДЛЕЖИТ
C/C++
Где ошибка в коде?
#include <iostream>
using namespace std;
struct Point {
double x;
double y;
Point() : x(0), y(0) {}
Point(double x, double y) : x(x), y(y) {}
double length(const Point& p)const {
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
double area(const Point& a, const Point& b, const Point& c) {
auto ab = a.length(b);
auto bc = b.length(c);
auto ca = c.length(a);
auto p = (ab + bc + ca) / 2;
auto arg = p * (p - ab) * (p - bc) * (p - ca);
return sqrt(arg);
}
Point input(const char* name) {
cout << name << "x: ";
double x;
cin >> x;
cout << name << "y: ";
double y;
cin >> y;
return { x, y };
}
int main() {
Point o;
auto a = input("A");
auto b = input("B");
auto c = input("C");
auto ts = area(a, b, c);
auto sm = area(o, b, c) + area(a, o, c) + area(a, b, o);
puts(fabs(ts - sm) < 1e12 ? "Yes!" : "No!");
system("pause > nul");
}
using namespace std;
struct Point {
double x;
double y;
Point() : x(0), y(0) {}
Point(double x, double y) : x(x), y(y) {}
double length(const Point& p)const {
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
double area(const Point& a, const Point& b, const Point& c) {
auto ab = a.length(b);
auto bc = b.length(c);
auto ca = c.length(a);
auto p = (ab + bc + ca) / 2;
auto arg = p * (p - ab) * (p - bc) * (p - ca);
return sqrt(arg);
}
Point input(const char* name) {
cout << name << "x: ";
double x;
cin >> x;
cout << name << "y: ";
double y;
cin >> y;
return { x, y };
}
int main() {
Point o;
auto a = input("A");
auto b = input("B");
auto c = input("C");
auto ts = area(a, b, c);
auto sm = area(o, b, c) + area(a, o, c) + area(a, b, o);
puts(fabs(ts - sm) < 1e12 ? "Yes!" : "No!");
system("pause > nul");
}
#include "iostream"
#include "cmath"
using namespace std;
double s(double x1, double y1, double x2, double y2, double x3, double y3){
return abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;}
int main(){
double x1,y1,x2,y2,x3,y3; cout<<"x1 y1 x2 y2 x3 y3: "; cin>>x1>>y1>>x2>>y2>>x3>>y3;
cout<< boolalpha<<(s(x1,y1,x2,y2,0,0)+s(x2,y2,x3,y3,0,0)+s(x1,y1,x3,y3,0,0)
<=s(x1,y1,x2,y2,x3,y3))<< endl;}
#include "cmath"
using namespace std;
double s(double x1, double y1, double x2, double y2, double x3, double y3){
return abs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))/2;}
int main(){
double x1,y1,x2,y2,x3,y3; cout<<"x1 y1 x2 y2 x3 y3: "; cin>>x1>>y1>>x2>>y2>>x3>>y3;
cout<< boolalpha<<(s(x1,y1,x2,y2,0,0)+s(x2,y2,x3,y3,0,0)+s(x1,y1,x3,y3,0,0)
<=s(x1,y1,x2,y2,x3,y3))<< endl;}
может тут
if(so = (s1+s2+s3))
= это операция присваивания а не сравнения
if(so = (s1+s2+s3))
= это операция присваивания а не сравнения
Похожие вопросы
- Ошибки в коде c++
- Помогите, пожалуйста, исправить ошибку в коде (C++).
- Помогите найти ошибку в коде
- Где ошибка в коде с++
- Задача на максимальное произведение в векторе C++ Где ошибка в коде?
- Ошибки в коде. Почему не работает и как сделать чтобы заработало ?
- Помогите найти ошибки в коде на C++, не выводится последняя строчка
- Выдаёт ошибку в коде.Помогите
- Помогите исправить ошибку в коде, смотри внутри.
- Помогите найти ошибку в коде