TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

[ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 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.
 

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz