• ベストアンサー

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)の条件が先に満たしてしまう場合は除きたいということです) こういう場合はどういった表記をすればよいのでしょうか. 下手な文章で読みにくいかもわかりませんが,アドバイスをお願いいたします.

  • dis-k
  • お礼率76% (79/103)

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

  • ベストアンサー
  • 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
質問者

お礼

ありがとうございました

関連するQ&A

  • If文の条件文の書き方

    お世話になります。 Excelでマクロを作成しております。 内容:  あるセルに、X<=300 というような条件を入れておきます。  ある値、たとえば、500 が来たときに、Xに代入して、  500<=300 という条件式を作り、それが、正しいか、正しくないか  の結果を求めたいと思っています。 このとき、if文の条件文は、値によって、変わらなくてはいけないので、 文字列の置き換え等をして、変数として条件文を作ると、「型が違います」 のエラーになります。 どのように条件文を作ればいいでしょうか?? hani = Cells(1,1).value 'セル1,1に、X<=300 が書かれています。 exp = Replace(hani, "X", 500) '"X"を500と置き換えます。 If exp Then Check = 0 Else Check = 1 End If よろしくお願いします。

  • fortranのif文で・・・

    フォートランの if文で IF(M-1) 15,15,12 ってのがあるんですが,これはどういう意味を表しているのでしょうか ? IF(R.LE.0.D0) THEN ・・・・ ならRが0より小さいときは・・・・しなさい.って命令ですよね. でもうえのは,カッコの中がいったいどういうときならってのを表してるのかも分からないし,15,15,12 ってのも意味がわかりません. 基本的なことかもしれませんが,よろしくお願いします. 一応その部分のプログラムも載せておきます. X(N+1)=X(1) Y(N+1)=Y(1) DO 10 I=1,N XM(I)=(X(I)+X(I+1))/2 10 YM(I)=(Y(I)+Y(I+1))/2 IF(M-1)15,15,12 12 XM(NC(1))=(X(NC(1))+X(1))/2 YM(NC(1))=(Y(NC(1))+Y(1))/2 DO 13 K=2,M XM(NC(K))=(X(NC(K))+X(NC(K-1)+1))/2 13 YM(NC(K))=(Y(NC(K))+Y(NC(K-1)+1))/2 15 CONTINUE

  • fortran if文

    fortranのif文で、以下の様に場合わけしてプログラムしたのですが、 このようなエラー文が出ます。どう対処したらいいのか教えて下さい。 Error: An unterminated block exists. プログラム↓ if(-0.5d0.LE.theta.LE.0.0d0) then eta=2 if(0.0d0.LT.theta.LT.0.5d0) then eta=5 if(0.5.LE.theta.LE.1.0d0) then eta=3 場合わけの範囲指定の仕方が不味いのではないかと思っていますが、 どうしていいものかわからず・・ 皆様のお力を貸して下さい。

  • if文の条件に関数が入ってる場合はどうなりますか

    if文の条件の中に、関数が入っていました if (bit(exp,ps)){ res = (res*res); } このような感じです ちなみに、関数bitはこのようになっていました int bit(unsigned int exp, int ps){ return ((exp >> ps) & 1); } この場合、どういう条件のif文になるんでしょうか 「関数bitのリターンがあれば実行」ということでしょうか

  • Access2002 If文で日付が未入力を条件にしたい

    Access2002です。 If文で日付が未入力を分岐条件にしたいのですが、条件式はどのような表記になるのでしょうか。 If 購入日 = "" Then 上記では未入力と判断してくれませんでした。 よろしくお願いします。

  • IF文 教えてください (BASIC)

    1, 2, 3, 4 のいずれかの値を取る3つの乱数 x, y, z を同じ行に表示させ,さらに x=y=z=1 のときは「大当」, x=y=z≠1 のときは「当」, x, y, z のうち2つだけが一致したときは「惜」, 上記以外の場合は「残念」 と表示するプログラム ELSEIF文を用い,IF文およびEND IF文は1回で済ませる。 乱数x,y,zを表示することと IF文が分かりません。 RANDOMIZE FOR n=1 TO 3       PRINT INT (RND*4)+1; NEXT n

  • 少数を比べて処理をさせるif文について

    質問させていただきます。 今、if文で条件を書きたいと思っています。 その条件とは、例えばxの小数とyの小数を見た場合、xの小数がyの小数以上ならば処理をさせたいと思っているのですが、どのようにすればその条件を書けるか教えていただけないでしょうか? x = 1.9 y = 0.8 この場合、xの小数は.9でyの小数は.8なのでxの小数はyの小数より大きいので処理をさせたいと思っています。 よろしくお願いします。

  • if文の条件式について

    iPhone OS 3.0、Xcode 3.1.3という環境でobjective-cをベースとしてiPhone向けアプリケーションを作る研究をしています。 どちらかというとC言語の質問になりますが、if文で使う条件式にNSString型で宣言した文字列を使うにはどうすればいでしょうか? NSString *startArea = [[NSString alloc] initWithFormat:@"pt.x > 224 && pt.y < 100"]; というコードでstartAreaに代入されたpt.x > 224 && pt.y < 100という文字列をif文の条件式として使えればと思ってます。 ちなみに、、、 if( startArea ){ 実行したい命令 } という記述をしたところ、ビルドエラーは発生しませんでしたが条件が無視されてしまいました。 他にコードの間違いがあるかもしれませんが、まずはこの内容で判断をお願いします。

  • VBA 単純なIF文ですが?

    以下のような文を書いたときに、If文の後の変数を「set_s」にした場合イコールが実行されません。 「set_s」を単純な数字(この場合16)にするとIf文が機能します。 なぜでしょうか。 Do set_s = 16 Cells(1, 1) = Time h = Left(Time, 2) m = Mid(Time, 4, 2) s = Right(Time, 2) If set_s = s Then Cells(8, 2) = "時間です。" Exit Do Else Cells(8, 2) = "まだです。" End If Loop

  • fortranでのプログラム作成について

    DO t=0,100   k(t)=0   IF (0<x<=1-at)then   k(t)=k(t)+1    cycle   ELSE IF (1-at<x<=1)then     ・     ・   ---------------------------------    DO t=t1,100      ・      ・    END DO   END IF END DO 上記のプログラムをある目的で作っていて、線上の・・の部分で、1-at(aは少数)が乱数xより小さくなったときのt(t1)(tは整数)を求めて、線以下の・・でt1を用いたループを作りたいのですが、線上の・・の部分をどうすればt1が求められるのかがわかりません。アドバイスをいただけませんか?

専門家に質問してみよう