09/11/28 10:07:56
>>729
キミに「プログラムは書かれいる通りに動く」という格言を進呈しよう。
とても高い確率でキミが何処かで間違えている。
733:デフォルトの名無しさん
09/11/28 10:23:59
>>731
一般論として考えた場合は負でも問題無い。というのは飽くまでも或る点からのズレ(変位)という意味し
かないから。
プログラムの中で何らかの約束がある場合には、その約束のために正の値でなければならないことはあるだ
ろう。そういう時に負になってしまうのはバグでしょ。その場合はプログラムを書いた人の検討不足かタイ
プミスかだ。デバッグができていないんだろう。他の理由もあるんだろうけど思いつかん。
734:デフォルトの名無しさん
09/11/28 10:44:21
>>729
> ちなみに直前でそれぞれの中身を表示したところ、
これは本当に直前なのか? 正常に動く一回前の値じゃないのか?
735:デフォルトの名無しさん
09/11/28 19:56:50
>>729
多分、ただのゼロ割だろう。
Intelのコンパイラのバージョンはいくつかな?
新しい奴ならNaNにして続行するが、8.1とか古い奴はFloating Invalidで即死する。
状況的には>>734の言っていることが正しいであろう。
736:デフォルトの名無しさん
09/11/29 10:33:12
>>730
倍精度は文字どおり精度を上げるのに有効だけど・・・
単精度でコケて倍精度で動く奴は、モデルを間違えてるかコードがおかしいかのどちらかだから
根本的には解決にならないね。
737:デフォルトの名無しさん
09/11/29 12:05:49
微妙なケタ落ちを救済する事が出来るが、ケタ落ちが発生しない
アルゴリズム/コードに代える方がまっとうな道。
738:729
09/11/29 13:14:09
みなさん、レスありがとうございます。まだ全部追えて無いんですが…
>>730
実は無次元化してません…
>>731
733が仰ってますが、単に変位です。負値は大丈夫です。
>>732
もちろんそうなんですが、どこで間違えてるのか分からなくて。
>>734
計算の一行前にwrite文で表示させてるので一回前の値と言うことはないはずなんですが、
この値で止まるのも同程度におかしいので何か間違えてるんだと思います。
>>735
ver.11です。デフォだとNaNで続行されますけど、NaNだと粒子が行方不明になってしまって困るので
トラップして原因を突き止めようとしてるのです。開放系ならごく稀に粒子が居なくなるくらいは問題ないんですが、
閉鎖系だと粒子がどんどん減ってしまうので…
>>737
こういう問題が発生しないアルゴリズムってどういうものでしょうか?原理的に発生しないんですか?
今自分で思いつくところだとNaNを検出して適当な座標を振りなおしてやるくらいしか思いつかないんですが…
ちなみにゼロ割した場合、floating invalidじゃなくてfloating divide by zeroとでました。分子も0だと
floating invalidになるのでこっちなんでしょうか?まだ不可解なところがあるのでもう少し見直してみます。
739:デフォルトの名無しさん
09/11/29 19:58:08
出力のバッファリングで一回前を見ている可能性が有る。
デバッガで調べた方が良い。
740:デフォルトの名無しさん
09/11/29 20:15:31
>>739
じゃ、出力先をファイルか標準エラー出力に切り替えてみるのもありだな。
そんで結果を見る。デバッガなんて使いこなすまでに時間が掛かりそうだし。
741:デフォルトの名無しさん
09/11/30 00:05:11
バッファリングはファイルの方が積極的。
もうひとつの可能性:
floating invalidは表示ルーチンで出ている。
742:デフォルトの名無しさん
09/11/30 00:27:10
>>738
あとの安直な手は別のコンパイラで実行してみることかな。
g95あたりで一回やってみればいいのでは。
743:デフォルトの名無しさん
09/11/30 06:49:04
バファリンの半分はやさしさでw
バッファリングの半分は嘘のデータで出来てます。
あとは・・・Write 文つかったデバッグの場合でかつ元のをUnrollingしていると
Write文挿入する・しないで演算順序が変わることがあるから
UnrollingやできればInlineを抑制したコンパイルをすることをお薦めしてみるテスト
744:デフォルトの名無しさん
09/12/01 05:51:21
Fortranをはじめたばかりです
*
***
*****
*******
を描けという問題で、1.2.3行目のスペースの出し方がわかりません・・・
$を使えばできるのかと思いましたが、わかりません
どなたか教えていただけないでしょうか?
745:744
09/12/01 05:52:09
スペース消えてる・・・
>>744はピラミッド形です
746:デフォルトの名無しさん
09/12/01 06:14:43
do i = 1, 4
do n = 1, 7
if (n .GE. (5-i)) .AND. (n .LE. (3+i))
write(*,'(A,$)') '*'
else
write(*,'(A,$)') ' '
enddo
enddo
write(*,'(A)') ''
enddo
かな?
747:デフォルトの名無しさん
09/12/01 06:15:40
あら、一個
enddo -> endif
にしとかんといかんかったね
748:744
09/12/01 06:26:33
>>746
早速のレスありがとうございます
書いてくださったのを参考になんとか書けました><
749:デフォルトの名無しさん
09/12/01 09:47:59
お、かけましたかw
if の行に then がなかったりしたけど、
えがったえがった
750:デフォルトの名無しさん
09/12/01 23:10:57
FORTRAN初心者です。。
1000以下の整数のうち、7で割ると2余る数を全て合計するプログラムをつくりたいのですがわかりません…
どなたか教えてください。
751:デフォルトの名無しさん
09/12/01 23:16:50
>>750
integer i, s, n
n = 1000
s = 0
do i = 1, n, 1
s = s + i
end do
write(*,*)'sum =',s
続きは誰かヨロ。みんなで完成させようぜ。
752:デフォルトの名無しさん
09/12/02 03:44:10
if (mod(i,7) .EQ. 2) then
s = s + i
write(*,*) i, s
endif
途中経過表示はいらないけどね。
753:sage
09/12/02 07:28:33
>>751-752
ありがとうございます。
本当に助かりました
自分でやったのでは実行できなかったので;;
また機会があればよろしくお願いします。
754:デフォルトの名無しさん
09/12/03 13:16:46
初めまして。
最小二乗法のプログラム(放物線近似)をつくっているのですが、
"dot_product"文がうまく使えません。
実行すると下記のようなエラーが出ます。
x4 = dot_product(x2,x2)
1
Error: 'vector_a' argument of 'dot_product' intrinsic at (1) must be of rank 1
In file test02.f90:28
x4 = dot_product(x2,x2)
1
Error: Function 'dot_product' at (1) has no implicit type
長くなりますが↓にプログラムを貼ります。
755:デフォルトの名無しさん
09/12/03 13:20:29
program saishou
implicit none
real(8)::a,b,x,y,y_b,xi,x2,yi,y2,xy,d,x4,x2y
integer::n,i
allocatable x(:), y(:), y_b(:)
write (*,*) 'input number of data '
read (*,*) n ! input size of dimension
write (*,*) 'number of data is ',n
allocate (x(n),y(n),y_b(n))
!-------------------------
do i = 1,n
read(*,*) x(i), y(i)
write(*,*) x(i), y(i)
end do
!------------------
xi = sum(x); x2 = dot_product(x,x)
yi = sum(y); xy = dot_product(x,y)
x4 = dot_product(x2,x2)
x2y= dot_product(x2,y)
d = n*x4-x2**2
a = ( n *x2y - x2*yi ) / d
b = ( x4*yi - x2*x2y ) / d
write (*,'(1x,2(3x,a,f7.3))') 'a =',a,'b =',b
write (*,'(a8,a9,a10,a11)') 'x','y','y_b','dif'
end program saishou
756:デフォルトの名無しさん
09/12/03 13:45:03
dot_productは引数に同じ要素数の配列しかとれない。
x2はスカラーなので引数にできないですよ。
ちなみにdot_productが返すのはベクトルの内積を求めるので、戻り値はスカラー。
・・・とfortran歴1年の俺がいってみる
757:デフォルトの名無しさん
09/12/03 14:29:43
前から思ってたんだけど、dot_productみたいなデフォで用意されてる関数を使うのって、
ベクトル化などの高速化・最適化を妨げるリスクはないと思っていいよね?
それとも、doループをいちいち書いた方がやっぱり速くなったりする?
758:デフォルトの名無しさん
09/12/03 21:10:12
fortranの初心者です
彗星の軌道をプログラミングしたいのですが上手くいきません
どこがおかしいか教えてくださいませんか?
program main
integer i,j
real ms,me,x,y,vx,vy,t,dt,G
ms=1.989*(10**30)
dt=100
G=6.673*(10**(-11))
K=G*ms/R**2
x=0.8826*(10**(11))
y=0.0
R=sqrt(x**2+y**2)
vx=0.0
vy=55000
do i=0,1000
x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
enddo
end
759:デフォルトの名無しさん
09/12/03 21:42:09
>>756
なるほど・・・ご指摘ありがとうございます。
では行列の4乗はどう書けばよいのでしょうか。。
760:デフォルトの名無しさん
09/12/03 22:15:52
>>759
そういうサブルーチンを自作すれば良い。幸いなことにFortran90からは再帰も使えるしね!
761:デフォルトの名無しさん
09/12/03 23:25:57
気付いた所だと、
xnext=x+vx*dt*i
ynext=y+vy*dt*i
R=sqrt(xnext**2+ynext**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
x=xnext
y=ynext
vx,vyはdtずらす前のx,yを使うのがオイラー法の正しいやり方ですよ。
これだけで直るかは自信がありませんが。
762:デフォルトの名無しさん
09/12/04 00:45:27
下記のIを求めるプログラムを組もうとしているのですが、フォートランはさっぱりで…
どなたか本当にお願いします。
Zは3×3の行列で、V、Z、Iの各要素は複素数とするそうです。
確かに複素数を扱うにはCよりはフォートランだとは思うのですが…
[V1] [Z11 Z12 Z13] [I1]
[V2]= [Z21 Z22 Z23] [I2]
[V3] [Z31 Z32 Z33] [I3]
よろしくお願いします。
763:デフォルトの名無しさん
09/12/04 02:27:53
>>757
たぶん弊害はない。たぶん、なのは実装によるので。ベクトルがでかくなると、
出来合いのルーチンの方が速いね。そういうチューンしてると期待していいとおもう。
3次元くらいだったら自分でループ書くか、
naiseki=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
みたく成分を明示したほうがいいことがおおいけど。
764:デフォルトの名無しさん
09/12/04 02:29:50
>>762
複素数扱うならFortranのがいいよ。
んで、3x3行列なら (-1)^(i+j) * (小行列の行列式)_{j,i}/(全体の行列式)
を明示した方がいいよ。
765:デフォルトの名無しさん
09/12/04 11:04:54
>>763
thx
そのうち自分で試してみようかな
766:デフォルトの名無しさん
09/12/04 19:50:53
fortranで複数ファイルの結合ってどうやってやればいいですか?
もちろん中身を読み込んで新しいファイルに書き込むなら出来ますが、
cat みたいな感覚で使える命令ってあるでしょうか?
767:デフォルトの名無しさん
09/12/04 23:14:56
>>766
system() を使って cat で繋げるとか?
Fortranが内部で持っている方法は聞いた事が無いです。
768:デフォルトの名無しさん
09/12/04 23:47:25
>>758
G=6.673*(10**(-11))
この辺は
G=6.673E-11
とするべし。
あと77なのか90なのか判然としないが、暗黙の型を破る気ならIMPLICIT NONEを
つけておくほうが吉。
>>766
catだって中では読んで書き出しているだけだろうに
769:デフォルトの名無しさん
09/12/04 23:54:43
>>768
> >>766
> catだって中では読んで書き出しているだけだろうに
そういえばバイナリファイルをformattedで開く場合ってケッコウ難儀なことになりそうな気がして来た。
catはその辺はクリアしてるけど(でないとバイナリファイルの結合なんて出来ないよね?)。
自分だったらfortranでやらずにシェルでも書いてそっちで済ます。WindowsならPerlか何かを使うかな?
dosのコマンドで出来たっけ?やりたいことによって道具を使い分けるのが良いと思うけど。
770:デフォルトの名無しさん
09/12/05 00:05:00
>>766
catと等価な、つまりバイナリレベルでの結合は無理じゃない?
fortranって、せいぜいレコードを扱うくらいで、バイトレベルでの操作は普通しないし、そもそもできないと思うけど
771:デフォルトの名無しさん
09/12/05 03:50:13
いちおうAppendで既存ファイルに追記することはできるけどバイナリだと
追記するデータを別なファイルから読み込む段階でコケる事多々アリで面倒だよね。
Bit 単位での操作って Fortranで出来ない&やりにくい典型例だ。
772:デフォルトの名無しさん
09/12/05 05:12:47
FORTRANやCOBOLのような古い言語は、
ファイルはレコードの集合という考え方をするから、
前提のないバイト列は扱いにくい。
773:デフォルトの名無しさん
09/12/05 05:57:03
NAG Fortran Builder 5.2 をインストールして使ってみたのですが,
program main
print *, 'Hello World !'
stop
end
のクイック実行のコンパイル&リンクに12分50秒もかかります。
NAGのコンパイラはこういうものなんでしょうか?
それとも,もっと早くコンパイル&リンクのできる設定が何かあるのでしょうか?
私の環境は,OSはWindows XP,RAMは512MB,
HDDの空き領域は,Cドライブは706MB,Dドライブは1.92GB,
Fortran Builder は Dドライブにインストールしています。
# NAGの統合開発環境は,Intelのと違って,キーワード入力補完機能がありました。
774:デフォルトの名無しさん
09/12/05 10:00:55
RAM 少なくね?
775:デフォルトの名無しさん
09/12/05 10:02:09
>>758
数字を規格化しようね
776:773
09/12/05 10:51:47
>>774
NAGのホームページには 「メモリ:256MB以上(推奨 512MB以上)」 と
書いてあったので,大丈夫かなと思ったんですが,
やっぱり足りないですかね。
他に Fortran Builder 5.2 のユーザーさん,いませんか?
RAMはどれくらい積んでますか?
777:デフォルトの名無しさん
09/12/05 12:17:51
>>773
キーワード補完だけじゃ、あってもなくてもほとんど変わらんよなぁ・・・
もっとリッチなFortranのIDEが早くでないものか
778:デフォルトの名無しさん
09/12/05 13:20:00
>>776
その前に今どき512MBというのがなあ。増設はできないの?
779:773
09/12/05 13:38:40
別のパソコン (let's note) で試してみました。
CPU: Pentium M 1.20GHz
RAM: 1GB
OS: Windows XP Pro. Ver.2002 SP3
これで
program hello
print *, 'Hello World'
stop
end program hello
をやってみたんですが,こちらのPCでもコンパイル&リンクに
12分25秒かかりました‥‥ orz
>>778
う~ん,6年前のVAIOノートなんで,買い替えしたほうが良いかもしれません。
780:773
09/12/05 13:52:17
Intel Visual Fortran 11.1 のほうの動作環境ページを見ると
RAM 1GB (2GB 推奨) と書いてあるんですが,
CPU: Pentium M 1.20GHz,RAM: 1GB のPCにインストールしても,
Fortran Builder と同じくコンパイル&リンクに10分くらい
時間かかっちゃうでしょうか?
781:デフォルトの名無しさん
09/12/05 14:01:23
メモリが足りないせいで異常に遅いときは、
大量にスワップが発生しているせいなので、
一定量メモリを増やせば急に早くなるものだが、
512MBでもその有様とはすごいね。
fortran 77でよければ open watcom fortranとかいいんでない?
782:デフォルトの名無しさん
09/12/05 14:06:13
>>779
まさかとは思うが、メモリの空きは大丈夫なんだよね?
動画のエンコしながらコンパイルとかはさすがにないだろうけどw
783:デフォルトの名無しさん
09/12/05 14:15:19
コマンドラインからコンパイルとかできないの?
IDEが重いのかもしれない。
784:デフォルトの名無しさん
09/12/05 14:20:09
あと仮想メモリを増やしてみる。無駄かな?
785:773
09/12/05 16:01:16
>>781-784
レスありがとうございます。>>783さんのレスを見て調べたら,
コマンドラインからコンパイルする方法が NAGのサイトの
FAQページに載っていました。
今度は数秒でコンパイルできました!
# しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して,
コマンドラインからのときはわずか 18KBとずいぶん小さくなりました
ちなみに,g95でコンパイルしたときは 339KBでした。
本当にありがとうございました m(_ _)m
786:デフォルトの名無しさん
09/12/05 16:37:57
もしかしてNAGが駄目駄目ってオチなのかな?
でもそんな悪い評判は聞いたことないが・・・
787:デフォルトの名無しさん
09/12/05 17:25:08
>>770
バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。
F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。
また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。
(独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、
実質ストリームとして使える)
ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。
でもコンパイラのオプションで単位をバイトに指定出来ることが多い。
788:デフォルトの名無しさん
09/12/05 18:24:30
>>785
それって単にランタイムDLLになっただけじゃ?
IDEの時はスタティックリンクなんでしょ
789:デフォルトの名無しさん
09/12/05 18:53:35
IDE経由とコマンドラインの場合とで、デフォルトの動作が違うってこと?
IDE使ったことないんで分からないけど、そういうもんなのかね
でもスタティックリンクにしたら、サイズが増えるのはいいとして
10倍以上の時間がかかるなんて、あり得るの?
790:デフォルトの名無しさん
09/12/06 02:17:44
デバックシンボルでも埋め込んであるんだろ
それに実行ファイル自体が最適化がかかってないかもしれない
環境を聞かないと何とも堪えようがない
791:773
09/12/06 08:35:45
>>788
> IDEの時はスタティックリンクなんでしょ
IDEの設定を見たら,おっしゃるとおりで,
「nagforランタイムライブラリの非共有(静的)バージョンを結合」
となっていました。ひとつ勉強になりました(汗)。
>>790
> 環境を聞かないと何とも堪えようがない
環境は……
【1つめのパソコン VAIOノート】
OS: Windows XP Home edition Ver.2002 SP3
RAM: 512MB
HDDの空き領域:Cドライブは 706MB,Dドライブは 1.92GB
Fortran Builder 5.2 は Dドライブにインストール。
【2つめのパソコン let's note ノート】
OS: Windows XP Professional edition Ver.2002 SP3
RAM: 1GB
CPU: Pentium M 1.20GHz
HDDの空き領域: Cドライブは数十GB
Fortran Builder 5.2 は Cドライブにインストール。
……です。
792:デフォルトの名無しさん
09/12/06 08:39:32
NAGのお値段を考えたら・・・おニュウPCを買うべきだとおもう
793:773
09/12/06 08:42:25
あ,【1つめのパソコン VAIOノート】の CPU は
Pentium 4 の 2.40GHzです。
794:デフォルトの名無しさん
09/12/06 19:59:53
次の行列の演算を2次元配列を用いて行うプログラムを作りたいのですが;
どなたか教えください。
[123] [13]
[ ]×[23]
[045] [46]
です。
わかりにくいのですが、2行3列と3行2列の乗算です。。
795:デフォルトの名無しさん
09/12/06 20:01:50
見づらくてすみません。。
[123] [13]
[ ]×[23]
[045] [46]
796:デフォルトの名無しさん
09/12/07 04:24:21
行列成分は実数にした。違いは無い
real a(3,2), b(2,3), o(2,2)
a(1,1) = 1.0
|
a(3,2) = 5.0
b(1,1) = 1.0
|
b(2,3) = 6.0
do j = 1, 2
do i = 1, 2
o(i,j) = 0.0
do m = 1, 3
o(i,j) = o(i,j) + a(m,j) * b(i,m)
enddo
enddo
enddo
で o が結果の2x2行列ね。習慣で(i,j)=(列、行)の番地にしてもうたけどいいやね。
そういや行列のサイズ数をいうときの行と列をよく間違えてしまうw
797:デフォルトの名無しさん
09/12/07 23:28:25
>>758
x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
上のiがすべていらない。
798:デフォルトの名無しさん
09/12/07 23:42:02
>>795
MATMUL 関数を使うんだw
799:デフォルトの名無しさん
09/12/08 08:40:35
>>798
同意w
でも知らないうちにコードミスで転置行列にしてしまうことがあるw
800:デフォルトの名無しさん
09/12/08 08:58:02
do 800 i = 1, 800
write(*,*) '800 get'
800 continue
801:デフォルトの名無しさん
09/12/09 18:00:32
はじめてきました。
ド素人質問失礼します。
コンパイラはG95で、Fファイルで実行します。
OSはVISTAです。
N個の値(整数値0~100)の中から最大・最小・偏差値を出したくてこうしました。
DO 10 I=1,N
READ(5,*) SC(I)
MA=MAX0(SC(I))
MI=MIN0(SC(I))
10 CONTINUE
するとエラーが
MA=MAX0(SC(I))
1
MI=MIN0(SC(I))
1
に
Intrinsic'max0'at(1)must have at least two arguments
Intrinsic'min0'at(1)must have at least two arguments
と出ます。
配列を組み込み関数の引数に使ってるのが違うのかと思うのですが、配列を使えるようにする方法が何かないかが主に知りたいです。
802:デフォルトの名無しさん
09/12/09 18:03:53
>>801
すみません、、、
改行でずれました、、、
MA=MAX0(SC(I))
___1
MI=MIN0(SC(I))
___1
です。
803:デフォルトの名無しさん
09/12/09 18:10:43
MAX0というのがどういう関数なのか知らないが、
MAXと同じなら
MA = MAX( MA, SC( I ) )
MAは要初期値。
配列に全部読み込んでから最大値を求めるなら
MAXVAL( SC )
804:デフォルトの名無しさん
09/12/09 18:13:48
>>801
関数が要求する引数の数が少なくとも2個だからじゃない?最も大きい(小さい)ものを返せ、という
関数なんだし。配列の要素は配列じゃないよ(OOPならそれもアリだろうけど)。
その前に折角g95を使っているのなら、F77式の書き方はするべきではない。
URLリンク(homepage.mac.com)
805:デフォルトの名無しさん
09/12/14 01:07:11
フォートランを研究室で指定されて使おうとしてるんですけど
URLリンク(www.salfordsoftware.co.uk)
のどこからダウンロードするのかみつからないんですけど教えてくれますか?
あとフォートランは遺産が多いと聞きましたがうちの研究室は転用が禁止らしいのですが
フォートランの意味はあまりないということでしょうか?
簡単な質問ですがお願いします
806:805
09/12/14 02:35:45
なんとかなりそうです
スレ汚し失礼しました
807:デフォルトの名無しさん
09/12/14 05:06:18
ああ、Fortran依存症がまたひとり・・・・いらっしゃい!
808:デフォルトの名無しさん
09/12/14 10:09:27
>>805
転用禁止は、遺産うんぬんの前に、「理解して勉強しろ」ということだろう。
809:デフォルトの名無しさん
09/12/14 17:32:48
結局わからなくてゼミの先輩にインストールするためのプログラム(ftn77pe.exe)を貰ったんですが
64ビットバージョンのwindowsでの非互換性のためプログラムまたは機能である~~を開始または実行できません
ソフトウェア製造元に問い合わせて64ビットWindows互換バージョンが利用可能であるかどうか確認してください
とでました。OSはwindows7です。7に対応していないんでしょうか?
こういった場合どういう解決策がありますか?お願いします。
810:デフォルトの名無しさん
09/12/14 20:45:06
今、浮動小数点例外を握りつぶす処理を入れてるんですが、
処理を入れた部分以外のところをコンパイルオプションでトラップしたいです。
が、オプションを入れると既に処理を入れた部分の判別条件で引っかかってしまいます。
未処理の部分だけトラップしたいんですが何かいい方法はないでしょうか。
811:デフォルトの名無しさん
09/12/14 23:06:15
サイトを隅から隅まで探してもfortranをダウンロードするページみつけれませんでした・・・
64ビットのがあるんでしょうか
812:デフォルトの名無しさん
09/12/14 23:34:04
>>810
トラップって何?
具体的にどうしたいのか分からないけど、ソースの或る特定の部分を無視して
コンパイルしたいのであれば、プリプロセッサを使ってみたら?
813:デフォルトの名無しさん
09/12/14 23:50:42
>>810
CALL IEEE_SET_HALTING_MODE(云々)
あたりでなんとかならんか?
Fortran2003の機能だが、最近のコンパイラはサポートしているので・・
814:デフォルトの名無しさん
09/12/16 22:03:20
Sun solais10のSunStudio12(SunFortran)で書かれたプログラムが動かなくて困っています
浮動小数点例外でcore吐いて停止していますが
ファイルがバッファに残ったままとまっている為
どこまで進んでから落ちたのか良く判りません
環境変数かなんかでバッファサイズを0若しくは充分小さく出来ないでしょうか?
ソースをゴタゴタと生成している部分がありコンパイルが容易ではなく
出来ればflushを挟んでの再コンパイルを避けたいのです
intelのfortranなら出来るチックな話はぐぐったら出てきましたが......
815:773
09/12/17 23:42:36
NAG Fortran Builder 5.2 で,
program main
print *, 'Hello World !'
stop
end
のクイック実行のコンパイル&リンクに12分50秒もかかった現象について,先週の土曜日に
ここで質問をした者ですが,パソコンにインストールしているウイルス対策テスト
F-Secure Internet Security 2010 のメーカーであるエフセキュアのサポートセンターにも
問い合わせたところ,解決案を幾つか提示されました。
結局それらのうちの1つの『 ディープガードの無効化 』をすることで,
コンパイル&リンクにかかる時間が通常どおり大幅に短縮されて,約10秒で
終わるようになりました。
アドバイスを下さった方々,ありがとうございました。
816:773
09/12/19 11:37:10
↑のその後です。
昨日,エフセキュアのサポートセンターとメールでやり取りし,
「『 ディープガードの無効化』をするとセキュリティレベルが下がるので,
その代わりに『高度なモニタリング』を無効化する。
それで駄目なら『ファイルを除外スキャン』でスキャン対象から除外したい
ファイル・フォルダを選択する」
という対処方法に変わりました。
これで F-Secure Internet Security 2010 の『 ディープガードの無効化』と
『高度なモニタリング』の両方が有効な環境下での NAG Fortran Builder の
動作の正常化が確保できました。
817:773
09/12/19 11:43:02
↑書き間違えました。
(誤)『 ディープガードの無効化』と『高度なモニタリング』の両方が有効な環境下
(正)『 ディープガード』と『高度なモニタリング』の両方が有効な環境下
818:デフォルトの名無しさん
09/12/19 13:30:00
とりあえず、おめ!
なるほど、そっちか
819:デフォルトの名無しさん
09/12/19 15:41:50
セキュリティかよw
確かに最近のセキュリティソフトは色々とガチガチだからな
820:デフォルトの名無しさん
09/12/22 16:23:38
なるほどー
821:デフォルトの名無しさん
09/12/26 23:08:05
ググってもなかったんで、質問させてください。
fortranのプログラムみてると、ccccccc ~~ ccccccc
って感じでcに囲まれてる文字があるんだけど、このcの意味ってなんなんですか?
すいません。教えてください
822:デフォルトの名無しさん
09/12/27 00:28:15
>>821
1桁目が 'C' かアスタリスク '*' の行はコメント行。
だから 'CCC…' はプログラム上は意味はないけど、
人間が読む時に処理の内容や区切りをわかりやすくするため等によく使われる。
823:デフォルトの名無しさん
09/12/27 00:32:45
>>822
ありがとうございます。
コメントは「!」とどこかでみたので、cは違うのかと思ってました。
本当にありがとうございました
824:デフォルトの名無しさん
09/12/27 04:29:33
>>823
! で始まる部分をコメントとするのは,Fortran 90 以降の自由形式で書かれるソースコード。
この場合は ! は必ずしも1桁目でなくても良い。
2桁目以降でも良いし,実行分の後ろに付けるのでも構わない。
一方,1桁目が C か * で始まるのをコメント行とするのは,FORTRAN 77 の固定形式ソースコード。
825:デフォルトの名無しさん
09/12/27 09:11:20
↑[訂正]
× 実行分
○ 実行文
826:デフォルトの名無しさん
09/12/27 22:37:19
>>824
丁寧にありがとうございます。
すごい勉強になりました!
今日、入門用の本を買ってきたので、頑張って勉強したいとおもいます。
827:デフォルトの名無しさん
10/01/09 08:29:13
すみません,ちょっとスレ違いな質問で申し訳ないのですが‥‥
ここにならご存知の方が誰かいるかもしれないと思ったので,
質問させていただきます。
Fortran の後継言語として Sun が開発中だった Fortress は
今はどうなってるんでしょうか? お蔵入りなのでしょうか?
828:デフォルトの名無しさん
10/01/09 09:14:52
とりあえずサイトはここ
URLリンク(projectfortress.sun.com)
829:デフォルトの名無しさん
10/01/09 14:04:39
>>828
ありがとうございました。
830:デフォルトの名無しさん
10/01/09 17:33:31
オラクルに買収されたけど、Sunの手から離れたから関係ないのかな?
831:デフォルトの名無しさん
10/01/09 20:11:52
質問です。あるファイルが存在したらそのファイルをread、
存在しなければ別の処理をする、という分岐を作りたいのですが
どうすればよいでしょうか?ファイルの有無で0か1を返すような
関数があれば手っ取り早いんですが、見つかりませんでした。
832:デフォルトの名無しさん
10/01/09 21:03:52
>>831
stat() を使ってゴニョゴニョとできんじゃろうか?
833:デフォルトの名無しさん
10/01/09 21:22:06
open文でerr=指定子を使うのがfortran流だろう。
834:デフォルトの名無しさん
10/01/09 23:28:24
INQUIRE(FILE='hage.dat', EXIST=LHOGE)
835:デフォルトの名無しさん
10/01/10 18:43:43
>>832-834
最後のinquire使うのが王道かのぅ。
logical lhoge
character*100 fname
do i = 1, 100
write(fname,'(i5.5,''.dat'')') i
inquire(file=fname,exist=lhoge)
if (lhoge) then
read.....
else
nanka....
endif
enddo
とか、いろいろ。
ERR子はたしか返す値がシステムごとに違った記憶があるから怖い。
・・・気のせいな気もするけどね。
836:デフォルトの名無しさん
10/01/12 17:11:51
いままでコンパイルを行うとき、サブルーチンとmainファイルを同じディレクトリに置き
* ifort.f90 でコンパイルしていたのですが,
サブルーチンを別ディレクトリにし,コンパイルするにはどうしたらよいのでしょうか。
たとえばサブルーチンをSubというディレクトリに置き、
mainファイルをMainというディレクトリに置いて実行ファイルを作るにはどうしたらよいのでしょうか。
837:デフォルトの名無しさん
10/01/12 20:17:18
ifort90 main.F90 Sub/sub1.F90 Sub/sub2.F90 ...
でいいんじゃね?あと Makefile 書いちゃうとかかな。
何をムズカシイと思っているのかがよく分からない。
838:デフォルトの名無しさん
10/01/13 15:03:32
>>837
そうしたいのですが,mainファイルをコンパイルしようとするとサブルーチンが定義されていないと言われ,
サブルーチンをコンパイルしようとするとmainファイルがないとエラーがでるんです
839:デフォルトの名無しさん
10/01/13 15:47:14
>>838
ifort90ってどこのコンパイラ?
-c付けて.oファイルがどこにできるか確認してみたら?
intel fortranだが普通にカレントディレクトリに全部の.oが出てくるけど
840:デフォルトの名無しさん
10/01/13 17:41:05
unixでのコンパイルに耐えられずに、VisualStdioとintelのコンパイラを教官殿に買ってもらった俺と比べてみんな偉いな
841:デフォルトの名無しさん
10/01/13 22:27:24
>>839
> ifort90ってどこのコンパイラ?
ifort のことだろうけど、OS は何なんだろうな。どうにも挙動が変態だ。
Windows だと変な動きするとかあるんだろうか?
842:デフォルトの名無しさん
10/01/14 02:46:42
前に、担当の人が気を利かせてaliasというかいくつかオプションをつけたコマンドを作ってくれていて
それが他のと干渉して・・という事があった気がするけど、そのifort90 もそれの類の匂いがするが、
いかがか?
843:デフォルトの名無しさん
10/01/14 17:02:34
>>838皆様のレスのおかげで解決できました、ありがとうございます
ifort90はifortの打ち間違えです、申し訳ない
844:デフォルトの名無しさん
10/01/15 13:52:51
なんという・・・w
845:デフォルトの名無しさん
10/01/15 18:18:14
打ち間違え?
じゃあ command not found って出てたはずだよな・・・
まぁ、頑張ってくれや
846:デフォルトの名無しさん
10/01/16 18:52:40
すみません
インテル Visual Fortranコンパイラ9.1を使用したいのですが、インストール後
サンプルプログラム(int_sin.f90)をコンパイルしようとしたのですが、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'
Microsoft Visual C++ 2008 Express Editionはインストール済みです。
OSはVista Home premium32bitです。
どなたか助けてくださいorz
847:デフォルトの名無しさん
10/01/17 01:04:43
>>832,833,834,835
大変遅くなりましたがありがとうございました。
inquire文で行けそうです。
もう一つ質問ですが、動的配列を宣言するときにある次元だけ固定って
できますか?まあ別にそうする必要は無いといえばないんですが、
宣言部を見ただけでどこが動的である必然性があるのか分かった方が
自分としてはスッキリするので。ちなみに
DOUBLE PRECISION,allocatable::a(10,:,:)
…
allocate (CS(10,10,10))
とやったら金比羅にしかられました。
よろしくおねがいします。
848:デフォルトの名無しさん
10/01/17 04:18:14
>>847
> DOUBLE PRECISION,allocatable::a(10,:,:)
> …
> allocate (CS(10,10,10))
>
> とやったら金比羅にしかられました。
CS ってどこで宣言してんだ?
どう呵られたのかはしらんけども、こっちでも呵られた。
ということで無難に
DOUBLE PRECISION,allocatable::a(:,:,:)
としておけば良いと思う。それで問題になることは無いだろうから。
849:デフォルトの名無しさん
10/01/17 04:52:48
>>848
すいません、CSじゃなくてaですね。中途半端にコピペしてしまった…
やっぱそうするべきみたいですね。コメントでもつけてそうしておきます。
ありがとうございました。
850:デフォルトの名無しさん
10/01/17 17:46:26
一瞬、金比羅って何って思ってしまった
中国系の上司の名前かとw
851:デフォルトの名無しさん
10/01/18 17:38:45
下記のようにimplicit none 付きで、
算術関数 cos 及び derf に関する実験をしているのですが、
cosはreal(8) derf のような宣言が必要ないのはなぜでしょうか。
derfに関しては宣言をしないと、コンパイラ(pgf95 ,7.2-4)に文句を言われます。
program main
implicit none
real(8) derf
real(8) x
x = dble(0.7)
print*,derf(x)
print*,cos(x)
end
よろしくお願いいたします。
852:デフォルトの名無しさん
10/01/18 22:53:26
>>851
COSはFORTRANの規格で規定されているINTRINSICな関数で、COSは総称名になっている。
引数の型で関数の値の型も決まる。
ただ、66時代の互換性などから、個別の型をあらわに指定するDCOSなどもある。
しかし77時代以降は総称名を使うのが推奨されていたはず。
さて、ERFの方だがこれはFORTRANの規格にはないベンダーの提供する独自関数である。
したがってその実装や用法はベンダーに依存する。
たとえばINTEL FORTRANの場合は、REAL(8)の宣言無しにDERFが使える。
PGIでは、外部関数扱いで、関数の型を宣言しておく必要があるのだろう。
なお、ERFというのはUNIX系の多くのFORTRANで使えた関数で、半ば標準化している。
Fortran2008ではそれらのエラー関数、ベッセル関数などが正規の規格に入ることになっている。
853:851
10/01/19 00:21:02
>>852
大変分かりやすい解説をしていただき、ありがとうございました。
derfもintrinsicな関数だと思い込んでいました。
854:デフォルトの名無しさん
10/01/19 13:55:21
>>852
>しかし77時代以降は総称名を使うのが推奨されていたはず。
マジ?
律儀にD*使ってた・・・
855:デフォルトの名無しさん
10/01/19 14:00:42
人のデータ使う場合、単と倍精度が入れ乱れるし・・・
普通にd* で明示してもいいと思うけどな。
単精度に揃えたい!とかはコンパイルオプションで出来るし。
856:デフォルトの名無しさん
10/01/19 21:03:41
やっぱ総称名って使わないほうがいいの?
857:デフォルトの名無しさん
10/01/19 21:21:43
インテル Visual Fortranコンパイラ9.1を使っているんですが、インストール後
サンプルプログラム(sample.for)をコンパイルしたところ、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'
このため、.objファイルは出力されるのですが、exeファイルが出力されません。
よろしくお願いします。
858:デフォルトの名無しさん
10/01/22 23:41:44
>>857
MSのSDK入れろ
859:デフォルトの名無しさん
10/01/24 21:39:26
"2500/500"のような文字を読み込んで、
2500 / 500 = 5
を計算したいのですが、下のコードでは
"/"が読み込めないみたいです。
改善方法を教えていただけないでしょうか?
できれば、"2500"や"500"の部分を任意の桁数でできると幸いです。
コンパイラはG95です。
IMPLICIT NONE
CHARACTER :: A*5, B, C*5
REAL*8 :: Num1, Num2
PRINT*, "Input"
READ*, A, B, C
PRINT*, "A=", A, " B=", B, " C=",C
READ(A(1:), *) Num1
READ(C(1:), *) Num2
PRINT*, Num1/Num2
END
よろしくお願いします。
860:デフォルトの名無しさん
10/01/24 22:12:58
>>859
FortranのI/Oでは「/」は改行を意味している。
よって文字と解釈していなのだろう。
前にもそんな事を聞いていた奴がいたような・・・
回避する方法は、わからん。
文法書のI/Oのところをじっくり読んで自分で考えてくれ。
861:860
10/01/24 22:27:59
>>859
しらべたw
READ文にFORMAT指定をすればよろし。
READ '(3A)', A,B,C
とすれば多分おk
862:859
10/01/24 22:57:22
>>860
"/"を文字として認識することができました。
ありがとうございます。
863:860
10/01/25 00:38:43
>>859
おk。
任意の桁数でやるには
INTEGER :: kslash
CHARACTER(128) :: text
READ '(A)', text
kslash = INDEX(text, '/')
READ( A(1:kslash - 1), * ) num1
READ( C(kslash + 1:), * ) num2
という感じだろう。TRIMでtextの尻の空白を切ったほうがいいかもしれん。
むろん任意と言ってもREALの範囲内の数だが・・
864:デフォルトの名無しさん
10/01/25 00:39:52
訂正www
READ( text(1:kslash - 1), * ) num1
READ( text(kslash + 1:), * ) num2
865:859
10/01/25 07:35:21
>> 863
おお!重ね重ねありがとうございます。
無事に作ることができました。
866:デフォルトの名無しさん
10/01/25 20:32:37
初心者すぎて笑われるかもしれませんが平面上の3点の座標で三角形つくるときの面積を求めたいのですが
当然ながらヘロンの公式でやりました
辺の長さが出てる場合であればうまくいくのですが長さの計算も入れようとするとどう座標を扱えばいいかちんぷんかんぷんで
X(I)とY(I)で1~3まで動かしかたがわからないというか…その考えが間違ってるのかもわからないです
867:デフォルトの名無しさん
10/01/25 20:57:24
>>863
Fortran兄貴降臨!いつもお疲れさまっす。
ただ、Fortranの思想的に>>859みたいなことは、やるべきではないとは思う。
perlでもpythonでもシェルでもいいが、Fortran実行ファイルを適当なラッパーで
くるむほうが、素直で良いと思う。
868:デフォルトの名無しさん
10/01/25 21:11:49
>>866
君なりのソースをここに書けば直して貰えると思うよ。
869:デフォルトの名無しさん
10/01/25 21:54:30
>>866
数学がわからんの?
Fortranがわからんの?
上の方も書いてるけど、わかってるところまでのソースを書くとよろし。
870:デフォルトの名無しさん
10/01/26 01:04:31
>>867
Fortranでパーサー書こうぜ!
再帰があるから、77時代ほど難しくないはず・・・
871:デフォルトの名無しさん
10/01/26 14:19:14
>>870
とてもうろ覚えだけど・・・
DECのVMSってFortranでかなりの部分は書かれていたような。
IMEというか英語を日本語に変えるやつは堂々Fortranだったような。
・・・とてもうろ覚えだけど。
872:デフォルトの名無しさん
10/01/29 08:26:49
はじめまして。初心者ですがよろしくお願いします。
突然ですが、この問題を解ける方いらっしゃいますか。
学校の宿題なのですが、どうしても分からないのでここにきました。
お願いします。
問題こちら↓
階乗 n! を計算する関数を作成し,
順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,
組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成しなさい。(問題終わり)
よろしくお願いします。
873:デフォルトの名無しさん
10/01/29 18:29:35
Permut[n_, r_] := Pochhammer[1 + n - r, r]
Permut[n, r]/r!
874:デフォルトの名無しさん
10/01/29 19:47:54
オープンしている特定のファイルのバッファを
フラッシュする方法はありますか。コンパイラはifortです。
出来ればクローズしないでフラッシュしたいのですが、
どうしてもバッファにたまってしまいます。
よろしくお願いします。
875:デフォルトの名無しさん
10/01/30 01:06:31
872の丸投げぶりはすごいな。
途中まで書いたソースコードでもここに貼ったら?
876:デフォルトの名無しさん
10/01/30 01:14:32
C/C++の宿題スレが丸投げだからその流れがこちらまで来たか
877:デフォルトの名無しさん
10/01/30 10:34:15
初秋の青空を連想するくらいのすがすがしい
丸投げw
878:デフォルトの名無しさん
10/01/30 16:23:48
>>874
CALL FLUSH(ユニット番号)
879:874
10/01/31 04:55:24
できました! >>878
ありがとうございます!
880:デフォルトの名無しさん
10/01/31 21:11:44
プログラムで値を入力して計算結果を得たいのですが、結果を出力するとNaNが出てしまいます。
NaNが出力される原因だけでもいいのでわかる方いらっしゃったら宜しくお願いします。
URLリンク(www.dotup.org)
長いのでろだに上げました。テキストファイルですみません…
881:デフォルトの名無しさん
10/01/31 21:24:10
丸投げ、流行ってるな。
882:デフォルトの名無しさん
10/02/01 09:17:59
ifort -g -check all traceback
とかでNaNにかぎらず異常値が発生したらその行を教えてくれるような実行ファイルをつくってくれる
オプションがあるはずだから、マニュアルよんでみよう。
>>878
それ、よさそうだね。
ログ生成がゆっくりの場合、あるていど溜るまでディスクには書かれないから不便な事がおおかったけど、
いろいろと助かりそうだ。参考にするよ!
883:デフォルトの名無しさん
10/02/01 18:38:34
へぇそんなんあったんだ
884:デフォルトの名無しさん
10/02/02 00:00:51
>>880
66スタイルで何やってるかわからんなw
NUMPACK使っているところを見ると、富士通、名大・九大・京大あたりの流れか。
ライブラリ関数が無いから実行することもできないしもっと詳しく書いてくれないと誰も答えられないだろう。
まぁ定数や関数の一部が単精度のままなので倍精度にしている意味がない可能性が高い。
その辺かな?w
885:デフォルトの名無しさん
10/02/02 00:04:41
>>882
FLUSHはFortran2003で導入された命令。
IntelのHELPはF2003命令がいまいち入ってなかったりしてアレなので、
文法解説書を買って学ぶがよろしい。
886:デフォルトの名無しさん
10/02/06 09:14:48
>>885
そうなんだ。何年か前に g77 でサブルーチン版の flush をつかったことあがった。
今確認したら、やっぱり使えた。因みに g95 だと関数版の flush が使えた。関数
版だと戻り値でエラーチェックできるから有り難い。
887:デフォルトの名無しさん
10/02/07 15:54:15
FFTについて質問させてください。
大学の講義で、離散フーリエ変換のプログラムについて勉強中です。
講義の最後に、「バイオリンの音のデータをフーリエ変換し、
フーリエ変換した結果を横軸:周波数、縦軸:振幅としてグラフ化せよ」
という課題が出ました。
配布されたデータの読み込みを試みたのですが、どう読み込ませたらいいのかが分かりません。
配布されたデータは2列で構成されており、左の列が時刻データ、右の列は音の振幅を表しています。
↓にプログラムを書きます。よろしくお願いします。
888:デフォルトの名無しさん
10/02/07 15:56:08
--前半--
program fft
implicit none
!========================================================================
include "fftw_f77.i"
integer*8 ::plan
!========================================================================
!サンプリング条件の設定
!サンプリングデータ数N , aの数Ma , bの数Mb
!サンプリング間隔dt = 1/44100 [s] , サンプリング周波数 f0 = 44100 [Hz] , N, Ma, Mb
!周波数分解能df=1/(N・dt)
integer,parameter:: N=10000,Ma=5000,Mb=4999
real(8),parameter:: df=44100/dble(N) , dt=1.0d0/44100
!入力波形のデータの設定fin=100Hz
real(8) ::fin,a0
!作業用の変数
complex(8):: in(N),out(N),c(0:n-1)
integer ::i
real(8) ::t,a(0:Ma),b(1:Mb),x,y
889:デフォルトの名無しさん
10/02/07 15:57:26
--後半--
!入力データの設定
write(*,*) 'Input data:'
open(unit=11,file='violin.dat')
do i=1,N
※ここが分かりません!※
end do
close (11)
!========================================================================
!ライブラリを利用したフーリエ変換(作業領域作成と実行)
call fftw_f77_create_plan(plan,N,FFTW_FORWARD,FFTW_ESTIMATE) !準備
call fftw_f77_one(plan,in,out) !実行
!========================================================================
!結果の変換
c(0:N-1)=out(1:N)
a(0)=c(0)
a(1:Ma)=dble( c(1:Ma)+c(N-1:N-Ma:-1) )
b(1:Mb)=dble( (c(1:Mb)-c(N-1:N-Mb:-1))*(0.0d0,1.0d0) )
!========================================================================
!結果の出力
write(*,*) 'Output data after forward FFT:'
open(unit=22,file='ab-.csv')
open(unit=21,file='c-.csv')
do i=1,N
write(21,'(i6,'','',1pe16.8,'','',1pe16.8)') i,out(i)
end do
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') 0.0,a(0),0.0
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') (i*df,a(i),b(i),i=1,Mb)
if (Ma/=Mb) write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') Ma*df,a(Ma),0.0
close (21)
close (22)
890:デフォルトの名無しさん
10/02/07 15:59:09
--ラスト--
!========================================================================
!フーリエ変換(作業領域消去)
call fftw_f77_destroy_plan(plan)
end program fft
891:デフォルトの名無しさん
10/02/07 19:29:00
>>889
クラスの友達に聞いた方が早いよ。
892:デフォルトの名無しさん
10/02/07 20:20:13
むしろ、データファイルの中身が必要なんじゃね?
893:デフォルトの名無しさん
10/02/07 20:37:52
>>891
きっとボッチなんだよ。
894:デフォルトの名無しさん
10/02/07 22:48:06
そうなんすよ。
彼女と遊びすぎて留年しちゃったもんで・・・。
895:デフォルトの名無しさん
10/02/07 23:02:40
お前はこのスレを敵にまわした。
896:デフォルトの名無しさん
10/02/07 23:10:16
>>894
教えようと思ったがやめた
897:デフォルトの名無しさん
10/02/08 03:48:18
自分が今いるサブルーチンの名前を取得する方法ってありますか?
デバッグするときにどのサブルーチンで止まってるか確かめたいんですが。
898:デフォルトの名無しさん
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を呼びまくるという形ではできる。