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

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

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

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

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

textual
Листинг программы
uses crt;
var a,b,x01,x02,r1,r2,y01,y02,x,y:real;
    n,i,kv,kn,ks:integer;
begin
clrscr;
repeat
writeln('Введите параметры гиперболы a,b>0');
readln(a,b);
until(a>0)and(b>0);
repeat
writeln('Введите абциссы центров окружностей x01,x02>0');
readln(x01,x02);
until(x01>0)and(x02>0);
repeat
writeln('Введите радиусы окружностей r1, r2 >0');
readln(r1,r2);
until (r1>0)and(r2>0);
y01:=-b*x01/a; //ниже оси Х
y02:=b*x02/a; //выше оси Х
repeat
write('Введите количество точек n>0 n=');
readln(n);
until n>0;
kv:=0; {внутри}
kn:=0; {на границе}
writeln('Введите координаты ',n,' точек');
for i:=1 to n do
 begin
  writeln('Точка ',i);
  write('x=');readln(x);
  write('y=');readln(y);
 //если в верхнем сегменте
    if (sqr(x-x02)+sqr(y-y02)<=r2*r2+0.01)and(y<=b/a*sqrt(x*x-a*a)+0.01) then
     begin
      if (abs(sqr(x-x02)+sqr(y-y02)-r2*r2)<0.01)//с точностью 0.01 на окружности
      or(abs(y-b/a*sqrt(x*x-a*a))<0.01)then inc(kn)//с точностью 0.01 на линии гиперболы
      else inc(kv)//иначе внутри области
     end;
    //если в нижнем сегменте
    if (sqr(x-x01)+sqr(y-y01)<=r1*r1+0.01)and(y>=-b/a*sqrt(x*x-a*a)-0.01) then
     begin
      if (abs(sqr(x-x01)+sqr(y-y01)-r1*r1)<0.01)//с точностью 0.01 на окружности
      or(abs(y+b/a*sqrt(x*x-a*a))<0.01)then inc(kn)//с точностью 0.01 на линии гиперболы
      else inc(kv)//иначе внутри области
     end;
 end;
ks:=n-kn-k;//остальные точки снаружи
writeln('Количество точек внутри заштрихованных областей=',kv);
writeln('Количество точек на границах заштрихованных областей=',kn);
writeln('Количество точек снаружи заштрихованных областей=',ks);
readln
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
Похожие ответы