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

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

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

Фрагмент текста работы

        Министерство Образования Российской Федерации

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

Лабораторная работа №2

по дисциплине

Программирование вычислений

Факультет: ПМИ

группа: ПМ-54

студенты: Коновалов А. В.

                  Брит С. В.

                    Ягофаров А. О.

преподаватель: Рояк С.Е.

                             Токарева М.Г.

Новосибирск, 2007

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

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

 Таблица должна содержать n+1 строк и m+1 столбцов, первая строка – значения x, первый столбец – значения y. Определять n и m из заданных значений минимума и максимума каждого аргумента, а также шагов их изменения. Независимо от того, делит шаг диапазон изменения нацело или нет, последним значением аргумента должен быть заданный максимум. Строки и столбцы таблицы разделять приемлемыми символами (например, | и -). Каждое представленное в таблице значение должно содержать ровно 4 значащих цифры мантиссы числа.

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

Математическое моделирование

    Дано:  

Мы вычисляем функцию двух переменных:

1)Областью определения функции в аналитической математике является , а областью значения функции  является

2)Областью определения функции в вычислительной математике является , а областью значения функции  является , где ­­­-машинный нуль и  - машинная бесконечность

2.Проект программы

proc main

do minx to maxx с шагом hx

     do miny to maxy  с шагом  hy

            si=cosx

            sj=siny

          f(x,y)=abs(si/sj)

          if  f(x,y)<epsmin and f(x,y)>epsmax then INFINITY

          if  f(x,y)=0 then NULL

          if  siny=0   then            деление на ноль

do minx to maxx с шагом hx   !заполняет масив 1 столбец значений х

     print f(x+hx,y)

do miny to maxy с шагом hy   !заполняет масив 1 строку значений у

     print f(x,y+hy)

if  (si-hx)<maxx then               !заполняет макс знач. по х с смещением по у  

   f(i+1,1)=maxx

j=1

     do miny to maxy  с шагом  hy

            si=cosx

            sj=siny

          f(x,y)=abs(si/sj)

          if  f(x,y)<epsmin and f(x,y)>epsmax then INFINITY

          if  f(x,y)=0 then NULL

          if  siny=0   then            деление на ноль

if  (sj-hy)<maxy then   !!заполняет макс знач. по у с смещением по х

    f(1,j+1)=maxy

i=1

do minx to maxx с шагом hx

            si=cosx

            sj=siny

          f(x,y)=abs(si/sj)

          if  f(x,y)<epsmin and f(x,y)>epsmax then INFINITY

          if  f(x,y)=0 then NULL

         if  siny=0   then             деление на ноль

Особенности программирования, связанные  со сравнением вещественных чисел.

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

fabs(x - у) < (eps + 2.0 * FLT_EPSILON) * (1.0 + fmax(fabs(x), fabs(у))),

где fmax() - функция, возвращающая значение максимального из своих аргументов.

3.Тесты

Исходные данные

Результат

Цель теста

Xmin

Xmax

hx

ymin

ymax

hy

1

30

50

0

0

90.01

0.01

Некоректные исходные данные

проверка на корректность

2

30

170

-40

40

100

20

Некоректные исходные данные

проверка на корректность

3

30

30

20

30

90

60

X\Y         |  0.3000E+02|  0.9000E+02|

----------------+---------------+----------------+

0.3000E+02 |  0.1732E+01|  0.8660E+00|

----------------+--------------- +--------------  +

min=max

4

30

30

10

0

30

100

X\Y        |  0.0000E+00|  0.3000E+02|

----------------+---------------+---------------+

0.3000E+02|деление на 0|  0.1732E+01|

----------------+---------------+---------------+

шаг>max

5

30

90

30

0

30

30

X\Y      |  0.0000E+00|  0.3000E+02|

---------------+---------------+----------------+

0.3000E+02|деление на 0|  0.1732E+01|

----------------+---------------+---------------+

0.6000E+02|деление на 0|  0.1000E+01|

----------------+---------------+---------------+

0.9000E+02|        0/0         |  0.0000E+00|

принад-лежность области опред.

4.Программа

              program main

            integer i,j,p,t,h,u,o,d,f,l

            real maxx,minx,maxy,miny,hx,hy,si,sj,epsmax,epsmin,tznach,c1,c2,pi

            dimension z(10000,10000)

            epsmax=1E+6

            epsmin=1E-6

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

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