Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Aymurat
119 / 111 / 65
Регистрация: 07.11.2014
Сообщений: 756
Завершенные тесты: 6
1

Прямоугольный треугольник, не проходит условие, хотя все верно!

15.08.2016, 19:25. Просмотров 1056. Ответов 8
Метки нет (Все метки)

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

Требуется решить данную задачу с использованием теоремы Пифагора, вычислив квадраты длин сторон треугольника и проверив условие: a^2+b^2=c^2. При этом следует описать структуру Point для хранения координат точки на плоскости, а также функцию Side(a,b), вычисляющую квадрат длины отрезка между парой точек.
Не проходит тест:
0 0 1 0 1 -1
Мой код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cmath>
using namespace std;
struct point{
    int x,y;
}xy[3];
double Side(struct point a, struct point b)
{
    return sqrt(pow(abs(a.x)-abs(b.x),2)+pow(abs(a.y)-abs(b.y),2));
}
int main()
{
    bool answer = false;
    for(int i = 0; i < 3; i++)
    {
        cin>>xy[i].x>>xy[i].y;
    }
    double dlina[3];
    dlina[0]=Side(xy[0],xy[1]);
    dlina[1]=Side(xy[1],xy[2]);
    dlina[2]=Side(xy[2],xy[0]);
    if((xy[0].x==xy[1].x && xy[0].y == xy[1].y) || (xy[1].x==xy[2].x && xy[1].y == xy[2].y) || (xy[0].x==xy[2].x && xy[0].y == xy[2].y)) cout<<"No"; else {
    double max=-1001, min = 1001, sred;
    for(int i = 0; i < 3; i++)
    {
        if(dlina[i]>max) max=dlina[i];
        if(dlina[i]<min) min=dlina[i];
    }
    for(int i = 0; i < 3; i++)
    {
        if(dlina[0]==dlina[1] || dlina[1]==dlina[2] || dlina[0]==dlina[2]) {sred = min; break;} else
        if(dlina[i]!=max && dlina[i]!=min) {sred=dlina[i]; break;}
    }
    double sred2 = sred*sred, min2 = min*min, max2 = max*max;
    if (sred2+min2==max2) {cout<<"asda"; answer = true;}
    cout<<min<<" "<<sred<<" "<<max<<endl;
    cout<<dlina[0]<<" "<<dlina[1]<<" "<<dlina[2]<<endl;
    cout<<sred2<<" "<<min2<<" "<<max2<<endl;
    //if (answer == true) cout<<"Yes"; else cout<<"No";
}
}

Последние строчки - проверка, подскажите, почему условие не выполняется?
Именно условие if (sred2+min2==max2), ведь при выводе cout<<sred2<<" "<<min2<<" "<<max2<<endl; все правильно выводит, и 1+1 = 2!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2016, 19:25
Ответы с готовыми решениями:

Создать базовый класс Треугольник с 2 наследниками: Равносторонний треугольник, Прямоугольный треугольник
Задание звучит так: Нужно создать базовый класс Треугольник с двумя...

Прямоугольный треугольник
Определить прямоугольный ли треугольник по 3 его сторонам и ввести ограничения...

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

прямоугольный треугольник из символов
Вот, еще 4 задачи, помогите химикам)) Программа просит ввести символ после...

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

8
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
15.08.2016, 19:38 2
не нужно вычислять длины сторон, достаточно оставить их квадраты т.к. они целочисленны, и Пифагор соблюден и проблем с double не будет
2
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
15.08.2016, 19:39 3
sqrt(pow(abs(a.x)-abs(b.x),2)+pow(abs(a.y)-abs(b.y),2)); - зачем тут abs?
1
Aymurat
119 / 111 / 65
Регистрация: 07.11.2014
Сообщений: 756
Завершенные тесты: 6
15.08.2016, 19:40  [ТС] 4
MansMI, допустим так будет оптимальнее, но почему условие не выполняется? Вот чего я не понимаю...

Добавлено через 27 секунд
castaway, чтобы при 1 - (-1) не было 2, а 0

Добавлено через 36 секунд
castaway, думаю это можно и убрать, но это не выполнит условие
0
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
15.08.2016, 19:42 5
C++
1
2
3
4
5
6
int SideSqr(struct point a, struct point b)
{
    int dx=a.x-b.x;
    int dy=a.y-b.y;
    return dx*dx+dy*dy;
}
1
Aymurat
119 / 111 / 65
Регистрация: 07.11.2014
Сообщений: 756
Завершенные тесты: 6
15.08.2016, 19:44  [ТС] 6
MansMI, меня интересует это условие) Ведь все переменные я вывожу и вижу, что все правильно, почему условие не выполняется?
0
MansMI
1448 / 1157 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
15.08.2016, 19:58 7
Лучший ответ Сообщение было отмечено Aymurat как решение

Решение

сколько будет?
C
1
printf("%.16lf\n",pow(sqrt(pow(1.0,2.0)+pow(1.0,2.0)),2.0));
0
Aymurat
119 / 111 / 65
Регистрация: 07.11.2014
Сообщений: 756
Завершенные тесты: 6
15.08.2016, 20:02  [ТС] 8
MansMI, 2.0000...004

Добавлено через 39 секунд
Значит в условии (int)max2 и все пучком))
0
regio1961
134 / 133 / 111
Регистрация: 06.06.2016
Сообщений: 332
15.08.2016, 20:32 9
Цитата Сообщение от Aymurat Посмотреть сообщение
подскажите, почему условие не выполняется?
Именно условие if (sred2+min2==max2)
Никогда не сравнивайте вещественные (double, float и т.п.) величины на равенство, если не хотите проблем на ровном месте, лучше так

C++
1
if ( abs(sred2+min2 - max2) < 0.001 )
Вместо 0.001 используются и другие малые величины. По существу эта величина задает требуемую точность вычислений, которая зависит от конкретной задачи.
1
15.08.2016, 20:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2016, 20:32

Пустой прямоугольный треугольник. Размер катетов – n
Разработать программу, которая выводит на экран геометрическую фигуру, заполняя...

Изобразить на экране прямоугольный равнобедренный треугольник
Ребята, помогите. Задано целое число. Используя средства стандартного...

Проверить, можно ли построить прямоугольный треугольник со сторонами a, b, c
Можно ли построить прямоугольный треугольник со сторонами a,b,c.Если да вывести...


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

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

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