implicit real*8(a-h,o-z)
dimension h(10,300)
h(1,g)=1.0d0
h(2,g)=g*2.0d0
open(6, file='testes-ex.f', status='replace')
do 12 n=1,2
do 11 i=1,2
g=2.0d0*i
11 write(6,*) h(n,g)
12 write(6,*)
stop
end
として出力させると値がすべて0になってしまいます。
私としては1.0 2.0 1.0 4.0 と出力させたいのですが、
どこに問題があるのでしょうか?
当方fortran初心者ですのですごく馬鹿げた質問をしているかも
しれませんが…気付くことがあればご指摘よろしくお願いします。
No.4ベストアンサー
- 回答日時:
いまさら FORTRAN77 ってのもどうかと思うんだけどねぇ. Fortran90 ですら 20年以上前の規格. 今の最新は 2010年版 (通称 Fortran2008).
さておき,
dimension h(10,300)
って書いてあるんだから h は配列です. 誰が何と言おうと. で, 配列の添字は整数であるべきです. FORTRAN77 では実数でもよかったかもしれないけど, 今の Fortran では整数に限定されています.
あと, 厳密な意味で「h(n,g)を、nの値で関数が決まり、gがその関数の変数 (引数?) となるように定義」することは不可能です. もちろん「n と g を引数とする関数」で定義することはできるし, そうするしかありません.
回答ありがとうございます。
古い規格を使ってるのはおそらく私の先生の趣味だと
思います。
配列と関数は異なるものなのですね。No.3さんのいう通り、
ごっちゃにしていました。
精進あるのみですね。
皆様回答ありがとうございました。
No.3
- 回答日時:
書き方がfortran90ぽくない。
もしかしてfortran77?fortran77だとするとimplicit noneは通らなかったかも?
fortran77だとしても、配列と文関数がごっちゃになっています。
よくこんなので、コンパイルが通りましたね。
多分、dimension h(10,300) はいらないのだと思います。第一、こんな問題に
配列は必要ないですよね?
あと文関数も書き方がおかしいです。
h(g)=g*2.0d0
のように書くべきです。(引数には定数入れない)
また、既にgの値はn=1で2.0、n=2で4.0ですので、このまま改修
したとして、1.0 4.0 1.0 8.0 と出力されそうです。
以上
回答ありがとうございます。
コンパイルするときにはg77としていますが、
これが関係あるのかどうかはわからないです。
ですが確かにimplicit noneというのは初耳ですね。
No.2さんのお礼欄でも書きましたが、nは関数を定める整数で
gはその関数の実変数としてh(n,g)を定めたつもりです。
本来の文章はもう少し複雑なのでこのように例を挙げたのですが、
この例は悪かったかもしれません。
No.2
- 回答日時:
#1 では書き忘れたけど, 本題についていえば
h(1,g)=1.0d0
と書いたら「そのときの g の値」を使って配列要素に値を代入する. だからそれ以外の要素は一切値が変化しない.
でどうするかというと, do でループすればいい. あるいは, いまどきの Fortran なら配列代入がいい感じ.
回答ありがとうございます。
gを定義してからh(n,g)の定義文を書くことでちゃんとした値が出るように
なりました。助かりました。重ねてありがとうございます。
>初心者ならなおのこときちんとした知識をつけなきゃならないので
私の先生は使って覚えろと言っておりましたのでこのように初歩的な問題が
起きているのでしょうね。
配列の添え字というのはh(n,g)のnやgのことですよね?
添え字は整数しか取れないものなのでしょうか?
私はこの文章でh(n,g)を、nの値で関数が決まり、gがその関数の
変数となるように定義したかったのですが、そうはならないのでしょうか?
重ね重ね質問してしまい失礼は承知の上ですが、助言していただければ幸いです。
No.1
- 回答日時:
初心者ならなおのこときちんとした知識をつけなきゃならないので厳しくいく.
まず, implicit は
implicit none
だけ覚えろ. そして, それを必ず使え.
つぎに, 配列の添え字には整数だけを使え.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
特定のセル範囲で4文字以上入力...
-
VB6 配列を初期化したい
-
VBA Match関数の限界
-
ListViewで、非表示列って作れ...
-
subの配列引数をoptionalで使う...
-
【VBA】配列とWorksheetFunctio...
-
《エクセル2000》A列・B列の商...
-
順列の作成
-
VLOOKUP関数で、一番下...
-
AES暗号にて、AES_set_encrypt_...
-
VBAで近似曲線の係数取得
-
配列で飛び飛びの値を指定して...
-
ヤマ括弧でくくられたテキスト...
-
for each の現在の配列ポインタ...
-
エクセルで最小値から0を除く方法
-
配列を任意の数値で埋める方法
-
FORTRANのCOMMON文
-
Excel VBA TREND関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
VB6 配列を初期化したい
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
《エクセル2000》A列・B列の商...
-
配列変数の添字が範囲外ですと...
-
Excel-VBAの配列「Public Const...
-
subの配列引数をoptionalで使う...
-
for each の現在の配列ポインタ...
-
配列を任意の数値で埋める方法
-
Dim は何の略ですか?
-
VBのFunctionで、配列を引数...
-
配列内の内容を全て表示する方法
-
2次元動的配列の第一引数のみを...
-
Excel VBA配列をFunctionに渡す
-
VBA Match関数の限界
-
Array配列の末尾に追加したい。
-
AES暗号にて、AES_set_encrypt_...
おすすめ情報