Написание программы, реализующей на языке ФОРТРАН построение таблицы значений функции ctg(x+y) (Лабораторная работа № 2)

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

8 страниц (Word-файл)

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

1.  Цель работы:

Изучить операторы ввода-вывода и форматирования текста языка

ФОРТРАН. Познакомиться со следующими понятиями вычислительной математики: конечная арифметика, значащие цифры, верные значащие цифры, абсолютная и относительная погрешность, накопление погрешности вычислений, округление.

2.  Условие задачи:

Написать программу, реализующую на языке ФОРТРАН построение таблицы значений функции ctg(x+y) с учетом следующих требований:

- таблица должна содержать n+1 строк и m+1 столбцов, первая строка – значения y, первый столбец – значения x;

- определять n и m из заданных значений минимума и максимума каждого аргумента, а также шагов их изменения; независимо от того, делит шаг диапазон изменения нацело или нет, последним значением аргумента должен быть заданный максимум;

- строки и столбцы таблицы разделять приемлемыми символами (например, | и -);

- каждое представленное в таблице значение должно содержать ровно 4 значащих цифры мантиссы числа;

- результатом работы программы должен быть текстовый файл, содержащий

таблицу;

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

- все вводимые данные должны проверятся на корректность, для любых данных программа должна давать корректный результат (сообщение об ошибке на русском языке – корректный результат, сообщение системы о делении на ноль –  некорректный результат);

- все углы должны измеряться в градусах (возможно, с дробной частью).

3.  Анализ задачи:

Дано: 6 вещественных чисел, задающих область изменения аргументов функции.

Результат: Таблица, содержащая m*n значений исходной функции. Если при каких-либо значениях аргументов значение функции не определено, то результат в соответствующей графе таблицы должен содержать информацию об ошибке, если исходные данные некорректны, то программа должна выдавать соответствующее сообщение об ошибке.

Решение: Если все входные данные оказываются корректными, то начинаем заполнять таблицу значений функции. Известно, что ctg(x) имеет бесконечные разрывы в точках x=2πk, т.к. в этих точках sin(x)=0. Так как погрешность в вычислениях достаточно велика, то для каждого значения аргумента (x+y) следует проверять кратность 180 (т.к. все углы хранятся в градусах). Затем следует проверить кратность 90, т.к. в этом случае значение функции равно нулю, а при ее прямом вычислении мы получим только число, близкое к нулю, но не сам ноль. Для значений аргументов, не удовлетворяющих этим условиям, просто вычисляем исходную функцию.

4.  Текст программы:

      program lab2

      dimension err(100,100)

      dimension tab(100,100)

      real  min_x,max_x,step_x,min_y,max_y,step_y

      open(1, file='G:\3.txt') !otkritie vxodnogo faila

      open(55, file='G:\55.txt')     

      read(1,*) min_x,max_x,step_x,min_y,max_y,step_y !chtenie isxodnix dannix

      min_x=okrgl(min_x)

      max_x=okrgl(max_x)

      step_x=okrgl(step_x)

      min_y=okrgl(min_y)

      max_y=okrgl(max_y)

      step_y=okrgl(step_y)

      if(min_x.gt.max_x.or.min_y.gt.max_y.or.

     *(step_x.eq.0.and.min_x.ne.max_x)

     *.or.(step_y.eq.0.and.min_y.ne.max_y)) then !esli parametri nekorrektni

      write(*,*) 'incorrect parameters'

      stop

      end if

      close(1)   

      open(2, file='G:\out.txt') !otkritie vixodnogo faila

1     format(160a1)

2     format(E10.4,'|',$)

3     format(4x,a,$)

4     format(4x,a,'|',$)

6     format(4x,a,4x,a,3x,a,$)

      write(2,1) ('_', kt=1,160) !vivodim verxniuiu stroku tablici (zagolovok, znachenia y)

      write(2,6) '|','x\y','|'

      y=min_y

      if((min_y.eq.max_y).and.(step_y.eq.0)) then  !esli promezhutok izmeneniya y to4ka

      write(2,2) y

      else

      do while (y.le.max_y)

      y=okrgl(y)

      t=check(y) ! proverka na ravenstvo argumenta y 0

      if (t.eq.1) then

      write(2,2) 0.0

      else

      write(2,2) y

      end if

      y=y+step_y

      end do

      end if

      if(y.lt.(y-step_y)) then !esli shag izmeneniya y ne delit diapazon zna4enij y nacelo

        y=max_y 

        write(2,2) y !otdelno vivedem maksimalnij y

      end if

       write(2,1) (' ',kt=1,160) 

         write(2,1) ('_', kt=1,160)

      x=min_x

      i=1

      do while(x.le.max_x)

        write(2,3) '|'

        y=min_y

        j=1

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

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