Найти две такие точки, чтобы две окружности с центрами в точках удовлетворяли условию - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

есть такая задача, которую сейчас думаю как решить:

4) Дано множество точек на плоскости. Найти две такие точки, чтобы две окружности заданного радиуса, с центрами в этих точках были такими, что количество точек внутри окружностей было одинаковым.

Возник вопрос:

1) Как быть с точками, что находятся на самой окружности(считать или нет); 2) Можно ли как-то разом сократить время выполнения( что-то проверить) и 3) Можно ли, чтобы окружности пересекались?

Подскажите, если вы компетентны, пожалуйста!

Решение задачи: «Найти две такие точки, чтобы две окружности с центрами в точках удовлетворяли условию»

textual
Листинг программы
  1. (* Дано множество точек на плоскости. Найти две такие точки,
  2. чтобы две окружности заданного радиуса, с центрами в этих точках были такими,
  3.  что количество точек внутри окружностей было одинаковым.*)
  4. program z4;
  5. uses  graphABC;
  6. const
  7.    n = 5;//максимальное число точек
  8.    r = 100;//вы рисуете окружности радиусрм 100, а не 200
  9.    w = 700;//размеры графического окна
  10. type
  11.    tochki = array[1..2,1..n] of integer;
  12. //точка внутри окружности  
  13. function inside(x,y,tx,ty:integer):boolean;
  14. begin
  15. result:=sqr(x-tx)+sqr(y-ty)<r*r
  16. end;
  17. //количество точек в окружности
  18. function count(tx,ty:integer;a:tochki;n:integer):integer;
  19. var i:integer;
  20. begin
  21. result:=-1;//вычитаем точку в центре
  22. for i:=1 to n do
  23. if inside(a[1,i],a[2,i],tx,ty)then inc(result)
  24. end;    
  25.  
  26. var k: tochki;
  27.     i, j: integer;
  28.     m:set of byte;//номера точек, около которых есть нужные окружности
  29. begin
  30. setwindowsize(400,400);
  31. centerwindow;
  32. writeln('Введите ', n, ' координат Х от ',r,' до ',w-r);
  33. for i := 1 to n do
  34. readln(k[1, i]);
  35. writeln('Введите ', n, ' координат Y от ',r,' до ',w-r);
  36. for i := 1 to n do
  37. readln(k[2, i]);
  38. writeln('press enter');
  39. writeln('Даны координаты:');
  40. for i := 1 to n do
  41. writeln(i, '(', k[1, i], ';', k[2, i], ')');
  42. m:=[];
  43. for i:=1 to n-1 do
  44. for j:=i+1 to n do
  45. if (count(k[1,i],k[2,i],k,n)>0)and(count(k[1,i],k[2,i],k,n)=count(k[1,j],k[2,j],k,n)) then
  46.  begin
  47.   writeln('точки ',i,' ',j,' по ',count(k[1,i],k[2,i],k,n),' тч.');
  48.   m:=m+[i]+[j];
  49.  end;
  50. if m=[] then writeln('Нет окружностей сравным количеством точек внутри');
  51. writeln('press enter');
  52. readln;
  53. ClearWindow;
  54. setwindowsize(w,w);
  55. centerwindow;
  56. setbrushstyle(bsClear);
  57. for i := 1 to n  do
  58.  begin
  59.   SetPenColor(clBlue);
  60.   Circle(k[1, i], k[2, i], 3);
  61.   textout(k[1, i]+5, k[2, i], inttostr(i));
  62.   if i in m then SetPenColor(clRed)
  63.   else SetPenColor(clBlack);
  64.   Circle(k[1, i], k[2, i], r);
  65.  end;
  66. end.

Объяснение кода листинга программы

  1. Программа на языке PascalABC.Net.
  2. Задано множество точек на плоскости.
  3. Необходимо найти две такие точки, чтобы две окружности заданного радиуса, с центрами в этих точках, удовлетворяли условию - количество точек внутри окружностей было одинаковым.
  4. Точка внутри окружности - это функция, которая проверяет, находится ли точка внутри окружности по заданным координатам центра и радиусу.
  5. Количество точек в окружности - это функция, которая подсчитывает количество точек внутри окружности по заданным координатам центра.
  6. Ввод координат точек происходит с клавиатуры.
  7. Переменная m представляет собой множество номеров точек, около которых есть нужные окружности.
  8. Циклы перебирают все возможные комбинации точек для проверки условия.
  9. Если количество точек внутри окружностей совпадает, то выводится сообщение с номерами точек и количеством точек внутри окружностей.
  10. Переменная m обновляется, если найдены нужные окружности.
  11. Если m пустое, выводится сообщение Нет окружностей сравным количеством точек внутри.
  12. Очистка окна и рисование окружностей и их центров с помощью функций графического модуля.
  13. Цикл перебирает все точки для рисования окружностей и их центров.
  14. Черный цвет используется для окружностей, красный - для точек, удовлетворяющих условию.
  15. Программа завершается после нажатия клавиши Enter.

ИИ поможет Вам:


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

Оцени полезность:

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы