Определить число точек с (x;y) попадающих - Free Pascal

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

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

Определить число точек C (x;y) попадающих: Внутрь заштрихованной области На границу Вне заданной области. Все значения произвольные Это гипербола

Решение задачи: «Определить число точек с (x;y) попадающих»

textual
Листинг программы
  1. uses crt;
  2. var a,b,x01,x02,r1,r2,y01,y02,x,y:real;
  3.     n,i,kv,kn,ks:integer;
  4. begin
  5. clrscr;
  6. repeat
  7. writeln('Введите параметры гиперболы a,b>0');
  8. readln(a,b);
  9. until(a>0)and(b>0);
  10. repeat
  11. writeln('Введите абциссы центров окружностей x01,x02>0');
  12. readln(x01,x02);
  13. until(x01>0)and(x02>0);
  14. repeat
  15. writeln('Введите радиусы окружностей r1, r2 >0');
  16. readln(r1,r2);
  17. until (r1>0)and(r2>0);
  18. y01:=-b*x01/a; //ниже оси Х
  19. y02:=b*x02/a; //выше оси Х
  20. repeat
  21. write('Введите количество точек n>0 n=');
  22. readln(n);
  23. until n>0;
  24. kv:=0; {внутри}
  25. kn:=0; {на границе}
  26. writeln('Введите координаты ',n,' точек');
  27. for i:=1 to n do
  28.  begin
  29.   writeln('Точка ',i);
  30.   write('x=');readln(x);
  31.   write('y=');readln(y);
  32.  //если в верхнем сегменте
  33.     if (sqr(x-x02)+sqr(y-y02)<=r2*r2+0.01)and(y<=b/a*sqrt(x*x-a*a)+0.01) then
  34.      begin
  35.       if (abs(sqr(x-x02)+sqr(y-y02)-r2*r2)<0.01)//с точностью 0.01 на окружности
  36.       or(abs(y-b/a*sqrt(x*x-a*a))<0.01)then inc(kn)//с точностью 0.01 на линии гиперболы
  37.       else inc(kv)//иначе внутри области
  38.      end;
  39.     //если в нижнем сегменте
  40.     if (sqr(x-x01)+sqr(y-y01)<=r1*r1+0.01)and(y>=-b/a*sqrt(x*x-a*a)-0.01) then
  41.      begin
  42.       if (abs(sqr(x-x01)+sqr(y-y01)-r1*r1)<0.01)//с точностью 0.01 на окружности
  43.       or(abs(y+b/a*sqrt(x*x-a*a))<0.01)then inc(kn)//с точностью 0.01 на линии гиперболы
  44.       else inc(kv)//иначе внутри области
  45.      end;
  46.  end;
  47. ks:=n-kn-k;//остальные точки снаружи
  48. writeln('Количество точек внутри заштрихованных областей=',kv);
  49. writeln('Количество точек на границах заштрихованных областей=',kn);
  50. writeln('Количество точек снаружи заштрихованных областей=',ks);
  51. readln
  52. end.

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

  1. Объявление переменных: a, b, x01, x02, r1, r2, y01, y02, x, y, n, i, kv, kn, ks (реальные или целочисленные)
  2. Ввод параметров гиперболы a, b и условий для окружностей x01, x02, r1, r2
  3. Вычисление координат центров окружностей y01 и y02
  4. Ввод количества точек n
  5. Ввод координат точек (x;y)
  6. Проверка принадлежности точки к верхнему сегменту гиперболы
  7. Проверка принадлежности точки к нижнему сегменту гиперболы
  8. Подсчет количества точек внутри заштрихованных областей (kv)
  9. Подсчет количества точек на границах заштрихованных областей (kn)
  10. Подсчет количества точек снаружи заштрихованных областей (ks)
  11. Вывод результатов
  12. Чтение подтверждения ввода (readln)

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


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

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

10   голосов , оценка 4.4 из 5

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

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

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