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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2016, 23:33   #21
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
почему ... мой применять нельзя.
А кто запретил? Пиши пример.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.01.2016, 23:56   #22
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Вот код:
Код:
label
lb1;
var
fi,fo:text;
n,x,y,m,i,b,v,l,z,o,x1,x2,y1,y2,k,j:integer;
a,a2:array[1..200] of integer;
a1:array[1..100] of integer;
begin
Assign(fi,'D:\roads.txt');
Assign(fo,'D:\roadss.txt');
Reset(fi);
Rewrite(fo);
Read(fi,n);
Readln(fi);
m:=1;
for i:=1 to n do begin
read(fi,x,y);
a[m]:=x;
Inc(m);
a[m]:=y;
Inc(m);
end;

x1:=-1;
x2:=1;
y1:=0;
y2:=2;
o:=1;
Вот здесь код, которые ищет все точки, которые лежат на одной прямой. 
for j:=1 to n-1 do begin 
x1:=x1+2; y1:=y1+2;
x2:=1; y2:=2;
for i:=1 to n do  begin
x2:=x2+2; y2:=y2+2;
b:=1; v:=2;
for k:=1 to n do begin
if  (b=x2)or(b=x1) then goto lb1;
if (a[b]-a[x1])*(a[y2]-a[y1])=(a[v]-a[y1])*(a[x2]-a[x1])
then  begin
a2[o]:=a[x1]; a2[o+1]:=a[y1]; a2[o+2]:=a[x2]; a2[o+3]:=a[y2]; a2[o+4]:=a[b]; a2[o+5]:=a[v];
o:=o+6;
end;
lb1:
b:=b+2; v:=v+2;
end;
end;
end;
b:=1;
z:=1;
v:=2;
o:=1;
while n>z do begin
l:=2;
for i:=1 to n-z do begin
a1[o]:=round(sqrt(sqr(abs(a[b+l]-a[b]))+sqr(abs(a[v+l]-a[v]))));
Inc(o);
l:=l+2;
end;
b:=b+2;
v:=v+2;
Inc(z);
end;
o:=1;
v:=0;
z:=1;
while z<n do begin
v:=v+(n-o);
Inc(o);
Inc(z);
end;
m:=0;
for i:=1 to v do m:=m+a1[i];
Write(fo,m);
Close(fo);
end.
Работает, находит. Спасибо.
Но возникла проблема. Если взять точки 100 0, 0 100, 50 50, 0 0.
При проверки, лежит ли точка 50 50 на прямой 100 0 и 0 100 он указывает, что верно. это правильно. Но потом идет проверка, лежит ли точка 100 0 на прямой 0 100 и 50 50, и программа говорит, что это так.
Действительно, ведь уравнение прямой, а не отрезка. Программа записала координаты первых трех точек. Как сделать, что бы она не записывала опять то же, но с другими точками?
dimon_snake вне форума Ответить с цитированием
Старый 05.01.2016, 23:59   #23
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Циклы переставь..
не от 1, а от предыдущего


Цитата:
А кто запретил? Пиши пример.
Эх да.. На крестах сойдет?
Poma][a вне форума Ответить с цитированием
Старый 06.01.2016, 00:12   #24
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

В смысле циклы переставь? Перенести весь код уравнения прямой в предыдущий цикл? Там где цикл с i?
dimon_snake вне форума Ответить с цитированием
Старый 06.01.2016, 00:16   #25
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Я ж писал уже..
Перебираешь все точки без овторений и спроишь по ним прямую :
for i := 1 to n for j := i+1 to n
а потом перебираешь все точки for k := j+1 to n
Вроде так должно сработать
Poma][a вне форума Ответить с цитированием
Старый 06.01.2016, 00:40   #26
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Тогда не понимаю. В смысле, перебираешь все точки?
dimon_snake вне форума Ответить с цитированием
Старый 06.01.2016, 00:47   #27
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А как ты хочешь без перебора? Это самый простой и очевидный вариант
Poma][a вне форума Ответить с цитированием
Старый 06.01.2016, 00:53   #28
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

То есть подставлять все точки в уравнение прямой?
dimon_snake вне форума Ответить с цитированием
Старый 06.01.2016, 00:59   #29
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Я бы делал так
Poma][a вне форума Ответить с цитированием
Старый 06.01.2016, 01:11   #30
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

В первом цикле менять только первую точку, во втором - первую, вторую и третью, а в третьем - проверять на уравнении?
То есть как я сделал в своем коде?
dimon_snake вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить, лежат ли точки на одной прямой Паскаль anton.dasuik Помощь студентам 1 27.02.2013 22:52
Управление прямой вокруг точки Pascal ABC Danise Помощь студентам 1 10.01.2012 00:53
Выяснить лежат ли точки на одной прямой commander_spock Помощь студентам 10 20.10.2010 14:44
Определить Лежат ли точки на одной прямой домик Помощь студентам 10 11.04.2010 20:12
Определить, лежат ли обе точки относительно прямой в одной полуплоскости - задача на С++. Wia Помощь студентам 4 21.12.2008 02:06