- ベストアンサー
fortran
例えばここに(100、50、19、38)の配列Aがあるとします。 そしてこの配列の何番目かに50という数字が入っている事はわかっていて、何番目にあるかを調べるときは 50=A(n) write(*,*)n と書けば2と出てくるのでしょうか? それとも A(n)=50 とすべきなのでしょうか? はたまた全く違う方法なのでしょうか? プログラムを考えていて、ここの部分がわからず完成しません。 どなたか教えてください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
プログラムは、欲しい結果を記述すれば、あとはコンピュータがよろしくやって答えを出してくれると言うものではありません(*注)。どういう手順で結果を求めるのか、その手順を書きます。 配列のどこかに目的の値のものが入っているなら、配列の要素を一つ一つ順番に見て探します。そういう風にプログラムを書きます。 1. 最初から見ることにする 2. それは50か? 3. 違うなら次を見ることにする 4. 2から繰り返し *注:それに近いことの出来るプログラミング言語もありますが、コンピュータに理解出来る形で「欲しい結果」を書くのはかなり難しいです。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
Fortran なら (何もしなければ) 配列の添え字は 1 からです>#3. ただ, do で回す範囲は LBOUND(A, 1)~UBOUND(A, 1) にした方がよいでしょう. これなら大きさに関係なく見つかる... おぉ, Fortran2008 には FINDLOC なるイントリンシック関数があるのか....
お礼
ありがとうございました。
- Tasuke22
- ベストアンサー率33% (1799/5383)
惜しいかも。 > do n=1,3 Aの要素数は4つですね。これでは3つしか検査しません。 それから、要素番号はお0から始まりますね。 これも、プログラミングの世界と日常の世界のギャップが あります。 何番目と要素番号は1つずれるということですね。 この短いプログラムを見て、私はFORTRANを忘れていることに 気が付きました。もう何十年も接していません。 もっとも文法書があれば、即座にコーディングする自信はありますが。
お礼
あっ! そうでした。 ありがとうございました
- Tasuke22
- ベストアンサー率33% (1799/5383)
> はたまた全く違う方法なのでしょうか? Yes 前述の二つの方法は代入という概念ですし、1つ目は数値に代入しようとしているので 文法として成立しません。 プログラミングで最初にぶつかる問題として「=」の扱いが数学と違うことです。 A(n)=50 としたらA(n)に50という値を代入するという意味です。 また、問題としてnの値が答えなのであるわけだから、いきなりnに答えが入っていると 考えるのはおかしいです。 配列Aの各要素を1つずつ検査する必要があり、検査の結果50が見つかったらそれが 答えです、 検査をするときも「=」を使いますね。ただし、ifなどが(ifに限らない)ないと 「=」が検査の意味になりません。 答えを書くのは簡単ですが、まあ考えてください。頑張って。
お礼
確かにおかしいですね。 人に言われないとわからないものです。 ありがとうございます。 したの方の回答にも書きましたが、 do n=1,3 if(A(n)=50)then write(*,*) end if end do ならばほしい情報がてに入りますでしょうか??
お礼
やはりだめでしたか・・・ ありがとうございます。 do n=1,3 if(A(n).eq.50) then write(*,*)n end if end do で動くでしょうか???