Задание
Для всех точек прямоугольной области, попавших в заштрихованную область, вывести координаты и подсчитать какой процент составляют эти точки от всех точек прямоугольной области.
Программа
program lab5
implicit none
real x,y,r/1./,a/2./,b/1./,pIn,pOut, alpha
real in/0./,out/0./,all/0./
logical l1,l2,l
open(1, file='circle.txt')
open(2, file='elipse.txt')
open(3, file='inside.dat')
open(4, file='outside.dat')
open(5,file='results.txt')
do alpha=0,360,2
x=r*cosd(alpha)
y=r*sind(alpha)
write(1,*) x, y
x=a*cosd(alpha)
y=b*sind(alpha)
write(2,*) x, y
enddo
do x=-a,a,0.05
do y=-b,b,0.05
all=all+1
l1=(x*x)/(a*a)+(y*y)/(b*b)<=1
l2=x*x+y*y>=r
l=(l1 .and. l2 .and. x<=0) .or. (l1 .and. l2 .and. x>=0 .and. y<=0)
if(l) then
write(3,*) x,y
in=in+1
else
write(4,*) x,y
out=out+1
endif
enddo
enddo
pIn=(in/all)*100.
pOut=(out/all)*100.
write(5,*) 'В заштрихованной области находится ', int(in), ' точек, что составляет ', pIn, '% от общего числа точек'
write(5,*) 'остальные точки составляют ', pOut, '% от общего числа.'
End
Неравенства для попадания в заштрихованную область
Для точек внутри эллипса:
l1=(x*x)/(a*a)+(y*y)/(b*b)<=1
Для точек вне окружности:
l2=x*x+y*y>=r
Для точек внутри заштрихованной области:
l=(l1 .and. l2 .and. x<=0) .or. (l1 .and. l2 .and. x>=0 .and. y<=0)
Результаты
Файл inside.dat:
-1.950000 -1.999998E-01
-1.950000 -1.499998E-01
-1.950000 -9.999985E-02
-1.950000 -4.999984E-02
-1.950000 1.564622E-07
…
…
…
1.899999 -4.999984E-02
1.949998 -1.999998E-01
1.949998 -1.499998E-01
1.949998 -9.999985E-02
1.949998 -4.999984E-02
Файл results.txt:
В заштрихованной области находится 929 точек, что составляет
29.031250% от общего числа точек
остальные точки составляют 70.968750% от общего числа.
График:
Блок-схема
Санкт-Петербургский Государственный Университет
Информационных технологий,
Механики и оптики
Отчет
по информатике
Студент:
Преподаватель:
2004 г.