10/02/08 07:30:51
終了したのが
なんていうサブルーチンで何行目か、とか
ソースファイルの何行目だったか、とか教えてくれるようにする
オプションってあったと思うけどなぁ。というわけでマニュアルを読もう!
Fujitsuだと超最適化かけてもこの機能はついてくるのが素晴らしいが
PC向けではなかったような・・・。出してくれんかねぇ
899:デフォルトの名無しさん
10/02/08 07:59:22
>>898
いえ、それがめんどくさいことに終了せずにどこかで停止してるんですよ。
write文の中身をいちいち変えてもいいんですけど、
出来るだけコード汚さないように書きたいので。
900:デフォルトの名無しさん
10/02/08 11:25:45
すみません、もう一つ。subroutineの最後に
return
end
って書くのはなんででしょう。サブルーチンでのendってreturnと
同じ意味じゃないんでしょうか?returnが無いと困るケースってあります?
901:デフォルトの名無しさん
10/02/08 12:13:11
ヒント: returnはサブルーチンの最後である必要は無い。
902:デフォルトの名無しさん
10/02/08 13:12:13
大昔はEndSubroutineが無かったから、
このEndはサブルーチンのですよ、とチェックをいれる意味で
推奨されてた名残だね。ぶっちゃげ無くてEndだけでもいい。
Returnはサブルーチン抜けを意味するのだからメイン階層では絶対出てこないので。
903:デフォルトの名無しさん
10/02/08 18:54:13
900じゃないけどreturnとか使った事ありませんでした
勉強になるスレです
904:デフォルトの名無しさん
10/02/08 22:05:26
>>897
__FILE__ を使って後はゴニョゴニョとよくやってた。
Fortran 自体を使わなくなって数年(足を洗ったので)。
905:デフォルトの名無しさん
10/02/08 23:08:56
>>899
Fortranにはそういう命令はない。
しかしコンパイラのtracebackオプションを使えばいい。
大抵のコンパイラにはそういう機能がある。
だがそれは、処理系に依るのでマニュアルでオプションを調べるしか無い。
コンパイラの種類とバージョンを言えばわかる可能性はある。
906:デフォルトの名無しさん
10/02/08 23:13:26
__LINE__使えるんじゃないの?
907:デフォルトの名無しさん
10/02/09 00:35:53
>>906
標準のFortranにはないべ。
Unix系のプリプロセッサの機能だろ。方言のなまりがきつすぎる。
908:ごめんなさい、お願いです。
10/02/10 00:51:22
このプログラムを
明日までに作ってください!!お願いします。
Fortranで,
階乗 n! を計算する関数を作成し,
順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,
組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成してください。
おねがいします。
909:デフォルトの名無しさん
10/02/10 01:55:59
>>908
最近勉強しているのでFortran95 で書いてみた。
たぶん君が求めているのはF77ヴァージョンだろうw
MODULE m_2chan
IMPLICIT NONE
CONTAINS
ELEMENTAL INTEGER FUNCTION factorial(n)
INTEGER, INTENT(IN) :: n
INTEGER :: i
factorial = PRODUCT( (/ (i, i = 1, n) /) )
RETURN
END FUNCTION factorial
ELEMENTAL INTEGER FUNCTION permutation(n, r)
INTEGER, INTENT(IN) :: n, r
INTEGER :: i
permutation = PRODUCT( (/ (i, i = n, n - r + 1, -1) /) )
RETURN
END FUNCTION permutation
ELEMENTAL INTEGER FUNCTION combination(n, r)
INTEGER, INTENT(IN) :: n, r
combination = permutation(n, r) / factorial(r)
RETURN
END FUNCTION combination
END MODULE m_2chan
!
910:デフォルトの名無しさん
10/02/10 01:57:29
PROGRAM twochannel
USE m_2chan
IMPLICIT NONE
INTEGER :: n, k
PRINT *, 'INPUT n and k'
READ *, n, k
PRINT *, 'nCk = ', combination(n, k)
STOP
END PROGRAM twochannel
77育ちの俺様は、暗黙の型に従っていないのですげー気持ち悪いぜwww
911:デフォルトの名無しさん
10/02/10 02:27:41
>>908
数学的にチューニングすべきだが、提示された式のとおりに作った。PROGRAMは改行多杉になるので省略
integer function factorial(n)
implicit none
integer i, n
i = n
factorial = 1
do while(i .gt. 0)
factorial = factorial * i
i = i - 1;
end do
end
integer function permutation(n, r)
implicit none
integer n, r, i
i = 1
permutation = 1;
do while(i .le. r)
permutation = permutation * (n - i + 1)
i = i + 1
end do
end
integer function combination(n, r)
integer n, r, factorial, permutation
combination = permutation(n, r) / factorial(r)
end
912:デフォルトの名無しさん
10/02/10 08:48:40
908の人気に嫉妬
913:デフォルトの名無しさん
10/02/10 08:58:43
>>901
>>902
あ、そうなんですか。別に書かなくてもいいってことですね?
>>904
>>905
>>906
ありがとうございます。でも、エラーが出て終了するんじゃなくて、
ジョブは走ってるんですけどどこかで止まってるっぽいんですよ。
出力ファイルが計算途中で更新されなくなるんです。
で、どこまで進んでどこでどうなってるか調べたいのでいちいちwrite文挟んでるんですが…
tracebackって終了したときしか使えないですよね?
914:デフォルトの名無しさん
10/02/10 10:05:57
デバッガー無いのか? アタッチ出来れば楽勝だな。
915:908です。
10/02/10 11:57:13
みなさん、ありがとうございました!!(泣
916:デフォルトの名無しさん
10/02/10 23:09:07
>>913
仰る通り Traceback は異常終了しないとでない。
しかし、望みの機能が存在しないのは、世の中の人がその機能を欲していないということなので
がんばってPRINT文をばらまいて解決しなさいw
プログラム相談員とか、そういう人に聞くのも、連中の人を小馬鹿にしたような寝言を我慢しないと
駄目だが、有効w
917:デフォルトの名無しさん
10/02/11 13:16:13
>>916
>連中の人を小馬鹿にしたような寝言を我慢しないと駄目だが
ワロタw
あの目線はどうにかならんのか
918:デフォルトの名無しさん
10/02/11 22:18:28
ちょっとお聞きしたいのですが、
fortranでguiプログラミングはできないのでしょうか?
919:デフォルトの名無しさん
10/02/11 23:26:53
>>918
C用のライブラリのAPIを呼びまくるという形ではできる。