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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2013, 23:52   #1
ArgoN-KS
 
Регистрация: 08.10.2013
Сообщений: 2
По умолчанию Задание на С++. Даны действительные числа x1, x2, x3, y1, y2, y3. Лежит ли начало координат внутри треугольника с вершинами

Я в программировании новичок, помогите пожалуйста написать програму на С++:

Даны действительные числа x1, x2, x3, y1, y2, y3. Лежит ли начало координат внутри треугольника с вершинами (x1, y1), (x2, y2), (x3, y3)?

Зарание благодарен!
ArgoN-KS вне форума Ответить с цитированием
Старый 09.10.2013, 05:49   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
#include <iostream>

using namespace std;

int main()
{
int x1,x2,x3;
int y1,y2,y3;

  cout << "BBedume KoopdunambI" << endl; 
  cout << "X1 = " << endl; 
  cin>> x1;
  cout << "Y1 = " << endl; 
  cin>> y1;
  cout << "X2 = " << endl; 
  cin>> x2;
  cout << "Y2 = " << endl; 
  cin>> y2;
  cout << "X3 = " << endl; 
  cin>> x3;
  cout << "Y3 = " << endl; 
  cin>> y3;

  if( (x1==x2)&&(y1==y2) || (x1==x3)&&(y1==y3) || (x2==x3)&&(y2==y3))
  {
  cout << "ERROR!!!" <<endl;
  return 1;
  }
  if((x1<=0&&x2>=0) || (x1>=0&&x2<=0) || (x3<=0&&x2>=0) || (x3>=0&&x2<=0) || (x3<=0&& x1>=0) || (x3>=0&&x1<=0))
  {
   if((y1<=0&&y2>=0) || (y1>=0&&y2<=0) || (y3<=0&&y2>=0) || (y3>=0&&y2<=0) || (y3<=0&& y1>=0) || (y3>=0&&y1<=0))
   {
     cout << "true"<<endl;}
    else  cout << "false, y - bad"<<endl;
    }
   else cout << "false x - bad"<<endl;

   
   return 0;
}
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 09.10.2013 в 05:56.
SaLoKiN вне форума Ответить с цитированием
Старый 09.10.2013, 09:07   #3
ArgoN-KS
 
Регистрация: 08.10.2013
Сообщений: 2
По умолчанию

SaLoKiN, Безумно благодарен!
ArgoN-KS вне форума Ответить с цитированием
Старый 09.10.2013, 10:54   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SaLoKiN, во-первых, в задаче речь идёт о действительных числах.
во-вторых, Вы не учитываете, что не с любыми координатами треугольник может быть построен,
а, главеное, в-третьих, не разбирал Ваш код, но практически уверен, что простым сравнением координат с нулём данную задачу не решишь!

я бы находил площадь треугольника и площади трёх треугольников, образованных началом координат и вершинами треугольника. Если сумма площадей внутренних треугольников даст площадь исходного треугольника, значит вершина лежит внутри, иначе - нет, не лежит.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2013, 11:55   #5
Tikca
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 7
По умолчанию

Прежде всего необходимо отсеять те случаи, когда треугольник не может быть построен по данным координатам. Это может быть в нескольких случаях:
1)Две точки из трёх попарно совпадают друг с другом. Этот случай кажется был рассмотрен в вышеприведённой программе.
2)Есть ещё вариант, когда три точки лежат на одной прямой. Тогда треугольник, понятное дело, не получится. Определить можно по-разному, лежат ли эти точки на одной прямой. Тут наверное даже можно прибегнуть к математике и рассмотреть векторы, с началом и концом в этих точках. Если мы сможем доказать, что они коллинеарны, то по определению отрезки с концами в точках будут либо параллельны друг другу, либо лежать на одной прямой, а значит и точки будут лежать на одной прямой Но параллельными эти отрезки не будут, это очевидно. Поэтому можно доказать, что вектора коллинеарны. Для этого стоит рассмотреть пропорциональность координат. ну и далее уже смотрим. Можно ещё написать уравнение прямой, так даже проще будет и проверить, принадлежит ли ей третья точка, так я и сделаю.
3)Мне кажется, тут ещё надо учитывать направленность отрезка.

Это я написал пока что алгоритм проверки того, что данные три точки действительно образуют треугольник. Чтобы определить, где лежит начало координат, я полагаю, мы должны рассмотреть треугольники, с одной вершиной в начале коорд, а с другими вершинами в двух точках, если площади этих треугольников в сумме составляют площадь данного, то точка лежит внутри треугольника.
Программу не написал ещё соответствующую, в ближайшее время вышлю свою версию программы. Удачи

P.S: да, и координаты точек лучше действительно сделать float или double. Дробные значения тоже входят в область действительных чисел

Последний раз редактировалось Tikca; 09.10.2013 в 12:01.
Tikca вне форума Ответить с цитированием
Старый 09.10.2013, 13:05   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Tiksa, Вы, имхо, мыслите верно.
Но для проверки возможности построения треугольника можно поступить проще.
Достаточно проверить, что каждая сторона треугольника строго меньше, чем сумма двух других.
Код:
if (a<(b+c)) and (b<(a+c)) and (c<(a+b))  
  then {Треугольник существует}
  else {Треугольник не существует}
кстати, эта проверка сразу отсеет и тот случай, когда координаты совпадают...

Да, думаю, что очевидно, что длины сторон можно легко найти по теореме пифагора (корень из суммы квадратов разностей соответствующих координат)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2013, 14:00   #7
Tikca
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 7
По умолчанию

Ой, действительно ) Да, можно и стороны сравнивать, как-то я об этом не подумал )
Tikca вне форума Ответить с цитированием
Старый 09.10.2013, 14:07   #8
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

По поводу типа чисел согласен, почему то упустил этот момент. Во всем остальном же...ребят? вы извращаться любите?

Предложите тест, на котором программа даст неверный ответ.


Нужно сменить тип чисел и поменять "false, y - bad" и "false, х - bad" на просто fasle. а то малость некорректно будет)

Что касается проверки на длины сторон, а ничего что у нас даны точки,а не длины? и по трем точкам лежащим не на одной прямой ПОЛЮБОМУ можно нарисовать треугольник, при условии что точки тупо в плоскости и не имеют определенной последовательности соединения!
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 09.10.2013 в 14:18.
SaLoKiN вне форума Ответить с цитированием
Старый 09.10.2013, 14:49   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и по трем точкам лежащим не на одной прямой
ткните пальцем, где Вы проверяете, что точки не лежат на одной прямой!

просто для информации:
(-1,-1) (2,2) (3,3) лежат на одной прямой. введите в вашу программу. Сообщите результат.

если у Вас (ошибочно) может возникнуть мысль, что так получилось от того, что прямая проходит через начало координат, то нет,
дело не в этом.
вот координаты трёх других точек, лежаших на одной прямой, не проходящей через начало координат:
(-1,-3) (1,-1) (3, 1)

Цитата:
Предложите тест, на котором программа даст неверный ответ.
легко.
(-1,-3) (3,-3) (3, 1)


чертёж приложить или сами нарисуете треугольник?

Последний раз редактировалось Serge_Bliznykov; 09.10.2013 в 15:20.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2013, 15:26   #10
Tikca
Новичок
Джуниор
 
Регистрация: 09.10.2013
Сообщений: 7
По умолчанию

Треугольник нарисуйте всё встанет на свои места, всё станет видно. А если что, длину стороны можно найти, зная координаты её концов с помощью метода координат ) так что это не вызовет сложностей
Tikca вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны действительные положительные числа a, b, c, d. Определить, можно ли прямоугольник со сторонами a, b уместить внутри прямоуг Proskurina Помощь студентам 1 27.03.2013 21:03
написать программу на turbo вычислить min если даны числа.задание внутри Di@nk@ Паскаль, Turbo Pascal, PascalABC.NET 0 07.02.2012 15:51
Даны действительные числа a1,...,a20. Получить числа b1,...,b20, ... Alfa.Shadow Паскаль, Turbo Pascal, PascalABC.NET 2 21.12.2011 15:55
VBA. Excel. определить сколько треугольников лежит внутри окружности радиуса R с центром вначале координат. Dus master Помощь студентам 6 20.06.2011 01:48
лежит ли точка внутри треугольника х-prof Помощь студентам 1 16.06.2011 20:16