2017-04-04 11 views
2

のループの後、私は次のプログラム持っているループ制御変数の値を決定:は、Fortran

program example 
implicit none 
integer::i, x1 
real::x(10)=0 
do i=10,1,-2 
    x(10-i)=2*i+1 
enddo 
x1=i*2-1 
end program example 

を私の問題は、x1の値を決定することであるが、可変iので、入力または指定されなかった、どのようにFortranは、x1の計算で使用されるiの値を決定しますか? "i変数が入力または指定しなかったので、"

答えて

3

この仮定は間違っています。ループ内でiは、正確に定義された値10,8,6,4,2をとります。

Fortran規格では、ループカウンタの次の値となるように指定されています続けて、iの値は0になります。

したがって、x1の値は0 * 2 - 1 = -1となり、プログラムの最後にprint *, x1を追加すると簡単に確認できます。


しかし、francescalusが見つけたプログラムとは異なる問題があります。最初の反復では、iの値は10で、であるx(10-i)にアクセスしています。この要素が存在しない場合、xx(1)x(10)の要素しか持たないため、x(0)にアクセスすることは不正であり、その時点以降のプログラム全体の動作は定義されていません。

+0

十分ですが、はい、プログラム全体が無効になります。私は実際にコードを演奏しましたが、コードがあまりにも些細なものだと考えて境界をチェックすることはできませんでした。 –