IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Простенькая задачка, на расчет
Костян
сообщение 29.01.2006 0:36
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской

Репутация: -  0  +


Народ, всем салют, у мня к вам вот такой вот вопросик. Есть простенькая задача:написать прогу проверяющую лежат ли 3 точки заданные пользователем на одной прямой(каждая точка имеет две координаты-икс и игрек).
Вот в принципе эта прога:
Код
program vector;
uses crt;
var
x1,y1,x2,y2,x3,y3: real;
otrx1,otry1,otrx2,otry2: real;
begin
clrscr;
writeln('Введите 3 координаты');
readln(x1);
readln(y1);
readln(x2);
readln(y2);
readln(x3);
readln(y3);
otrx1:=x2-x1; otry1:=y2-y1;
otrx2:=x3-x1; otry2:=y3-y1;
if (otrx1=otrx2) and (otry1=otry2) then
writeln('Данные точки лежат на одной прямой')
else
writeln('Данные точки не лежат на одной прямой');
readkey;
end.

Вопрос: правильна ли эта прога(считает вроде все правильно), можно ли сделать как нить по другому(конечно можно но хотелось бы увидеть конкретные предложения).
Буду очень признателен


--------------------
...И заключили ТЕМНЫЕ И СВЕТЛЫЕ програмисты договор...
...и было в том договоре сказано....
...что будет создан ночной дозор для контроля темных программистов...
...и будет создан дневной дозор для надзора за светлыми программистами...
..................ТАК НАЧИНАЛАСЬ ЖИЗНЬ ТУРБО ПАСКАЛЯ.............
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 29.01.2006 0:53
Сообщение #2


Гость






Цитата(Костян @ 28.01.2006 23:36)
Вопрос: правильна ли эта прога(считает вроде все правильно)

Не совсем... Для данных:
x1 := 3; y1 := 1;
x2 := 6; y2 := 2;
x3 := 9; y3 := 3;
Получаем ответ "Данные точки не лежат на одной прямой", хотя чертеж показывает обратное...

Вообще-то эта задача решалась на форуме:
Трегольник, стороны которого...
(сама функция Includ приведена на несколько постов выше, чем тот, на который ссылка)

P.S. Переименуй тему, иначе она будет закрыта...
 К началу страницы 
+ Ответить 
hardcase
сообщение 29.01.2006 11:43
Сообщение #3


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


А можно воспользоваться неравеноством треугольника: A(x1,y1) B(x2,y2) C(x3,y3)
|vectAB| + |vectBC| ~ |vectAC| or
|vectAC| + |vectAB| ~ |vectBC| or
|vectAC| + |vectBC| ~ |vectAB|
Код
function Line(const A,B,C: TPoint; Eps: double): boolean;
    fucntion Norm(const M,N: TPoint): double;
      var _x, _y: double;
      begin
        _x:=(M.X-N.X); _y:=(M.Y-N.Y);
        Result:=abs(_x * _x + _y * _y)
      end;
  var vectAB, vectBC, vectAC: double;
  begin
    vectAB:=Norm(A,B);
    vectAC:=Norm(A,C);
    vectBC:=Norm(B,C);
    if (abs(vectAB + vectBC - vectAC) < Eps) or
       (abs(vectAC + vectAB - vectBC) < Eps) or
       (abs(vectAC + vectBC - vectAB) < Eps)
    then Result:=true
    else Result:=false
  end;


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 13:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"