0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 6
1

Определить одинакового ли типа треугольники

13.11.2020, 17:21. Показов 513. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Задача: На плоскости координатами своих вершин заданы два треугольника. Определите, одинакового ли они типа (прямоугольный, тупоугольный, остроугольный).
Вот мой код:
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
42
43
44
45
46
47
48
49
#include <iostream>
#include <cmath>
using namespace std;
double dlina_storoni(double x1, double y1, double x2, double y2){
    return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
void tip(char& ch, double r1, double r2, double r3){
    if(r1*r1==r2*r2+r3*r3||r2*r2==r1*r1+r3*r3||r3*r3==r2*r2+r1*r1){
        ch='p';
    }
    else if(r1*r1>r2*r2+r2*r2 || r2*r2>r1*r1+r3*r3 || r3>r1*r1+r2*r2){
        ch='t';
    }
    else{
        ch='o';
    }
}
int main(){
    setlocale(LC_ALL, "Russian");
    double x11,y11,x12,y12, x13, y13;
    double x21,y21,x22,y22, x23, y23;
    cout<<"Введите координаты точек первого треугольника\n";
    cin>>x11>>y11>>x12>>y12>>x13>>y13;
    cout<<"Введите координаты точек второго треугольника\n";
    cin>>x21>>y21>>x22>>y22>>x23>>y23;
    double r11=dlina_storoni(x12,y12,x13,y13);
    cout<<r11<<" ";
    double r12=dlina_storoni(x11,y11, x13, y13);
        cout<<r11<<" ";
    double r13=dlina_storoni(x12, y12, x13, y13);
        cout<<r11<<" ";
    double r21=dlina_storoni(x22,y22,x23,y23);
        cout<<r11<<" ";
    double r22=dlina_storoni(x21,y21, x23, y23);
        cout<<r11<<" ";
    double r23=dlina_storoni(x21, y21, x22, y22);
        cout<<r11<<" ";
    char ch1, ch2;
    tip(ch1, r11,r12,r13);
    tip(ch2, r21,r22,r23);
    cout<<ch1<<" "<<ch2<<endl;
    if(ch1==ch2){
        cout<<"да";
    }
    else{
        cout<<"нет";
    }
    return 0;
}
Программа выводит:
3 3 3 3 3 3 o p
нет

Видимо, не правильно считается сторона треугольника, но ошибку найти не могу. Что исправить, чтобы программа заработала?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2020, 17:21
Ответы с готовыми решениями:

Два поля одинакового типа
подскажите пожалуйста есть две таблицы - одна с данными , другая с типами полей в таблице данных...

Обход элементов (компонентов) формы одинакового типа
Добрый день, друзья. Подскажите, как в Xamarin.Forms сделать обход в цикле foreach, например, всех...

Шаблонная функция с тремя параметрами одинакового типа, которая возвращает наибольшее значение
Создать шаблонную функцию с тремя параметрами одинакового типа, которая возвращает наибольшее...

Складываются два колебания одинакового направления и одинакового периода:
Складываются два колебания одинакового направления и одинакового периода: x1=sinπt и...

4
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
13.11.2020, 20:21 2
Цитата Сообщение от DDDaa Посмотреть сообщение
Видимо, не правильно считается сторона треугольника, но ошибку найти не могу. Что исправить, чтобы программа заработала?
Для начала напечатать правильно
Цитата Сообщение от DDDaa Посмотреть сообщение
double r11=dlina_storoni(x12,y12,x13,y13);
cout<<r11<<" ";
double r12=dlina_storoni(x11,y11, x13, y13);
cout<<r11<<" ";
double r13=dlina_storoni(x12, y12, x13, y13);
cout<<r11<<" ";
double r21=dlina_storoni(x22,y22,x23,y23);
cout<<r11<<" ";
double r22=dlina_storoni(x21,y21, x23, y23);
cout<<r11<<" ";
double r23=dlina_storoni(x21, y21, x22, y22);
cout<<r11<<" ";
У тебя здесь везде r11 печатается

Добавлено через 8 минут
Цитата Сообщение от DDDaa Посмотреть сообщение
else if(r1*r1>r2*r2+r2*r2 || r2*r2>r1*r1+r3*r3 || r3>r1*r1+r2*r2){
r3 * r3>r1*r1+r2*r2
0
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 6
13.11.2020, 21:39  [ТС] 3
Спасибо большое. Еще в строке double r13=dlina_storoni(x12, y12, x13, y13); нашла ошибку: указала не те координаты. Теперь компилятор стороны считает правильно, но возникла другая проблема: после того, как компилятор посчитал сторону (например иррациональное число), он ее сократил до размера, который вместится в double, и, разумеется при проверке в ifах квадрат этой стороны не будет равен сумме квадратов двух других (даже если на самом деле он равен).
Тестировала на примере:
-1 1-1 4 -4 1
1 5 4 1 4 5
нет
хотя оба треугольника прямоугольные

Добавлено через 3 минуты
Как это исправить?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
13.11.2020, 21:40 4
Цитата Сообщение от DDDaa Посмотреть сообщение
н ее сократил до размера, который вместится в double, и, разумеется при проверке в ifах квадрат этой стороны не будет равен сумме квадратов двух других (даже если на самом деле он равен).
Я не силён в математике, но вроде можно не извлекать корень, просто сравнивать квадраты сторон. Соответственно, использовать int, вместо double
0
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 6
14.11.2020, 17:24  [ТС] 5
Спасибо большое за помощь!
0
14.11.2020, 17:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2020, 17:24
Помогаю со студенческими работами здесь

Создать функцию, возвращающую минимальный из трёх передаваемых в неё параметров любого (но одинакового) типа
Функция, возвращающая минимальный из трех передаваемых в нее параметров любого (но одинакового)...

Создать шаблонную функцию с двумя параметрами одинакового типа,которая будет менять местами их значения
Пожалуйста помогти с задачей,все сделал кроме этой задачи.Это должна быть програма в с++. Очень...

Оператор "==" не может применяться к операндам одинакового типа
Ошибка: Ничего не понимаю O_o P.S. TestStruct - структура, содержащая один int и один...

Определить Дезарговы треугольники
на плоскости дана конфигурация Дезарга, причем АВ пересекает А'B' в т.R, BC и B'C' в т.Q, АС и A'C'...

Определить номера станков, требующих одинакового времени наладки
В некотором цехе имеется определенное количество станков, требующих наладки. Известно время наладки...

определить являются ли треугольники подобными
1)Ввести целые числа ABCN . определить делителем какого числа являются N , и выдать об этом...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru