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/
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)
835 名前:デフォルトの名無しさん mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 17:11:51 ] いままでコンパイルを行うとき、サブルーチンとmainファイルを同じディレクトリに置き * ifort.f90 でコンパイルしていたのですが, サブルーチンを別ディレクトリにし,コンパイルするにはどうしたらよいのでしょうか。 たとえばサブルーチンをSubというディレクトリに置き、 mainファイルをMainというディレクトリに置いて実行ファイルを作るにはどうしたらよいのでしょうか。
837 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 20:17:18 ] ifort90 main.F90 Sub/sub1.F90 Sub/sub2.F90 ... でいいんじゃね?あと Makefile 書いちゃうとかかな。 何をムズカシイと思っているのかがよく分からない。
838 名前:デフォルトの名無しさん [2010/01/13(水) 15:03:32 ] >>837 そうしたいのですが,mainファイルをコンパイルしようとするとサブルーチンが定義されていないと言われ, サブルーチンをコンパイルしようとするとmainファイルがないとエラーがでるんです
839 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 15:47:14 ] >>838 ifort90ってどこのコンパイラ? -c付けて.oファイルがどこにできるか確認してみたら? intel fortranだが普通にカレントディレクトリに全部の.oが出てくるけど
840 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 17:41:05 ] unixでのコンパイルに耐えられずに、VisualStdioとintelのコンパイラを教官殿に買ってもらった俺と比べてみんな偉いな
841 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 22:27:24 ] >>839 > ifort90ってどこのコンパイラ? ifort のことだろうけど、OS は何なんだろうな。どうにも挙動が変態だ。 Windows だと変な動きするとかあるんだろうか?
842 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 02:46:42 ] 前に、担当の人が気を利かせてaliasというかいくつかオプションをつけたコマンドを作ってくれていて それが他のと干渉して・・という事があった気がするけど、そのifort90 もそれの類の匂いがするが、 いかがか?
843 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 17:02:34 ] >>838 皆様のレスのおかげで解決できました、ありがとうございます ifort90はifortの打ち間違えです、申し訳ない
844 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 13:52:51 ] なんという・・・w
845 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 18:18:14 ] 打ち間違え? じゃあ command not found って出てたはずだよな・・・ まぁ、頑張ってくれや
846 名前:デフォルトの名無しさん mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 01:04:43 ] >>832 ,833,834,835 大変遅くなりましたがありがとうございました。 inquire文で行けそうです。 もう一つ質問ですが、動的配列を宣言するときにある次元だけ固定って できますか?まあ別にそうする必要は無いといえばないんですが、 宣言部を見ただけでどこが動的である必然性があるのか分かった方が 自分としてはスッキリするので。ちなみに DOUBLE PRECISION,allocatable::a(10,:,:) … allocate (CS(10,10,10)) とやったら金比羅にしかられました。 よろしくおねがいします。
848 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 04:18:14 ] >>847 > DOUBLE PRECISION,allocatable::a(10,:,:) > … > allocate (CS(10,10,10)) > > とやったら金比羅にしかられました。 CS ってどこで宣言してんだ? どう呵られたのかはしらんけども、こっちでも呵られた。 ということで無難に DOUBLE PRECISION,allocatable::a(:,:,:) としておけば良いと思う。それで問題になることは無いだろうから。
849 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 04:52:48 ] >>848 すいません、CSじゃなくてaですね。中途半端にコピペしてしまった… やっぱそうするべきみたいですね。コメントでもつけてそうしておきます。 ありがとうございました。
850 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 17:46:26 ] 一瞬、金比羅って何って思ってしまった 中国系の上司の名前かとw
851 名前:デフォルトの名無しさん mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/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 mailto:sage [2010/01/19(火) 00:21:02 ] >>852 大変分かりやすい解説をしていただき、ありがとうございました。 derfもintrinsicな関数だと思い込んでいました。
854 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 13:55:21 ] >>852 >しかし77時代以降は総称名を使うのが推奨されていたはず。 マジ? 律儀にD*使ってた・・・
855 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 14:00:42 ] 人のデータ使う場合、単と倍精度が入れ乱れるし・・・ 普通にd* で明示してもいいと思うけどな。 単精度に揃えたい!とかはコンパイルオプションで出来るし。
856 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:03:41 ] やっぱ総称名って使わないほうがいいの?
857 名前:デフォルトの名無しさん [2010/01/19(火) 21:21:43 ] インテル Visual Fortranコンパイラ9.1を使っているんですが、インストール後 サンプルプログラム(sample.for)をコンパイルしたところ、下記のエラーがでてしまい、うまくできません。 エラー内容: ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin' このため、.objファイルは出力されるのですが、exeファイルが出力されません。 よろしくお願いします。
858 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 23:41:44 ] >>857 MSのSDK入れろ
859 名前:デフォルトの名無しさん [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 22:12:58 ] >>859 FortranのI/Oでは「/」は改行を意味している。 よって文字と解釈していなのだろう。 前にもそんな事を聞いていた奴がいたような・・・ 回避する方法は、わからん。 文法書のI/Oのところをじっくり読んで自分で考えてくれ。
861 名前:860 mailto:sage [2010/01/24(日) 22:27:59 ] >>859 しらべたw READ文にFORMAT指定をすればよろし。 READ '(3A)', A,B,C とすれば多分おk
862 名前:859 mailto:sage [2010/01/24(日) 22:57:22 ] >>860 "/"を文字として認識することができました。 ありがとうございます。
863 名前:860 mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 00:39:52 ] 訂正www READ( text(1:kslash - 1), * ) num1 READ( text(kslash + 1:), * ) num2
865 名前:859 mailto:sage [2010/01/25(月) 07:35:21 ] >> 863 おお!重ね重ねありがとうございます。 無事に作ることができました。
866 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:32:37 ] 初心者すぎて笑われるかもしれませんが平面上の3点の座標で三角形つくるときの面積を求めたいのですが 当然ながらヘロンの公式でやりました 辺の長さが出てる場合であればうまくいくのですが長さの計算も入れようとするとどう座標を扱えばいいかちんぷんかんぷんで X(I)とY(I)で1〜3まで動かしかたがわからないというか…その考えが間違ってるのかもわからないです
867 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:57:24 ] >>863 Fortran兄貴降臨!いつもお疲れさまっす。 ただ、Fortranの思想的に>>859 みたいなことは、やるべきではないとは思う。 perlでもpythonでもシェルでもいいが、Fortran実行ファイルを適当なラッパーで くるむほうが、素直で良いと思う。
868 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:11:49 ] >>866 君なりのソースをここに書けば直して貰えると思うよ。
869 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 21:54:30 ] >>866 数学がわからんの? Fortranがわからんの? 上の方も書いてるけど、わかってるところまでのソースを書くとよろし。
870 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:04:31 ] >>867 Fortranでパーサー書こうぜ! 再帰があるから、77時代ほど難しくないはず・・・
871 名前:デフォルトの名無しさん [2010/01/26(火) 14:19:14 ] >>870 とてもうろ覚えだけど・・・ DECのVMSってFortranでかなりの部分は書かれていたような。 IMEというか英語を日本語に変えるやつは堂々Fortranだったような。 ・・・とてもうろ覚えだけど。
872 名前:デフォルトの名無しさん [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:29:35 ] Permut[n_, r_] := Pochhammer[1 + n - r, r] Permut[n, r]/r!
874 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 19:47:54 ] オープンしている特定のファイルのバッファを フラッシュする方法はありますか。コンパイラはifortです。 出来ればクローズしないでフラッシュしたいのですが、 どうしてもバッファにたまってしまいます。 よろしくお願いします。
875 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:06:31 ] 872の丸投げぶりはすごいな。 途中まで書いたソースコードでもここに貼ったら?
876 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:14:32 ] C/C++の宿題スレが丸投げだからその流れがこちらまで来たか
877 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:34:15 ] 初秋の青空を連想するくらいのすがすがしい 丸投げw