Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aymurat
111 / 105 / 35
Регистрация: 07.11.2014
Сообщений: 731
Завершенные тесты: 6
#1

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

15.08.2016, 19:25. Просмотров 522. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прямоугольный треугольник, не проходит условие, хотя все верно! (C++):

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

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

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

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

Вывести символами прямоугольный треугольник - C++
Доброе время суток, скажите, где споткнулся? Преподаватель говорит, что пустой треугольник не совсем ровный!!! #include&lt;iostream&gt;...

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

8
MansMI
1375 / 1154 / 340
Регистрация: 08.01.2012
Сообщений: 4,509
15.08.2016, 19:38 #2
не нужно вычислять длины сторон, достаточно оставить их квадраты т.к. они целочисленны, и Пифагор соблюден и проблем с double не будет
2
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 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
111 / 105 / 35
Регистрация: 07.11.2014
Сообщений: 731
Завершенные тесты: 6
15.08.2016, 19:40  [ТС] #4
MansMI, допустим так будет оптимальнее, но почему условие не выполняется? Вот чего я не понимаю...

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

Добавлено через 36 секунд
castaway, думаю это можно и убрать, но это не выполнит условие
0
MansMI
1375 / 1154 / 340
Регистрация: 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
111 / 105 / 35
Регистрация: 07.11.2014
Сообщений: 731
Завершенные тесты: 6
15.08.2016, 19:44  [ТС] #6
MansMI, меня интересует это условие) Ведь все переменные я вывожу и вижу, что все правильно, почему условие не выполняется?
0
MansMI
1375 / 1154 / 340
Регистрация: 08.01.2012
Сообщений: 4,509
15.08.2016, 19:58 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
сколько будет?
C
1
printf("%.16lf\n",pow(sqrt(pow(1.0,2.0)+pow(1.0,2.0)),2.0));
0
Aymurat
111 / 105 / 35
Регистрация: 07.11.2014
Сообщений: 731
Завершенные тесты: 6
15.08.2016, 20:02  [ТС] #8
MansMI, 2.0000...004

Добавлено через 39 секунд
Значит в условии (int)max2 и все пучком))
0
regio1961
127 / 127 / 56
Регистрация: 06.06.2016
Сообщений: 314
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 - C++
Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом ‘*’ или пробелом. Размер фигуры (n)...

Создать иерархию классов: Треугольник, Прямоугольный, Равнобедренный и Равносторонний - C++
Помогите с задачей пожалуйста !!! Даже не знаю с чего начать ( Создать иерархию классов Треугольник, прямоугольный, равнобедренный...

Определить структуру, что описывает равнобедренный прямоугольный треугольник с катетами - C++
Определить структуру, что описывает равнобедренный прямоугольный треугольник с катетами, параллельными осям координат, и нижним левым...

функция, которая принимает высоту треугольника и выводит на экран прямоугольный треугольник - C++
Напишите функцию, которая принимает высоту треугольника и выводит на экран прямоугольный треугольник из звездочек.:help:


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

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

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