У меня есть проблема в заголовке со следующим кодом Fortran 95:
Более или менее код состоит в вычислении точек, которые в операторе print*,
выполняют интерполяцию. Я пытался поместить операторы open
и close
вне первого l oop. Когда я это делаю, я получаю эту ошибку:
At line 23 of file 7.f95 (Unit 1 "ejeY1.txt")
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: End of file
Файл ejeY1.txt содержит эти данные
0.00 0.00
0.50 5.00
1.00 10.00
1.50 15.00
2.00 20.00
2.50 25.00
код, он ниже
program ej7
use mcf_interpoli
real,dimension(1:6)::x,y
real,dimension(1:5)::temporaly,xv
real,dimension(1:3)::array_y,array_x
real::xp,yp,err
integer::i,j,k
array_y=(/1.20,2.40,0.82/)
array_x=(/0.70,1.60,0.65/)
do i=1,size(array_y)
open(unit=1,status="old",action="read",file="ejeY1.txt")
open(unit=2,status="old",action="read",file="ejeY2.txt")
open(unit=3,status="old",action="read",file="ejeY3.txt")
open(unit=4,status="old",action="read",file="ejeY4.txt")
open(unit=8,status="old",action="read",file="ejeY5.txt")
open(unit=7,status="old",action="read",file="ejeX.txt")
do k=1,4
do j=1,6
read(unit=k,fmt=*) x(j), y(j)
end do
call polint(x,y,size(x),array_y(i),yp,err)
temporaly(k)=yp
end do
do k=1,6
read(unit=8,fmt=*) x(k), y(k)
end do
call polint(x,y,size(x),array_y(i),yp,err)
temporaly(5)=yp
do j=1,5
read(unit=7,fmt=*) xv(j)
end do
do j=1,size(array_x)
call polint(xv,temporaly,size(xv),array_x(j),yp,err)
if (array_y(i)==1.20 .and. array_x(j)==0.7) then
print*,"El valor para (0.7,1.20) es: ", yp
else if (array_y(i)==2.40 .and. array_x(j)==1.60) then
print*,"El valor para (1.60,2.40) es: ",yp
else if (array_y(i)==0.82 .and. array_x(j)==0.65) then
print*, "El valor para (0.65,0.82) es: ",yp
end if
end do
do j=1,4
close(i)
end do
do j=7,8
close(i)
end do
end do
end program ej7