• 締切
  • 困ってます

fortran  繰り返しループから抜きたい

  • 質問No.6360257
  • 閲覧数150
  • ありがとう数5
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 71% (10/14)

10 continue
  :
  :
  :
 do 100 i=1,10
if (abs(x (i)-y(i)) .lt. 1.0) then
r= r + dr
goto 100
else
goto 1000
end if
100 continue

  :

1000 contiue
end


  すべての条件(i=1~10)が満足されたら、ループから抜きたいのですが、出来ませんでした。
  教えて頂けませんでしょうか?よろしくお願しますね!*<>*!

回答 (全4件)

  • 回答No.4

ベストアンサー率 29% (744/2561)

こんなときには、自分でループを作ってしまいます。
なお、行番号の付けかたは、私の使っている慣習で処理させていただきます。

DIMENSION LoopCount(10)

LoopCount(1)=0
(中略)
LoopCount(10)=0

10
(適当な処理)
IF ??? .eq. ??? then LoopCount(1)=1
(適当な処理)

* LoopCount() の合計を求めて10ならばすべての処理が終わったと解釈する
IB=0
Do 11 IA=1,10
IB=IB+LoopCount(IA)
loop
if IB.ne.10 goto 10
end

最後に、この手のループの場合、比較的簡単に暴走します。無限ループに入ります。
普通100回か1000回ループ内を回ったらば、条件が適合しなくても異常終了させるルーチン(適当なカウンター)を入れてください。

ICount = 0
10 continu
ICount=Icount+1
IF Icount.gt.1000 then stop (今のコンヒューターならば、STOPと表示して正常終了するはずです。私の場合、END を正常終了、STOP をユーザーレベルの異常終了としています)
(適当な処理)
IF (終了条件が成立しない) goto 10
end

ここ10年ぐらいBasic しかいじっていないので、文法を忘れている可能性があります。
Basic の文法で書かれていたら、Fotran に直してください。
お礼コメント
wonwon99

お礼率 71% (10/14)

早速教えていただきまして、どうも有り難うございました。
少し整理してから、また、お願するかもしれませんね。
どうも、どうも!!<::>
投稿日時:2010/12/03 17:14
  • 回答No.3

ベストアンサー率 22% (3398/15358)

 部分的に抜き出されても分かりません。懐かしいフォートランだなぁと。
 
 でも、これでは回答できません。条件が分かりません。何をしたいのでしょうか?

 闇雲にプログラムしても解決出来ません。変数がどうなっていくのか。どうしたいのか?
 処理はどのようにしたいのか。

 あなたが作成したプログラムをみて、プログラムを実行させないで頭の中で数字を入れて、どのようになっていくのか考えて見てください。 紙の上で実行させていくのです。
 順番に変数がどうなっているのか横に書いていきます。それを色んなパターンでしていくことで、何が条件で足りないかが分かってくると思います。
 
 どうしてもプログラムを動かして検証したいのなら、途中にチェック用のプログラムを入れます。
 変数を表示して確認してから次の動作にいくなどのプログラムを組み入れます。必要でなくなったらコメント文にして残しておきます。

 それと上手に段落を付けることで処理の流れが分かりやすくなりますし、可能な限りあちらこちらに飛ばないように工夫して下さい。
お礼コメント
wonwon99

お礼率 71% (10/14)

いいコメントですね!!
有り難う、有り難う!!
もう一寸整理してから、また質問したいのね!
宜しく、宜しくね<**>、(・・¥・・)
投稿日時:2010/12/03 17:22
  • 回答No.2

ベストアンサー率 46% (222/475)

「すべての条件(i=1~10)が満足されたら、ループから抜きたい」という
表現と、
「else goto 1000」
から、
「10個の条件が全部満足のときに1000に行きたい」と解釈しました。
また、その条件は、
「abs(x (i)-y(i)) .ge. 1.0」ですね。
 (abs(x (i)-y(i)) .lt. 1.0 のelseだから)

しかし、もとのプログラムでは、どれか一つでも else があったら goto1000
になってしまうので、うまくないですね。

--
「10個の条件が全部満足のときに1000に行きたい」に加えて、
「そうでないとき、500にいく」を考えればうまくいきます。
 (500に行った後どうするかは決めてください)

 do 100 i=1,10
if (成立してほしい条件) then
成立しているときにするアクション
goto 100
else
goto 500
end if
100 continue
1000 continue  ←doループの直後に記述:無事10回まわったときここに来る
 10個の条件が成立しているときのアクション
  :
  :

500 continue
 10個の条件のいずれかが成り立っていないときのアクション
  :
  :
お礼コメント
wonwon99

お礼率 71% (10/14)

大変参考になります。
これから、整理しながら、実行してみたいね!
早速の回答で、何度も有り難う、有り難う、お礼を申し上げたいね!

<^^> (○○)!
投稿日時:2010/12/03 17:26
  • 回答No.1

ベストアンサー率 67% (2650/3922)

お書きのプログラムの部分で何をしたいのか、お書き願います。
r,drを使っているにもかかわらず初期値が与えられていないし、その説明もない。
全ての条件とはなんですか?
条件を満足するとはどういうことですか?

(abs(x (i)-y(i)) .lt. 1.0) が全てのiについて成り立つことが条件を満足すると言うことですか?
全てのiについて成り立たないことが条件を満足するということですか?

補足にお書き下さい。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ