Министерство образования и науки РФ
Новосибирский государственный технический университет
Кафедра прикладной математики
Лабораторная работа №2
по дисциплине:
«Программирование вычислений»
Факультет: ПМИ
Группа: ПМ-64
Студент: Довгаль С.Ю.
Преподаватели: Рояк М.Э., Рояк С.Х.
Новосибирск
2008
1. Условие задачи
Написать программу на языке Фортран, вычисляющую таблицу значений заданной функции двух переменных.
2. Математические формулы
а) - формула для перевода вычисляемых углов из градусов в радианы
б) Исследование функции cosec(x+y).
Функция cosec(t) имеет точки разрыва:
3. Текст программы
subroutine in_data() !chtenie iz faila vhodnyh dannyh
common /par/xmin,xmax,ymin,ymax,sx,sy !vhodnye dannye v obshej oblasti
open(1,FILE='in3.txt') !otkryvaem vhodnoj fail
read(1,*) xmin,xmax,sx,ymin,ymax,sy
11 format(A5,G11.4,' ',A5,G11.4,' ',A3,G11.4)
write(*,11) 'xmin=',xmin,'xmax=',xmax,'sx=',sx
write(*,11) 'ymin=',ymin,'ymax=',ymax,'sy=',sy !vyvod dannyh na ekran
pause
close(1)
end
real function comp(xf,yf) !vychislenie zadannoj funkcii
common /par/xmin,xmax,ymin,ymax,sx,sy !vhodnye dannye v obshej oblasti
pi=3.1415926
x=xf
y=yf
if(abs(mod(x+y,180.0)).eq.0) then
comp=1.7E+38
else
x=(x*pi)/180
y=(y*pi)/180
comp=1/sin(x+y)
endif
end
integer function ishag(x,fix) !funkcia proverki na nevidimyj shag
character *11 s,t
write(s,80) x
write(t,80) fix
if(s.eq.t) then
ishag=0
else
ishag=1
endif
80 format(G11.4)
end
common /par/xmin,xmax,ymin,ymax,sx,sy !vhodnye dannye v obshej oblasti
call in_data
20 format(G11.4,'|'\) !formatnye vyvody
30 format(G11.4)
40 format(A3,8x,'|'\)
70 format(150('-'))
open(2,FILE='out3.txt') !otkryvaem vyhodnoj fail
n=0
k=0
x=xmin
y=ymin
if(sx.ne.0) then
5 if(x.le.xmax-sx/2) then !opredelenie kolichestva shagov
n=n+1
x=x+sx
goto 5
endif
endif
if (sy.ne.0) then
6 if(y.le.ymax-sy/2) then !opredelenie kolichestva shagov
k=k+1
y=y+sy
goto 6
endif
endif
y=ymin !vyvod 1-j stroki
write(2,40) 'X|Y'
do i=1,k
if(abs(y).lt.abs(sy)) y=0
if(ishag(y,y+sy).eq.1) then
write(2,20) y
endif
y=y+sy
enddo
write(2,30) ymax
write(2,70)
x=xmin !vyvod vsej tablicy
do i=1,n
if(abs(x).lt.abs(sx)) x=0
if(ishag(x,x+sx).eq.1) then
write(2,20) x
endif
y=ymin
do j=1,k
if(abs(y).lt.abs(sy)) y=0
if(ishag(y,y+sy).eq.1) then
write(2,20) comp(x,y)
endif
y=y+sy
enddo
if(ishag(x,x+sx).eq.1) then
write(2,30) comp(x,ymax)
write(2,70)
endif
x=x+sx
enddo
y=ymin !vyvod poslednej stroki
write(2,20) xmax
do j=1,k
if(abs(y).lt.abs(sy)) y=0
if(ishag(y,y+sy).eq.1) then
write(2,20) comp(xmax,y)
endif
y=y+sy
enddo
write(2,30) comp(xmax,ymax)
write(2,70)
close(2)
print *,'n=',n+1,' k=',k+1
print *,'Finished!!!'
pause
end
4. Тесты
1) Ноль аргументов, cosec(x+y)=∞ (тесты принципиально не отличаются, поэтому приведен один из них)
xmin=-99e-7; xmax=1e-7; sx=1e-7; ymin=0; ymax=0; sy=0.
X|Y | 0.0000E+00
-------------------------------------------------------------------------------
-0.1000E-06|-0.5729E+09
-------------------------------------------------------------------------------
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.