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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.