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





 Система тестов
Номер теста Проверяемый случай Данные Результат
a b R Кол. точек Координаты точек Otvet 
1 Принадлежит 1 0 2 3 X=(-1, 2, 3) 
Y=(2, 1, 2)
"Да"
2 Не принадлежит 1 0 2 2 X=(-1, 3) 
Y=(2, 2)
"Нет"
Школьный АЯ
алг Точки (арг цел N, арг вещ таб X [1 : N] , Y [1 : N] , 
           арг вещ a, b, R, рез лит Otvet)
нач цел i
  i:=1;   Otvet:="Нет"
  нц пока (i<=N) и (Otvet="Нет") | условие продолжения цикла
    если (X[i]-a)**2 + (Y[i]-b)**2 <R*R | условие прерывания цикла
      то Otvet := "Да"
      иначе i:=i+1
    все
  кц
кон
Исполнение алгоритма 

Обозначения проверяемых условий: 
(i <= N) и (Otvet = "Нет")  
  => (1) 
(X[i]-1)**2 + (Y[i]-b)**2 < R*R  => (2) 
 

N теста i Otvet (1) (2)
1 1
2
3
"Нет"
"Да"
+
+
-(кц)
-
+
2 1
2
3
"Нет" +
+
-(кц)
-
-

 

  Блок-схема 


Turbo Pascal
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.

QBasic
CLS 
INPUT "Введите через запятую координаты центра круга: ", a, b
INPUT "Введите радиус круга: ", Radius
INPUT "Введите количество точек: ", NPoints
DIM X(NPoints), Y(NPoints) 'описание массивов координат точек
 
FOR i = 1 TO NPoints
  PRINT i; "-ая точка "
  INPUT "x = ", X(i)
  INPUT "y = ", Y(i) : PRINT
NEXT i
 
Flag = 0 : i = 1
WHILE
i <= NPoints AND Flag = 0
  IF (X(i)-a)^2 + (Y(i)-b)^2 < Radius^2 THEN Flag=1 ELSE i=i+1
WEND
 
PRINT "О т в е т : в множестве точек ";
IF
Flag = 1 THEN PRINT "cодержатся" ELSE PRINT "не содержатся"
PRINT " точки, принадлежащие заданной области."
END

Другие записи

10.06.2016. Пример 4.3. Определить, имеется ли среди элементов главной диагонали заданной целочисленной матрицы A(N, N) хотя бы один положительный нечётный элемент.
  Система тестов Номер теста Проверяемый случай Данные Результат N Матрица А Текст 1 Имеется 3 "Есть такие" 2 Не имеется 2 "Нет таких" Демонстрация Школьный…
10.06.2016. Пример 4.5. Включить заданное число D в массив A(N), упорядоченный по возрастанию, с сохранением упорядоченности.
Система тестов Номер теста Проверяемый случай Данные Результат D Массив А 1 D <= a1 0 A=(1, 3, 5) A=(0, 1, 3, 5) 2 a1< D <= aN 4 A=(1, 3, 5) A=(1, 3, 4, 5) 3 aN…