implicit real*8 (a-h,o-z)
real*8 x,y(11)
do i=0,10
x=0.35139534352933061.D0
y=1.D0/x*(cosh(x/2.D0*(2.D0*i-a))-cosh(x*a/2.D0))
write(*,*) i,y(i)
end do
こんにちは、y
、 の値を印刷しようとしていますので、私のプログラムはy(0),y(1),y(2)...y(10)
を印刷する必要があります。しかし、Fortranでは、最初の要素がy(0)
ではなくy(1)
であるため、Fortranは最初の要素の代わりにy(0)
を大きな数値として扱います。 i=0
の場合、どうすればy
の結果を得ることができますか?配列のデフォルト境界を1から0に下げるにはどうすればよいですか?
私の最初の試みは、次のとおりです。
implicit real*8 (a-h,o-z)
real*8 x,y(11)
do i=0,10
x=0.35139534352933061.D0
y=1.D0/x*(cosh(x/2.D0*(2.D0*i-a))-cosh(x*a/2.D0))
y0=1.D0/x*(cosh(x/2.D0*(-a))-cosh(x*a/2.D0))
y(0)=y0
write(*,*) i,y(i)
end do
しかし、私は次の警告を得る:
警告:(1)の配列の参照は、次元1
における境界(0 < 1)の外にあります
問題のための私の回避策:
do i=1,11
y=1.D0/x*(cosh(x/2.D0*(2.D0*(i-1)-a))-cosh(x*a/2.D0))
write(10,*) i,y(i)
end do
私はちょうどimplicit none
以外のimplicit
をしないでくださいi=1,11
は 'real y(0:10)'として宣言します。ところで、あなたの 'y = '代入は配列全体に代入されています。 – agentp
ありがとう、それは解決策でした。 –