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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2009, 22:21   #1
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию Нужно найти ошибку в коде

Задача: Для 3 точек на плоскости, заданных своими координатами, определить принадлежит ли начало координат образованному треугольнику.
я считал так: Заданная точка соединяется отрезками с вершинами треугольника. Если площадь исходного треугольника равна сумме площадей образовавшихся трёх треугольников, то считается, что точка принадлежит треугольнику.
Вот что получилось:
Код:
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  InOut;
 
var
  x1,y1,x2,y2,x3,y3,CA,BA,CB,P,S,OA,OB,Mp1,Ms1,OC,Mp2,Ms2,Mp3,Ms3: Extended;
 
 
begin
  SetConsoleTitleCyr('Тарабрин Владимир 15 группа вариант №8');
  SetConsoleCP_1251;
  WriteLn('введите координаты (x,y) первой точки');
  ReadLN(x1,y1);
  WriteLn('введите координаты (x,y) второй точки');
  ReadLn(x2,y2);
  WriteLn('введите координаты (x,y) третьей точки');
  ReadLn(x3,y3);
  CA := Sqrt(Sqr(x2-x1)+Sqr(y2-y1));
  BA := Sqrt(Sqr(x2-x3)+Sqr(y2-y3));
  CB := Sqrt(Sqr(x3-x1)+Sqr(y3-y1));
  P := CA+BA+CB;
  S := Sqrt(P*(P-CA)*(P-BA)*(P-CB));
  OA := Sqrt(Sqr(x2)+Sqr(y2));
  OB := Sqrt(Sqr(x3)+Sqr(y3));
  Mp1 := (BA+OA+OB)/2;
  Ms1 := Sqrt(Mp1*(Mp1-BA)*(Mp1-OA)*(Mp1-OB)); 
  OC := Sqrt(Sqr(x1)+Sqr(y1));
  Mp2 := (OC+OB+CB)/2;
  Ms2 := Sqrt(Mp2*(Mp2-OB)*(Mp2-OC)*(Mp2-CB));
  Mp3 := (OC+OA+CA)/2;
  Ms3 := Sqrt(Mp3*(Mp3-OC)*(Mp3-OA)*(Mp3-CA));
  if abs(S-Ms1-Ms2-Ms3)<=0.001
    then
    Writeln('Начало координат  принадлежит области треугольника')
    else
    Writeln('Начало координат не принадлежит области треугольника');
  ReadLn;
end.
Программа запускаеться считает но всё время выводит что точка не принадлежит области, помогите пожалуйста найти ошибку

Последний раз редактировалось Rembo; 08.11.2009 в 19:38. Причина: ошибся
Вован111 вне форума Ответить с цитированием
Старый 08.11.2009, 09:36   #2
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию

Ау, помощь нужна оч срочна, Помогите
Вован111 вне форума Ответить с цитированием
Старый 08.11.2009, 09:50   #3
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

вот мой вариант
Код:
type Tpoint= record
    x:Integer;
    y:Integer;
    end;
var t:array [1..3] of tpoint;
    i:Integer;
    s1,s2,s3,s4:Real;
function s(x1,y1,x2,y2,x3,y3:real):Real;
var a,b,c,p:Real;
begin
a:=sqrt(sqr(x1-x2)+ sqr(y1-y2));
b:=sqrt(sqr(x2-x3)+ sqr(y2-y3));
c:=sqrt(sqr(x3-x1)+ sqr(y3-y1));
p:=(a+b+c)/2;
s:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

begin
 for i:=1 to 3 do
 begin
   Readln(t[i].x);
   Readln(t[i].y);
 end;
 s1:= s(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);
 s2:= s(0,0,t[2].x,t[2].y,t[3].x,t[3].y);
 s3:=s(t[1].x,t[1].y,0,0,t[3].x,t[3].y);
 s4:=s(t[1].x,t[1].y,t[2].x,t[2].y,0,0);

 if Abs(s1-(s2+s3+s4))<0.1 then writeln('Yes')
  else Writeln('no');
 readln;
end.
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 08.11.2009, 10:05   #4
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию

Знаете в чём проблема мне можно использовате только те операции которые я привёл всякие function и массивы нельзя, так как не это надо в универ сдать а мы этого не проходили пока что,(я на 1 курсе) и как следствие ни чего больше использовать не разрешает
Вован111 вне форума Ответить с цитированием
Старый 08.11.2009, 10:13   #5
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
Знаете в чём проблема
знаю! у вас рабочая программа
попробуйте ввести (-1,1) (1,1) (0,8) мне она выдала
Цитата:
'Начало координат не принадлежит области треугольника'
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 08.11.2009, 10:28   #6
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию

Пардон я не множко не так сказал, она всегда выводит что не принадлежит области(первый пост поправил) а вы попробуйте ввести (1,1)(1,-1)(-1,-1) он выведет что не принадлежит, а на самом деле очень даже принадлежит
Вован111 вне форума Ответить с цитированием
Старый 08.11.2009, 10:40   #7
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
попробуйте ввести (1,1)(1,-1)(-1,-1)
вот ваш косяк
Код:
 P := CA+BA+CB;
а должно быть
Код:
P := (CA+BA+CB)/2;
и сразу ответ
Цитата:
'Начало координат принадлежит области треугольника'
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 08.11.2009 в 10:48.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 08.11.2009, 10:49   #8
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию

а мне надо чтобы она лежала либо в области либо на сторонах и выводила что принадлежит, я пробовал любые набора например(1;4.5)(2;-1.5)(-1.5;-2.5)специально начертил, и всё равно пишет не принадлежит
Вован111 вне форума Ответить с цитированием
Старый 08.11.2009, 10:51   #9
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

пост №9 еще раз внимательно читаем
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 08.11.2009, 10:52   #10
Вован111
Пользователь
 
Регистрация: 07.11.2009
Сообщений: 11
По умолчанию

ой действительно проглядел ща исправлю, больше косяков не видите?
Вован111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде. Serror Общие вопросы C/C++ 7 04.10.2009 00:44
помогите найти ошибку в коде xaero93 Помощь студентам 4 20.04.2009 16:05
Помогите найти ошибку в коде! alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 27.12.2008 18:31
помогите найти ошибку в коде плиз Айат Помощь студентам 2 01.10.2008 17:43
помогите найти ошибку в коде Joker88 Помощь студентам 1 04.03.2008 12:43