Написание программы на языке Фортран, вычисляющей таблицу значений заданной функции двух переменных (Лабораторная работа № 2)

Страницы работы

Содержание работы

Министерство образования и науки РФ

Новосибирский государственный технический университет

Кафедра прикладной математики

Лабораторная работа №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

-------------------------------------------------------------------------------

Похожие материалы

Информация о работе