Задание

Для всех точек прямоугольной области, попавших в заштрихованную область, вывести координаты и подсчитать какой процент составляют эти точки от всех точек прямоугольной области.

Программа

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 г.

Соседние файлы в папке экзаменационная работа, отчёт, 1 сем. — 1