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

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

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

 
 Ответить  Открыть новую тему 
> Простенькая задачка, на расчет
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

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

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

P.S. Переименуй тему, иначе она будет закрыта...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 16.05.2024 13:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name