[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/07 02:37 / Filesize : 345 KB / Number-of Response : 920
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれFORTRAN(超初心者用)その4



1 名前:デフォルトの名無しさん [2009/01/24(土) 18:32:01 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。


●前スレ
くだすれFORTRAN(超初心者用)その3
pc11.2ch.net/test/read.cgi/tech/1196384126/

くだすれFORTRAN(超初心者用)その2
pc11.2ch.net/test/read.cgi/tech/1164121236/

くだすれFORTRAN(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1138063703/


●関連スレ
FORTRAN W
pc11.2ch.net/test/read.cgi/tech/1163319215/


734 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:44:21 ]
>>729
> ちなみに直前でそれぞれの中身を表示したところ、
これは本当に直前なのか? 正常に動く一回前の値じゃないのか?

735 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:56:50 ]
>>729
多分、ただのゼロ割だろう。

Intelのコンパイラのバージョンはいくつかな?
新しい奴ならNaNにして続行するが、8.1とか古い奴はFloating Invalidで即死する。

状況的には>>734の言っていることが正しいであろう。



736 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 10:33:12 ]
>>730
倍精度は文字どおり精度を上げるのに有効だけど・・・
単精度でコケて倍精度で動く奴は、モデルを間違えてるかコードがおかしいかのどちらかだから
根本的には解決にならないね。

737 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 12:05:49 ]
微妙なケタ落ちを救済する事が出来るが、ケタ落ちが発生しない
アルゴリズム/コードに代える方がまっとうな道。

738 名前:729 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:58:08 ]
出力のバッファリングで一回前を見ている可能性が有る。
デバッガで調べた方が良い。

740 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:15:31 ]
>>739
じゃ、出力先をファイルか標準エラー出力に切り替えてみるのもありだな。
そんで結果を見る。デバッガなんて使いこなすまでに時間が掛かりそうだし。

741 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 00:05:11 ]
バッファリングはファイルの方が積極的。

もうひとつの可能性:
floating invalidは表示ルーチンで出ている。

742 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 00:27:10 ]
>>738
あとの安直な手は別のコンパイラで実行してみることかな。
g95あたりで一回やってみればいいのでは。





743 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 06:49:04 ]
バファリンの半分はやさしさでw
バッファリングの半分は嘘のデータで出来てます。

あとは・・・Write 文つかったデバッグの場合でかつ元のをUnrollingしていると
Write文挿入する・しないで演算順序が変わることがあるから
UnrollingやできればInlineを抑制したコンパイルをすることをお薦めしてみるテスト

744 名前:デフォルトの名無しさん [2009/12/01(火) 05:51:21 ]
Fortranをはじめたばかりです
*
***
*****
*******
を描けという問題で、1.2.3行目のスペースの出し方がわかりません・・・
$を使えばできるのかと思いましたが、わかりません
どなたか教えていただけないでしょうか?


745 名前:744 mailto:sage [2009/12/01(火) 05:52:09 ]
スペース消えてる・・・

>>744はピラミッド形です

746 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 06:15:40 ]
あら、一個
enddo -> endif
にしとかんといかんかったね

748 名前:744 mailto:sage [2009/12/01(火) 06:26:33 ]
>>746
早速のレスありがとうございます

書いてくださったのを参考になんとか書けました><

749 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 09:47:59 ]
お、かけましたかw
if の行に then がなかったりしたけど、
えがったえがった

750 名前:デフォルトの名無しさん [2009/12/01(火) 23:10:57 ]
FORTRAN初心者です。。

1000以下の整数のうち、7で割ると2余る数を全て合計するプログラムをつくりたいのですがわかりません…
どなたか教えてください。

751 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 03:44:10 ]
if (mod(i,7) .EQ. 2) then
s = s + i
write(*,*) i, s
endif

途中経過表示はいらないけどね。



753 名前:sage [2009/12/02(水) 07:28:33 ]
>>751-752

ありがとうございます。
本当に助かりました
自分でやったのでは実行できなかったので;;
また機会があればよろしくお願いします。

754 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 13:45:03 ]
dot_productは引数に同じ要素数の配列しかとれない。
x2はスカラーなので引数にできないですよ。
ちなみにdot_productが返すのはベクトルの内積を求めるので、戻り値はスカラー。

・・・とfortran歴1年の俺がいってみる

757 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 14:29:43 ]
前から思ってたんだけど、dot_productみたいなデフォで用意されてる関数を使うのって、
ベクトル化などの高速化・最適化を妨げるリスクはないと思っていいよね?
それとも、doループをいちいち書いた方がやっぱり速くなったりする?

758 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/12/03(木) 21:42:09 ]
>>756
なるほど・・・ご指摘ありがとうございます。
では行列の4乗はどう書けばよいのでしょうか。。

760 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:15:52 ]
>>759
そういうサブルーチンを自作すれば良い。幸いなことにFortran90からは再帰も使えるしね!

761 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:27:53 ]
>>757
たぶん弊害はない。たぶん、なのは実装によるので。ベクトルがでかくなると、
出来合いのルーチンの方が速いね。そういうチューンしてると期待していいとおもう。
3次元くらいだったら自分でループ書くか、
naiseki=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
みたく成分を明示したほうがいいことがおおいけど。

764 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:29:50 ]
>>762
複素数扱うならFortranのがいいよ。
んで、3x3行列なら (-1)^(i+j) * (小行列の行列式)_{j,i}/(全体の行列式)
を明示した方がいいよ。

765 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 11:04:54 ]
>>763
thx
そのうち自分で試してみようかな

766 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 19:50:53 ]
fortranで複数ファイルの結合ってどうやってやればいいですか?
もちろん中身を読み込んで新しいファイルに書き込むなら出来ますが、
cat みたいな感覚で使える命令ってあるでしょうか?

767 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:14:56 ]
>>766
system() を使って cat で繋げるとか?

Fortranが内部で持っている方法は聞いた事が無いです。

768 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:47:25 ]
>>758
G=6.673*(10**(-11))
この辺は
G=6.673E-11
とするべし。

あと77なのか90なのか判然としないが、暗黙の型を破る気ならIMPLICIT NONEを
つけておくほうが吉。

>>766
catだって中では読んで書き出しているだけだろうに

769 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:54:43 ]
>>768
> >>766
> catだって中では読んで書き出しているだけだろうに

そういえばバイナリファイルをformattedで開く場合ってケッコウ難儀なことになりそうな気がして来た。
catはその辺はクリアしてるけど(でないとバイナリファイルの結合なんて出来ないよね?)。

自分だったらfortranでやらずにシェルでも書いてそっちで済ます。WindowsならPerlか何かを使うかな?
dosのコマンドで出来たっけ?やりたいことによって道具を使い分けるのが良いと思うけど。

770 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:00 ]
>>766
catと等価な、つまりバイナリレベルでの結合は無理じゃない?
fortranって、せいぜいレコードを扱うくらいで、バイトレベルでの操作は普通しないし、そもそもできないと思うけど

771 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 03:50:13 ]
いちおうAppendで既存ファイルに追記することはできるけどバイナリだと
追記するデータを別なファイルから読み込む段階でコケる事多々アリで面倒だよね。
Bit 単位での操作って Fortranで出来ない&やりにくい典型例だ。

772 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 05:12:47 ]
FORTRANやCOBOLのような古い言語は、
ファイルはレコードの集合という考え方をするから、
前提のないバイト列は扱いにくい。




773 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 10:00:55 ]
RAM 少なくね?

775 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 10:02:09 ]
>>758
数字を規格化しようね

776 名前:773 mailto:sage [2009/12/05(土) 10:51:47 ]
>>774
NAGのホームページには 「メモリ:256MB以上(推奨 512MB以上)」 と
書いてあったので,大丈夫かなと思ったんですが,
やっぱり足りないですかね。

他に Fortran Builder 5.2 のユーザーさん,いませんか?
RAMはどれくらい積んでますか?


777 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:17:51 ]
>>773
キーワード補完だけじゃ、あってもなくてもほとんど変わらんよなぁ・・・
もっとリッチなFortranのIDEが早くでないものか

778 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 13:20:00 ]
>>776
その前に今どき512MBというのがなあ。増設はできないの?

779 名前:773 mailto:sage [2009/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 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:01:23 ]
メモリが足りないせいで異常に遅いときは、
大量にスワップが発生しているせいなので、
一定量メモリを増やせば急に早くなるものだが、
512MBでもその有様とはすごいね。
fortran 77でよければ open watcom fortranとかいいんでない?

782 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:06:13 ]
>>779
まさかとは思うが、メモリの空きは大丈夫なんだよね?
動画のエンコしながらコンパイルとかはさすがにないだろうけどw



783 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:15:19 ]
コマンドラインからコンパイルとかできないの?
IDEが重いのかもしれない。

784 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:20:09 ]
あと仮想メモリを増やしてみる。無駄かな?

785 名前:773 mailto:sage [2009/12/05(土) 16:01:16 ]
>>781-784
レスありがとうございます。>>783さんのレスを見て調べたら,
コマンドラインからコンパイルする方法が NAGのサイトの
FAQページに載っていました。
今度は数秒でコンパイルできました!

# しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して,
   コマンドラインからのときはわずか 18KBとずいぶん小さくなりました
   ちなみに,g95でコンパイルしたときは 339KBでした。

本当にありがとうございました m(_ _)m

786 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 16:37:57 ]
もしかしてNAGが駄目駄目ってオチなのかな?
でもそんな悪い評判は聞いたことないが・・・

787 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 17:25:08 ]
>>770
バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。

F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。
また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。
(独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、
実質ストリームとして使える)
ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。
でもコンパイラのオプションで単位をバイトに指定出来ることが多い。



788 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:24:30 ]
>>785
それって単にランタイムDLLになっただけじゃ?
IDEの時はスタティックリンクなんでしょ

789 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 18:53:35 ]
IDE経由とコマンドラインの場合とで、デフォルトの動作が違うってこと?
IDE使ったことないんで分からないけど、そういうもんなのかね

でもスタティックリンクにしたら、サイズが増えるのはいいとして
10倍以上の時間がかかるなんて、あり得るの?

790 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 02:17:44 ]
デバックシンボルでも埋め込んであるんだろ
それに実行ファイル自体が最適化がかかってないかもしれない
環境を聞かないと何とも堪えようがない

791 名前:773 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 08:39:32 ]
NAGのお値段を考えたら・・・おニュウPCを買うべきだとおもう




793 名前:773 mailto:sage [2009/12/06(日) 08:42:25 ]
あ,【1つめのパソコン VAIOノート】の CPU は
Pentium 4 の 2.40GHzです。


794 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 19:59:53 ]
次の行列の演算を2次元配列を用いて行うプログラムを作りたいのですが;
どなたか教えください。

[123] [13]
[ ]×[23]
[045] [46]

です。
わかりにくいのですが、2行3列と3行2列の乗算です。。

795 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 20:01:50 ]
見づらくてすみません。。
[123] [13]
[   ]×[23]
[045] [46]



796 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:42:02 ]
>>795
MATMUL 関数を使うんだw



799 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:40:35 ]
>>798
同意w
でも知らないうちにコードミスで転置行列にしてしまうことがあるw

800 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 08:58:02 ]
do 800 i = 1, 800
  write(*,*) '800 get'
800 continue

801 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:03:53 ]
>>801
すみません、、、
改行でずれました、、、
MA=MAX0(SC(I))
___1
MI=MIN0(SC(I))
___1
です。




803 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:10:43 ]
MAX0というのがどういう関数なのか知らないが、
MAXと同じなら
MA = MAX( MA, SC( I ) ) 
MAは要初期値。

配列に全部読み込んでから最大値を求めるなら
MAXVAL( SC ) 


804 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 18:13:48 ]
>>801
関数が要求する引数の数が少なくとも2個だからじゃない?最も大きい(小さい)ものを返せ、という
関数なんだし。配列の要素は配列じゃないよ(OOPならそれもアリだろうけど)。

その前に折角g95を使っているのなら、F77式の書き方はするべきではない。

homepage.mac.com/galois21/fortran/ref.html

805 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:07:11 ]
フォートランを研究室で指定されて使おうとしてるんですけど
www.salfordsoftware.co.uk/
のどこからダウンロードするのかみつからないんですけど教えてくれますか?
あとフォートランは遺産が多いと聞きましたがうちの研究室は転用が禁止らしいのですが
フォートランの意味はあまりないということでしょうか?
簡単な質問ですがお願いします

806 名前:805 mailto:sage [2009/12/14(月) 02:35:45 ]
なんとかなりそうです
スレ汚し失礼しました

807 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 05:06:18 ]
ああ、Fortran依存症がまたひとり・・・・いらっしゃい!

808 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 10:09:27 ]
>>805
転用禁止は、遺産うんぬんの前に、「理解して勉強しろ」ということだろう。

809 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:32:48 ]
結局わからなくてゼミの先輩にインストールするためのプログラム(ftn77pe.exe)を貰ったんですが

64ビットバージョンのwindowsでの非互換性のためプログラムまたは機能である〜〜を開始または実行できません
ソフトウェア製造元に問い合わせて64ビットWindows互換バージョンが利用可能であるかどうか確認してください

とでました。OSはwindows7です。7に対応していないんでしょうか?
こういった場合どういう解決策がありますか?お願いします。

810 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:45:06 ]
今、浮動小数点例外を握りつぶす処理を入れてるんですが、
処理を入れた部分以外のところをコンパイルオプションでトラップしたいです。
が、オプションを入れると既に処理を入れた部分の判別条件で引っかかってしまいます。
未処理の部分だけトラップしたいんですが何かいい方法はないでしょうか。

811 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:06:15 ]
サイトを隅から隅まで探してもfortranをダウンロードするページみつけれませんでした・・・
64ビットのがあるんでしょうか

812 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:34:04 ]
>>810
トラップって何?

具体的にどうしたいのか分からないけど、ソースの或る特定の部分を無視して
コンパイルしたいのであれば、プリプロセッサを使ってみたら?



813 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 23:50:42 ]
>>810
CALL IEEE_SET_HALTING_MODE(云々)
あたりでなんとかならんか?
Fortran2003の機能だが、最近のコンパイラはサポートしているので・・



814 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:03:20 ]
Sun solais10のSunStudio12(SunFortran)で書かれたプログラムが動かなくて困っています

浮動小数点例外でcore吐いて停止していますが
ファイルがバッファに残ったままとまっている為
どこまで進んでから落ちたのか良く判りません
環境変数かなんかでバッファサイズを0若しくは充分小さく出来ないでしょうか?

ソースをゴタゴタと生成している部分がありコンパイルが容易ではなく
出来ればflushを挟んでの再コンパイルを避けたいのです

intelのfortranなら出来るチックな話はぐぐったら出てきましたが......


815 名前:773 mailto:sage [2009/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 mailto:sage [2009/12/19(土) 11:37:10 ]
↑のその後です。

昨日,エフセキュアのサポートセンターとメールでやり取りし,

「『 ディープガードの無効化』をするとセキュリティレベルが下がるので,
  その代わりに『高度なモニタリング』を無効化する。
  それで駄目なら『ファイルを除外スキャン』でスキャン対象から除外したい
  ファイル・フォルダを選択する」

という対処方法に変わりました。

これで F-Secure Internet Security 2010 の『 ディープガードの無効化』と
『高度なモニタリング』の両方が有効な環境下での NAG Fortran Builder の
動作の正常化が確保できました。


817 名前:773 mailto:sage [2009/12/19(土) 11:43:02 ]
↑書き間違えました。
(誤)『 ディープガードの無効化』と『高度なモニタリング』の両方が有効な環境下
(正)『 ディープガード』と『高度なモニタリング』の両方が有効な環境下


818 名前:デフォルトの名無しさん [2009/12/19(土) 13:30:00 ]
とりあえず、おめ!
なるほど、そっちか

819 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:41:50 ]
セキュリティかよw
確かに最近のセキュリティソフトは色々とガチガチだからな

820 名前:デフォルトの名無しさん [2009/12/22(火) 16:23:38 ]
なるほどー

821 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 23:08:05 ]
ググってもなかったんで、質問させてください。

fortranのプログラムみてると、ccccccc 〜〜 ccccccc
って感じでcに囲まれてる文字があるんだけど、このcの意味ってなんなんですか?

すいません。教えてください

822 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 00:28:15 ]
>>821
1桁目が 'C' かアスタリスク '*' の行はコメント行。
だから 'CCC…' はプログラム上は意味はないけど、
人間が読む時に処理の内容や区切りをわかりやすくするため等によく使われる。



823 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 00:32:45 ]
>>822
ありがとうございます。
コメントは「!」とどこかでみたので、cは違うのかと思ってました。
本当にありがとうございました

824 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 04:29:33 ]
>>823
! で始まる部分をコメントとするのは,Fortran 90 以降の自由形式で書かれるソースコード。
この場合は ! は必ずしも1桁目でなくても良い。
2桁目以降でも良いし,実行分の後ろに付けるのでも構わない。

一方,1桁目が C か * で始まるのをコメント行とするのは,FORTRAN 77 の固定形式ソースコード。


825 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 09:11:20 ]
↑[訂正]
× 実行分
○ 実行文

826 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 22:37:19 ]
>>824
丁寧にありがとうございます。
すごい勉強になりました!
今日、入門用の本を買ってきたので、頑張って勉強したいとおもいます。

827 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:29:13 ]
すみません,ちょっとスレ違いな質問で申し訳ないのですが‥‥
ここにならご存知の方が誰かいるかもしれないと思ったので,
質問させていただきます。

Fortran の後継言語として Sun が開発中だった Fortress は
今はどうなってるんでしょうか? お蔵入りなのでしょうか?

828 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:14:52 ]
とりあえずサイトはここ
ttp://projectfortress.sun.com/Projects/Community/

829 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 14:04:39 ]
>>828
ありがとうございました。

830 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 17:33:31 ]
オラクルに買収されたけど、Sunの手から離れたから関係ないのかな?

831 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 20:11:52 ]
質問です。あるファイルが存在したらそのファイルをread、
存在しなければ別の処理をする、という分岐を作りたいのですが
どうすればよいでしょうか?ファイルの有無で0か1を返すような
関数があれば手っ取り早いんですが、見つかりませんでした。

832 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 21:03:52 ]
>>831
stat() を使ってゴニョゴニョとできんじゃろうか?



833 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 21:22:06 ]
open文でerr=指定子を使うのがfortran流だろう。

834 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 23:28:24 ]
INQUIRE(FILE='hage.dat', EXIST=LHOGE)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<345KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef