Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2019, 15:06   #1
Resty
Новичок
Джуниор
 
Регистрация: 19.03.2019
Сообщений: 3
По умолчанию [C] Даны координаты вершин двух треугольников, требуется определить их площади и вывести номер треугольника, площадь которого больше.

Даны координаты вершин двух треугольников, требуется определить их площади и
вывести номер треугольника, площадь которого больше.
Input
Со стандартного устройства ввода вводятся через пробел координаты шести точек:
A x , A y , B x , B y , С x ,С y , D x , D y , E x , E y , F x , F y ,
где точки A, B, C —вершины первого треугольника, а точки D, E, F — вершины второго.
Координаты всех точек являются вещественными из диапазона от -1000 до 1000,
заданными с тремя знаками после запятой.
Output
Требуется вывести «1»(без кавычек), если площадь первого треугольника больше либо
равна площади второго, иначе требуется вывести «2»(без кавычек).
Sample Input
1.000 1.000 1.000 3.000 4.000 1.000 1.000 1.000 1.000 6.000 7.000 1.000
Sample Output
2
Примечание
Используйте спецификатор «%f» для ввода вещественных чисел.
Гарантируется, что площади каждого из треугольников больше нуля.
Сравнивать вещественные числа требуется с погрешность 0.001, а это значит:
число A будет равно числу B с точностью до 0.001, когда abs(A-B) <= 0.001, где abs(A-B)
возвращает абсолютное значение (A-B), то есть max(A, B) - min(A, B).
Площадь треугольника по координатам его вершин можно найти следующим образом:
S = | (B x - A x ) * (A y + B y ) + (C x - B x ) * (C y + B y ) + (A x - C x ) * (A y + C y )| / 2.
Попробуйте реализовать функцию getArea( ) , принимающую координаты трех вершин
треугольника и возвращающую его площадь.
Resty вне форума Ответить с цитированием
Старый 19.03.2019, 15:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

И что вам еще надо? Задача на сравнить два числа, формулы и подводные камни расписаны...

Вопрос то в чем? Что не получается?
p51x вне форума Ответить с цитированием
Старый 19.03.2019, 15:14   #3
Resty
Новичок
Джуниор
 
Регистрация: 19.03.2019
Сообщений: 3
По умолчанию

Эту задачу проверяет робот и он показывает что я правильно решил только на 50%. Я не знаю в чём проблема. Могу скинуть моё решение этой задачи.
Resty вне форума Ответить с цитированием
Старый 19.03.2019, 15:43   #4
Resty
Новичок
Джуниор
 
Регистрация: 19.03.2019
Сообщений: 3
По умолчанию вот моё решение

Код:
#include <stdio.h>
#include <math.h>
int main()
{
    int Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,Ex,Ey,Fx,Fy,s1,s2;
    scanf ("%3f%3f%3f%3f%3f%3f%3f%3f%3f%3f%3f%3f", &Ax,&Ay,&Bx,&By,&Cx,&Cy,&Dx,&Dy,&Ex,&Ey,&Fx,&Fy);
    s1=abs((Bx-Ax)*(Ay+By)+(Cx-Bx)*(Cy+By)+(Ax+Cx)*(Ay-Cy))/2;
    s2=abs((Ex-Dx)*(Dy+Ey)+(Fx-Ex)*(Fy-Ey)+(Dx-Fx)*(Dx+Fx))/2;
    if (s1>=s2) printf ("2");
    else printf ("1");
    return 0;
}
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Serge_Bliznykov; 19.03.2019 в 15:58.
Resty вне форума Ответить с цитированием
Старый 19.03.2019, 15:51   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

0. С какого перепугу у вас все числа целые?
1. Вы часть про погрешность пропустили?
2. Почему если s1 > s2 вы выводите 2?
p51x вне форума Ответить с цитированием
Старый 19.03.2019, 16:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и "вишенка на торте" - сравните

в формуле:
Цитата:
Сообщение от Resty Посмотреть сообщение
S = | (B x - A x ) * (A y + B y ) + (C x - B x ) * (C y + B y ) + (A x - C x ) * (A y + C y )| / 2.
у Вас:
Цитата:
Код:
(Ax+Cx)*(Ay-Cy)

p.s. не могу идентифицировать - а что это за формула для площади?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2019, 16:33   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. не могу идентифицировать - а что это за формула для площади?
Да, похоже обычная, просто недоупрощенная... Там из
1/2*(y1+y3)*(x3-x1) + 1/2*(y3+y2)*(x2-x3) + 1/2*(y1+y2)*(x2-x1)
обычно доходят до
1/2*|(x2-x1)*(y3-y1) - (x3-x1)*(y2-y1)|
p51x вне форума Ответить с цитированием
Старый 19.03.2019, 17:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

p51x, спасибо за ответ!
Общий смысл понятен. Спасибо!

правда, остался ещё мелкий вопрос.
Цитата:
Сообщение от p51x Посмотреть сообщение
1/2*(y1+y3)*(x3-x1) + 1/2*(y3+y2)*(x2-x3) + 1/2*(y1+y2)*(x2-x1)
вроде бы тут же минус должен быть:
1/2*(y1+y3)*(x3-x1) + 1/2*(y3+y2)*(x2-x3) - 1/2*(y1+y2)*(x2-x1)
см. http://www.treugolniki.ru/ploshhad-t...natam-vershin/

но, впрочем, автору темы виднее.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2019, 17:07   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Упс, смотря на формулу ТС, описался... минус там, конечно.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По формуле Герона определить площади трёх треугольников и определить, какой из треугольников имеет максимальную площадь. лЮСИК007 Паскаль, Turbo Pascal, PascalABC.NET 1 16.10.2016 06:06
Помогите отладить программу.Даны координаты вершин нескольких треугольников. votsar Помощь студентам 1 02.03.2016 11:13
Модули: Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь veronika55214 Паскаль, Turbo Pascal, PascalABC.NET 2 27.03.2014 09:03
Даны декартовы координаты вершин треугольника (в плоскости). Разработать проект, вычисляющий площадь и периметр этого треугольника Яночка190 Общие вопросы Delphi 1 12.01.2013 12:49
Два треугольника заданы координатами вершин А,В,С. Вычислить и сравнить площади треугольников (С++) dzhaparov Помощь студентам 5 05.11.2012 20:04