- ベストアンサー
fortran 論理変数? true
御世話になります。 もらったプログラムを読んでいるのですが、わからないので質問させていただきます。 定義が、 logical k integer a,b …… k = .true. if((k).and.(a.gt.b)) then のところなのですが、 (a.gt.b)はわかるのですが、 (k)かつ(a.gt.b)とはどういう条件なのでしょう? 今まで、論理変数を使ったこともなく、調べてはみたのですが詳しい解説も見付けられませんでした。 他に必要な情報がありましたら捕捉します。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> これは、c.le.d が成り立つとき、k=true > 成り立たないとき、k=false > になると解釈してよいのでしょうか? はい。その通りです。 > k=(c.le.d) はif文の外で事前に論理演算して結果をkに格納しています。 c<d がtrue、c>=dはfalseがkに格納されますね。 言語により記述は異なりますが、 a=b=c という記述の場合、bとcが等しいかを判断しaに結果(true or false)を格納せよ、になります。 a=b-cとしたいのに値が常に-1 or 0で慌てる例です。
その他の回答 (2)
- ultraCS
- ベストアンサー率44% (3956/8947)
論理変数を使っているのは、おそらく、ループ内などで制御条件を明示的に示すためでしょう。 どこかに、if(...) then k=.false. と言うのがあるはずですよ。 Cであれば、別に論理型にしなくても、0(NULL)をfalseと扱ってしまうので、kがintでも、if(k)ですみますが、FORTRANでは、論理型以外の変数の場合、何らかの式を書かなければ評価できないのでこうなります。
お礼
他にもkの式がありました。 ありがとうございます。 プログラムはfortran しか扱ったことないのですが、Cの方が使いやすそうですね。
- bin-chan
- ベストアンサー率33% (1403/4213)
Fortranに限りませんが if 論理式 then です。論理式がTrueのときにthenが実行されます。 提示されているのはループ内の一部では? 省略なっている部分にもkの出番がもっとどこかにあるはず。 きっとk=falseになる部分がどこかに・・・。
お礼
ありがとうございます。 よく探してみたら、ありました。 でも、false ではなく、よくわからないので捕捉として質問させていただきます。
補足
はい。doループの中です。falseはなかったのですが、 subroutine の中に k=(c.le.d) のような式がありました。 これは、c.le.d が成り立つとき、k=true 成り立たないとき、k=false になると解釈してよいのでしょうか?
お礼
理解できました!お礼が遅くなり申し訳ありません。 ありがとうございました。