Страница 1 из 1

Pascal. Пересекающиеся окружности

Добавлено: 14 июн 2008, 12:05
DemonRed
Задан массив, размером n строк на 3.(Const n=10, элементы массива типа байт) Первые два элемента строки координаты центра окружности, третий элемент ее радиус. Найти число пересекающихся окружностей. (Ответ: № окружности число пересечений)
P.S. буду очень благодарен!

Re: помогите с программой на Pascal

Добавлено: 14 июн 2008, 22:05
Хыиуду
Расстояние между двумя точками вычисляется по теореме Пифагора.
Две окружности пересекаются, если расстояние между их центрами меньше суммы их радиусов.

Re: Pascal. Пересекающиеся окружности

Добавлено: 14 июн 2008, 22:42
Serge_Bliznykov
Хыиуду, задачка то с подковыркой... :-)
&quot писал(а):Две окружности пересекаются, если расстояние между их центрами меньше суммы их радиусов.
к сожалению, не так... они могут и не пересекаться в случае когда меньшая окружность полностью внутри большей...

Re: Pascal. Пересекающиеся окружности

Добавлено: 15 июн 2008, 16:42
DemonRed
Спасибки большое, мож кому пригодиться текст программы:

Var a:array[1..n] of real;
b:array[1..n] of real;
r:array[1..n] of real;
i,KolvoPeresecheni: integer;
sum,d,L:real;
count:integer;
Begin
Clrscr;
writeln('Vvedite ', n , ' elementov massiva dlya x');
for i:=1 to n do
readln(a);

writeln('vvedite ',n, ' elementov massiva dlya y');
for i:=1 to n do
readln(b);

writeln('vvedite ', n, ' radiusov okryznostey');
for i:=1 to n do
readln(r);
if r<0 then writeln ('vvedeno nevernoe chislo radiysov');

KolvoPeresecheni := 0;
i:= 0;
for i:=1 to n-1 do
begin
L:=sqrt(sqr(a-a[i+1])+sqr(b-b[i+1]));
if L < r+r[i+1] then KolvoPeresecheni := KolvoPeresecheni + 1;
end;
Writeln(' okryznosti peresekaitsa -', KolvoPeresecheni, 'raz.');
Readln;
End.

Re: Pascal. Пересекающиеся окружности

Добавлено: 16 июн 2008, 12:10
Хыиуду
Serge_Bliznykov писал(а):Хыиуду, задачка то с подковыркой... :-)

к сожалению, не так... они могут и не пересекаться в случае когда меньшая окружность полностью внутри большей...

Тогда "Меньше суммы их радиусов, но больше разности"

Re: Pascal. Пересекающиеся окружности

Добавлено: 16 июн 2008, 20:52
Serge_Bliznykov
Хыиуду писал(а):Две окружности пересекаются, если расстояние между их центрами меньше суммы их радиусов, но больше разности радиусов
Хыиуду, угу, вот теперь полностью согласен!
проблема только в том, что, похоже, автор топика не стал заморачиваться с подобными сложностями и сделал как мог... :-)))
ну, как говорится, дай Бог :-)

Re: Pascal. Пересекающиеся окружности

Добавлено: 23 июн 2008, 21:45
Medved
&quot писал(а):Спасибки большое, мож кому пригодиться текст программы:
Не думаю... Почитай написанное ниже. Код неправильный.
1)это не ошибка, но зачем i присваивать ноль перед циклом "for?
2)if l <r+r[i+1] надо заменить на if (l<r+r[i+1])and(l>abs(r-r[i+1])
3)но даже принципиально кодж неверен. Почему вы сравниваете только радиусы i и i+1? окружность ведь пересекается не только с соседней!
цикл надо делать такой:

Код: Выделить всё

for i:=1 to n do begin
peres:=0;
for j:=1 to n do
if (i<>j)and(l<r[i]+r[j])and(l>abs(r[i]-r[j]) then inc(peres,2) else if (l=r[i]+r[j])or(l=abs(r[i]-r[i+1]) then inc(peres)
writeln('N okruzhnosti ',i,' peresechenij ',peres);
end;
понимаешь, почему так, или объяснить?

Re: Pascal. Пересекающиеся окружности

Добавлено: 23 июн 2008, 21:48
Medved
ладно, сразу объясню.

в условии вы написали:
&quot писал(а):Найти число пересекающихся окружностей
Надо найти кол-во ОКРУЖНОСТЕЙ.
Но т.к вы также написали
&quot писал(а):(Ответ: № окружности число пересечений)
то надо найти кол-во ПЕРЕСЕЧЕНИЙ.
А у двух окружностей могут быть 2 пересечения либо одно(когда они кассаются).
Дальше надеюсь, всё понятно.

З.Ы. вот я и senior developer=)

Re: Pascal. Пересекающиеся окружности

Добавлено: 24 июн 2008, 11:45
Хыиуду
Medved, поздравляю с повышением ;)
DemonRed, у вас нечетко сформулировано задание. "Найти число пересекающихся окружностей. (Ответ: № окружности число пересечений)" - это бред. Ответ, данный в скобках, предполагает вопрос "Найти число пересечений для каждой окружности". А "найти число пересекающихся окружностей" (кстати, не число, а количество) - это, по моему мнению, количество разных пар окружностей, таких, что окружности в каждой паре пересекаются.
Еще остается открыт вопрос, считать ли касание окружностей пересечением.
В общем, по-хорошему такие вопросы должны быть объяснены в задании. Но я еще не видел преподавателя, который давал бы нормальные задания.

Re: Pascal. Пересекающиеся окружности

Добавлено: 24 июн 2008, 13:27
Serge_Bliznykov
Хыиуду,
Medved,
я, конечно, могу ошибаться, но, мне кажется, что господин АвторТопика давно уже потерял интерес к теме (программу? как мы видим, он написал, и, не исключаю, что уже и сдал :-) что ему теперь тут делать? Похоже теоретическо-философские изыски, как правильно решить задачу и считается ли касание пересечением его не интересуют... :-)