Министерство Образования Российской Федерации
Новосибирский Государственный Технический Университет
по дисциплине
Программирование вычислений
группа: ПМ-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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.