Определить число точек с (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.
Объяснение кода листинга программы
- Объявление переменных: a, b, x01, x02, r1, r2, y01, y02, x, y, n, i, kv, kn, ks (реальные или целочисленные)
- Ввод параметров гиперболы a, b и условий для окружностей x01, x02, r1, r2
- Вычисление координат центров окружностей y01 и y02
- Ввод количества точек n
- Ввод координат точек (x;y)
- Проверка принадлежности точки к верхнему сегменту гиперболы
- Проверка принадлежности точки к нижнему сегменту гиперболы
- Подсчет количества точек внутри заштрихованных областей (kv)
- Подсчет количества точек на границах заштрихованных областей (kn)
- Подсчет количества точек снаружи заштрихованных областей (ks)
- Вывод результатов
- Чтение подтверждения ввода (readln)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д