Задано множество точек на плоскости. Oпределить, принадлежит ли хотя бы одна точка множества внутренней области круга с центром в точке (a, b) и радиусом R -Pascal(Паскаль)

{
          Пример 4.2.  Задано множество точек на плоскости.  Определить,
          принадлежит ли хотя бы одна точка множества внутренней области
                 круга с центром в точке (a, b) и радиусом R.

                               Система тестов
    ╔═══════╤════════════════╤═══════════════════════════════╤═══════════╗
    ║       │                │            Данные             │           ║
    ║ Номер │   Проверяемый  ├───┬───┬───┬──────┬────────────┤ Результат ║
    ║ теста │     случай     │ а │ b │ R │Кол-во│ Координаты │           ║
    ║       │                │   │   │   │точек │ точек      │           ║
    ╟───────┼────────────────┼───┼───┼───┼──────┼────────────┼───────────╢
    ║   1   │  Принадлежит   │ 1 │ 0 │ 2 │  3   │ X=(-1,2,3) │   "Да"    ║
    ║       │                │   │   │   │      │ Y=(2,1,2)  │           ║
    ╟───────┼────────────────┼───┼───┼───┼──────┼────────────┼───────────╢
    ║   2   │ Не принадлежит │ 1 │ 0 │ 2 │  2   │ X=(-1,3)   │   "Нет"   ║
    ║       │                │   │   │   │      │ Y=(2,2)    │           ║
    ╚═══════╧════════════════╧═══╧═══╧═══╧══════╧════════════╧═══════════╝
}
 Program SetOfPoints;
   Uses Crt;
   Type Mas = Array [1..20] of Real;
   Var X, Y         : Mas;     { массивы координат точек    }
       i, NPoints   : Integer; { NPoints - количество точек }
       a, b, Radius : Real;    { координаты центра и радиус }
       Flag         : Boolean;
 {--------------------------------------------}
 Procedure Input; {описание процедуры ввода данных}
  Begin
   ClrScr;
   Write('Введите координаты центра круга: '); ReadLn(a, b);
   Write('Введите радиус круга: ');            ReadLn(Radius);
   Write('Введите количество точек: ');        ReadLn(NPoints);
   For i := 1 to NPoints do
     begin
       WriteLn(i : 4, '-ая точка ');
       Write('X = ');  ReadLn(X[i]);
       Write('Y = ');  ReadLn(Y[i]);
     end; WriteLn
  End;            {of Input}
 {--------------------------------------------}
 Procedure Inside(Var Flag : Boolean); { описание процедуры проверки  }
  Begin                                { принадлежности точек области }
    Flag := FALSE ; i := 1;
    While (i<=NPoints) and not Flag do
      If Sqr(X[i]-a)+Sqr(Y[i]-b) < Sqr(Radius) {Sqr - возведение в квадрат }
         then Flag := TRUE
         else i:=i+1;
  End; {of Inside}
 {--------------------------------------------}
 Procedure Output( Flag : Boolean); { описание процедуры }
  Begin                             { вывода результатов }
    Write('О т в е т : в множестве точек ');
    If Flag then WriteLn('cодержатся')
            else WriteLn('не содержатся');
    WriteLn(' точки, принадлежащие заданной области.');
    ReadLn
  End; {of Output}
 {--------------------------------------------}
 BEGIN
   Input;        { вызов процедуры ввода данных            }
   Inside(Flag); { вызов процедуры проверки принадлежности }
   Output(Flag)  { вызов процедуры вывода результатов      }
 END.


Leave a Comment

+ 70 = 77