• ベストアンサー

IF文での条件の書き方について(fortran)

条件 (1)exp(-at)<x  (2)exp(-bt)<y と二つの条件があるとする. (a,b,x,yは定数とし,tは時間でdo文でまわすとする) 例えば,IF( (1) .AND. (2) )THENとすれば,「(1) かつ (2)」となり,つまり,「時間的に,(1)・(2)がどちらが先に条件を満たしたとしても良い」とういうことですよね. 今回,私が作ろうとしているプログラムは 「(1)が先に条件を満たした後に,(2)の条件を満たすなら」というIF文を作りたいのです.( (2)の条件が先に満たしてしまう場合は除きたいということです) こういう場合はどういった表記をすればよいのでしょうか. 下手な文章で読みにくいかもわかりませんが,アドバイスをお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

文章から察するに「先に」というのは ・「時間的に先」: あるループで条件 (1) が成り立っており, その (条件 (1) が成り立っている) ままで条件 (2) も成り立つ という意味であって ・条件 (1) を先に評価することを強制する: 条件 (1) が成り立たないときに条件 (2) が評価されるのは困る という意味ではないように思えるんですがいかがなものでしょうか>#1. 挙げられた条件だとあまりにもアホなので, 「実際に使う条件」はもっと複雑なものと思っていいんですよね? 条件が成り立っているかどうかを「ループを超えて保持する」必要がありますから, そのことをフラグで表すしかないんじゃないですかね. それぞれの条件が成り立っていることを個別にフラグで表してなんとかする.

dis-k
質問者

お礼

ありがとうございました

その他の回答 (3)

回答No.4

>条件 (1)exp(-at)<x  (2)exp(-bt)<y と二つの条件があるとする. >(a,b,x,yは定数とし,tは時間でdo文でまわすとする) 回答2の方のご指摘で気付かされましたが、なぜかこの辺に関する考慮が完全にすっぽり抜けてました。回答1は無視してください。

dis-k
質問者

お礼

ありがとうございました

  • a987654
  • ベストアンサー率26% (112/415)
回答No.3

ループの前で FLG=0 としておいてループの中で IF( (FLG=1) .AND. (2) )THEN 処理 IF( (1) .AND. NOT(2) )THEN     FLG=1 ELSE  FLG=0 END IF ’NOT(2) は(2)が A=B ならば A<>B ではないでしょうか?

dis-k
質問者

お礼

ありがとうございました

回答No.1

>「(1)が先に条件を満たした後に,(2)の条件を満たすなら」というIF文を作りたいのです 最近の言語とコンパイラなら(1)(2)の順に評価し、(1)でfalseならそこで評価を止めると思います(未確認)。 心配でしたら、ifをネストしてはいかがでしょう? if (1) then  if (2) then   c 何らかの処理  end if end if

dis-k
質問者

お礼

ありがとうございました