Консультация № 154860
18.12.2008, 17:30
0.00 руб.
0 5 1
Добрый вечер, уважаемые эксперты! Помогите, пожалуйста, найти ошибки в задаче.
Нужно проверить, является ли заданный треугольник прямоугольным.
Проверка проходит без корней, т.к. может быть погрешность. Проверять нужно в квадратах.

Приложение:
#include <stdio.h>
#include <conio.h>
#include <math.h>

class Point {
private:
float x,y;
public:
Point(float ix,float iy);
float GetX();
float GetY();
};

class Triangle {
private:
Point * Vertexes[3];
public:
Triangle(float x1,float y1,
float x2,float y2,
float x3,float y3);
float SideA();
float SideB();
float SideC();
int Is();
~Triangle();
};

Point::Point(float ix,float iy)
{
x=ix;
y=iy;
}

float Point::GetX()
{
return x;
}

float Point::GetY()
{
return y;
}

Triangle::Triangle(float x1,float y1,
float x2,float y2,
float x3,float y3)
{
Vertexes[0]=new Point(x1,y1);
Vertexes[1]=new Point(x2,y2);
Vertexes[2]=new Point(x3,y3);
}

float Triangle::SideA()
{
float dx,dy;

dx=pow(Vertexes[0]->GetX(),2)-pow(Vertexes[1]->GetX(),2);
dy=pow(Vertexes[0]->GetY(),2)-pow(Vertexes[1]->GetY(),2);
return dx+dy;
}

float Triangle::SideB()
{
float dx,dy;

dx=pow(Vertexes[1]->GetX(),2)-pow(Vertexes[2]->GetX(),2);
dy=pow(Vertexes[1]->GetY(),2)-pow(Vertexes[2]->GetY(),2);
return dx+dy;
}

float Triangle::SideC()
{
float dx,dy;

dx=pow(Vertexes[0]->GetX(),2)-pow(Vertexes[2]->GetX(),2);
dy=pow(Vertexes[0]->GetY(),2)-pow(Vertexes[2]->GetY(),2);
return dx+dy;
}

int Triangle::Is()
{
float a,b,c;

a=SideA();
b=SideB();
c=SideC();

// a**2+b**2>c**2
return b+c-a==0 ||
a+c-b==0 ||
a+b-c==0;
}

Triangle::~Triangle()
{
int i;

for (i=0;i<3;i++)
delete Vertexes[i];
}

int main()
{
float x1,y1,x2,y2,x3,y3;
Triangle * T;

printf("Vvedite koordinati 1-i vershini: ");
scanf("%f%f",&x1,&y1);
printf("Vvedite koordinati 2-i vershini: ");
scanf("%f%f",&x2,&y2);
printf("Vvedite koordinati 3-i vershini: ");
scanf("%f%f",&x3,&y3);

T=new Triangle(x1,y1,x2,y2,x3,y3);

if (T->Is())
{
printf("Treygolnik pryamoygolnii\n");
}
else
{
printf("Treygolnik ne pryamoygolnii\n");
}
getch();

delete T;
return 0;
}

Обсуждение

давно
Академик
20764
1861
18.12.2008, 17:45
общий
Вы же в проверках в квадрат не возвели.
Неизвестный
18.12.2008, 17:51
общий
Оно в присвоении dx и dy в квадрат возводится. И ошибка ни в этом. Оно сейчас все время пишет что он прямоугольный. Если бы было дело в квадратах, оно бы всегда писало что он не прямоугольный. Написано на Borland C++ 3.1
давно
Посетитель
7438
7205
18.12.2008, 17:52
общий
это ответ
Здравствуйте, Бондаренко Кирилл Андреевич!
Длина стороны треугольника равна sqrt((x2-x1)**2+(y2-y1)**2)
Код:
float Triangle::SideA()
{
float dx,dy;

dx=pow(Vertexes[0]->GetX()-Vertexes[1]->GetX(),2);
dy=pow(Vertexes[0]->GetY()-Vertexes[1]->GetY(),2);
return dx+dy;
}

float Triangle::SideB()
{
float dx,dy;

dx=pow(Vertexes[1]->GetX()-Vertexes[2]->GetX(),2);
dy=pow(Vertexes[1]->GetY()-Vertexes[2]->GetY(),2);
return dx+dy;
}

float Triangle::SideC()
{
float dx,dy;

dx=pow(Vertexes[0]->GetX()-Vertexes[2]->GetX(),2);
dy=pow(Vertexes[0]->GetY()-Vertexes[2]->GetY(),2);
return dx+dy;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Академик
20764
1861
18.12.2008, 18:00
общий
Неправильно возводятся. Надо сначала вычитать, а потом возводить
Неизвестный
18.12.2008, 18:04
общий
Все, работает. Спасибо!
Форма ответа