プロが教える店舗&オフィスのセキュリティ対策術

例えばここに(100、50、19、38)の配列Aがあるとします。
そしてこの配列の何番目かに50という数字が入っている事はわかっていて、何番目にあるかを調べるときは

50=A(n)
write(*,*)n

と書けば2と出てくるのでしょうか?
それとも
A(n)=50
とすべきなのでしょうか?

はたまた全く違う方法なのでしょうか?

プログラムを考えていて、ここの部分がわからず完成しません。

どなたか教えてください

A 回答 (4件)

プログラムは、欲しい結果を記述すれば、あとはコンピュータがよろしくやって答えを出してくれると言うものではありません(*注)。

どういう手順で結果を求めるのか、その手順を書きます。
配列のどこかに目的の値のものが入っているなら、配列の要素を一つ一つ順番に見て探します。そういう風にプログラムを書きます。

1. 最初から見ることにする
2. それは50か?
3. 違うなら次を見ることにする
4. 2から繰り返し

*注:それに近いことの出来るプログラミング言語もありますが、コンピュータに理解出来る形で「欲しい結果」を書くのはかなり難しいです。
    • good
    • 0
この回答へのお礼

やはりだめでしたか・・・
ありがとうございます。

do n=1,3
if(A(n).eq.50) then
write(*,*)n
end if
end do

で動くでしょうか???

お礼日時:2010/12/12 23:54

Fortran なら (何もしなければ) 配列の添え字は 1 からです>#3.


ただ, do で回す範囲は
LBOUND(A, 1)~UBOUND(A, 1)
にした方がよいでしょう. これなら大きさに関係なく見つかる... おぉ, Fortran2008 には FINDLOC なるイントリンシック関数があるのか....
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2010/12/26 18:19

惜しいかも。



> do n=1,3

Aの要素数は4つですね。これでは3つしか検査しません。

それから、要素番号はお0から始まりますね。
これも、プログラミングの世界と日常の世界のギャップが
あります。
何番目と要素番号は1つずれるということですね。

この短いプログラムを見て、私はFORTRANを忘れていることに
気が付きました。もう何十年も接していません。
もっとも文法書があれば、即座にコーディングする自信はありますが。
    • good
    • 0
この回答へのお礼

あっ!
そうでした。

ありがとうございました

お礼日時:2010/12/26 18:18

> はたまた全く違う方法なのでしょうか?



Yes

前述の二つの方法は代入という概念ですし、1つ目は数値に代入しようとしているので
文法として成立しません。

プログラミングで最初にぶつかる問題として「=」の扱いが数学と違うことです。

A(n)=50 としたらA(n)に50という値を代入するという意味です。

また、問題としてnの値が答えなのであるわけだから、いきなりnに答えが入っていると
考えるのはおかしいです。

配列Aの各要素を1つずつ検査する必要があり、検査の結果50が見つかったらそれが
答えです、
検査をするときも「=」を使いますね。ただし、ifなどが(ifに限らない)ないと
「=」が検査の意味になりません。

答えを書くのは簡単ですが、まあ考えてください。頑張って。
    • good
    • 0
この回答へのお礼

確かにおかしいですね。

人に言われないとわからないものです。
ありがとうございます。

したの方の回答にも書きましたが、
do n=1,3
if(A(n)=50)then
write(*,*)
end if
end do

ならばほしい情報がてに入りますでしょうか??

お礼日時:2010/12/12 23:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!