![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- 哲学 《自性清浄心》と《聖なる甘え》――ブッダとは目が覚めたという意味である―― 0 2023/05/23 04:15
- IT・エンジニアリング 三菱製PLC Qシリーズで技術的なことをご教示いただければ幸いです。 下記の回路で0.1秒の値をD0 1 2023/02/27 18:44
- Visual Basic(VBA) vba GetAsyncKeyState関数について 1 2023/08/24 12:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- 数学 高校時代電離平衡の計算に関しての質問です。 問題集で、 酢酸は水溶液中で一部が電離し、次のような電離 2 2022/10/22 18:59
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- メガネ・コンタクト・視力矯正 メガネやコンタクトでの視力の上がり幅には限度がありますか? 例えば、視力0.1の人が高い度数のメガネ 2 2023/01/03 00:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
VBA 1次元配列を2次元に追加する
-
ListViewで、非表示列って作れ...
-
2つ以上の変数を比較して最大数...
-
2次元動的配列の第一引数のみを...
-
VBのFunctionで、配列を引数...
-
subの配列引数をoptionalで使う...
-
Array配列の末尾に追加したい。
-
配列変数の添字が範囲外ですと...
-
C言語
-
VB6 配列を初期化したい
-
配列を任意の数値で埋める方法
-
シェルスクリプト中で、ヒアド...
-
Excel-VBAの配列「Public Const...
-
Dim は何の略ですか?
-
配列で飛び飛びの値を指定して...
-
特定のセル範囲で4文字以上入力...
-
配列に同じ値を入れる方法
-
ヤマ括弧でくくられたテキスト...
-
《エクセル2000》A列・B列の商...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
for each の現在の配列ポインタ...
-
配列変数の添字が範囲外ですと...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
subの配列引数をoptionalで使う...
-
ListViewで、非表示列って作れ...
-
VB6 配列を初期化したい
-
Excel-VBAの配列「Public Const...
-
配列を任意の数値で埋める方法
-
Dim は何の略ですか?
-
verilogで配列の任意の8bitを取...
-
VBのFunctionで、配列を引数...
-
2次元動的配列の第一引数のみを...
-
エクセルで最小値から0を除く方法
-
VBA Match関数の限界
-
Excel VBA配列をFunctionに渡す
-
VB2008: CSV を二次元配列に読...
-
fortranでのcsvファイルの読み込み
おすすめ情報