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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2016, 23:08   #1
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию Точки, лежащие на одной прямой

Помогите, пожалуйста, с заданием.
На плоскости есть какое-то количество точек (задается во входном файле,
от 1 до 100 точек).
Нужно узнать, какие точки лежат на одном отрезке,
то есть подстроив программу под различные случаи количества городов.
Как я понимаю, нужно провести отрезок с 1 точки во вторую, и уравнением прямой, проходящей через две точки, проверить, лежат ли на этом отрезки точки 3 и 4. Потом провести с 1 по 3, и проверить, лежит ли на ней 2 и 4, потом с 1 и 4, проверить 2 и 3.
Далее все тоже самое, только проводить отрезки уже со следующих точек.
Как написать программу, которая узнает, какие точки лежат на одной прямой?
dimon_snake вне форума Ответить с цитированием
Старый 04.01.2016, 23:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

100 точек? Там только отрезков соединяющих каждую с каждой 99!. Представляешь хоть сколько нулей в конце этого числа? 22. Плюс еще в начале куча циферей. Сколько времени для решения потребуется?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2016, 23:32   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Ну вы хоть понимаете в чем нужно писать программу??
Или совсем все туго?
Что вы все путаете понятия... "Не хочу писать (сложно, времени нету, хомячок рожает) - идем во фриланс ставим ценник вам решают и все довольны"
"Хочу писать но не получается - показываем наработки, указываем где затор слушаем советы, исправляем и все довольны".

Вам вариант какой?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 04.01.2016, 23:33   #4
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
100 точек? Там только отрезков соединяющих каждую с каждой 99!.
Отрезков, напротив, будет больше. Ведь соединять нужно первую со всеми, потом вторую со всеми, кроме первой, и т.д.
А относительно нулей, вы, наверное, не так поняли.
Нам известны координаты. допустим, ста точек.
И не известно, может, там все на одной линии, тогда ответом будут все точки, может, только три лежат на одной линии. То есть считаем кол-во отрезков, соединяющих точки, то есть n-1 + n-2+ ...+ n-99 и это число удваиваем. А потом проверяем на принадлежность сначала точки 3 к отрезку 1 - 2, потом 4 на принадлежность к один 2, и так далее.
Потом идет вторая точка, и её тоже нужно соединить с остальными. И то число, удвоенное, как раз и будет количеством проведенных отрезков для проверки на принадлежность к прямой.
А как дальше, не знаю.
просто не могу связать цикл, который все это будет считать.
dimon_snake вне форума Ответить с цитированием
Старый 04.01.2016, 23:38   #5
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Вот мои наработки.
Код:
var
fi,fo:text;
n,x,y,m,i,b,v,l,z,o:integer;
a:array[1..200] of integer;
a1:array[1..100] of integer;
begin
Assign(fi,'roads.in');
Assign(fo,'roads.out');
Reset(fi);
Rewrite(fo);
Read(fi,n);
Readln(fi);
m:=1;
for i:=1 to n do begin \\заполняем массив точками, размер массива - 200, по-максимуму. 
read(fi,x,y);
a[m]:=x;
Inc(m);
a[m]:=y;
Inc(m);
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.
dimon_snake вне форума Ответить с цитированием
Старый 04.01.2016, 23:40   #6
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Почему 99! ?
Если точек сто, то отрезков будет
99+98+97+..+1, то есть совсем не 99!
dimon_snake вне форума Ответить с цитированием
Старый 04.01.2016, 23:43   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тю. А чего я зациклился на умножении? Посыпаю голову пеплом Праздники даром не проходят
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.01.2016 в 23:45.
Аватар вне форума Ответить с цитированием
Старый 05.01.2016, 01:12   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А что в итоге получить-то надо? Множество уравнений прямых aka y = kx + b, имеющие на борту 3 или более точек из входных данных?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.01.2016, 15:24   #9
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Вообще нужно соединить между собой все точки, и подсчитать общую длину, учитывая при этом, что несколько точек могут лежать на одной прямой, в этом случае отдельно их соединять не надо, достаточно длины этой линии.
Так что нужно узнать, какие точки лежат на одной прямой.
dimon_snake вне форума Ответить с цитированием
Старый 05.01.2016, 19:39   #10
Viktor_Ptica
Пользователь
 
Регистрация: 23.12.2015
Сообщений: 22
По умолчанию

http://www.cleverstudents.ru/line_an..._2_points.html - почитайте тут. алгоритм будет не сложный в принципе и зациклить его можно на проверку.
Если задача кажется легкой - то решать её придется очень долго.
Viktor_Ptica вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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