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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2011, 13:25   #1
alerwert
Новичок
Джуниор
 
Регистрация: 15.10.2011
Сообщений: 2
По умолчанию отрезок и окружности.

Очень сложная задача,совсем не понимаю как делать.нужно написать ее в программе.(Высокий уровень сложности).

На плоскости задана система концентрических окружностей,центры которых находятся в начале координат,а радиусы равны 1,2,3....Так же на плоскости задан отрезок,концы которого находятся в точках (x1,y1) и (x2,y2).
Необходимо найти число общих точек этого отрезка и указанной системы окружностей.

Входные данные:
входной файл содержит четыре целых числа x1,y1,x2,y2.Эти числа не превосходят 10^3 по абсолютной величине.Заданный отрезок имеет не нулевую длину.

Выходные данные:
В выходной файл введите одно целое число - количество общих точек.

Пример:
входные числа:
1 1 2 1;
выходные числа:
1.


Пример:
входные числа:
1 2 2 1;
выходные числа:
0
alerwert вне форума Ответить с цитированием
Старый 15.10.2011, 21:16   #2
alerwert
Новичок
Джуниор
 
Регистрация: 15.10.2011
Сообщений: 2
По умолчанию

Код:
var x1,y1,x2,y2,s,e:integer;
begin
e:=0;
s:=0;
readln(x1,y1,x2,y2);
if (x1=x2) then
s:=s+1
else s:=0;
if (y1=y2) then
e:=e+1
else e:=0;
writeln(s+e);
end.
вот я что то накидал,но точно не знаю,правильно ли сделал ее.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 16.10.2011 в 01:01.
alerwert вне форума Ответить с цитированием
Старый 16.10.2011, 01:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне кажется, что Ваше решение неверно.

я бы посмотрел в сторону такого алгоритма:
найти расстояние S1 от начала координат до точки (x1,y1)
и найти расстояние S2 от начала координат до точки (x2,y2)
ну а дальше посчитать (желательно формулу составить), сколько целых чисел попадает в интервал от [S1.. S2]
это и будет числом пересечений.

p.s. не претендую на верность решения... Обязательно проверьте на тестовых примерах, нарисуйте несколько вариантов, сравните результаты..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2011, 21:42   #4
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

Код:
var x1,y1,x2,y2,AB:integer;
S1,S2:real;
begin
readln(x1,y1,x2,y2);
AB=sqrt(sqr(x2-x1)+(sqr(y2-y1));
S1=sqrt(x1*x1+y1*y1);
S2=sqrt(x2*x2+y2*y2);
вот что то сделал.
warca вне форума Ответить с цитированием
Старый 16.10.2011, 21:50   #5
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

Код:
var x1,y1,x2,y2,c:integer;
S1,S2,AB:real;
begin
readln(x1,y1,x2,y2);
AB:=sqrt(sqr(x2-x1)+sqr(y2-y1));
S1:=sqrt(x1*x1+y1*y1);
S2:=sqrt(x2*x2+y2*y2);
c:=0; while (s1<s2) do begin s1:=s1+1; c:=c+1; end;
write(c);
end.
warca вне форума Ответить с цитированием
Старый 16.10.2011, 22:51   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Сперва нужно проверить, на каком расстоянии от начала координат находится отрезок, для этого находим формулу прямой, на которой он лежит. (коэфициенты наклона и смещения, важно проверить случаи вертикальной и горизонтальной линий до этого)
Из этой формулы найдем формулу нормали.
Далее - точку их пересечения.
После этого - расстояние от начала координат до этой точки.
Отсюда находим количество пересечений прямой(!) и окружностей.
Далее, для каждой окружности определяем, находятся ли внутри нее концы отрезка и в зависимости от этого уменьшаем количество пересечений с прямой.
Alar, верни репу!

Последний раз редактировалось Naive; 16.10.2011 в 22:53.
Naive вне форума Ответить с цитированием
Старый 17.10.2011, 00:27   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

warca
мне Ваше решение из поста #5 понравилось.
Именно об этом алгоритме я и говорил.
В принципе, можно выразить решение через формулу (без цикла), но, в любом случае, такое решение тоже годится, имхо!

единственное, выкиньте вычисление AB - оно же нигде у Вас не используется!

ну и ещё малюсенькая ложечка дёгтя в бочку мёда с решением - данной решение (как мне кажется) не учитывает случай, когда отрезок начинается прямо с окружности или/и заканчивается прямо на окружности. В Вашем решении эти точки учтены не будут (возможно, я ошибаюсь, ибо решение "не гонял", выводы исключительно умозрительные!)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2011, 13:18   #8
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

Основу задачи вывели а дальше остается самая маленькая работа
warca вне форума Ответить с цитированием
Старый 17.10.2011, 14:05   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

точки (4;0) и (-4;0) - отрезок дважды проходит через все окружности, ответ - 6
ваш алгоритм выдаст 0 в ответе
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 17.10.2011, 14:10   #10
warca
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 51
По умолчанию

а в чем же тогда ошибка?
warca вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрезок. Отсечение stscolt Помощь студентам 0 11.11.2009 00:29
Дивижение окружности по окружности Irina8340 Помощь студентам 10 13.05.2009 20:25
Отрезок Witaliy Помощь студентам 5 14.02.2009 19:46
движение окружности по окружности MyQwErTy Помощь студентам 13 04.11.2008 22:52