j1=j
p1=0
if (j.lt.b2) then
write (2,500) i
end if
end if
end do
write(2,*)
sh1=c1
112 call sravn(i-sh1,i,k1,0.0001)
if (k1.eq.1) then
sh1=sh1+c1
goto 112
end if
i=i+sh1
call sravn(abs(i-sh1),abs(i+sh1),k1,0.001)
if ((k1.eq.1).and.((i-sh1).lt.0).and.((i+sh1).gt.0)) i=0
if ((i-c1.lt.b1).and.(i.gt.b1)) i=b1
if ((a2.ne.j1).and.(i.le.b1)) call fs(a2,b2,c2,i,0)
end do
!-------------------format--------------
510 format ('|',('n/a'),7(' ')\)
500 format ('|',e10.4\)
501 format ('|',('y/x'),7(' ')\)
!-----Zakritie failov 1,2
close(1,err=3)
close(2,err=3)
return
!-----Oshibka otkritiya
1 print *,'Error OPEN'
Return
!-----Oshibka chteniya
2 print *,'Error READ'
Return
!-----Oshibka zakritiya
3 print *,'Error CLOSE'
return
end
!----------Glavnaya podprogramma----------
program laba2
implicit none
print *, 'Hello!'
call vvod
print *, 'Ok!'
pause
end
4.Тесты
№ |
A1,B1,C1,A2,B2,C2 |
Результат |
Примечание |
1 |
60 120 50 0 1 2 |
|y/x |0.0000E+00|0.1000E+01 ----------------------------------------------- |0.6000E+02|0.2000E+01|0.2063E+01 |0.1100E+03|-.2924E+01|-.2790E+01 |0.1200E+03|-.2000E+01|-.1942E+01 |
Независимо от того, делит шаг диапазон изменения нацело или нет, последним значением аргумента является заданный максимум |
2 |
60 120 10 0 10 2 |
|y/x |0.0000E+00|0.2000E+01|0.4000E+01|0.6000E+01|0.8000E+01|0.1000E+02 ------------------------------------------------------------------------------------------------------------ |0.6000E+02|0.2000E+01|0.2130E+01|0.2281E+01|0.2459E+01|0.2669E+01|0.2924E+01 |0.7000E+02|0.2924E+01|0.3236E+01|0.3628E+01|0.4134E+01|0.4810E+01|0.5759E+01 |0.8000E+02|0.5759E+01|0.7185E+01|0.9567E+01|0.1434E+02|0.2865E+02|n/0 |0.9000E+02|n/0 |-.2865E+02|-.1434E+02|-.9567E+01|-.7185E+01|-.5759E+01 |
В данном тесте представлен фрагмент результата. Возникает ситуация, когда cos(x+y)=0 И на 0 делить нельзя. Данная ситуация обозначается как “n/0” |
3 |
130 120 10 0 10 2 |
’Parametres error’ |
Входные данные не удовлетворяют условиям: A1>=B1 и C1<0 или B1>=A1 и C1>0 A2>=B2 и C2<0 или B2>=A2 и C2>0 |
4 |
130 120 0 0 10 2 |
’Parametres error period’ |
Шаг изменения аргумента равен 0 |
5 |
130 |
Error read |
Ошибка чтения |
6. Исследование
Исследования 3, 4. Невидимый шаг
subroutine sravn(x,x_,res,pogr)
implicit none
real x,x_,pogr
integer res
x=abs(abs(x-x_)/x)
if (x.lt.pogr) then
res=1
else
res=0
end if
end
---------------------------------------------
111 call sravn(j-sh2,j,k1,0.0001)
if (k1.eq.1) then
sh2=sh2+c2
goto 111
end if
Если возникает невидимый шаг, то шаг наращивается, до тех пор, пока не станет видимым.
Исследования 6, 7. Ноль аргумента
call sravn(abs(i-sh2),abs(i+sh2),k1,0.001)
if ((k1.eq.1).and.((i-sh2).lt.0).and.((i+sh2).gt.0)) i=0
Если модули двух чисел находящихся по обе стороны от нуля не отличаются до погрешности, то значение, находящееся между ними, становится 0.
Добавлено разрезание таблицы содержащей большое количество столбцов.
Пример:
|y/x |0.8900E+02|0.8901E+02|0.8902E+02|0.8903E+02|0.8904E+02|0.8905E+02|0.8906E+02
|0.0000E+00|0.5730E+02|0.5788E+02|0.5847E+02|0.5907E+02|0.5969E+02|0.6031E+02|0.6096E+02
|y/x |0.8907E+02|0.8908E+02|0.8909E+02|0.8910E+02|0.8911E+02|0.8912E+02|0.8913E+02
|0.0000E+00|0.6161E+02|0.6228E+02|0.6297E+02|0.6367E+02|0.6438E+02|0.6511E+02|0.6586E+02
|y/x |0.8914E+02|0.8915E+02|0.8916E+02|0.8917E+02|0.8918E+02|0.8919E+02|0.8920E+02
|0.0000E+00|0.6663E+02|0.6741E+02|0.6821E+02|0.6904E+02|0.6988E+02|0.7074E+02|0.7163E+02
……………………………………………………………………………………………………………………………………………………………………………………………………………………
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.