FORTRAN II
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGFORTRAN77/90/95, HPF等、FORTRAN全般に関する話題を書き込んで下さい。
・前スレ
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/ (dat落ち)
0002デフォルトの名無しさん
NGNGFORTRAN専用スレッド
http://pc.2ch.net/test/read.cgi/prog/1052290911/l50
【科学技術計算】C言語とFortran どっちがいい?
http://science.2ch.net/test/read.cgi/sim/1042715803/l50
FORTRAN90はどうでしょう?
http://science.2ch.net/test/read.cgi/sim/970819313/l50
0003デフォルトの名無しさん
NGNGThe Fortran Company
http://www.fortran.com/
Google Directory - Fortran
http://directory.google.com/Top/Computers/Programming/Languages/Fortran/
Compaq Visual Fortran オンライン・ドキュメント
http://www1.jpn.hp.com/products/software/development/dvf/docs/index.html
Intel Fortran Compiler 日本語版マニュアルのダウンロード (要登録)
http://www.xlsoft.com/jp/products/intel/download.html
Fortran Source Check (オンライン文法チェック)
http://www.lahey.com/check.htm
・フリー/無料のコンパイラ
g77 (FORTRAN77)
http://gcc.gnu.org/
Salford FTN77 Personal Edition Compiler (FORTRAN77、要登録)
http://www.salford.co.uk/compilers/ftn77pe/index.shtml
Open Watcom Fortran Compiler (FORTRAN77)
http://www.openwatcom.org/
The G95 project (Fortran90/95 未完成)
http://g95.sourceforge.net/
the F Programming Language (Fortran90のサブセット)
http://www.fortran.com/F/compilers.html
Intel Fortran Compiler (無料評価版/非商用バージョン、要登録)
http://www.intel.co.jp/jp/developer/software/products/global/eval.htm#compilers
Lahey/Fujitsu Fortran (期限付きトライアル版、要登録)
http://www.lahey.com/downloads.htm
0004デフォルトの名無しさん
NGNGhttp://www.geo.titech.ac.jp/fujimotolab/renewHP/numexe/manual/10_3/f90/start.html
0005デフォルトの名無しさん
NGNGって思ったら、2スレ目なわけね。
0006fortran初心者
NGNG1から1000までの素数を求めるプログラムで
配列変数を用いてプログラムを作る方法がわかりません。
do文だけ使用という条件ならわかるのですが、配列変数を用いて
プログラムを作る方法がわかりません。
どなたか暇な方教えて下さい(´Д`;)
0007素人
NGNG* TEST
PROGRAM TEST
REAL A,B,X,Y,F,Y0
INTEGER N
F=X**2-Y
A=0.
B=1.
Y0=1.
N=100
CALL RUNGE_KUTTA(X,Y,A,B,N,F,Y0)
WRITE(6,*) X,Y
END
0008デフォルトの名無しさん
NGNGREAL A,B,X,Y,F,H,K1,K2,K3,K4,Y0
INTEGER I,N
EXTERNAL F
X=A
Y=Y0
H=1/REAL(N)
DO 10 I=1,N
K1=H*F(X,Y)
K2=H*F(X+H/2,Y+K1/2)
K3=H*F(X+H/2,Y+K2/2)
K4=H*F(X+H,Y+K3)
X=X+H
Y=Y+(K1+2*(K1+K3)+K4)/6
WRITE(6,100) X,Y
100 FORMAT(' ',F10.5,F10.5)
10 CONTINUE
RETURN
END
0009素人
NGNG次のようなエラーメッセージがでます。
Runtime error from program:c:\win32app\salford\backup\renshu~1.exe
Access Violation
The instruction at address 0373fb83 attempted to read from an illegal location
0373fb83 routine at address 373FB83 [+0000]
00401000 TEST [+005c]
\win32app\salford\backup\renshu~1.exeは生成された、実行ファイルです。
どこが悪いか全く分かりません。 できたらアドバイスお願いします。
0010素人
NGNGLOGICAL PRIME(1000)
INTEGER LIST(250)
READ(5,*)
L=1
LIST(L)=2
DO 10 I=3,N,2
PRIME(I)=.TRUE.
10 CONTINUE
DO 30 I=3,N,2
IF(PRIME(I)) THEN
L=L+1
DO 20 J=I,N,I
PRIME8J)=.FALSE.
20 CONTINUE
END IF
30 CONTINUE
WRITE(6,200) (LIST(I),I=1,L)
200 FORMAT(' ',10I6)
END
0011素人
NGNGエラトステネスの篩を使うやり方です。
0012デフォルトの名無しさん
NGNGPROGRAM TEST中の
F=X**2-Y ! 変数 F への代入
は
F(X,Y)=X**2-Y ! 文関数 F の定義
では?
でも文関数の有効範囲はそれを定義したプログラム単位(ここでは PROGRAM TEST)
内だけなので、F() を SUBROUTINE RUNGE_KUTTA() で使うには
FUNCTIONで別に関数定義する必要があると思います。
0013素人
NGNG<変更点>
REAL FUNCTION F(X,Y)
REAL X,Y
F=X**2-Y
RETURN
END
これを別に定義して、
RUNGE_KUTTA(X,Y,A,B,N,F,Y0)
↓
RUNGE_KUTTA(X,Y,A,B,N,,Y0) 文関数の中の変数のFを消去
これでうまく行きました。
サブルーチンの変数に文関数を入れたらまずいですね。
0014fortran初心者
NGNG遅レスですが・・・
無事にプログラムを走らすことができました
ほんとうにありがとうございましたヽ(´ー`)ノ
0015デフォルトの名無しさん
NGNG全ての実行文の前に書く。
0016デフォルトの名無しさん
NGNG環境が変わるたびに書き換えるのは非常に面倒です。
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGVFとは 何でしょうか?ひょっとして Visual Fortran ですか?
0019デフォルトの名無しさん
NGNGSun Fortranはfppとcppというソースファイルプリプロセッサをサポートしています。
UNIX系コンパイラでは、拡張子を".F"とすることで、FORTRANのコンパイルの前にCプリプロセッサによって処理される。
0020デフォルトの名無しさん
NGNGhttp://members.at.infoseek.co.jp/kitaurawa/fortran.html
0021デフォルトの名無しさん
NGNGコンパイラはVisual Fortranを使ってます。
私はC言語の経験があるのでプログラムの流れなどは入門書を読めば分かるのですが、
先輩からもらったプログラムを解読するためにはリファレンス的な本が必要です。
何かおすすめがありましたらお願いします。
0022デフォルトの名無しさん
NGNG市販のf90本では富田本かねぇ
彼のwebページも読んでおくべし
本当はbit別冊のf90入門書が良いがもう市販されてない
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNGIDEにVS使えるから、そろそろ移行しようかと思ってるんだけど。
海老ソフトProFortranのコンパイラ、バグ多くてやってられん。
integer :: a(3)
real*4 :: b(3) = hoge
a = real( b )
としても、a(1)にしかキャストされた値が代入されない。
a(1:3) = real( b(1:3) )
とすれば問題なし。
配列内の全ての値がキャストされ、a(1:3)に代入される。
subroutine( b )
logical, optional, intent(in) :: b
関数やサブルーチンにのlogical型仮引数をoptional属性つけて宣言した場合、
どうも、present( b )で実引数と結びつけられているか、調べられない。
おかげで、logical型引数にはoptional属性をつけられない。
logical型以外の引数の場合は問題なし。
何故かしらないが、select case構文内で
小文字で、"case default"と書くとコンパイラにしかられる。
仕方なく大文字で、"case DEFAULT"と書いてる。
うぜぇぇぇ。
0027デフォルトの名無しさん
NGNGHP の Compaq Visual Fortran 6.6B で試してみたところ、
>>26で挙げられているバグはなく、正常にコンパイルできました。
なお、HP は Compaq Visual Fortran の販売を11月28日で終了して
今後 Visual Fortran の販売は Intel に移行します。
(Intel Visual Fortran 8(?) は12月発売予定)
ttp://www1.jpn.hp.com/products/software/development/dvf/
0028デフォルトの名無しさん
NGNGIDEにVS使えるから,VisualFortranと言っているが,IVFでは要VC.netです.
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG> IDEにVS使えるから,VisualFortranと言っているが,IVFでは要VC.netです.
おっ!ということは逆に言えば、VS.NETならVFなしでも動くということですよね?
今までVF買えなくてg77でがんばってきたけど、VS.NETならアカデミック版が生協で簡単に手に入るので買っちゃおうかなぁ。
0031デフォルトの名無しさん
NGNGVisual Fortranを使うためにはVS.NETまたはVC++.NETが必要 と言う意味です。
VS.NETにはVFは入っていないため、VS.NETだけではFortranのソースをコンパイルできません。
詳しくは、下記のURLから
ttp://www.xlsoft.com/jp/products/intel/support/statusupdate_qa.html
> Q5. インテル Fortran コンパイラには、Microsoft Visual C++ .NET スタンダード版2002 または 2003、
> あるいは Visual Studio .NET プロフェッショナル版2002 または 2003 が必要ですか。
> A5. はい。インテル Fortran コンパイラは Microsoft Visual C++ のリンカを使用するために
> 上記ソフトウェアが必要になります。
0033デフォルトの名無しさん
NGNG呼び出し規約が正しく記述されていれば可能です。
http://www1.jpn.hp.com/products/software/development/dvf/docs/vf-html/pg/pg18.htm
http://www.intel.co.jp/jp/developer/software/products/compilers/fwin/fwindows.htm
003430
NGNG> Visual Fortranを使うためにはVS.NETまたはVC++.NETが必要 と言う意味です。
ん?そうなんですか?うちの先生は、「Cなんかわからん!」とかいって、Visual Fortranしか入れてなかった気が。
それと31さんが示してくださったのリンク先のQ&Aを読むと、Visual FortranがなくてもVC Tがあれば、
というかVCのリンカがあれば、別にVisual Fortranがなくても(とりあえずコマンドラインからは)使えますよん。
と書いてあるように思えるんですけど。
で、IDEに関しても、
> Q4. IDE を持っていない場合、どうすれば良いですか。
> A4. 弊社では Microsoft Visual C++ スタンダード版および Microsoft Visual Studio プロフェッショナル版を販売しております。あわせてご検討ください。
と書いてあるからには、Visual FortranなしでもVCがあれば、IDEも使える気がするんですが。
0035デフォルトの名無しさん
NGNG> Visual Fortranしか入れてなかった気が。
>>31で言ってるのは(まだ発売されてない)Intel製VFのことだよ。
いまCompaq (HP) が売ってるVisual FortranはIDE (Developer Studio)と
MS製リンカが付いてるので単体でコンパイルできるしIDEも使えます。
> VCのリンカがあれば、別に・・・
今のIntel Fortran CompilerはCVF(のリンカ)さえあればコマンドラインからは使えるから
IVFもひょっとしたらリンカさえあれば使えるかも知れない。(当然サポート外だろうけど)
> Visual FortranなしでもVCがあれば、IDEも使える気がするんですが。
すまん。言ってることがよく解らん。
VS/VCは単体でもそれだけでIDEやCコンパイラが使えるけど、
Visual Fortran(Fortranコンパイラ)がなければFortranのコンパイルはできない
と言う意味なんだが・・
0036デフォルトの名無しさん
NGNG> >>31で言ってるのは(まだ発売されてない)Intel製VFのことだよ。
うわ、そうでしたか(^^;失礼しました。
00375
NGNGy=3x**2+4x+3
うえの式を微分するプログラムは、どうすればいいのですか?
大学に入って、初めてプログラムをするので、まったく分かりません。
教えてください。
0038デフォルトの名無しさん
NGNGリンカとは,ソースプログラムをコンパイルしてできた中間オブジェクトファイル群を結合して
1つの実行可能なプログラム形式を作成するためのものです
なので,リンカだけがあっても,どうしようもないですよ
0039デフォルトの名無しさん
NGNGttp://www.shirai.info.waseda.ac.jp/~tani/autod/node2.html
0040デフォルトの名無しさん
NGNG誰かよろしく
0041デフォルトの名無しさん
NGNG004221
NGNG先輩からもらったプログラムの中で
USE DFLIB
SECNDS
RAN
などは入門書に載ってないのですがどうすればいいでしょうか?
いろんな関数が載っているリファレンスのような本があればキボンヌです。
0043デフォルトの名無しさん
NGNGftp://ftp.compaq.co.jp/products/dvf/cvf-help.zip
QuickWinか,Win32ですね
0044プ〜多浪
NGNG0046デフォルトの名無しさん
NGNGinteger*2 k,n,s
read(*,*) n
s=0
k=1
10 s=s+k
k=k+1
if( k .le. n) go to 10
write(*,*) 'n=',n,' s=',s
stop
end
s=1*2+2*3+・・・+n*(n+1)
s=1+1/2+1/3+・・・+1/n
上のプログラムを参考にして修正するものです。
凄く初歩的なものですがお願いします。
0047デフォルトの名無しさん
NGNGこの程度は自分でやれよ。
わからないところって、丸投げじゃねーか。
S[n]=1*2+2*3+・・・+n*(n+1)
つまり
S[n=1] = 2
S[n] = S[n-1] + n*(n+1) [n=2,3...]
S=1+1/2+1/3+・・・+1/n
つまり
S[n=1] = 1
S[n] = S[n-1] + 1/n [n=2,3...]
これでもわからないなら、知恵以前の問題。
0048デフォルトの名無しさん
NGNGs を integerのままにしておくなよ。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGFORTRAN II だけだろ。(→ >>5)
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG10 CONTINUE
0055素人
NGNG相性がいいグラフィックソフトがあったりするのでしょうか?
0056デフォルトの名無しさん
NGNGとりあえずGNUPLOTかな?
個人的にはExcel+VBAもよく使うけど。
使い方はそれぞれのソフトを紹介している本なりWebサイトなりを探せば
いっぱい見つかるよ。
0057デフォルトの名無しさん
NGNGもう見捨てられてる?
0058デフォルトの名無しさん
NGNGおそらくプログラム実行中に出力されるデータを逐一グラフ化するんじゃなさそうだから、
FORTRAN77で出力云々はほとんど関係ないと思う。
出力するデータの形式とデータの種類だけが関係してくる。
グラフ化ソフトで読み込みしづらい様な出力データなら、
プログラムのコードを変更してそれに適した出力データを吐かせるのが普通だと思う。
もしくは、すでにある出力データをそれ用にフォーマットし直すスクリプトを組む方法もある。
手元に適当なソフトがあるならそれ使えばいいんじゃないかな。
安く済ませるならGNU PLOT。
しかし、これいまいち使い勝手がわるいんだよな〜
>>57
最新のCPUへ最適化されたコードを作れないなら、すでに見捨てられてるカモね。
これによってプログラムの実行速度が全然違ってくるし。
g95もβ(?)版は出てるようだけど、用途が用途だけに信頼性がまだ今ひとつ…
LinuxならintelのFortran90が無償で提供されてるからそれ使う手もあるけど、
これは使ったことが無いので良く分からない。
3000行未満程度のコードならあまり変わらないかもしれないけど、
コードがある程度の行数があってこれから大幅に変更するんなら、
早めにF95に移行した方が幸せになれるかも。
"F77に比べれば"格段に構造化しやすくなってます。
005957
NGNGレス有難う
でも僕の書いたソースじゃなくて、僕のいる分野で使われているソースをコンパイルするのに使いたいので
多分g77じゃないとだめっぽいんですよね。
行数はすべて合わせたら数万から十数万行は確実にいってると思います。
0060デフォルトの名無しさん
NGNG0061素人
NGNG>>56
excel,vb共に、持っていますが、vbは全く使ってません。
今まではexcelは一次元データ列ならそのまま扱えるのですが、
txtで開けないから、どういうフォーマットの細工をしたらいいか検討がつきませんでした。
もっと調べてみます。GNUPLOTも勉強してみます。
>>57
最終的には、2,3次元のデータを微小時間ごとに逐一だしたいのですが、
そこまで全く至るための知識不足です。
>グラフ化ソフトで読み込みしづらい様な出力データなら、
>プログラムのコードを変更してそれに適した出力データを吐かせるのが普通だと思う。
>もしくは、すでにある出力データをそれ用にフォーマットし直すスクリプトを組む方法もある。
GNUPLOTで描画するためには、FORTRANで吐かせるデータのFORMATを工夫すればいいだけですか?
0062デフォルトの名無しさん
NGNGGNUPLOTでグラフを描くなら特にFORMATを指定しなくても
WRITE(10,*) X, Y1, Y2, ...
とかでもOKです。
あとはGNUPLOT側で
gnuplot> plot "hoge.dat" using 1:2, "hoge.dat" using 1:3
等のようにplotコマンドに適当なオプションを付ければ良いでしょう。
ttp://fenix.ne.jp/~cdrtk/misc/gnuplot/plot4.html
0063デフォルトの名無しさん
NGNGEXCELは配列データをテキストで開けますよ
0064素人
NGNGそのHPでやり方覚えさせてもらいます。ありがとうございます。
>>63
例えば、
write(7,100) ((u(i,j),j=2,n),i=2,n)
100 format(8(1h ,8f10.5/))
だと、エクセルで開くと、
(i,A)セルに、(i,1)〜(i,n)すべてが含まれてしまうんです。
0065素人
NGNG100 format(8(1h ,8f10.5/))
での、繰り返しは8です。
0066デフォルトの名無しさん
NGNGExcelでデータファイルを開くときに「カンマやタブで区切り区切られたデータ」(CSV)
で開いてない?
区切り文字にスペースを指定するか固定長フィールドのデータとして開くと
きちんと値毎に区切られて開けるよ。
0068デフォルトの名無しさん
NGNGオプションは無いのでしょうか.
別個の構文チェッカがあるのでしょうか.
これが妥当なのか知りたいのです:
WRITE(UNIT=*, FMT='(A, F3.1, A)') 'It is ', FOO, '.'
とする代わりに,
WRITE(UNIT=*, FMT='(\'It is \', F3.1, \'.\')') FOO
0069デフォルトの名無しさん
NGNGttp://www.dsm.fordham.edu/~ftnchek/
0071デフォルトの名無しさん
NGNGWRITE(UNIT=*, FMT='("It is ", F3.1, ".")') FOO
これでも同じみたいですね.
007268
NGNGほんとだ! ftnchek に怒られなかったよヽ(´▽`)ノ
まだ Professional Programmer's Guide to Fortran77 の 3 章を読んでいる
くらいなので,クォートの違いが何なのかは分からず...
0073デフォルトの名無しさん
NGNG007468
NGNG4 章によると,ダブルクォートは Standard じゃないみたいです.残念.
0075デフォルトの名無しさん
NGNGWRITE(UNIT=*, FMT='(''It is '', F3.1, ''.'')') FOO
0076デフォルトの名無しさん
NGNGよくわからんが,こうしたいのか?
WRITE(UNIT=*, FMT='(''It is '', F3.1, ''.'')') FOO
007776
NGNG''と"が同じにみえた.
0078デフォルトの名無しさん
NGNG0079質問者
NGNGSUBROUTINE内で定義した、
COMMON /CDXYZ/DX(NSP),DY(NSP),DZ(NSP)
があります。これは、それまでに定義されてません。
DXP(I)=DX(I)+FX(I)*DT**2/TMASS
DYP(I)=DY(I)+FY(I)*DT**2/TMASS
DZP(I)=DZ(I)+FZ(I)*DT**2/TMASS
なる文が最初に出てきますが、
DX(NSP),DY(NSP),DZ(NSP)は値が入っていないはずです。
この場合、値は全部0になるのでしょうか?
0080デフォルトの名無しさん
NGNGhttp://homepage3.nifty.com//hot-hot/7254.html
0081デフォルトの名無しさん
NGNGそれらの配列を初期化していないなら、"基本的には"値は不定だよ
いくらcommon文とはいえ、初期化する必要があるなら、するべきだと思う
「いつも0になるから、0で初期化しなくていいや」なんて思わずに
0082デフォルトの名無しさん
NGNGBLOCK DATA で初期化されている可能性がある。
0083デフォルトの名無しさん
NGNG>値が入っていないとは?
>それらの配列を初期化していないなら、"基本的には"値は不定だよ
>いくらcommon文とはいえ、初期化する必要があるなら、するべきだと思う
>「いつも0になるから、0で初期化しなくていいや」なんて思わずに
そのとおり。Fortranは基本的には最初にメモリを静的に確保して、そこで
閉じている処理系。なぜなら大昔はメモリが極端に少ないから、そうするのが
当然だったんだろう。
今は当然違う。スタックを多用するので、特に副プログラム内の変数はコールさ
れるたびにアドレスが違っている可能性がある。大昔はそんなことやりたくても
できなかった。
だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
り、全く動かないこともある。そのときには、スタックを使わないオプションで
コンパイルしたりする。
変数の初期化は、愚直にやった方が後々楽だ。
0084デフォルトの名無しさん
NGNG単にスタックのないプロセサだったんだろ。
普通、サブプログラム/関数のローカル変数を使いまわしができるスタック方式の方がメモリーには優しいよ。
> だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
> り、全く動かないこともある。そのときには、スタックを使わないオプションで
> コンパイルしたりする。
ちゃんとデバッグしろよ。
008568
NGNGセクション 5.2 「Constants」を読んで,やっと何のことだか分かりました.
文字列リテラル内でシングルクォートを表現するには,
2 つ書けばいいんですね.てっきりパーレンを括っているのかと...
ありがとうございます.
どうでもいい話ですが,2ch や e-mail でも
FORTRANer なら一行 72 文字ですよね?
今まで 80 くらいでやっていたので反省しています.
0086デフォルトの名無しさん
NGNGIMPLICIT NONE だけを許可したいときには,どんなオプションになりますか?
# ftnchek -f77 -nof77=implicit-none hoge.f
では
No string setting allowed for -nof77=implicit-none: ignored
と言われ,無視されてしまいます.
まさか,-f77= に implicit-none 以外の全てをリスト...?
008787
NGNGフォートランには、まだあまり詳しくないもので、お願いします。
PROGRAM
IMPLICIT NONE
REAL::X
INTEGER::I,M
INTEGER,DIMENSION(20)::DICE
DO I=1,20
DICE(I)=0
DICE(M)=0
END DO
CALL SEED(794)
DO I=1,20
CALL RANDOM(X)
M=INT(20*X)+1
DICE(M)=DICE(M)+1
END DO
DO I=1,20
WRITE(*,*)I,DICE(I)/100000.
END DO
STOP
END
0088どういった物かと問われれば
NGNGバグのあるプログラム
0089デフォルトの名無しさん
NGNG> DICE(M)=0
不定なインデックスのところに 0 を代入.
> CALL SEED(794)
泣くよ?
> WRITE(*,*)I,DICE(I)/100000.
20 回やったのに 100000 で割るのはなぜ?
009087
NGNGPROGRAM
IMPLICIT NONE
REAL::X
INTEGER::I,M
INTEGER,DIMENSION(20)::DICE
DO I=1,20
DICE(I)=0
DICE(M)=0
END DO
CALL SEED(794)
DO I=1,100000
CALL RANDOM(X)
M=INT(20*X)+1
DICE(M)=DICE(M)+1
END DO
DO I=1,20
WRITE(*,*)I,DICE(I)/100000.
END DO
STOP
END
0091デフォルトの名無しさん
NGNG細かいバグは目をつぶって変数名などから想像すると
たぶん「20面体のさいころを10万回振ってそれぞれの目の出た確率を出力する」プログラム。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG>> だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
>> り、全く動かないこともある。そのときには、スタックを使わないオプションで
>> コンパイルしたりする。
>
>ちゃんとデバッグしろよ。
10万行のプログラムをね。あんた、どれくらいの問題をやってる。
20年以上使われるとね、バグが本物になってしまうんだよ。
ここはバグですから直しておきましたと言って、余計なことをするなと
殴られる。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGfortran90で、目的のファイルが更新されたら
自動的にプログラムを実行させるっていうプログラムは
どうやって書いたらいいのでしょうか?
0096デフォルトの名無しさん
NGNG訂正って,Mは結局不定のままじゃん.
>>95
VFならできなくもないが,Fortranで常駐プログラム作るよりは,Cで組んだ方がいいと思うが.
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGオプション変えて、答えが合ってたら安心するんだ...。
まあ、そういうプログラムってことね。(藁
0099デフォルトの名無しさん
NGNGOS に依存する方法しか無いでしょう (?)
cron.d があるシステムならスクリプト数行!?
0100デフォルトの名無しさん
NGNG>
>まあ、そういうプログラムってことね。(藁
それくらいにしとけ。お坊ちゃん。
010195
NGNGありがとうございました
0102デフォルトの名無しさん
NGNG学校での授業でこれからしばらくの間、FORTRANを使う事になったのですが、
それに伴って友人数名でコンパイラを買う事にしました。
ちなみに富士通のやつ。
複数のパソコンにインストール可能ですか?
何か複雑極まりないセキュリティが入ってて、パソ一台にしかインストール出来ないって事はありませんか?
無いとは思うんですが、やはり万が一って事もあるので・・・
法律的にはダメだって判ってるんですが、やっぱり一人では高くてとてもとても・・・・
アドバイスよろしくお願いします。
0103102
NGNG富士通のこれです。
ttp://software.fujitsu.com/jp/fcaca/intro.html
0104デフォルトの名無しさん
NGNGアカデミック版とはいえ3万近くするから、無理して買うのは薦められないなぁ。
一番お薦めなのは、Linuxをインスコして、g95を入れる
The G95 project
http://www.xlsoft.co.jp/jp/products/intel/compilers/iftnwin.html
学校の授業で使う程度なら、intelから出てるコンパイラの体験版を使う手もある。
使用期限は30日だけど、そこはどうにかして・・・
そのコンパイラを使わない場合でも、オンラインマニュアルをダウンロードしておくと、何かと便利♪
http://www.xlsoft.co.jp/jp/products/intel/download.html
0105デフォルトの名無しさん
NGNGこれじゃ駄目?
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNGいや103を見るとwindowsで使いたいんじゃないかと。
ifc for windowsに非商用版はないでしょ。
0108デフォルトの名無しさん
NGNG>>104のG95プロジェクトのリンク先はこっちのまちがいだよね?
http://g95.sourceforge.net/
それからfortranコンパイラの定番情報源はこっちだ越前
http://www.mtl.t.u-tokyo.ac.jp/~nminoru/programming/x86-fortran.html
0109デフォルトの名無しさん
NGNGとうとうG95プロジェクトから正式にGCCへ...
0110102
NGNGフォートラン90が必要なので・・・・
0111102
NGNG全部古い奴だったし・・・・・
0112デフォルトの名無しさん
NGNGオンラインで売ってる安い奴だとここかな?
http://www.lahey.com/index.html
Lahey/Fujitsu Fortran 95 Expressが$249
Essential LF90のEducational Licenseだと$79
あとFedExの送料が$45くらいかかる。
ただ、Essential の方は"古い"文法が使えないのでこっちを買うなら
F言語を使った方がいいかも。
詳細は↓参照
http://cij.jp/lahey/
でもカードが要るから学生さんには買いにくいかな・・・
# 電話orFAXも可、とは書いてあるけど
0113デフォルトの名無しさん
NGNG90じゃなくちゃ駄目な理由はよく分からんけど
コンパイラ買うなら、その金で良い本買ったほうが良いと思うけどなあ。
授業を担当している先生に、熱心に家でも勉強したいんですって言えば
Fortran90をインストールしたノートパソコンとか貸してくれそうだけど。
どこの研究室でも、ちょい古めのいらないパソコンは転がってるからね。
0114デフォルトの名無しさん
NGNG> 授業を担当している先生に、熱心に家でも勉強したいんですって言えば
> Fortran90をインストールしたノートパソコンとか貸してくれそうだけど。
「そうか。がんばれよ。学校に来ればいくらでも使えるから。」と言われるに一票。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG苦労するだけです.
0117デフォルトの名無しさん
NGNG先生、その代わりになるステキなOS名とその訳をお教え願いたいわけですが、
いかがですか?
0118デフォルトの名無しさん
NGNGたとえば Solaris9 がある.
x86 向けも売られているし,Linux 用バイナリも動くから
Intel の無償コンパイラも走るわけだ.
0119102
NGNG90じゃなきゃ駄目な理由。それは学校が指定したから、です。
77って、CASL2みたいに書かなきゃ駄目な奴でしたっけ?
>>114
おいどんもイピョ
ソフトは見つけました。安いトコ。
ttp://www.getplus.co.jp/pr/product641208.asp
0120デフォルトの名無しさん
NGNG> ソフトは見つけました。安いトコ。
安いどころじゃなくて,Intel 製の無料のがあるんですよ.Linux 用ですが.
http://developer.intel.com/software/products/compilers/flin/flin_noncom_lic.htm
non-commercial 版なので, 30 日限りの試用版とは違うのでしょう.
私は使ったことがないので良く分かりませんが,
今日にもダウンロードして試してみるところです.
0121デフォルトの名無しさん
NGNG77は1桁目にC, *を書くとコメント行、6桁目に文字を書くと継続行、コードは2〜72桁
と言った具合にプログラムを書く位置が決められている。
> ソフトは見つけました。安いトコ。
学生用は定価で8割引か・・・すごいね。
0122デフォルトの名無しさん
NGNGその富士通のコンパイラ、90日間試用できるみたいだから、とりあえずそれ使ってみたら。
0123102
NGNGレッドハットあたりだと、まあ直ぐに買えるとして、問題はハードディスクですな。
私はリナックスをダウンロードして組むような知識はありません・・・
パーティション分けして空けてやらないと・・・・
めんどくさい・・・・・
完全日本語化のディストリビュータってありますか?レッドハットは英語ばっかし・・・
ターボリナックスとかいっぱいあるけど使った事無い・・・
富士通のは、既に使った事があります。何度も。
VStudioと比べたら凄まじく使い難いけど、ウィンドウを調整したら行けそうです。
それにアカデミックで安いし。
送料込みで25k円弱・・・・うーむ。
インテルって英語版ばっかし・・・・?うわ。英語勉強しなきゃ。まあ単語覚えたら終わりですけど・・・
0124アホ
NGNG0125デフォルトの名無しさん
NGNGところで、どんな授業でFortran90を使うんですか?
これから先、自分の研究なりで確実にFortranを使っていく必要があるなら
自宅にもFortranが使える環境があるに越したことはないけど、
「計算機基礎」とかプログラミングの基礎的な講義で使うだけなら、わざわざ
高い製品版を買ったり、新たにOS入れたりする必要はないと思いますよ。
#このスレでこんなことを言うのもナンですが
WindowsでもC/C++やPascalならフリーの処理系がたくさんあるから
これらで勉強すればFortran90でのプログラミングも理解できると思います。
Fortran90なら基本的なことはCやPascalとあまり変わりませんから。
0126102
NGNGいけるんですかね・・・・・?OSごと・・・・・
>>125
情報系の演習です。
ですが、将来、目指す研究室(物理系)で使う予定です。入れたら、の話だけど・・・・
CはVSで頑張ってます。
0127デフォルトの名無しさん
NGNGKNOPPIX という,CD-ROM ブートの Linux です.
元からあるシステムを汚さない,とても安心なディスリビュージョン.
http://unit.aist.go.jp/it/knoppix/
特に,これを元にして学生の実習に特化した KNOPPIX-Edu が便利でしょう.
http://www.alpha.co.jp/products/knoppix-edu/
まさか CD が焼けないなんてことはないですよね :D
学生は Visual* を使わない方が学習しやすいんじゃないかと思います.
私は学生ですけど.
Redhat 系は商用ソフトウェアを頻繁に買う人向けですよ.
0128デフォルトの名無しさん
NGNGCD-Rドライブ持っていませんがなにか。
0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNGリンクも設定してるんですけどなんででしょう。ビルドエラー出ちゃうんですよねえ。
0132デフォルトの名無しさん
NGNGビルドエラーの内容を示さない時点でネタと見倣されました.
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNG動く。
しばらく前のAthlon搭載PCで、SSEを有効してコンパイルしたらしっかり動いた。
ベクトル化も可能。
0135デフォルトの名無しさん
NGNGありがとう。
コンパックだった頃は必要動作環境が、PC/AT互換機ってなってたのが、
インテルになってから、PentiumあるいはXEONってなってたんで心配だったよ。
0136デフォルトの名無しさん
NGNGここにあるやつの宿題なんですけれども・・・
どなたか解いてくれませんか、お願い先生。
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNGそうすね、スマソ
0139デフォルトの名無しさん
NGNG初心者です。F90を習いたいです。
0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNG私の知る限り、>>4の冨田博之著「Forrtran90プログラミング」(培風館)か
定番(?)戸川隼人先生の「ザ・Fortran 90/95」(サイエンス社)ですかね。
それにしてもFortran90/95の日本語書籍は少ないですね。
一般書店ではFORTRAN関係の本も見かけなくなっちゃったし。
>>136
宿題は自分でやってこそ意味のあるものです。
また来年もがんばってね♪
0142初心者
NGNG土木屋がよく使ってると聞いたのですが…
0143デフォルトの名無しさん
NGNG0144初心者
NGNGC++ではできないんですか?
0145デフォルトの名無しさん
NGNGそれは禁句。
0146初心者
NGNGすいません。初心者なので。
これから、言語を学ぼうかと思っているんですが、
有限要素法などの解析をやりたいんですけどどちら
(C++とFORTRAN)が良いでしょうか?
0147デフォルトの名無しさん
NGNG数値計算
144 名前:初心者[] 投稿日:03/12/19 23:13
なるほど…解析とかに使うんですね。
C++ではできないんですか?
一人上手!
0148デフォルトの名無しさん
NGNG「昔からの実績あるライブラリがたくさんあって、高速計算マンセー」
ならFORTRAN
「参考書がたくさんあって、オブジェクト指向マンセー」
ならC++
ってとこでしょうか
↓こんなスレもあるから参考にしてみては?
【科学技術計算】C言語とFortran どっちがいい?
http://science2.2ch.net/test/read.cgi/sim/1042715803/l50
0149初心者
NGNGありがとうございます。まさに今私が求めているような
答えがありそうです。
>>143
わざわざありがとうございました。
0150初心者
NGNG">>"つけるの忘れてました。
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGちゃんと配列の,要素ごとの足し算ができました.
intel のは大きくて使いづらいので,普段は g95 で逝きたいのです.
配列まわりの文には似たような書き方がたくさんありますね.
なるべく f77 と f95 でコンパチブルにしたいので,困ったものです.
0153デフォルトの名無しさん
NGNGketa=5
write(text,'(i<keta>)') num
ができるのに、
f90ではできんのだ〜。・・・つかわなくて済ますことを考えるか・・・
0154デフォルトの名無しさん
NGNGありがとうございます。
ザの方をゲットしました。
0155デフォルトの名無しさん
NGNGシミュレーション用にFORTRANでプログラム組んだ人は、
どの程度の行数書きますか〜?
あーーーー、分子動力学計算の時は3千行程度で済んだのに...
ただいま、13K突破(禿鬱
0156デフォルトの名無しさん
NGNG眠いところすみません.
1 つのファイルが 13k (行ですよね) にもなってしまうことがあるんですか?
実際にカッコいいシミュレーションプログラムを
組んだことが無いので知らないんです...
FORTRAN では長いプログラムを回避できないのでしょうか?
0157デフォルトの名無しさん
NGNG合計 13k だろ...。
分割コンパイルくらいできるわ。
0158デフォルトの名無しさん
NGNG別に FORTRAN の関数を C++ から呼ぶことくらい
いくらでもできるんだがな...。
0159デフォルトの名無しさん
NGNGで、届いた。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNGコンパイルログが細かいし日本語だからデバックしやすい。
0162デフォルトの名無しさん
NGNG> 日本語だからデバックしやすい。
なんとなく悔しい.
0163デフォルトの名無しさん
NGNG何県?
0164デフォルトの名無しさん
NGNG愛知県。
なんで?
0166デフォルトの名無しさん
NGNGまた、キーワードは、大文字限定ですか?
0167デフォルトの名無しさん
NGNGttp://www.google.co.jp/search?lr=lang_ja&q=Fortran90+%E5%B0%8F%E6%96%87%E5%AD%97+%E5%8C%BA%E5%88%A5
0168デフォルトの名無しさん
NGNGデバッ「ク」??
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGに売ってるのですか?また、何て名前のソフトを買えばいいのですか?値段とか分かる
ようでしたら、それも教えて下さい。お願い致します。
0171170
NGNGあればそれも教えて下さい)と参考にする本を教えて下さい
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGhttp://homepage.mac.com/galois21/fortran/index.html
0174170
NGNG早速教えて頂きありがとうございます。ですが
実際にダウンロードしてみて、ホームページに指定されてた通り
WRITE(*,*) 'TEST'
END
と左から6文字開けて試しに打ってみたのですが、 test と表示されません。
代わりに 「ディレクトリは存在しません」というエラー表示がでてしまいます。
どこが、いけないのでしょうか?もし、宜しければ教えて頂けないでしょうか?
0175デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/dl/win95/prog/se153699.html
ここからCPad for Salford FTN77 2.31をダウンロードして解凍する。
解凍したフォルダの中のfcpad.exeを実行するとパスを指定を要求される。
コンパイラのパス C:\win32app\salford\ftn77.exe
ヘルプファイルのパス C:\win32app\salford\Ftn77.hlp
OK押すとCpadが開く。
Tabボタンで先頭の6文字を開けられる。プログラムを書く。
ツールバーの右向き三角でコンパイル&実行
0176170
NGNGタビタビ申し訳ありません。 ご説明通りしてはいるのですが、
『コンパイルできません』とのエラーが出てしまいます。なぜでしょうか?
0177170
NGNGあっ、すみません、上手くいきました。
教えて下さった皆様どうもありがとうございました。
また、分からない時はどうぞ宜しくお願い致しますm(−−)m
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGプログラミング初心者なら,FORTRAN から始めるのが適切かどうかから
考えた方がいいんじゃない?
このスレ推薦の「Fortran90プログラミング」は,
初めてプログラミングする人も対象になっていますか >持っている人
うかつにも変な本を買っちゃって,しかもそれで勉強しようと躍起になると
後遺症がひどくなるからね.
0182デフォルトの名無しさん
NGNGFortran自体、簡単な言語だと思うが・・・
0183デフォルトの名無しさん
NGNGでも,同じことをするのに方法がたくさんあるなぁと.perl みたいに.
0184灯台離散@悠久の貞淑 ◆777zZZSC5A
NGNG他の言語知識が全く無いとは、まだわからないわけであり。
170がもうちょっと話しないと。
それとも別スレに行っちゃったかな?
ザ・フォートランの方が易しいと思うぞ。うん。
CASL2勉強してたら、Cやfortranのありがたみが身にしみる・・・
割り算するのがすっげえめんどくさい・・・・
あ、上のほうで、富士通買った者です。
総合的には使い易いっす。
あえて不満を述べるならば、
エディタ画面に「実行」のショートカットが欲しいのと、
作ったソースの拡張子を、オートで.F90にしてくれない所かな。
WRITEやREADなどを色分けして欲しいなぁ・・・・・
0185灯台離散@悠久の貞淑 ◆777zZZSC5A
NGNGこれは無いだろ、っていうようなフォントは余計だと思いまつ。
うぷしました。
ttp://dokuo-ha-hitori.dyndns.tv/~dokuo/cgi-bin/zuru/source/dokuo0895.png
こんな感じ。
改行文字がアホっぽくていい感じです。
0186デフォルトの名無しさん
NGNG今のところ下記ページの例題をFortran90に直して遊んでいるような段階なのですが
googleで調べても日本語の情報が見つからないので・・・。
GLUTによる「手抜き」OpenGL入門
http://www.center.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
0187デフォルトの名無しさん
NGNG残念ながら、FORTRANの和書に自信をもってお勧めできるものは無い。
他のメジャーな言語なら、初心者・中級者・上級者用と品揃えも豊富だけど、
化石と言われる言語だけあって、ろくに揃っていない。
大型書店でも、初心者用しか揃えていないのが実情だ。
また、このスレ推薦の書籍も、FORTRAN90の機能を全て網羅している訳ではないので、
FORTRAN90らしいmoduleの使い方を覚えられるとは思えないよ。
F90系の書籍は、どれも基本の文法書って感じ。
>うかつにも変な本を買っちゃって,しかもそれで勉強しようと躍起になると
>後遺症がひどくなるからね.
多少わかりにくい書き方でも、それを読み解く能力は必要だと思うぞ。
多かれ少なかれ、誤植や著者の誤認識はあるしな。
0188デフォルトの名無しさん
NGNGこれは?
0189デフォルトの名無しさん
NGNGLarry Nyhoff / Sanford Leestma 「入門 Fortran90」
> 「情報処理技術者試験」のプログラミングの選択科目にあるように、
> 科学技術計算用のプログラミング言語として、まだまだ需要は衰
> えておりません。
読んだことないので内容はどうか知らないが、この紹介文見てると
ちょっと躊躇するなぁ。
0190デフォルトの名無しさん
NGNGいわゆる中・上級者用のおすすめ書籍とかあるんでしょうか?
洋書で無問題です。
メモリストライドを工夫した高速化とかの基本的なことは知ってるんだけど、
fortranならではって奴は全然知らないもので。
0191デフォルトの名無しさん
NGNGアルゴリズム
ttp://www.amazon.co.jp/exec/obidos/ASIN/4764902451/250-8268012-0962650
蟹半先生の作法本
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756136494/250-8268012-0962650
御クヌース公の暇つぶし
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320023684/250-8268012-0962650
0192デフォルトの名無しさん
NGNGコレが全部みたい。
今、海女損でフォートラン本の中古出てるけど。
出品者がなんかヤバめ。
0193デフォルトの名無しさん
NGNG白黒で 色気が無いけど
重版してくれないかな
ttp://product.esbooks.yahoo.co.jp/product/all/top?accd=19319404
0194デフォルトの名無しさん
NGNGいい本がなにかありませんか?
0195190
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/0521574390/
あと、これ。評価高いけれど、ちょいと高過ぎ...(しかもペーパーブック
http://www.amazon.co.jp/exec/obidos/ASIN/0070119384/
>>193
禿胴
あるところでたまたま、時間潰しにぱらぱら見たんですが、
思わず欲しくなりました(今も欲しいですけど
復刊希望はまだ無いみたいですね@復刊ドットコム
>>194
Laheyですか?
言語リファレンス(日本語版が9800円)とマニュアルくらいかも。
0196灯台離散@悠久の貞淑 ◆777zZZSC5A
NGNG在庫アリだって。
詳解Fortran90の原本?
0197デフォルトの名無しさん
NGNGhttp://www.numerical-recipes.com/nronline_switcher.html
0200灯台離散@悠久の貞淑 ◆777zZZSC5A
NGNG太平洋戦争で日本が勝ってたら、世界の標準語がじゃぱにーずだったのに・・・・・!
0201デフォルトの名無しさん
NGNG0202193
NGNG僕、間違えてましたね。すみません。詳細でなくて、詳解。
Numerical Recipes、手元にあったんで、ぱらぱらみてみた。
アンダスコア で 実数の種類指定できるの知らんかった。
ちょっと勉強になった。3へぇくらい。
PROGRAM TEST
IMPLICIT NONE
INTEGER,PARAMETER :: SP=4,DP=8
REAL(DP) :: x1,x2,x3
REAL(SP) :: y1,y2,y3
!! 倍精度 ; 単精度 ; 単精度
x1=1.e-2_DP ; x2=1.e-2_SP ; x3=1.e-2
y1=1.e-2_DP ; y2=1.e-2_SP ; y3=1.e-2
WRITE(*,'(1P3E)') x1,x2,x3
WRITE(*,'(1P3E)') y1,y2,y3
WRITE(*,'(1P3F)') y1,y2,y3
STOP
END PROGRAM TEST
ファイル出力の書式設定で F型 に Pで位どりするときだけ
値が変わるのすっかり忘れてた。いや、もともと知らんかったのか。
うっかりどこかで使ってるかも。怖いよう〜。
0203デフォルトの名無しさん
NGNG会社に確か4冊ぐらいあったから、合計16冊か。
本屋にある本ほとんど買ってしまったからねえ。
古い本だとパンチカードの解説から始まります。
みんなそろってサンプルプログラムはタコ。GO TO文使いまくり・・・
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG,.-'''"-─ `ー,--─'''''''''''i-、,,
,.-,/ /::::::::::::::::::::::!,, \
( i:::::::::::::::::::::;ノ ヽ-、,,/''ー'''"7
`''| |:::::::::::::::::::::} ``ー''"
! '、:::::::::::::::::::i
'、 `-=''''フ'ー''ヽ、::::::::::/ヽ、-─-、,,-'''ヽ
\_/ ヽ--く _,,,..--┴-、 ヽ
``" \>
0207デフォルトの名無しさん
NGNGとかで、わけわからんソースの効率的な読解法
教えてくれ、もう限界だ…(ToT
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG小行列式をといて、余因子をもとめれば(ここまでならサラスの方法でできる)
4*4行列式もすぐに解けると思うんですけど。
0210デフォルトの名無しさん
NGNG手計算は分かるんですけど、それをどうプログラムするか分からないんですよ。
数値計算の宿題が急に出されて。
プログラミング初心者です。すみません。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG逆行列の求め方
余因子展開をプログラムで組むのが難しいなら、
掃きだし法と同じ操作を単位行列に対しても行う
のが一番簡単。
原理は簡単
逆行列というのは掃きだし法の操作をすべて掛け合わせてできる行列だから。
ただし、ある程度の精度を出したいなら対角要素にはなるべく大きな値を
持ってくるように行列の入れ替えなどを考慮する。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG寝よ…
0215デフォルトの名無しさん
NGNGC D 0 1 … (2)
↓
1 E F 0 … (1)' = (1) / A
0 G H 1 … (2)' = (2) - (1)' * C
↓
1 E F 0
0 1 I J … (2)'' = (2)' / G
↓
1 0 K L … (1)'' = (1)' - (2)'' * E
0 1 I J
(A B) -1 (K L)
(C D) = (I J)
0216デフォルトの名無しさん
NGNGメモリーは256MBです
0217デフォルトの名無しさん
NGNG意外と使われるんですね.LU やら掃き出し法が主流かと思っていました.
0218デフォルトの名無しさん
NGNG逆行列をFortranでできますよ
だけど、逆行列が忘れてしまいました
詳しく教えてくれれば、逆行列のサンプルプロ考えます
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNGあぁ、FORTRANでの逆行列の求め方ならここにかいてあるよ。
本気で理解しようとすれば、すぐ組めるようになるよ。
http://www.geocities.co.jp/SiliconValley/5634/t82A8_0004.html#2107
0222208
NGNG0223デフォルトの名無しさん
NGNGVisual Fortran 5.0 で、配列はどれくらいまで取れますか?
メモリーは256MBです
0224デフォルトの名無しさん
NGNG自分で実際にテストしてみればすぐわかる。
0225デフォルトの名無しさん
NGNG配列の型による
配列の確保が動的か静的かによる
コードによってはコンパイルオプションによる
仮想メモリの設定による
配列が大きくなるとスワッピングが激しくなるので,>>223の忍耐力にもよる
0226デフォルトの名無しさん
NGNG速くならないとか言う以前にNaNNaN攻撃をくらいます。
!$omp do parallel
してるループ内で関数を呼んでるんですが、やっぱこの辺が悪さをしてるんでしょうか…。
で、とりあえずOpenMPでぐぐったんですが出てくるサンプルは単純なものばかり。
どこかに実際にOpenMPを使って配列したコードを公開してたり、実践的な情報を集めたりしてるページを
ご存じないでしょうか?
0227デフォルトの名無しさん
NGNGどんな関数を呼んでるの?
詳しく教えてplz
0228デフォルトの名無しさん
NGNGhttp://www.cc.uec.ac.jp/SGI3000.doc/documents/programming/training/parallel_programming/sect7.pdf
NaNって,0で割り算してるんじゃないの?
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG処理系の拡張機能に頼る。
VF だと ISNAN(x) つうのがあるね。
0233デフォルトの名無しさん
NGNG> 処理系の拡張機能に頼る。
> VF だと ISNAN(x) つうのがあるね。
うわ、isnan()ってVF依存だったんですね。Intel Compilerでも使えてるけど、それは単にportlib使うように
してるから動いてただけか…。
0234デフォルトの名無しさん
NGNG>DIGITAL Fortran 90は、NaN値を出力ステートメントでは「NaN」で識別します。
>NaNは、signaling NaNまたはquiet NaNにすることができます。
>・quiet NaNは、0./0のような計算の結果として発生し、すべてが1の指数部と最初の仮数ビットが1を持ちます。
>・signaling NaNは、意図的に設定する必要があり(計算の結果ではなく)、すべてが1の指数部と最初の仮数ビットが0で、1つ以上の仮数ビットが1となります。
0235デフォルトの名無しさん
NGNGf(x,y)が最小となるx,yを求めるプログラムの課題を出されたのですが、
全く分かりません。ヒントはニュートン法と数値微分らしいのですが
どなたか手順だけでも教えていただけませんか。
0236デフォルトの名無しさん
NGNGとりあずそのヒントをキーワードにしてググりなさい。
0237デフォルトの名無しさん
NGNGread *,a,b
print *,"f(x,y)が最小となるx,yはx=",a,"y=",b,"でふ"
0238デフォルトの名無しさん
NGNGa=NaNかInfinityとして
if(a/=a)then
write(*,*) "NaNです"
else
b=a*0
if(b/=b) write(*,*) "Infinityです"
end if
とかじゃだめ?
0239名無し
NGNG下さい??途中まででもいいんでお願いします。
0240デフォルトの名無しさん
NGNGほい。
Objective Caml だけど。
let rec digit n radix =
if(n == 0) then ""
else (digit (n / radix) radix) ^ (string_of_int (n mod radix));;
let rec list_digit n radix last =
if(radix > last) then ""
else (string_of_int radix) ^ ": " ^
(digit n radix) ^ "/ " ^
(list_digit n (radix + 1) last);;
let list2to9_digit n =
list_digit n 2 9;;
0241名無し
NGNGありがたいんですけど誰かfortranでお願いします。
0242名無し
NGNG0243デフォルトの名無しさん
NGNGほい。
途中までだけど。
PROGRAM HOGE
WRITE(*,*) 'INPUT N:'
READ(*,*) N
DO 100 I=2, 9
CALL NSHIN(I, N)
100 CONTINUE
STOP
END
0244名無し
NGNG0245デフォルトの名無しさん
NGNGほい。
LISP だけど。
(defun digit (n radix)
(if (zerop n)
""
(string-concat (digit (floor (/ n radix)) radix)
(write-to-string (mod n radix)) )))
(defun list-digit (n radix last)
(if (> radix last)
""
(string-concat (write-to-string radix) ": "
(digit n radix) "/ "
(list-digit n (1+ radix) last) )))
(defun list-2-9-digit (n)
(list-digit n 2 9))
0246デフォルトの名無しさん
NGNGp 進数の n 桁目をどうやれば求められるか、という。
頭振り絞って考えれ。
0247名無し
NGNGいろいろ詳しいですねぇ!!fortranのプログラムの意味が全く分からない
んですけど…。あぁこれができないと留年だぁ。
0248名無し
NGNGにしろっていわれるとできないんですよね
0249デフォルトの名無しさん
NGNG0250名無し
NGNG0251デフォルトの名無しさん
NGNG得られるべき結果がすぐに分かるから
チェックが楽。
先ず、123 から 1 の位を取得してみ。
0252名無し
NGNG0253デフォルトの名無しさん
NGNGn = 123
first = ... 1の位を取得するには何を書けばいい?
0254名無し
NGNG0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNGその手順を細かくノートに書き出してみる。
あとはそれをプログラムに置き換えればいい。
それでも解らなきゃもう一年勉強し直した方が・・・
0257名無し
NGNG0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0260名無し
NGNG0261デフォルトの名無しさん
NGNG0262名無し
NGNGっていってもそんな難しい課題じゃないんですけどねぇ…
0263デフォルトの名無しさん
NGNGこれ見てピンと来ない?
0264名無し
NGNG自分馬鹿だ・・・
0265デフォルトの名無しさん
NGNGといってみるテスト
0266名無し
NGNG0267デフォルトの名無しさん
NGNG適当な数値を紙と鉛筆で実際に変換してみ。
0268名無し
NGNGしれないのでヒントをお願いします。ありがとうございました。
0269デフォルトの名無しさん
NGNG16 進数:1F
15 進数:21
14 進数:23
13 進数:25
12 進数:27
11 進数:29
10 進数:31
. 9 進数:34
. 8 進数:37
. 7 進数:43
. 6 進数:51
. 5 進数:111
. 4 進数:133
. 3 進数:1011
. 2 進数:11111
0270デフォルトの名無しさん
NGNG普通に,x を n 進数で表すなら,
割り算の筆算を上下逆に書いて,x を n で割り続ける.
ex. 60(10) を 7 進で.
60/7
8/7 ... 4
1 ... 1
だから下から並べて 114(7) .下に行くほど重いからね.
答えを言ってスマンかった >all
0271270
NGNG(defun radix-list (x n)
(labels ((f (x n lst)
(cond ((< x n) (cons x lst))
(t (multiple-value-bind (q r)
(truncate x n)
(f q n (cons r lst)))))))
(f x n '())))
(radix-list 60 7) ===> (1 1 4)
0272デフォルトの名無しさん
NGNG文字列にしたかったんだぁよ。
あと、truncate は知らなかった。
0273デフォルトの名無しさん
NGNGほい。
Visual Basic だけど。
Option Explicit
Private Sub Command1_Click()
Dim n As Long
Dim w As Long
Dim i As Long
Dim strn As String
n = Val(Text1.Text)
Text2.Text = ""
For i = 2 To 9
w = n
strn = ""
Do While w > 0
strn = CStr(w Mod i) & strn
w = w \ i
Loop
Text2.Text = Text2.Text & vbCrLf & CStr(i) & ": " & strn
Next i
End Sub
0274デフォルトの名無しさん
NGNGVBで、
> Option Explicit
ってのはFortranで言うところの
implicit none
と同じでしたっけ?
0275デフォルトの名無しさん
NGNGまだ寝てるのかな?明日提出かもね.
まあ lisp でやれば先生も分かってくれるって (w
ところで,Fortran や C では
先に n 進数で何桁になるか計算して,アロケートしないとなりませんよね?
0276再帰も知らんのか ?
NGNGFORTRAN は知りませんが、C では「ノー」です。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGスタック
0280275
NGNGあ,なるほど.でもちょっと計算機を意識しすぎというか,何というか.
>>279
動的アロケート無しにスタックを使う,良い例をお示しください m(__)m
in Fortran.
面白い Fortran スレになってきましたね.
0281デフォルトの名無しさん
NGNGinteger, intent(in) :: num, base
integer :: m
if ( num == 0 ) return
m = mod( num, base )
call print_shinsu( int( num / base ), base )
write(*,'(i1)') m
return
end subroutine
0282281
NGNG>write(*,'(i1)') m
write(*,'(i1)', advance='no') m
だわ
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG> in Fortran.
>>276 >FORTRAN は知りませんが
日本語も理解できないのか...。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNG>あ,なるほど.でもちょっと計算機を意識しすぎというか,何というか.
それを持ち出すなら、当然、入力された数字列に合わせて、
自然数(n)を格納するメモリ領域を決定する訳だ。
入力した数字(桁数無制限)を、1文字ずつ配列に格納して。。。
0288デフォルトの名無しさん
NGNGFORTRAN -> FORTRAN77 以前
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNGprogramでprint_shinsu()を呼ぶだけ
0291デフォルトの名無しさん
NGNG何度もすいません
print_shinsu()の呼び方を教えてください。
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG>>4
0294デフォルトの名無しさん
NGNG「別の××の○○が□□してしまいます.」
と言うのかな.
0295275
NGNG> 入力した数字(桁数無制限)を、1文字ずつ配列に格納して。。。
う,,,でもほら,
2 進では 10 進で小さい数でも桁が多くなってしまうではないですか.
と思ったりしましたが,大きさ 64 の配列で十分そうですね...
高速化の妨げになるから動的アロケートを避けるというのが本当なら,
割と仮定が多いプログラムになってしまうのでは,と思っているのですが,
何でも動的アロケートに訴えるのは病気ということでしょうか.
0296デフォルトの名無しさん
NGNG例えば int を変換する場合、
INT_MAX が 2 進で何桁になるかが分かってれば、
最低でもそれが格納できるだけのサイズのバッファがあれば十分。
これは常に正しく動くという意味で、仮定でもなんでもない。
無駄になる領域はあるかもしれないけど。
動的にアロケートした場合も
16-byte 境界(環境依存)に合わされたりして
若干無駄になる領域はあるけど、
固定長の時よりはまし。
0297デフォルトの名無しさん
NGNG2進数を格納する文字列の長さが128あれば十分。
>ヒープ領域の動的確保
使用する事が問題なんじゃなくて、大きな領域を何度も確保&解放する事が問題なの。
特に数値計算の場合、1ステップに1回だけ動的配列の領域確保&解放をするだけでも、
数十万回も呼ばなければならない事が多々ある。
確保する領域が大きな場合、メモリ使用量がえらい事になる。
一般にdeallocate()によってコード上は解放された領域でも、すぐOS側に返される訳じゃない。
動的配列の確保&解放にともなうオーバーヘッドが気になるなら、動的配列に静的属性をつけて、
可変長の文字列読み込み処理のように、領域を確保&解放する回数をなるべく減らすようにすれば良し。
ただ、何でもかんでもこの方法をとるのは間違い。
ケースバイケースで、「計算機を意識した」処理を汁!
(例)
subroutine sub( n )
integer, intent(in) :: n
integer, :: alloc_sz = 16
integer, save :: sz_array = 0
integer, dimension(:,:), allocatable, save :: array
if ( n > sz_array ) then
if ( allocated( array ) ) deallocate( array )
sz_array = n + alloc_sz
allocate( array( sz_array, sz_array ) )
endif
...
end subroutine
0298Nanashi_et_al.
NGNGFortranで多倍長演算をしたいのですが
どのライブラリを使ったら良いでしょうか?
GNU のMultiple Precisionは、Fortranから使うには不向きなようでして…
ご助言いただけると助かります
0299デフォルトの名無しさん
NGNGプログラム中の変数やパラメータの値を
real(16) : : aとか1.0d0みたいに置き換えてあげればいいだけだと思うけど・・・
コンパイラによるのかな??
0300名無し
NGNG返事遅れました。10進数をn進数にするプログラムの話ですが。数学的には求める
ことができたのですがプログラムで書くとなると余りの部分をどうやって抽出して書けばいいの
か分からないんですけどどうすればいいでしょうか??できればBASICとFORTRANで
説明していただくとありがたいです。馬鹿な質問ばかりしてすいません。…
0301仕様書無しさん
NGNG本スレは削除依頼を出してきたので、こちらで質問したいと思います。
FFT(高速フーリエ変換)を使ったスプリットステップフーリエ法を
どうかご教授お願いいたします。
Cのソースはあるのですが
http://photonics.ece.umd.edu/software/
fortran77で記述できなくて困っています
どうかよろしくお願いいたしますm(_ _)m
0302298
NGNG記述が正確ではなかった様ですみませんでした。
コンパイラはCygwin 上のgcc(F77)を使っていまして
多倍長整数の演算が主な目的です。
F90が必要であればIntelの評価版を試すつもりではいます。
再度ご助言頂けると大変助かります。
0303デフォルトの名無しさん
NGNG>fortran77で記述できなくて
CとFortranの文法比較ができないから?
http://www2.odn.ne.jp/~cbn33260/AS400/fort-c.htm
SSFMが分からないから?
http://www.asahi-net.or.jp/~ix6k-smur/Doctor/chap2.pdf
パソコンが無いから?
http://www.a-z.x0.com/cha/pc.html
0304301
NGNGリンクありがとうございますm(_ _)m
CとFortranの文法比較ができないっていうのと
SSFMが分からないのと半分半分です・・
fortranもCも初心者なもので・・・
0305デフォルトの名無しさん
NGNGというか2000の規格はもう正式に決まったの?
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGどっちをお勧めしますか?
0308デフォルトの名無しさん
NGNGここは難しいほうのC++で・・・。
0309307
NGNGC++の前にCをとるのですが、Cも難しいですか?
プログラミングの知識ゼロなんで、なにがどうなのかC++って何をするため
とか全くわからないんです。。
将来的にはFortranとC++ではどちらが役にたちますか?
0310デフォルトの名無しさん
NGNG入門書も氾濫してるし、応用も利きくから、
初めての言語としてはいい選択かと。
>将来的にはFortranとC++ではどちらが役にたちますか?
気にするな。みんなFortranの子孫だw
0311デフォルトの名無しさん
NGNG0312fortranran
NGNGいろいろ試している人いる?
なんか実行速度おそいんだよねぇ
PEN4(HT)だから期待してたのに・・・
最適化レベルを上げようとすると、CVFの時は出なかった
エラーが出てLEVEL2どまりです。
まっ会社のお金でかったんだからいいけど
0313デフォルトの名無しさん
NGNG> C++の前にCをとるのですが、Cも難しいですか?
結局先に C をやるのね.
すぐ数値計算に使うなら Fortran かと思いますが,
たぶん,数値計算するときにはまた覚え直すことになると思うので,
C++ が良いでしょう.
C は計算機の一般的な知識が無いと使いにくいんですが,
C++ は知らなくても良いように高級になっているんです.
とっても計算量が多いプログラムでは,C++ より C が使われるんだそうです.
そうでないものには,ほとんど C++ なんだそうです.y
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG移行しました。
全く使いこなせてません。
全然最適化されてる気がしません。
ソースレベルで自ら最適化しないといけないのでしょうか。
0316デフォルトの名無しさん
NGNGIVF8.0はVS6でもイけますか?
それとも.NETおんりー?
0317315
NGNGはっきり言って面倒くさいです。
C++のインストールにすごい時間かかりますし。
上にも書いたように全然使いこなせてないので、.NETがどれだけすごいのかも分かりません。
結局DOS窓からコンパイルしてます。
0318316
NGNGそうですか.だめですか
http://www.intel.com/software/products/compilers/fwin/
に
>The compiler plugs into the Microsoft Visual Studio* 6.0 and .NET environments
>offering developers the leading IDE for Windows*-based Fortran development.
って書いてあるから、6でもいけそうだと思ったんだけど
でも,
http://www.xlsoft.com/jp/products/intel/compilers/iftnwin.html
には.NET 2002/2003以上って書いてるし…
0319デフォルトの名無しさん
NGNGフリーコンパイラ
Salford FTN77 Personal Edition Compiler
をアンインストするにはどうすればいいのでしょうか?
宜しければ教えてください<(_ _)>
0320デフォルトの名無しさん
NGNG釣られてみる
[スタート]→[設定(S)]→[コントロール パネル(C)]→[プログラムの追加と削除]
0321デフォルトの名無しさん
NGNGm9(´∀`)アハハ八八ノヽノヽノヽノ \ / \/ \
0322319
NGNGアリガトございました & スイマセンでしたっ><
0323319
NGNGアリガトございました & スイマセンでしたっ><
0324319
NGNG0325デフォルトの名無しさん
NGNGメインプログラム、サブルーチンごとにfファイルが分かれている
場合、どのようにコンパイルしたらよいのでしょうか?市販の
コンパイラーだとメイクファイルを自動生成できるのですが、
手書きの場合、書き方がわからないのです。
たとえばkota1.f(メインファイル)kota2.f,
kota3.f(それぞれサブルーチン)のファイルを
実行するためにはどのような手順を踏めば良いですか?
どなたかアドバイスをお願いします。
0326デフォルトの名無しさん
NGNGFTN77 User's Guide 265ページ 「21. Using MK and MK32」
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG会社の上司からfortranを勉強するようにと
昔のソースコードをもらいました。
その一部に
IF ( CHAR(MS) .EQ. 1HS .OR.
- CHAR(MS) .EQ. 1HM ) GO TO 1
IF ( CHAR(LCML) .NE. 1H )
のようなソースがあります。
intel visual fortran8.0 の無料体験版を使っているのですが、
上のソースの1HS
1HM
1Hという定数??のところでエラーに
なってしまいます。この1HS
1HM
1Hって何の記号なのでしょうか?
fortran90ではどのように書けばよいのでしょうか?
どなたかアドバイスをお願いいたします。(..)
0330デフォルトの名無しさん
NGNG「ホレリス定数」でぐぐれ。
1HS, 1HM, 1H --> 'S', 'M', ' ' (または "S", "M", " ")
最後の奴はHの後ろにスペースかタブがあるのだろう。
IVFってホレリス定数が使えないの?
0331デフォルトの名無しさん
NGNG内容はCVFのhelpと同じこと書いてた.
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG同じようにリリースされているのに…(´・ω・`)
http://www.intel.co.jp/jp/developer/software/products/compilers/fwin/sysreq.htm
http://www.intel.co.jp/jp/developer/software/products/compilers/cwin/sysreq.htm
0334デフォルトの名無しさん
NGNG扱うには、どうしたら良いのか教えてください
ませんでしょうか。
0335名無しさん@Vim%Chalice
NGNG0336デフォルトの名無しさん
NGNG1 つ 8 バイト(倍精度浮動小数)としたら
約 1.2TB にもなるな。
0337名無しさん@Vim%Chalice
NGNG0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG疎な行列の逆を求めたいとかその類じゃないの?
それにはそれのアルゴリズムがある.
見くびってたらスマソ.でも説明不足は否めない.
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG4e5*4e5について逆行列を求めたいのです。
確かにアルゴリズムもあることはあるので
あとは、メモリの問題なんですね。皆さま
ありがとうございました。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNGなんにもわかってないのにわかったつもりなのは痛いぞ。
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNGあれFortranできるし
0346デフォルトの名無しさん
NGNGCompaq Visual Fortran じゃー実行エラーになるんだろう?
アドバイスお願いします。
ちなみに、こんな実行エラーです。
forrtl: severe (157): Program Exception - access violation
Image PC Routine Line Source
sp.exe 0040958A Unknown Unknown Unknown
sp.exe 00402226 Unknown Unknown Unknown
sp.exe 0040167C Unknown Unknown Unknown
sp.exe 0044D9E9 Unknown Unknown Unknown
sp.exe 0043ED84 Unknown Unknown Unknown
kernel32.dll 77E414C7 Unknown Unknown Unknown
0347デフォルトの名無しさん
NGNGLahey Fortran でも -chk オプションを付ければ実行時エラーになる
に一票。
0348デフォルトの名無しさん
NGNGCompaq Visual Fortranでの解決策はどうなんだべ?
0349デフォルトの名無しさん
NGNGaccess violation!
access violation!
access violation!
access violation!
0350デフォルトの名無しさん
NGNG> Compaq Visual Fortranでの解決策
/check /traceback で再コンパイル
↓
プログラムを走らせてエラーメッセージから問題を起こしている箇所を特定
↓
ソースを修正
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNGaccess violation!
access violation!
access violation!
access violation!
0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG処理系依存の関数が用意されているかと
CVF: SYSTEM, SYSTEMQQ, RUNQQ
0358デフォルトの名無しさん
NGNGサンクスコ
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGただで90使えるから以前使ってたけど、可無く不可無くってところ
今absoft使ってるけど、比べると速度が70%くらいだった
フリーにしては十分かなー
0361デフォルトの名無しさん
NGNGこの処理系では書式付きで画面に出力すると最初の1文字目が
行送り制御文字にされてしまいます。
これだけで使う分にはこれで良いのですが、他の環境からソースを
持ってきた時に表示がおかしくなってしまいます。
書式を使ったときに1文字目も普通の文字として表示させる方法は
ないでしょうか?
0362デフォルトの名無しさん
NGNGMacでFortranやりたいんですけど、
お勧めのソフト教えてください。
出来れば値段の高くないやつ・・・
0363デフォルトの名無しさん
NGNGCompaq Fortran 6.6 では コンパイラオプションで
/ccdefault:none を指定するか、
OPEN文で、CARRIAGECONTROL = 'NONE' と指定(当然処理系依存機能)
することによって復帰制御を無効にできる。
Fujitsu Fortranは持ってないのでスマソ
0364デフォルトの名無しさん
NGNGMacOS Xならとりあえずココ。
ttp://hpc.sourceforge.net/
0365デフォルトの名無しさん
NGNGFORTRAN77 なら GCC を使えばいいよ。タダだし。
最初から入ってる GCC には g77 は含まれてなかった気がするので、
自分でインストールする必要があると思うけど。
0366デフォルトの名無しさん
NGNGttp://www.hulinks.co.jp/software/pf/
これなんかどうでしょう?
IBMのFortranは新作だし結構安いと思えるが...
0367デフォルトの名無しさん
NGNG> IBMのFortranは新作だし結構安いと思えるが...
20万で?確かUSでは1000$しなかった気が。
0368名無し
NGNGwrite文で表示されるテキストをカラー表示することはできないんでしょうか??
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGPCは今使ってるXP(Visual Studio .NETがインスト済)と
サーバが組んであるRed Hat Linux 9.0がインストしてあるのを
持っています。
自宅でもFORTRANを使えるようにしたいのですが
何を入れるのが一番簡単に使える環境に出来るのでしょうか?
出来ればFORTRAN77形式で書いても動く環境がほしいです。
初心者なのでどなたかアドバイスをお願いします。
0371デフォルトの名無しさん
NGNG> PCは今使ってるXP(Visual Studio .NETがインスト済)と
> サーバが組んであるRed Hat Linux 9.0がインストしてあるのを
> 持っています。
> 自宅でもFORTRANを使えるようにしたいのですが
> 何を入れるのが一番簡単に使える環境に出来るのでしょうか?
自宅のPCがWindowsXPであればCygwinをイントールすれば使えるよ.
一番簡単かどうかは知らない.
0372370
NGNGCygwinはインストしたんだけど
その後が何をすればいいかが;;;
g77とかのインスト方法が今一分からないです;
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGf90を使うなら素直にRedhatにintel fortranの非サポート版をいれとけ
f77も当然サポートしている
0377370
NGNGintel-ifort8-8.0-40.i386.rpmをインストしました。
これでOKなのかな?
0378デフォルトの名無しさん
NGNGあなた次第.
0379デフォルトの名無しさん
NGNGというかLaheyから新バージョン(v7.1)リリースの通知が来まして
それによるとこのバージョンから新しく追加されたスイッチ
-nconcc を使うとコンソールでの行送り制御を抑制できるようです。
試しに体験版をダウンロードして使ってみたところ、
見事に他の処理系と同じように表示することが出来ました。
要するに表示を他と合わせたかったらバージョンアップしろ
ということらしいです。
まあ、新バージョンはSSE2命令を使った最適化にも対応してるし
そろそろバージョンアップしてもらおうかなぁ・・・
0380デフォルトの名無しさん
NGNG; ' ' ,
.;' uvnuvnuvn ;
; j i
; .,, ノ ,.==- =;
( r| j. ーo 、 ,..of
': ヽT  ̄ i  ̄} 救出費用の45億円(税金)?俺は払わないっつーの( ゚,_ゝ゚)プッ
': . i ! .r _ j /
'; | \ 'ー-=ゝ/
人、 \  ̄ノ
-‐  ̄ ' ーイ ̄ー-- 、
ヽ | ;' ヽ
0381デフォルトの名無しさん
NGNGVC++無しでも,コンパイルできるとの事でしたが,
エラーでVC++が必要だと言われてしまいます。
(ifort main.f)
main.fをコンパイルしてmain.exeを作成したいだけですが,
やはり,VC++が必要なのでしょうか?
よろしくお願いします。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNGどこでそんな嘘を聞いたんですか?必要ですよ。
もしかしたら最近出た
http://msdn.microsoft.com/visualc/vctoolkit2003/
でいけるのかもなー。試してみれ、ただだから。
0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNGコンパイルできても、リンクできないから実行ファイルできんよ
0394デフォルトの名無しさん
NGNGプログラムは基礎はある程度解るが、数学がサッパリ解らん。
どっか中学生レベルの数学を解り易く解説してるサイトないかな。
0395デフォルトの名無しさん
NGNGインデントがぐちゃぐちゃだったりするんです。でも、vimとかemacs
の整形コマンド使っても
do 10 i=1,100
do 10 j=1,100
....
10 continue
みたいな do 数字 連発 & 数字 continue で一発抜け、みたいなコードが
思うように整形されないんですよね。
皆さんはどんなエディタもしくは整形ツールを使っていらっしゃいますか?
なにか良い知恵がありましたら教えて下さい m(_ _)m。
ちなみにできればUnix系で動く環境がいいです。
0396デフォルトの名無しさん
NGNG数学ってあなた・・
そのコードは何の計算してるコードよ?
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNGReal programmer don't use indent. (嘘)というのはおいといて、
その場合だと emacs の fortran mode とかで、do 10 i=1,100 と
do 10 j=1,100 の 2 行を無理矢理同じレベルにして先に進むしか
ないような気がしますね。切ないとこだな。
0399デフォルトの名無しさん
NGNGこういったライブラリとはプログラムにどのように用いればいいのでしょうか?
ライブラリで定義された関数を用いてプログラムを書けばよいということでしょうか?
PCは素人でFortranの組み方ぐらいしか知りません。よろしくお願いします。
用いているPCはpen4でコンパイラはIFCです。
0400デフォルトの名無しさん
NGNGMKL買ってリンクする。使い方はMKLのマニュアルに書いてある。
0401デフォルトの名無しさん
NGNGそのFortranにライブラリは無いか?
CVFならCXMLとかみたいに
0402デフォルトの名無しさん
NGNGAtlasとか…
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGやはり自分でプログラムを地道にやっていくことでしょうか?
0405デフォルトの名無しさん
NGNGGoogle 検索: FORTRAN
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&ie=sjis&q=FORTRAN
0406デフォルトの名無しさん
NGNGキャッシングのために巨大な配列を作りたいのですが、
巨大な配列を宣言するとsegmentation faultと言うエラーがでます。
何らかの方法で巨大な配列を作る方法はありますか?
REAL CACHE(10^8)
ぐらいの配列にしたいです。もしくは、
REAL CACHE(10^4, 10^4)
という形でもかまいません。
0407デフォルトの名無しさん
NGNGこんなんでどうですか?一応動いたけど。
program ftest
implicit none
real(8), allocatable :: cache(:,:)
allocate(cache(10000,10000))
cache(10000,10000)=1.0d0
print *, cache(10000,10000)
end program ftest
0408デフォルトの名無しさん
NGNGg95でも動いた.
0409デフォルトの名無しさん
NGNG(Fortran) Static Library & (C++) Console Application
という構成なのだが…
Fortranのサブルーチンに配列を渡す設計なんだけど
/check:bounds 付きでコンパイルすると
_for_emit_diagnostic が参照できない LNK2019 を吐かれる。
どうにかなんないのかな、これ。
教えて、偉い人。
0410デフォルトの名無しさん
NGNGttp://softwareforums.intel.com/ids/board/message?board.id=5&message.id=9214
0411デフォルトの名無しさん
NGNGありがとうございます。
上記のスレの方法でLNK2019 は出なくなったんだけど
形状引き継ぎ配列だと ubound(array) で 0 が返されます。
よって計算出来ない状態…助けて下さい…
// C++
extern "C" void FortranSub(int, int[]);
int _tmain(int argc, _TCHAR* argv[])
{
int n = 10;
int a[5] = { 0 };
_tprintf("%d\n", a[0]); // => 0
FortranSub(n, a);
_tprintf("%d\n", a[0]); // => 10
return 0;
}
// Fortran
subroutine FortranSub(n, a)
!DEC$ ATTRIBUTES C, ALIAS : "_FortranSub" :: FortranSub
!DEC$ ATTRIBUTES VALUE :: n
!DEC$ ATTRIBUTES REFERENCE :: a
integer, intent(in) :: n
integer, intent(inout) :: a(:)
print*, lbound(a), ubound(a), size(a) ! => 1 5 5
a = a + n
end subroutine FortranSub
0412デフォルトの名無しさん
NGNG形状引き継ぎ配列の場合、引数は配列先頭のアドレスではなく配列記述子を使って渡されます。
(先頭アドレスだけでは配列の上/下限、範囲などの情報が伝わらないため)
詳しくは「ユーザーズ・ガイド Vol I」の「配列と Fortran 配列記述子の処理」等を参照して下さい。
0413デフォルトの名無しさん
NGNGありがとうございます。
上記forum内を検索して、Descriptorについて言及しているスレを発見しました。
それに従って、CVFサンプルのDESCRIPTを眺めてはいたのですが…
va_listが出てきた時点で閉じてしまいました。
でもこの方法でやるしか無いようですね。
ざっと見たところこんな感じでしょうか。
extern "C" {
struct Descriptor {..};
void FortranSub(int, struct Descriptor*);
}
// _tmain
int n;
int a[size];
struct Descriptor* dp;
// ここで記述子割り当て処理
// その後実行
FortranSub(n, dp);
実際に作ったらまた書きます。
こんなことやってる人あまり居ないとは思うんですが、参考になれば…
0414デフォルトの名無しさん
NGNGそんなのマニュアルに載ってる
0415デフォルトの名無しさん
NGNG載ってるには載ってるが淡々とだろ
0416デフォルトの名無しさん
NGNG形状引継ぎ配列として渡さないのが一番じゃないの?
だって、f90の仕様では形状引継ぎ配列はinterfaceでプロトタイプ宣言みたいに
書いてやらないとダメじゃん。C++側でinterfaceが用意できないんだから
無理なんじゃないの?諦めて整合配列にしなよ。
0417411
NGNGなんとかできました。
>>410 >>412 >>414-416
いろいろありがとうございました。
#include <stdarg.h>
enum { DP_ROWORDER, DP_COLUMNORDER, DP_MAXRANK = 7 };
typedef struct {
int number;
int distance;
int lbound;
} DPTRIPLET;
typedef struct {
int address;
int size;
int offset;
int bit;
int rank;
int reserved;
DPTRIPLET dim[DP_MAXRANK];
} DESCRIPTOR, *LPDESCRIPTOR;
0418411
NGNG{
dp->address = (int)address;
dp->size = size;
dp->offset = 0;
dp->bit = 1;
dp->rank = rank;
dp->reserved = 0;
int inc = 1, index = 0;
if (order) { inc = -1; index = rank - 1; }
va_list vl;
int distance = size;
va_start(vl, rank);
for (int i = 0; i < rank; i++)
{
int number = va_arg(vl, int);
dp->dim[index].number = number;
dp->dim[index].distance = distance;
dp->dim[index].lbound = 1;
distance *= number;
index += inc;
}
va_end(vl);
}
extern "C" void FortranSub(LPDESCRIPTOR);
で、いけました。改行大杉言われたのでちょっと詰めました。
0419デフォルトの名無しさん
NGNG教えてください。
0420デフォルトの名無しさん
NGNG#include <stdio.h>
int main()
{
int i, n, total=0;
char tmp[11];
printf("input num:\n");
scanf("%d", &n);
sprintf(tmp, "%010d", n);
for (i=0;i<10;i++) total = total + tmp[i] - '0';
printf("%d --> %d\n", n, total);
return 0;
}
0421419
NGNG0422デフォルトの名無しさん
NGNGimplicit none
interface
function foo(n)
integer, ml_external :: foo
integer, intent(in) :: n
end function foo
end interface
integer :: n, m
print *, "input n"
read *, n
print *, foo(n)
end program hoge
#include <stdio.h>
int foo(int* n)
{
int i, total=0;
char tmp[11];
sprintf(tmp, "%010d", *n);
for (i=0;i<10;i++) total += tmp[i] - '0';
return total;
}
0423デフォルトの名無しさん
NGNG文字列変数に数字を書き込んで、後はそれぞれの桁の文字のアスキーコードを
数字に変換して足し合わせてます。
program nnumber
implicit none
integer :: n, i, isum
character(20) :: cn
write(6,*) 'input natural number'
read(5,*) n
write(cn,*) n
isum=0
do i=1, len(cn)
if( cn(i:i).ne.'' ) then
isum=isum+(ichar(cn(i:i))-48)
endif
enddo
write(6,*) 'result=', isum
end program
0424419
NGNGcharacter(20) :: cn
write(cn,*) n
if( cn(i:i).ne.'' ) then
isum=isum+(ichar(cn(i:i))-48)
のそれぞれのやってることの意味がよくわかりません。
初心者ですみません。おしえてください。
0425デフォルトの名無しさん
NGNGcharacter(20) :: cn
20文字分の文字列変数 cn を定義。
write(cn,*) n
整数を文字列に変換します。これ知ってると便利です。
普通、 cn の場所にはファイルのUNIT番号が入るんですが、
文字列変数を指定することもできます。こうすれば、なんでも(多分)文字列に
変換できます。ファイル名に連番を付けて作成することもこれを使うと楽です。
if( cn(i:i).ne.'' ) then
文字列変数の i 番目の文字が空白だったら読み飛ばしの意味です。
あんまり意味ないかもしれません。ここは適当に書いてます。
isum=isum+(ichar(cn(i:i))-48)
ichar()組み込み関数で文字列 cn の中の i 番目の文字のアスキーコードを
取得します。アスキーコードでは、"0"が48, "1"が49, "2"が50
のように順番に数字キャラクタとコードが対応してるので、アスキーコード値から
48を引くことで文字列型から整数値への変換をしてます。
文字から整数へ変換する組み込み関数が見つからなかったので、自前でやってます。
0426デフォルトの名無しさん
NGNGimplicit none
integer(kind=4) :: num
integer(kind=4) :: i
integer(kind=4) :: keta=0
integer(kind=4) :: isum=0
read(5,*) num
if(num<=0) stop
do
if(num/(10**keta)>0) then
keta=keta+1
else
exit
endif
enddo
do i=keta-1,0,-1
isum=isum+num/(10**i)
num=mod(num,10**i)
enddo
print *,isum
end program test
0427419
NGNG大変大変勉強になりました。ありがとうございました。
0428デフォルトの名無しさん
NGNG> 文字から整数へ変換する組み込み関数が見つからなかったので
こんなときこそ内部ファイルを使って
program hoge
implicit none
integer(kind=SELECTED_INT_KIND(9)) :: n
integer, dimension(10) :: a
integer :: m
character(len=10) :: str
read *, n
write(str, "(I10.10)") n
read(str, "(10I1)") a
m = sum(a)
print *, m
end program hoge
0429デフォルトの名無しさん
NGNGimplicit none
character(len=100) :: cnum
integer :: i
integer :: iwa=0
read(5,'(a)') cnum
write(cnum,'(a)') adjustl(cnum)
do i=1,len_trim(cnum)
iwa=iwa+ichar(cnum(i:i))-ichar('0')
enddo
print *,iwa
end program test
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG以下のようなメッセージが出てきました。
list in: end of file
apparent state: unit 10 named inpdt
last format: list io
lately reading direct formatetd externalIO
Aborted (core dumped)
どうすればいいのか.......
0432デフォルトの名無しさん
NGNG読み込むファイルの中身がおかしいか、読み込むデータと
プログラム側のread文が正しく対応してないかのどちらかだと思われ。
デバッガでトレースすれば?
0433デフォルトの名無しさん
NGNG10 で割っていくのが最短のような気がしますが...
9876 ==>
mod(9876,10) + mod(987,10) + mod(98,10) + 9
勘違いでしたらごめんなさい.
0434デフォルトの名無しさん
NGNG何百桁の自然数でもオケーなので、割り算するより強力だね。
実用上は意味無いだろうけど。
0435デフォルトの名無しさん
NGNG>>426
>>434
>>429
0436デフォルトの名無しさん
NGNG*10**40
など、ある実数に大きな数字をかけるとへんてこな答えが出るか NAN となってしまいます。
*10**10とかくらいからおかしくなってきます。
これはどうすれば良いんでしょうか?
コンパイラはGnu Fortran 77です。
0437デフォルトの名無しさん
NGNG単精度・倍精度・浮動小数点などについて調べてみてください。
0438デフォルトの名無しさん
NGNGエディタの色付けの恩恵があって見やすいと思ってしまう orz
0439デフォルトの名無しさん
NGNG質問の仕方がなんだかアレですね。
・目的は何なのか?
・何を解決したいのか?
・解決しようとする過程で、自分が詰っている箇所の詳細な説明。
を丁寧に説明すれば助けてもらえると思います。
0440デフォルトの名無しさん
NGNGすいません。ちゃんと書きます。(^ ^;;
以下の式でf(500)を求めようとするとエラーが出てしまいます。
それで、部分部分に細かく分けて試したところ、*10**40等を含む部分の結果がおかしいのです。
そのためexp(...)=1となってしまい、/0 になってしまうようです。
(関数電卓で計算すると約3.27E+62になるはずです)
そこを*10**9くらいにすると、それに応じた正常な結果がでるので、どうしたもんかと。。。
ちなみに、コンパイラはGnu Fortran77です。
double precision f,h,c,k
integer t,x1
f(x) = 8*pi*h*c*(10**45) /x /(exp(h*c/(k*t*x*10**(-9)))-1)
pi = 3.1415
h = 6.6261*(10**(-34))
c = 2.9979*(10**8)
k = 1.3807*(10**(-23))
t = 200
x1 = 500
write(*,*) f(x1)
0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGその段階で整数の桁あふれが起こってるんでしょう。
倍精度浮動小数点型の定数の表現を調べること。
h=6.6261d-34
あと g77 使ってる環境なら ftncheck もあると思うので、
使えるようになっときましょう。
さらについでにいうと、t とか x1 とかは integer では
なく double precision にすべきだと思う。これはモデル
の段階での話だけど。
0443デフォルトの名無しさん
NGNG単位系も大きすぎる気がする。原子単位系とか使ったら良くないか?
0444デフォルトの名無しさん
NGNG?????????????????
となる時があるのですが、これは実数がNaNになっているのですか?
それともINFになっているのですか?
isnan文で判定できなくて困っています。
さらに、
++++++++++++++
なる時もあるのですが、これは何ですか?
0445444
NGNGIFCでは、
+++++++++++++++++ 正の無限大
----------------- 負の無限大
???????????????????? 非数
らしいです。
質問変更
変数が無限大かちゃんとした値かを
判定できる関数ってないのですか?
0446デフォルトの名無しさん
NGNG今ifcが手元にないので分からないけど、ひょっとして
xが無限大だと「x+1.eq.x」が真になったりとかしない?
0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNGcall tree くらいだったら前出の ftnchek で
出してくれるけど…
0450デフォルトの名無しさん
NGNG環境依存になるが、IVF(CVF)なら
fordef.for で定義されてるシンボルと
FP_CLASS関数を使えば判別出来る。
>>448
こんなのがあった。
解析・構図(FORTRAN 用)
http://www.vector.co.jp/soft/win95/prog/se308859.html
使ったことないが。
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGプログラムの内容を説明するときに役立ちます。
イベントドリブンなプログラムを
「フローチャート書いて説明しろ」
なんて言われてもねぇ・・・(泣
0453デフォルトの名無しさん
NGNGdo j=1,10
write(1,*)x(i,j)
end do
end do
テキストファイルに i 行 j 列の表として出力する方法はありませんか?
0454デフォルトの名無しさん
NGNG出来たファイルをawkで整形しる
$ awk '{if(NR%10==0)print;else printf"%s ",$1}' 1.txt
0455デフォルトの名無しさん
NGNGdo j=1,10
write(*,*)(x(i,j),i=1,10)
end do
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNG解析・構図(FORTRAN 用)
はちゃんとしたフローチャートじゃないんだよね・・
テキスト出力だし。やっぱしないのかねぇ。。
0458453
NGNG良いもの教えてくれてありがとう御座います。
awk使ってみます。
>>455
それだと倍精度実数からなる要素の場合みたいに
データが長いと、途中で勝手に改行されちゃいませんか?
0459デフォルトの名無しさん
NGNGprogram main
implicit none
integer i,j;
character(len=1024) :: ch
integer, parameter :: n=10
real(8) :: x(n,n)
do i=1, n
write(ch,*) (x(i,j),j=1,n)
write(*,*) trim(ch)
enddo
end program main
0460デフォルトの名無しさん
NGNG勝手に改行は書式が*の問題だろ
書式を指定尻
nmax=10
do j=1,nmax
write(1,'(<nmax>f10.6)')(x(i,j),i=1,nmax)
end do
0461デフォルトの名無しさん
NGNGあなたのお家はどこ
私のお家はスゐッツランドよ
綺麗なおすぎのピーコなのよ
ヤーッ
ホーッ
Fortranranran
ヤホ
Fortranranran
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG言語仕様が簡単だから、最適化もやたらと効きそうだし
0466デフォルトの名無しさん
NGNGガイドラインキボンヌですよ.
しかも,リストとかツリーってどうやって作るの? fortran77 で.
0467デフォルトの名無しさん
NGNGそうっすか?C++と比べると、かなりストレートな言語だと思うけど
0468デフォルトの名無しさん
NGNGそれは比べる対象が悪いかと
0469デフォルトの名無しさん
NGNG問題なのは未だにFORmula TRANslaterとして、モジュール化もへったくれも無
いコードをこのクソ言語で書かれるとどーしよーもない事なんだよな。
ま、Cでポインタ覚えたてのアホが書くコードも、C++でtemplate覚えたての
カスが書くコードも一緒か。
0470デフォルトの名無しさん
NGNGftnchkek みたいな使い方で,望ましくないコーディングも教えてくれる
やつがあればいいのにね w
0471デフォルトの名無しさん
NGNG最近授業で習い始めて、「Fortranから派生した」みたいなことを聞いたんですが、、
0473デフォルトの名無しさん
NGNG0474473
NGNG0475466
NGNGリストとかツリーを使おうと考えるからいけないんですね.
Fortran には Fortran の考え方がある,と.
また,紙に書いて煮詰まったものしかコードに表せないのも,
Fortran の仕様ですね.
0476デフォルトの名無しさん
NGNGFortran77の制限内でも案外楽に実装できるぞ。
メモリ空間なんて所詮一次元の配列だし(暴論)、
その配列の添字がポインタの代わり、
ポインタのポインタが使いたかったら、その添字を値とする整数配列を作る。
>>466 がんばれ
0478デフォルトの名無しさん
NGNGIMPLICIT REAL*8(A-H,O-Z)
common /hoge/ arr(10)
data arr(1) /'Yo'/
と宣言された変数がありました.これを g77 でコンパイルすると
data arr(1)/'Yo'/
^
Type disagreement between expressions at (?) and (^)
と言われます.しかし,文字列を Hollerith 定数にするとコンパイルが通ります.
なぜなのでしょうか?できれば Hollerith 定数は避けたいのです.
arr はなぜか実数として宣言されています.
common の前で character と宣言してもコンパイルが通りませんでした.
0479デフォルトの名無しさん
NGNGどうかよろしくおねがいします。
0480デフォルトの名無しさん
NGNG買え
http://www.saiensu.co.jp/books-htm/ISBN4-7819-0511-0.htm
0481デフォルトの名無しさん
NGNGパスカルの三角形(>>4)を求めて、メモリに保存して、逆から出力していけばええんで内科医
0482デフォルトの名無しさん
NGNG./a.out | tac
0483479
NGNGありがとうございました! なんとかがんばってみます。
0484479
NGNG0485デフォルトの名無しさん
NGNG宿題の文面を晒さないと何がしたいのかさっぱり分からないよ.
1 2 1
1 1
1
0486デフォルトの名無しさん
NGNGてのはガイシュツ?
0487デフォルトの名無しさん
NGNG>>29
>>385-388
>>461
0488デフォルトの名無しさん
NGNG逆じゃない三角形は作れるの?
まず普通にできてから,逆を考えた方がいいかもよ.
出力は write (fmt='()') で整形しないといけないよ.
0489デフォルトの名無しさん
NGNGprogram joke
write(6,'("1 2 1")')
write(6,'(" 1 1")')
write(6,'(" 1")')
stop
end
0490484
NGNG1 1 また、これをピラミッド型にしろともいわれました。
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
0491デフォルトの名無しさん
NGNG0492484
NGNGinteger k(8,8)
n=8
k(1,1)=1
do 1 i=2,n-1
k(i,1)=1
k(i,i)=1
do 2 j=2,1
k(i+1,j)=k(i,j-1)+k(i,j)
2 continue
1 continue
do 3 i=1,n-1
write(*,5)
3 continue
5 format (' ',714)
stop
end
です。
0493484
NGNG言葉が足りずすいませんでした! こういった形です。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
0494デフォルトの名無しさん
NGNG:::::1 1
::::1 2 1
:::1 3 3 1
::1 4 6 4 1
:1 5 10 10 5 1
1 6 15 20 15 6
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG配列のインデックスが逆になっている (C 言語みたいな) ところが多いですね.
修正しないと直角三角形にもなりませんよ.
ところで >>484 ではありませんが,
きれいに三角形を出してみようとしました.
ところが,fortran の経験がほとんど無く,文字列を操作して
write() に与える fmt 文字列を作ることさえできません.
adjustl() とか trim() は fortran77 にありますか?これが無いと話になりません.
Professional Programmer's Guide to Fortran77 には書いてないのですが...?
0497デフォルトの名無しさん
NGNGdimension XX(120)
XX(0)=0.
XX(300)=1.5
みたいな代入があって、これが通るのが信じられません。単にコーディングミス
かとも思ったのですが、作者も用途も全然別なのに古いプログラムでは結構見ます。
そしてなぜかまともに動いています。(理解に苦しみますが)
-fbounds-check等をつけてコンパイルすると当然動きません。
C等ならまず駄目だと思いますがFORTRANは仕様としてOKなのでしょうか?
0498496
NGNGwrite() が勝手に改行しないようにするために,fmt='(I5$)' のようにドルを
付けましたが,これが fortran77 か何を見れば分かるのか教えてください.
気軽に仕様を調べられないと,すごくストレスを感じますよね.
>>492
_____|_____|_____|_____|____1
_____|_____|_____|____1|_____|____1
_____|_____|____1|_____|____2|_____|____1
_____|____1|_____|____3|_____|____3|_____|____1
____1|_____|____4|_____|____6|_____|____4|_____|____1
アンダーバーは空白,縦棒は本当は出力しません,
ということで,等幅フォントで見てください.
どういう順番で出力すればできるか気付いてもらえるかと思います.
0499デフォルトの名無しさん
NGNG英文で良ければ
ttp://www.swcp.com/~walt/F77_std/f77_std.html
ttp://www.fortran.com/fortran/F77_std/rjcnf0001.html
日本語では良い資料が見つからなかったのですが
富士通Fortran文法書
(標準規格からの拡張部分に色分け有り。ただしFortran95)
ttp://www.cc.nao.ac.jp/fsunman/japanese/Fortran/index.html
JISデータベース(こちらもFortran95相当の規格しか閲覧できない)
ttp://www.jisc.go.jp/
0500デフォルトの名無しさん
NGNGADJUSTL, TRIM, 書式末の'$'はFORTRAN77の仕様ではないよ。
大抵の処理系はサポートしてると思うけど。
0501デフォルトの名無しさん
NGNGFORTRAN90で書いても結構面倒だったよ.
0502デフォルトの名無しさん
NGNG普通にプログラムでは、配列の外にアクセスするのってOKではないでしょう。
FORTRANでは配列は先頭アドレスからいくらでアクセスするから、エラーチェックをかけなければ走らないということは
ないでふ。real*8だとして
XX(300)にアクセス=XXの先頭アドレス+8bit*300にアクセス
0503デフォルトの名無しさん
NGNGIW=6
DO 10 I=1,N,1
WRITE(FMT, '(2H(T,I2,1H,,I2,1HI,I2,1H))') (N-I)*IW/2+1, I, IW
WRITE(*, FMT) (K1(I,J), J=1,I,1)
10 CONTINUE
0504496
NGNG(・∀・)イイ!! ケド、改行の抑止の valid な方法はどこだろう?
例が少ないのは仕方がないのでしょうが,用語を覚えるまで実際に書けないです.
「手元の処理系で動くから」って,悪名高い BASIC のマネか知らん.
>>500
ですよね...
文字列処理がこんなに貧弱なのに,fortran で処理系を書かれる方も
いらっしゃるそうですね.
出力の整形ルールだって,今からでも C の printf 作ろうよ,って思います.
>>503
すごい...write が低機能なんじゃなくて,私が低いんですね.
しかも配列のインデックスの順番がわざとだったとは orz
0505デフォルトの名無しさん
NGNGthanks. 結構業界では有名なプログラムだったのでひょっとしたら、と思いまして。
0506デフォルトの名無しさん
NGNG>>503
折れのコンパイラ (Compac cfal for Alpha Linux) では駄目だった。何故だろう?
f90: Error: ***.f90, line **: This format specifier must be of type INTEGER. [FMT]
WRITE(*, FMT) K(I, 1:I)
---------------^
ということで自分で書いてみた。
INTEGER, PARAMETER :: N=12, IW=6, M=N*IW
INTEGER :: I, K(0:N) = 0
CHARACTER*M :: S = REPEAT(' ',M)
K(1) = 1
DO I = 1, N
K(1:I) = K(1:I) + K(0:I-1)
LL = (N-I)*IW/2+1
WRITE(*,'(A,20I6)') S(0:LL),K(1:I)
END DO
0507506
NGNG改訂版
INTEGER, PARAMETER :: IW=6, MAX=30, MS=(MAX-1)*IW/2+1
INTEGER :: I, N
INTEGER :: K(0:MAX) = 0
CHARACTER*MS :: S = REPEAT(' ',MS)
write(*,*) "Pascal's triangle. Enter N:"
read(*,*) N
K(1) = 1
DO I = 1, N
K(1:I) = K(1:I) + K(0:I-1)
WRITE(*,'(A,50I6)') S(1: (N-I)*IW/2+1), K(1:I)
END DO
0508デフォルトの名無しさん
NGNGテキトーに書いてみた。
parameter (nmax=20)
integer*4 iv(nmax),ivp(nmax)
character cfmt*17
open(61,file='output.txt',RECL=256)
len = 6
isp = len*nmax/2
do 10 k = 1, nmax
cfmt='(0000x,0000i0000)'
ni = k
do 20 i = 1, ni
iv(1)=1
iv(ni)=1
if ((i.ge.2).and.(i.le.ni-1)) then
iv(i) = ivp(i-1) + ivp(i)
end if
20 continue
do 30 i = 1, ni
ivp(i) = iv(i)
30 continue
isp = (len*nmax/2) - (k-1)*len/2
write(cfmt(2:5),'(i4)') isp
write(cfmt(8:11),'(i4)') ni
write(cfmt(13:16),'(i4)') len
write(61,cfmt) (iv(i),i=1,ni)
10 continue
close(61)
stop
end
0509506
NGNG>f90: Error: ***.f90, line **: This format specifier must be of type INTEGER. [FMT]
>WRITE(*, FMT) K(I, 1:I)
>---------------^
すいません。FMT を character で宣言していなかったせいでした。
character*11 FMT
を入れたら動きました。(はづかし
0510デフォルトの名無しさん
NGNGINTEGER, PARAMETER :: IW=6, MAX=30
INTEGER :: I, N
INTEGER :: K(0:MAX) = 0
CHARACTER*11 :: FMT
write(*,*) "Pascal's triangle. Enter N:"
read(*,*) N
K(1) = 1
DO I = 1, N
K(1:I) = K(1:I) + K(0:I-1)
WRITE(FMT, '(2H(T,I2,1H,,I2,1HI,I2,1H))') (N-I)*IW/2+1, I, IW
WRITE(*, FMT) K(1:I)
END DO
END
0511デフォルトの名無しさん
NGNGparameter (max=30, iw=6)
integer c(0:max), d(0:max)
character*11 FMT
data c /(max+1)*0/
write(*,*) "Pascal's triangle. Enter N:"
read(*,*) N
c(1) = 1
do i = 1, N
do j = 0, i
d(j) = c(j)
end do
do j = 1, i
c(j) = d(j) + d(j-1)
end do
WRITE(FMT, '(2H(T,I2,1H,,I2,1HI,I2,1H))') (N-i)*iw/2+1,i,iw
write(*,FMT) (c(j), j=1,i)
end do
stop
end
0512デフォルトの名無しさん
NGNGimport Numeric
iw = 6
N = input("Pascal's triangle. Enter N: ")
c = Numeric.zeros(N); c[1] = 1
for i in range(2,N+1):
c[1:i] = c[1:i] + c[0:i-1]
bln = ' '*((N-i)*iw/2+1)
fmt = ('%' + str(iw) + 'd')*(i-1)
print bln + fmt % tuple(c[1:i])
0513デフォルトの名無しさん
NGNG私は >>497 ではありませんが,ちょっと 1995 年頃に書かれたプログラムを
コンパイルする過程で,大量の warning に出逢いました.
out of definition range です.
わざわざ dimension を使っておきながら,越えた範囲に堂々とアクセスしているんです.
しかも,そのプログラムは bug fix 済みな感じで使われています.
目的が知りたいです.
浅学の私では,dimension の数字を増やせば済むのでは,と考えてしまいます.
0514デフォルトの名無しさん
NGNGamd64 + Linux な環境でIMSL使いたいので検討中なのです。
ttp://www.hulinks.co.jp/software/pf/
速度や安定性について、>>360 さんみたいな体験談や情報の在処お持ちの方いらっしゃいますか?
0515479です
NGNG0516デフォルトの名無しさん
NGNG堂々と出回っている理由を知る者はいないのですか... orz
0517デフォルトの名無しさん
NGNGサブルーチンで引数として長さが不定の配列をもらうとき、今だと
subroutine sub(a, ...)
dimension a(*)
…
みたいに宣言するよね。
でも、これが正式な規格となる前(FORTRAN77以前?)は、
dimension a(1)
や、>>497みたいに、適当な配列サイズの宣言をしてコンパイラを騙す
「テクニック」があったそうな。
もちろん、今となっては過去の遺物。
0518デフォルトの名無しさん
NGNGEQUIVALENCE で他の配列に重ねていないか?
0519デフォルトの名無しさん
NGNG過去の遺物とは言え、fortran90コンパイラでコンパイルしてもエラーにはならなくない?
自分の場合、全てのsubroutine, functionに対してinterfaceを宣言したヘッダファイルを
includeしてバグを回避してたりする
0520516
NGNGそうだったんですか!ありがとうございます.
使うときは,ちゃんとそれなりの大きさで定義済みだから
正しく動いていたんですね.
今度 dimension a(*) だと意識しながら読んでみようと思います.
! あれを書いている人のコンパイラは warning を出さないのだろうか...
0521名無しさん@そうだ選挙に行こう
NGNG0522名無しさん@そうだ選挙に行こう
NGNGディストリビュージョンは?
0523デフォルトの名無しさん
NGNG自分で調べろ
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNGprogram hoge
use DFPORT
integer :: r
r = system('lifegame.exe')
end program
0527デフォルトの名無しさん
NGNGまずは簡単そうなライフゲームをのソースコードを探して,
Fortran90 に書き直してみるとか?
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNGfedoracore1です。
おながいします。
0530デフォルトの名無しさん
NGNGman gzip
man tar
man rpm
0531デフォルトの名無しさん
NGNGttp://jp.xlsoft.com/documents/intel/flin/relnotes_j.pdf
これで分からないようなら入れてもどうせ使いこなせないので諦めた方がいい。
0532522
NGNGゴメンネー.Debian に入れる方法しか知らないの.
でも,配布の .rpm はもともと Fedora に向けたパッケージ (?) だから,
きっと簡単に入ると思うよ.ちょうどいいスレもあるし.
ttp://pc5.2ch.net/test/read.cgi/linux/1007024009/
インストールできればすごく速い生活が送れるよ.ガンガレ.
0533ど素人
NGNGどうやってもわからないんです
--------
150までの任意の整数値Nをあたえ、以下を求めるプログラムを作成する
・N番目に小さい素数
・N番目までの素数の和
・N番目までの素数の逆数の和
--------------
というもので”エラトステンスのふるい”を使うことや、
大体、素数の個数を170ぐらい出せばいいと言う事は思いつくんですけど
プログラムに書き表すことができません。
手の空いている方がいらっしゃいましたら、
何卒手助けをお願いいたします……(´Д`;)
0534デフォルトの名無しさん
NGNG「エラストテネス」か「エラトステネス」で検索してみそ。きっとヒントが見つかるから。
0535デフォルトの名無しさん
NGNG小さい方からN個の素数が分かれば後は簡単.
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGこの辺で素数を探して、
a(1)=2
a(2)=3
a(3)=5
・・・・・
0538デフォルトの名無しさん
NGNGFortran90で書いたら,60行位で終わった.
夏休みの課題だとすれば短過ぎるか.
0539デフォルトの名無しさん
NGNG何行で書けますか?
0540538
NGNG空行を抜いたら57行だった.ただし,150と言わず何個でも
対応出来るようにde/allocateしている.150に制限して,
飾りのprintを外すともう少し短くなるか.
0541デフォルトの名無しさん
NGNG充分な大きさの配列を用意して
ふるいにかけて素数だけ集めて
Nを入力して
和を計算して
・・・
と、だらだらやっても50行程度で終わるな。
サブルーチンに分けたりするともうちょっとかかるかもしれないが。
0542ど素人
NGNG>>534様
ご指摘の通りエラトステネスです
期限が迫りテンパっておりました申し訳ないです
>>手助けをしてくださった方々
本当にありがとうございます
ぢつは上の課題というのは再履修に与えられた課題でありまして
……これが出来なければ4年目の情報処理となってしまうわけでして
無理を承知でお願いいたします。プログラム文を教えていただけないでしょうか
助けてください
「必死だな」と罵られても構いません、むしろ罵ってくださいませ
もう必死です(;´Д`)
0543デフォルトの名無しさん
NGNGまあ,わからないんだったら,もう一年やってもいいんじゃない.
0544デフォルトの名無しさん
NGNG本当に必死なら、どんな物でもいいから自分でつくったプログラムを
晒して下さい。
多少なりとも自分で考えた上でプログラムの間違いを指摘して欲しい、
と言うのであれば協力もしてやろう。
だが、授業内容を理解していないのに課題を人に丸投げするような奴は
単位取れなくて当然だ。
0545デフォルトの名無しさん
NGNGこれは3年前の質問ですか?
http://fc2bbs.com/bbs?action=reply&uid=5595&tid=1947619
エラトステネスのふるい法は>>4でもソースはあるし、ぐぐればあちこちにあるんだけど。
0546545
NGNG0548デフォルトの名無しさん
NGNGソースをうp plz
0549538
NGNGimplicit none
integer :: n
integer,dimension(:),allocatable :: iprime
!自然数を入力
read(*,*) n
allocate(iprime(n))
!分割してサブルーチンを作ると読み易い
call get_nprime(iprime)
!できた素数配列を処理
!やることはN番目の素数,N個の素数の和,N個の素数の逆数の和の表示
call work(iprime)
deallocate(iprime)
!れぽーと提出おめでとう!
end program test
多分講義はFORTRAN77でやっていると思うから,講義と全く触れて
いないプログラミングをしている時点でレポートとして認められない
と思う.
0550デフォルトの名無しさん
NGNGinteger::Il(1:11)=(/0,(lI,lI=2,11,1)/)
do1l1=3,2,-1
1 forall(ll=l1*2:11:l1)I
ll(ll)=0
do11lI=2,11,1
Il(l1)=Il(lI)
11 If(Il(lI)/=0)l1=l1+1
read*,l1
print*,l1,Il(l1),sum(Il(1:l1:1),1),sum(1./Il(1:l1:1),1)
end
10行に見えるのは継続行があるためです。
どこかは自分で探しましょう。
また、このままではN=5までしか計算できません。
どこを直せばよいかは自分で探しましょう。
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNGっていうか、配列の宣言と入出力、END文書いたら残り3行しかない。
マルチステートメント使ってもいいなら書けるけど。
0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNGLoaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0x940 has exited with code 0 (0x0).
という警告がでます。dllが壊れてるんでしょうか?直し方が分かる方教えてください。
0555デフォルトの名無しさん
NGNG自己レス。
実行ボタン以外の場所を押してました。情けない・・・・・
0556デフォルトの名無しさん
NGNG-------------------------
open(1,file='hogehoge')
do i = 1, 60*60
:
:
何か計算しつつ、ファイルへ書き出し
:
:
end do
close(1)
----------------------
とするのと、
CASE2
----------------------
do i = 1, 60*60
:
:
何か計算。
:
:
end do
open(1,file='hogehoge')
do i = 1, 60*60
ファイルへ書き出し
end do
close(1)
-----------------------------
とするのでは、明らかに速度が違います。
CASE2のほうが速くなるんですが、この理由って何でしょうか?
ただの気のせいでしょうか?
0557デフォルトの名無しさん
NGNGCPUの計算速度 >>> ファイル等入出力の速度
なので一般的に入出力はなるべくまとめた方が速くなります。
0558デフォルトの名無しさん
NGNGFFT(高速フーリエ変換)のプログラムを作ってます。
今まで処理データ数が16000個くらいで、順調に計算できていました。
しかし、データ数を70000個くらいに増やすと、出力ファイルに
『*』印がたくさん出てきます。
ちなみに言語はフォートランで出力はCSV形式で出力してます。
これはフォーマットの設定が悪いんでしょうか?
0559デフォルトの名無しさん
NGNGFORTRAN専用スレッド
http://pc5.2ch.net/test/read.cgi/prog/1052290911/131
0560デフォルトの名無しさん
NGNGあなたのお家はどこ
しらねーよ
ボケッ
良いこのみんなはこういう無慈悲なことを言っちゃいけないぞ
0561デフォルトの名無しさん
NGNGFORTHらんらんらん
0562デフォルトの名無しさん
NGNG非商用・個人利用に限り無料で利用できるようになりました。
ttp://www.silverfrost.com/32/ftn95/ftn95_personal_edition.asp
・Win32ネイティブ及び.NET managed code が出力可能
・IDE、デバッガ、C++コンパイラなどが付属
・Visual Studio .NET 2002/2003 のIDEでも利用可能
・動作環境は98/NT4SP6/2000/XP (98の場合は.NETデバッグ不可)
これでコンパイルした実行ファイルを実行すると、強制的にバナーが表示されますが
それ以外に機能的な制限はないようです。
ただし
> If you with to use FTN95PE on an educational establishment's
> equipment then you must buy an academic licence.
とのことなので、学校の先生は注意が必要です。
0563デフォルトの名無しさん
NGNGifc が強力すぎて,なんかパッとしないね.
0564デフォルトの名無しさん
NGNGこれはこれで良さそうな気がする。
ifc (IVF)は製品版と期間制限付きの体験版しかないし。
しかし、Fortranで .NETするメリットってあるのかね?
0565デフォルトの名無しさん
NGNGwindows となると,minGW + g77 でも fortran77 までか...
もうちょいですね.
minGW で gcc だと IDE (統合開発環境) が使えますが,g77 でも使えるんですか?
触れておきながら使ったことないんですが w
> しかし、Fortranで .NETするメリットってあるのかね?
数値計算プログラムのインターフェース???
.NET である必要はないけど.
0566デフォルトの名無しさん
NGNG質問したんですが,どうやらアソコではレスもらえなさそうなので,
こちらにも書きます.
マルチっぽくなってしまい,申し訳ありません.
質問は fortran77 (g77) についてなのですが,
C でいうと
struct pos{
double x;
double y;
double z;
};
struct pos pos[64];
みたいなかんじの構造体の配列は使えますか.
もし使えるのなら宣言の方法まで教えていただけるとうれしいです.
よろしくおねがいします.
0567デフォルトの名無しさん
NGNGhttp://www.geo.titech.ac.jp/fujimotolab/renewHP/numexe/manual/10_3/f90/sec9.html#9.1.
0568デフォルトの名無しさん
NGNGg90 の登場が待ち遠しいですね.
0569デフォルトの名無しさん
NGNGg95のバイナリを試してみるとか
http://www.g95.org/
0570デフォルトの名無しさん
NGNG0571566
NGNGボク linux なので...
>>562 は wine でも動くのかな?
とりあえず >>569 を試してみます.
>>569, >>570 ありがとうございました.
0572デフォルトの名無しさん
NGNGintel のすごくいいやつがあるよ.無料の.
0573566
NGNGコンパイラごとにコマンドの実行速度を
比較したページがありましたね.
gnu よりも intel の方が3倍くらい早かった記憶がします.
そこで intel をダウンロードしようと思ったんですけど,
non-commercial 版なのに会社を書けといわれてしまいました
う〜ん学生なんですけど学校の名前書いちゃっていいんですかね?
0574デフォルトの名無しさん
NGNGもう登録したかも知れないけど「personal」とか「personal use」でいいんじゃない?
まあ、別に学校名で登録しても問題ないと思うけど。
0575デフォルトの名無しさん
NGNGやるには、どうしたらいいんですか?
0576ダメ名無し
NGNG値をTAB区切りで出力するにはどうしたらよいのでしょうか?
テキストファイルをエクセルファイルに変換したいのですが・・・
0577デフォルトの名無しさん
NGNGおとなしく、カンマ区切りテキストにすれば。
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNGファイルから開くで、種類をテキストファイルとしてみ。
0580ダメ名無し
NGNGありがとうございます〜!!!
もっとはやくここにくるんだった _| ̄|○
ほんとありがとうございます!
0581デフォルトの名無しさん
NGNGメモリー512MBで1024×1024の配列の計算を行なおうとすると、
上手くいきません。512×512ならできるんですが。
やっぱり、メモリーを1GBとかにしないとだめですか?
ちなみに、計算内容は速度u,vをフーリエ変換してエネルギースペクトル
を出すというものなんですけど。。。
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNGメモリーは変数xとyの1024*2個分を消費されるのでしょうか
それとも メモリーは共有され1024個分だけ消費されるのでしょうか?
数十万の配列サイズを設定するので、なるべくメモリ消費は避けたいので
うまく共有したいのです。 アドバイスください 詳しい人。
program main
integer :: x(1024)
call sub(x)
・
・
end program main
・
・
subroutine sub(y)
integer :: y(1024)
・
・
return
end subroutine sub
0584デフォルトの名無しさん
NGNGsubroutineへの受け渡しは配列の先頭アドレスとサイズですよ
0585デフォルトの名無しさん
NGNGってことはsubroutineとで同じ物理メモリ領域を共有してるってことでいいんですよね?
0586デフォルトの名無しさん
NGNG0587名前は開発中のものです。
NGNGスタックが溢れてるね。
自動変数だとスタック領域が足りなくなるので
グローバル変数を使うしかない。
てか、最近のVCとかではスタックとかデータ領域とかって
どうやって指定するの?9801のころは気にしながらプログラミング
しなきゃならなかったから。
0588デフォルトの名無しさん
NGNGCVFならコンパイル時に/4Naオプションを付けると
すべての局所変数が静的に割り付けられる。
個別に指定するときは変数宣言時にSAVEかSTATIC
属性を付ける。
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNGたまらないんですが。なんであんなワークスペースファイルなどのいらないファイル
を作るんだろ。
0591デフォルトの名無しさん
NGNG浦島太郎ですか?
0592デフォルトの名無しさん
NGNGコマンドラインから使いなさい。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNG同意。それと、いろいろごちゃごちゃウィンドウがあって、肝心のコード見るためのウィンドウが狭い。
漏れも結局Windows上でもEmacs(Meadowだけど)使ってます。
0595デフォルトの名無しさん
NGNGもともとはソースコードが沢山入っててLinuxやUnix上ならMakeユーティリティで一発と
いう奴なんですが。
0596デフォルトの名無しさん
NGNGfortranの場合、訛りがあることがあるから、ソースの修正が必要かもしれんが
0597581
NGNGありがとうございます。とりあえず無駄な配列を省いて
何とかできました。ただ、もうメモリの限界っぽいです。
金たまったら1Gにします。
0598デフォルトの名無しさん
NGNGそういう状況では、うちではcygwinのGNU make + Visual Fortranのコンパイラという組み合わせで対処してます。
0599デフォルトの名無しさん
NGNGおれも昔はそうだったが、IDE環境も良いもんだよ。デバッグも楽だし。
0600デフォルトの名無しさん
NGNGライブラリ・リファレンスをビルド時にオプションで指定しなければならないようなんですが、
どうしたらよいのでしょうか?
0601デフォルトの名無しさん
NGNG数学的に難しい計算をするときにやり方が分かりません。
例えば2次元フーリエ変換はどのようにすればいいのでしょうか?
0602601
NGNG0603デフォルトの名無しさん
NGNGもうちょっと具体的に、どんなエラーが出るとか書いてくれないと答え難いんだが。
ETIMEを使っているプログラムまたはサブルーチンの先頭に
USE IFPORT
を追加すれば特に追加のライブラリを指定しなくてもコンパイルできるはずです。
「未解決の外部シンボル_ETIMEが…」とエラーが出る場合は
プロパティ ページの Fortran --> Compatibility で
Use PowerStaion Portability Library が Yes になっているか確認して下さい。
デフォルトでは Yes ですが No になっていると ETIME を含むライブラリが
リンカに渡されません。(コマンドラインでは /fpscomp:nolibs)
0604デフォルトの名無しさん
NGNG別段FORTRANに限った話ではないが
1. 数学的に難しい計算を、自分でプログラムにする。
2. 数学的に難しい計算を、人にプログラムしてもらう。
2-1. 新たに書いてもらう
2-2. すでに書いてあるものを探してきて利用する
2-2-1. 買ってくる
2-2-2. フリーの物を使う
3. あきらめる
0605デフォルトの名無しさん
NGNGFORTRANの基礎的なことがわかったら
数学の基礎的なことも勉強しておく。
でないと、間違ってプログラム使っても気づかなかったりする
0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNGありがとうございます。
早速ためしてみます。
0608604
NGNG2-2-1 ?
CVFのプロフェッショナル版であれば、IMSLがついてくるから、
その中に2次元FFTのルーチンがある。
2-2-1
ttp://www.xlsoft.com/jp/products/vni/fortran.html
でもIMSL売ってる。
2-2-1 ?
Numerical Recipes (書籍) あたりからソースを拾ってくる。
ただし、日本語版は C言語版
ttp://www.gihyo.co.jp/books/syoseki.php/4-87408-560-1
元ネタはFORTRANだったはず。
蛇足ながら Microsoft Powerstation (MS-FORTRAN の Windows版)には
Numerical Recipes (FORTRAN)がついてた。
2-2-2
ttp://www.netlib.org/fftpack/index.html あたりにあるかもしれない。
0609デフォルトの名無しさん
NGNG50分くらいかかってしまって、とてもじゃないけどこまめに修正できない状態
です。で、新しいPCを入れて半分以下に短縮させたいんですが、どのくらいの
マシンを入れたら効果的でしょうか?プログラムは繰り返しの部分はサブルーチンで
記述されています。
現在、Cerelon2.66GHz+Visual Fortran 6.0+WindowsXP Proで動かしています。
これをXeon2.8GHz+Visual Fortran8.0に変更したら約半分くらいになるでしょうか?
また、Itanium1.3Gくらいにしたら1/10くらいになるでしょうか?
それならそれぞれ30万、150万近くでも金をかける価値があるのですが...
多くの人が理解できるように、OSはWindowsでプログラムの改良については、
下手にいじくると結果に保証が持てないので、行わない前提で良いアドバイス
をご教授いただけたらと思います。
0610609
NGNGあと、XEONを入れる場合は、Xeon2.8G×2です。
Visual Fortran6.0でもデュアルPCを活かして処理できるのであれば
それで行きたいです。
以上、よろしくお願いします。
0611名無しさん@Vim%Chalice
NGNGとりあえずプロファイル取ってみてボトルネックだけでも直した方が速くなる
んじゃないのかねぇ。
0613デフォルトの名無しさん
NGNGしかし、経験的には611の言うようにプログラム見直したほうがよいかと。
ただし、経験的にはこれを行うと(もとのプログラムのほうにバグがあり。
思わずこれを直してしまったという事象も含めて)新たにバグを埋め込む
可能性も非常に高いということも否定できない。
0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG要するに、「プログラムを変更しないで計算時間を速くさせるにはどうしたらいいか?」
ということなんですね?どういう種類のプログラムで50分かかるのか分かりませんが、
メモリが足りなくてスワップしまくりで50分なら、メモリの追加で計算時間が1/100に
なるかもしれませんね。
0616609
NGNGアドバイスさんくすこです。
ところで、今日、こんなページを見つけまして、
ttp://www.v-t.jp/techinfo/faq/answer/nt/nt_a05.html
言われた通りにしてみたら15分程度になりました。
気になるのが、
・ Math LibraryをFastに変更します。但し、演算速度よりも演算精度が重要な場合はAccurateを選択します。
のところなんですが、このときの演算精度ってどの程度のものなのでしょうか?
計算結果は、10^3〜10^7の範囲で合っていれば問題は無いのですが。
>>615
メモリ不足は無いと思います。PCには1GB積んでますし、一番大きい
行列が1400×1400程度ですので...
0617デフォルトの名無しさん
NGNGCVF6.6 のマニュアルによると
> /math_library:fast
> ia32 システムでは,/math_library:fast は,数学ルーチンに対する
> 引数を検証しないことで性能を向上させます。 /math_library:fast
> を使用すると,予期しない例外値が生じる原因の追跡が困難にな
> ります。 ia32 システムでは,/math_library:fast は計算された浮動
> 小数点値の精度に影響を与えません。
ただし、コンパイラのバージョンによって違いがあるかも知れない。
#選択項目がFast/AccurateではなくFast/Checkになってるし
ちなみにCVF6.6 では精度と計算速度に影響するオプションは
Enable Floating-Point Consistency
0618609
NGNGということは、引数に変な値を入れない保証があればFastにしても問題
無いってことですね。
過去ログ読んでみましたが、1400×1400くらいの配列を作っていては、
1GB積んでいてもメモリがスワップしているようですね。
なので、なるべく固定できるものは固定する方が良いのでしょうか?
会社が新PCを購入することも検討してくれているので、40万くらい出すの
ならどのように使うのが一番効果が高いか悩んでいるところなのですが...
(金の割に性能がイマイチだったら肩身が狭いので...)
0619デフォルトの名無しさん
NGNG大学の研究でやってるのが一回の計算がパラメータによっては50時間くらいかかる。
予算の時期的な都合で大型計算機使えないし上にかかれてる事試してみよう。
0620デフォルトの名無しさん
NGNGただ単に今までデバッグ版で使ってただけじゃ…
0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNGFatal error LINK.1070:Cannot open object input file -- No such file or
directory "c0x32.obj"
と出てビルド処理が中断されてしまいます。
マニュアルもなくて対処法が分からないのですが、これは何が問題なんでしょうか。
0623デフォルトの名無しさん
NGNGc0x32.objがなくてリンクができないってことが問題なんでしょうね.
0624デフォルトの名無しさん
NGNGNo such file or directory "c0x32.obj"
0625622
NGNG>>624
どうもありがとうございます。
ズバリc0x32.objがないのが問題なのですね・・。
このc0x32.objというファイルをどこからか探してきて、
Fortran&Cのフォルダのどこかにコピーすれば動くでしょうか。
何度か再インストールしても同じエラーが出続けて参ります。
0626622
NGNG設定ができてないのかもしれませんが、まだ解決してません。
いろいろいじってみます。もし正常に動作したらまた報告します(いりませんかね・・
スレを汚して申し訳ありませんでした。失礼します。
0627622
NGNGlibフォルダ内の全ファイルとソースファイルを同じ場所に置いてやって
ビルドするとリンクまで正常に行えました。役に立たない報告かもしれませんが。
どうもありがとうございました。
0628デフォルトの名無しさん
NGNG0629622
NGNGたぶんどこかでlibフォルダにPATHを通す必要があるんだと思いますが、
どこで設定するのか分かりません。翻訳オプションという項目があって、
ここっぽいのですが、ヘルプを呼んでもそれらしいことも書いてなくて、
お手上げです。ソースファイルと一緒にlibフォルダ内のファイルを一緒に
置いてやれば動くので、とりあえずこのまま使用しています。
0630しろうと
NGNG0631デフォルトの名無しさん
NGNGFTN77 Library Reference P.45〜
0632しろうと
NGNGありがとうございます。がんばって読んでみます。
0633デフォルトの名無しさん
NGNG気分がいいので、マジレス
>>55あたりから、見直せ
0634609
NGNGそれを使ってIVF8.1の試用版をやったら動きました。サンクスコ。
VC6.0なんかは入っていないほうがいいみたいです。
(PATHの設定でなんとかなるのかもしれないけど。)
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGIMAG()
が使えなければ
(a - CONJG(a) )/2
で定義する。
0638635
NGNGIMAGで検索したら分かった。
日本語で調べるときは「虚数部」じゃなくて「虚部」なんだな…
0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNGAMD Core Math Libraryをリンク
0641デフォルトの名無しさん
NGNGホーッ
FORうわなにをするやめ亜wせdrftgyふじこlp;@
0642デフォルトの名無しさん
NGNG,. -ヤ'''カー、 /Y⌒Y⌒Y⌒Y⌒Yヾ
ー―ァ /r⌒|:::|⌒ヾ
_ノ オ{( |0| )} オオオォォォォ!!!!!
__,ヽ,ヾ,_|V|,_ノ、/ ,r-,,=
,゛==ゝ_ViV_ノ~i/ 〃 `ー―-、
/ /⌒`//´⌒c/^^^ ))))))))))
,,―イ {ー''"~{ {~゛`ー`/'`'~/ー--―'
)) ,./ゝ_/∧ゝ_ノ ノ
ー''" |ロ ロ |
人,_,人,_,人,_,人,_,人,_,人_,人,_,人
< 華麗にスイス民謡をを阻止!>
Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNG遺伝的アルゴリズムを利用したサブルーチンは探せば、いっぱいある。
ただ、あくまでアルゴリズムなので、>>643がそのまま流用できるソースはないかと。
0646デフォルトの名無しさん
NGNGそれを解説したサイトってないですかね?
例えばただの計算、IF文、乱数の発生などをそれぞれの処理ごとに時間を計った例とか。
0647デフォルトの名無しさん
NGNGどうみても分かりにくいです。
前任者はITの鬼という評判なのでが、なにかこの書き方のメリットはあるのでしょうか?
私はもう書き直そうかと思っているのですが。
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGメリットは色々あるが、主なものを挙げると
1.サブルーチンの呼び出し/復帰がない分、処理速度が向上する(ような気分になれる)
2.万が一ソースが流出した場合でも、処理の流れがわかり辛いので機密保持に役立つ
3.サブルーチンの名前を考える手間が省ける
「ITの鬼」というより鬼門な人だな。
まあ、世間一般の評判というのは必ずしも実力で決まるもんじゃ無いから・・・
0650デフォルトの名無しさん
NGNG$ g77-3.4 -pg hoge.f
$ ./a.out # ここで gmon.out が作られる
$ gprof a.out
すると,ズラーっと役に立ちそうな情報が出てきます.
0651デフォルトの名無しさん
NGNG最適化をかけない場合と
極限まで最適化をかけた場合では
おおよそどのぐらい計算速度に差が出るのでしょうか。
4倍くらいにはなりますか?
0652デフォルトの名無しさん
NGNG動かない。でかい。資料は六法全書のような厚さ。
いったいどうしろと・・・・・・やるしかないか・・・。
0653デフォルトの名無しさん
NGNG1.dat 2.dat 3.dat ...
というファイルを次々に出力したいのですがやり方が分かりません。
また、>>635も私ですが必要な命令の調べ方も教えてくれるとうれしいです。
Visual Fortranをもっています。
0654デフォルトの名無しさん
NGNG> 数字を文字列に変換する関数は何でしょうか?
> 1.dat 2.dat 3.dat ...
> というファイルを次々に出力したいのですがやり方が分かりません。
こんなんどうですか?
implicit none
character*1 A
integer d
write(unit=6,fmt=*)"A= ",A
d = 5
write(unit=A,fmt="(i1)" )d
write(unit=6,fmt=*)"d= ",d
write(unit=6,fmt=*)"A= ",A
関数の方は知りません。そんなんあるのかな?
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNGアルゴリズムも同じとして,,,
高度なコンパイルが出来るコンパイラがある fortran の方が速いらしい.
だから,どうしても fortran でないとできない問題もあるんだって.
実際に見たわけじゃないけど.
個人で問題になるのは完成までの時間の方だと思うし,
だいたい fortran を使ってたら出来るものも出来無い (俺が問題) よ.
0657デフォルトの名無しさん
NGNGVFなら、ENCODEという数字を文字列に変換する関数があるが、拡張子をつけて、
ファイル名を作るなら、>>654のようにwriteで文字列に書き込んだほうが簡単かも。
implicit none
character*1 fnm1
character*5 fnm2
integer i
integer ide(9)
101 format(i1.1)
do i=1,4
encode(1,101',fnm1) i
open(ide(i),file=fnm1//'.dat')
end do
do i=5,9
write(fnm2,'(i1.1,a4,)'
) i,'.dat'
open(ide(i),file=fnm2)
end do
0658デフォルトの名無しさん
NGNG>必要な命令の調べ方も教えてくれるとうれしいです。
マニュアルに組み込み手続きの一覧が載っていると思うので
それを概要だけでも眺めてみると良いかと。
0659デフォルトの名無しさん
NGNGFortran では普通なのかな?
0660デフォルトの名無しさん
NGNGまともなマニュアルなら、標準と独自拡張ぐらいちゃんとわけて書いてあると思われ。
0661デフォルトの名無しさん
NGNGFORTRAN 77はともかく、F90/95は処理系のマニュアル以外に
ろくな日本語の参考書が無いからなぁ…
0662若葉マーク
NGNGオイラーとかで展開していくのか、何かコマンドみたいなのがあるのか教えて下さい。
下の式では(∂f/∂s)の表現の仕方がわかりません。
f=(k-h)ln(s'/s)
dt=r・(∂f/∂s)
k,hは既知です。sは変数です。
print,readで入力します。
誰かお時間ある方・・・教えて下さい
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG勘違いがありましたらすみません.
read で読んだ式を処理するのですか?
とても難しい問題だと思います.
(GNU bc のソースコードを見てみてください)
また,一般にプログラムには,用意された演算しか書けません.
+, -, *, /, ^ などの演算子の他は (計算機で言う) 関数しか使えません.
「数値計算」について調べてみてください.
微積分などを加減算だけでやる方法の学問といった感じです.
方法はいろいろあります.
解析的な答えを出したいときは,数式処理ができるプログラムを
使用します.数値ではなく記号を扱うので「記号処理」などと呼ばれます.
0665デフォルトの名無しさん
NGNGg77 を使うなら,cygwin 以外にもありますよ.
MinGW や DJGPP というプロジェクトがあります.
DJGPP にあるプログラムを持ってくれば Unix なコマンド群も
あるから作業しやすいかも.
環境をインストーラでサッサと作ってしまうなら MinGW でしょうか.
0666若葉マーク
NGNG有難うございます。
dos画面でsの値をとりあえず手入力してdtの値を一つ一つ計算してもらいたいです。
「数値計算」で調べてみてそれでも駄目ならまた戻ってこようかと思います…
では
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNG元の関数 f を変形しないのならば,
function f(...) を定義して,
eps=1e-6
dt = r * (f(s+eps,...) - f(s, ...)) / eps
とやればいいと思います.微分の定義そのままです.
変形するなら,df/ds を手で求めてその導関数を使えばいいだけのことです.
0669デフォルトの名無しさん
NGNG>>562
0670デフォルトの名無しさん
NGNG何をすればよいのでしょうか?
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNGスタート個所と終了個所で合計2回呼ばないといけないとか
0673デフォルトの名無しさん
NGNGソースファイルに
call output --------------------A
call subfunc
という様に並び、subfuncの中身は
subroutine subfunc
common変数をまとめたファイルのinclude
局所配列変数の宣言
call output --------------------B
やりたい計算処理
というように並んでいます。
AとBの値は同じになるはずなのですが、Aは数値でBは!!!!!!!!(非数表示)となってしまいます。
皆様の経験上、この原因としてどのようなミスが考えられますでしょうか?
0674デフォルトの名無しさん
NGNGfortran90にして、全てのサブルーチンとファンクションの interface を書いておけば
そういうのは無くなるよ。commonも使わないほうがいい
0675デフォルトの名無しさん
NGNG引数渡しにした事があったっけな・・・。
学部の頃はモジュールなんて知らなかったよ。
個人的にはimplicit noneとinterfaceが強制されない仕様が気に入らない。
どうして自由形式になった時に変更されなかったんだろ?
0676デフォルトの名無しさん
NGNG以下のように2回呼んでいるのですが、
program dtimetest
real dtime
real st,ed,j
real dtime_array(2)
integer i
st = dtime(dtime_array)
do i=1,5000000
j = j + j*j
enddo
ed = dtime(dtime_array)
print *,' elapse=', ed,' user=', dtime_array(1),' system=',dtime_array(2)
stop
end
0677デフォルトの名無しさん
NGNGdtimeってのはよく知らないけど,system_clockとおなじなら,
ed-stにしないと意味がないような.
0678デフォルトの名無しさん
NGNGed-stでやってみたけど、0.00000となった。
ユーザーズ・ガイドのsystem_clockの例を試したけど、
ビルド後の最初の実行時は、経過時間が表示されたが、2回目以降の実行時は
0.00000の表示になった。プログラムを変更しないで、もう一度ビルドした後、
実行すると、経過時間が表示されるが、再度実行すると0.00000の表示になる。
ちなみに、timeコマンドで
time a
とすると、実行時間が正しく表示される。
なんでだろう?
0679デフォルトの名無しさん
NGNG>675
返答ありがとうございます。
なぜ、commonは使わないほうがいいのでしょうか?
0680デフォルトの名無しさん
NGNGPGI Fortran ってのは知らないけどググったら、こんなん出た。関係あるかい?
ttp://scs.ictp.it/manuals/pgi/pgf77_ref/f77ref08.htm
>The routines dtime and etime are only available in a SYSVR4 environment.
>These routines are not available in all environments simply because
>there is no standard mechanism to resolve the resolution of the
>value returned by the times() function.
0681デフォルトの名無しさん
NGNG・COMMON は グローバル変数のようなものだから、
どこのルーチンで何をされるかわからない。
バグの原因。メンテナンスが困難。
・COMMON は グローバル「変数」というか グローバル「メモリ」。
変数並びの部分はルーチン間の整合性をコンパイラが担保してくれない。
整合を取るのはプログラマの責任。
バグの原因。メンテナンスが困難。
・COMMON変数が多くなると、どれがローカル変数でどれがCOMMON変数だか
よくわからなくなる。(せめてIMPLICIT NONE であればまだ救われるが...)
バグの原因。メンテナンスが困難。
ってなかんじかな
0682デフォルトの名無しさん
NGNGC で言うブロックを作って,狭い範囲だけで名前を使いたかったりするんだけれど.
これができないおかげで速いコンパイラが作れるということなんでしょうか?
0683デフォルトの名無しさん
NGNGどうもありがとうございました。
NT環境だからなのか?
PGI Fortran winXP環境で、プログラム内で経過時間を測定する
まともな方法を誰か教えてください。
0684デフォルトの名無しさん
NGNG> C で言うブロックを作って,狭い範囲だけで名前を使いたかったりするんだけれど.
> これができないおかげで速いコンパイラが作れるということなんでしょうか?
狭い範囲で名前付けられるならむしろその方が速いコンパイラ作れそうな気がするなぁ。
0685デフォルトの名無しさん
NGNGgdbはFortranに対応ということですが,どうにも情報が少ない気が...
idbはintelにバンドルされている以上Fortranに対応していると思うのですが,こちらもあまり情報がありませんよね...
静的なツールに関しても詳しい方いらっしゃったらお願いします.
0686デフォルトの名無しさん
NGNGCで計測ルーチン作ってリンクするとか
0687デフォルトの名無しさん
NGNGありがとうございます。
0688デフォルトの名無しさん
NGNGなんとなく,フリーソフトウェアの開発している人って,速度より可搬性,移植性を
優先するから Fortran 使ってなさそう...
機能は限られるものの, C でやるように gdb できるみたいですから,それでいいのでは?
gcc, g77 のオプションも gcc が基本ですから.
0689デフォルトの名無しさん
NGNG使い心地って、どうなんでしょうか?
0690デフォルトの名無しさん
NGNGええと,おっしゃるとおりだとは思うんですが, gdbに関するドキュメントってほとんどCのデバッグについてですよね?
Fortranをターゲットにしたドキュメントってないのかなあ?と思ったわけです.
0691デフォルトの名無しさん
NGNGしたらどちらを使用した方が良いでしょうか?
また、Fortranはどのような目的で使用するものなのでしょうか?
0692デフォルトの名無しさん
NGNGError: Illegal character in statement label field [.].
といるメッセージが出てしますのですが、これは何を意味しているのでしょうか?
お願いします。
0693デフォルトの名無しさん
NGNGC++ で,ライブラリを使うのがベストかと.
Fortran は環境が特殊な場合以外は,強制されるまで使わなくていいと思う.
なんというか,マゾっぽかった (´Д`)
0694デフォルトの名無しさん
NGNGifc かな?
f90 からサポートされる free format で書いているのに,
f77 としてコンパイルされているのでは?
ファイル末尾を .f90 にするかコンパイラオプションを使いましょう.
0695デフォルトの名無しさん
NGNG簡単な解析ならどちらでもいいが、その程度の計算でオブジェクト指向の恩恵はほとんど受けられないと
思われ。CじゃなkてC++にしたいのは何故?
0696デフォルトの名無しさん
NGNG>>691 じゃないけど,C99 に沿って書かないと言語仕様の制限がキツくないですか?
STL があるだけでも幸せなプログラミングが出来ますし.
やっぱり複素数が無いと.
数値以外のデータには std::list を使いたいものです.
0697いなむらきよし
NGNG0698デフォルトの名無しさん
NGNGエラーが出て困っています。
助けて下さい。
状況は
http://www.mcmd.ne.jp/mc/1st/vfhowto.files/frame.htm
のHPを参考に開いて、参考書に載っている簡単なプログラムを書いたんですけど
、何をやっても一つのエラーが出てきます。
しかし、以下の方法で開くと、エラーは出ません。
�@「Developer Studio」を開き、file→new(新規作成)をする
�A「fortran console application」を選択し、プロジェクト名と場所を指定する
�Bここで「OK」ボタンを押さずに、Filesタグを押し、file nameを指定し、OKボタンを押す
�C最後に、プログラムを書いても、エラーは出ません。
参考にしたHPとは�Bの過程が違うだけです。
どうしてですか!?
よろしくお願いします!
0699デフォルトの名無しさん
NGNG何も「一つのエラー」とかわざわざ曖昧にぼかさなくても...
エラーメッセージはエラーの内容を伝えるために存在してるんだろうに。
0700デフォルトの名無しさん
NGNG699さん、返事が遅くなり、ごめんなさい。
以下にエラーメッセージを載せます。
よろしくお願いします。
Compiling Fortran...
D:\研究2004\FORTRAN\練習\sample\sample.for
f90: Severe: Invalid argument
... file is 'D:\?????Q?O?O?S\FORTRAN\?u?K\sample\sample.for'
Error executing df.exe.
sample.obj - 1 error(s), 0 warning(s)
0701デフォルトの名無しさん
NGNG2バイト文字イクナイ!
0702デフォルトの名無しさん
NGNG701さん、ありがとう御座います!!!
フォルダを直したら、問題が解決しました。
感謝です!
早速、プログラムを書いてみます(^^)
0703デフォルトの名無しさん
NGNG質問1.
変数の宣言で、
complex*16 xin(2,0:ndata),y(0:ndata),ww(2,0:ndata+1)
と書かれているのですが、*16とは何を意味しているのですか!?
質問2.
変数に値を代入する所で、
pow1=1.0do
のように数字の後にdoという文字がありました。
これは何を意味していのですか?
よろしくお願いします。
0704デフォルトの名無しさん
NGNG2.倍精度(doじゃなくてd0)
0705703
NGNGそのキーワードを参考に、もう一度勉強してみます。
0706デフォルトの名無しさん
NGNG式に double precision があればコンパイル時に直してくれるような.
変数は double precision 以上しか使いませんよね.最近.
0707デフォルトの名無しさん
NGNG組み込み関数の「個別名」が嫌いなんで、
例えば、 πが欲しい時なんか 4*atan(1.0d0) ってしてまつ。
atan(1.0)のままだと単精度。
0708デフォルトの名無しさん
NGNGd0を付けて明示的に倍精度にしないと定数はデフォルトの
realのサイズ(たいてい単精度)になるから。
double precision a, b, c
c = 0.0
a = c + 0.123456789
b = c + 0.123456789d0
write(*,*) a, b
コンパイラのオプションで倍精度をデフォルトにできる場合も
あるけど、古いプログラムを使い回してたりすると COMMON
ブロックのサイズがずれてきて…
0709706
NGNGそうですね.忘れていました.orz
>>708
桁が多い実数が,コンパイル時に丸められる可能性もあるんですね.
結局,今どきの実数は全部 `d' を付けておかないとなりませんね.
! 他の言語でも大抵 `e' と `d' はサポートするからいいか...
0710デフォルトの名無しさん
NGNGIntel Visual Fortranの場合だけど。
0711デフォルトの名無しさん
NGNGfortranの他の言語に対する利点て何?
0712デフォルトの名無しさん
NGNG資産が利点になるかどうかは微妙.
他の言語から呼べればいいんだし.
0713デフォルトの名無しさん
NGNGVBから呼べるの?
0714デフォルトの名無しさん
NGNG数値計算に限れば、Cで開発するくらいならFortran90/95使ったほうがはるかにまし。
0715デフォルトの名無しさん
NGNG呼べないとしたら、今すぐ手放すことをお勧めします。
0716デフォルトの名無しさん
NGNGどこらへんがましか、教えていただけませんか?
私的には C/C++ と変わらないように感じるのですが。。。
ちなみに FORTRAN 初心者です。
0717デフォルトの名無しさん
NGNG>>714じゃないが、配列機能が最強なところとか?
Fortran90/95の多次元配列の扱いやすさは他言語の比じゃないよ。そのお陰で
より数式に近い形で書けるし。
あと、Cに比べてある程度ハードウェアを覆い隠してくれるのでコーディングしやすい
っていうのもあるね。
しかし、Fortranの文法に古臭さを感じるのも事実・・・。
0718デフォルトの名無しさん
NGNGこれって、C++ の演算子オーバーロードとか使えば
C++ でもあまり変わらないってことありませんか?
0719デフォルトの名無しさん
NGNG昔から言語の方でそういう仕組みが用意してあったということですね.
ちゃんとした C++ 用行列ライブラリもいっぱいあって使いやすいです.
C だけでは辛いのは同意.あれは OS を書く言語です.
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG> C++はCを基礎に作られたSM用具です。ゆめゆめ手を出さぬよう...
それは分かるが、節度をもって使えば便利だと思うよ。
0722デフォルトの名無しさん
NGNG> C++はCを基礎に作られたSM用具です。ゆめゆめ手を出さぬよう...
漏れは使いたくないのに強制されるんだよぅ...
0723デフォルトの名無しさん
NGNG最近までは数値計算の分野ではオブジェクト指向プログラミング
の恩恵が少ないと思っていたけど、オートマトンの様に内部状態
を持つモデルの構築をやり始めるとその必要性を感じてきました。
0724デフォルトの名無しさん
NGNG内部状態!? ならば lisp でクロージャを使うんだ!
0725デフォルトの名無しさん
NGNGコンストラクタとデストラクタが死ぬほど呼び出されてるのも気にせず組んだりするから。
その点、Fotranは良いアルゴリズムさえ用いれば、初心者でもプロでもそれほど実行スピードに
違いは無い(例外はもちろんあるが)。
0726デフォルトの名無しさん
NGNG> その点、Fotranは良いアルゴリズムさえ用いれば、初心者でもプロでもそれほど実行スピードに
この言語仕様で良いアルゴリズムが組めれば上級 w
0727723
NGNGクロージャがどういったものかは分からないけど、C++もboostにありますね。
仮にそこまで勉強して実装したとしても、他の院生や学部生には扱えない罠。
僕の所属している研究室(音声信号関連)では、学生が20人もいるのにどういう訳かCを
扱える人間が一人もいません・・・全員f90コンパイラでFORTRAN77つかってます。(; ;)
0728デフォルトの名無しさん
NGNGサイトに行ってもライセンス取得しないとだめみたいで・・・。
0729デフォルトの名無しさん
NGNGg77 ってのがある。
http://www-rocq.inria.fr/~kern/G77/g77.html
Cygwin からでも使えるゾ。
0730デフォルトの名無しさん
NGNG>>3
>>562
0731デフォルトの名無しさん
NGNGちょっとやってみる人や,やらされる学生はこれでいいのに.
0732デフォルトの名無しさん
NGNGありがとうございます!
とても助かりましたww
0733732
NGNG教えていただけないでしょうか?
0734デフォルトの名無しさん
NGNG何がわからないのか
何を教えてほしいのか
が全然わかりません。
0735俺はエスパーだぜ?
NGNGたぶん,統合開発環境が初心者にやさしいとは限らないのでしょう.
いろいろありすぎますからね.
私も最近のボタンをポチポチやる開発には嫌気がさして出来ません.
g77 で hellow, world! から始めた方がいいと思います.
そういうサイトがあるのかは知りません.
0736デフォルトの名無しさん
NGNG> >>562 の使い方いまいちわかりません。
1. >>562をクリックします。
2. IEのアドレス欄に半角の「h」を書き込み、その後ろに562の3行目
(ttp://〜)をコピペして「移動」を押します。
3. 出てきたページの第一段落の最後、
「You can download FTN95 Personal Edition (FTN95PE) here.」
の「here」の部分をクリックします。
4. ダイアログが出てくるので「ftn95_personal.exe」を適当な場所に
保存します。
5. 保存できたら「ftn95_personal.exe」を実行し、プログラムを
インストールします。
6. 飽きたら「コントロールパネル」の「アプリケーションの追加と削除」
から「Salford FTN95 x.xx」を選択し、アンインストールします。
0737デフォルトの名無しさん
NGNGexp(x)とlog(x)の値を求めるプログラムを作成したいのですが、
実行結果が
x= 0.1 exp(x)= 1.105171 log(x)= -2.3025851
x= 0.2 exp(x)= 1.2214028 log(x)= -1.609438
x= 0.3 exp(x)= 1.3498588 log(x)= -1.2039728
x= 0.4 exp(x)= 1.4918247 log(x)= -0.9162907
x= 0.5 exp(x)= 1.6487212 log(x)= -0.6931472
x= 0.6 exp(x)= 1.8221189 log(x)= -0.5108256
x= 0.70000004 exp(x)= 2.0137526 log(x)= -0.35667487
x= 0.8 exp(x)= 2.2255408 log(x)= -0.22314353
x= 0.90000003 exp(x)= 2.4596033 log(x)= -0.10536048
x= 1.0 exp(x)= 2.7182817 log(x)= 0.0E+0
このようになってしまいました。
xの値の誤差をどうやって消すのか教えてください。
0738737
NGNGreal a,b,c,x,y,z
write(*,*)'xの初期値、終了値、増分を入力して下さい。'
read(*,*)a,b,c
write(*,*)"初期値:",a,"終了値:",b,"増分:",c
if(a>b) then
write(*,*)'もう一度初期値と終了値を入力し直して下さい'
stop
else
write(*,*)" x exp(x) log(x)"
do x=a,b,c
y=exp(x)
z=log(x)
write(*,*)"x=",x,"exp(x)=",y,"log(x)=",z
end do
end if
end
どこを修正すればいいか教えてください。
お願いします。
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNG>write(*,*)"x=",x,"exp(x)=",y,"log(x)=",z
に書式指定付けて、xの小数点以下の桁数を短くすれば?
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNGこれは慣用句だ:
do
if(x.ge.100.0) exit
...
x=x+1.0
end do
0743デフォルトの名無しさん
NGNG但し、2次元配列にxとsin(x)の値を収めて、その中身を出力する事。
xとsin(x)の値は一列に並べ、データ個数分の行数(37行)を出力する事。
という問題が解りません。何方か御教授お願いします。
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNG--
program hoge
implicit none
real(8) :: array(2,37)
integer :: i
do i = 1, 37
array(1, i) = real(i - 1)*10.0
array(2, i) = sin(array(1, i))
print *, array(1, i), array(2, i)
end do
end program hoge
--
コンパイルしてないけど,こんな感じかな.
それとも,
>但し、2次元配列にxとsin(x)の値を収めて、その中身を出力する事。
>xとsin(x)の値は一列に並べ、データ個数分の行数(37行)を出力する事。
という問題の意図がわからないというのであれば,私も分かりません.
0746デフォルトの名無しさん
NGNGprogram hage
implicit none
real, parameter :: PI = 3.14
real, dimension(0:36, 2) :: a
integer :: i
a(:,1) = (/(i*1.0, i=0,360,10)/)
a(:,2) = sin(a(:,1) * PI / 180.0)
print "(2F10.5)", (a(i,1:2), i=0,36)
end program hage
0747デフォルトの名無しさん
NGNGそれは、
if(abs(y(i,in)) .lt. 1.0d-5) then
dr(i,in)=1
else
dr(i,in)=1/abs(y(i,in))*y(i,in)
end if
の部分で、
1行目 y(i,in)) .lt. 1.0d-5の後半部分の1.0d-5の意味が解りません。
1-5という事ですか?
dは倍数精度で使われると調べたのですが・・・。
是非、教えていただけませんか?
宜しくお願いします!!
.
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG倍精度 →1.0D-5
4倍精度→1.0Q-5
0751747
NGNG勉強のし直しです。
また、よろしくお願いします。
0752478
NGNG0753747
NGNGありがとう御座いました。
1.0d-5とは10の-5乗という意味なんですか?
749さんの説明と違いますよね?
これは、何か意味のある事なんですか?
それとも、どちらも正しいことを言っているのかなー??
0754747
NGNG748さん、749さんの説明の意図がようやく解りました。
ありがとう御座いました。
また何かあったら相談にのってください。
では、失礼します。
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG要求している程度が分からんケド,こんなもんで。
最後のは g77 の話なので文法とは無縁カモ(基本的に)。
探せばイッパイ出てくる・・・カナ?
FORTRANプログラミング初級編
http://svr01.damp.tottori-u.ac.jp/~akimoto/Fortran/
FORTRAN 77 入門
http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/f77-enshu/index.html
Using and Porting GNU Fortran
http://www.delorie.com/gnu/docs/gcc/g77_toc.html
0758デフォルトの名無しさん
NGNGttp://www.ip.media.kyoto-u.ac.jp/htomita/
0759デフォルトの名無しさん
NGNGttp://www.rs.kagu.tus.ac.jp/yama/
0760デフォルトの名無しさん
NGNGおお『入門Fortran90実践プログラミング』の人ですね。
この本が絶版と知って吃驚してます。
0761デフォルトの名無しさん
NGNG0762デフォルトの名無しさん
NGNG違う。
0763デフォルトの名無しさん
NGNG書き込みだけでもいいので教えてください。
Cの経験はあります。
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGwrite(10,*)'うるせーバカ'
0766デフォルトの名無しさん
NGNGワラタ
確かに答えになってる
0767デフォルトの名無しさん
NGNG当方使っているコンパイラはHP Fortran90とFortran Power Station 4.0
ですが、両方ともコンパイルが通って(一見)きちんと実行できますが・・・。
↓たとえばこんな感じです。
SUBROUTINE SUB(n)
INTEGER n
REAL ary(n)
INTEGER i
DO i=1,n
ary(i) = i
END DO
WRITE(*,*) SIZE(ary)
END SUBROUTINE SUB
0768デフォルトの名無しさん
NGNGFortran 90ならサポートしてるよ >自動割付け配列
0769デフォルトの名無しさん
NGNG割付けに失敗した時のエラー処理とかもできないよね。
やっぱり、デカイ配列を動的に確保したい時はallocate文を使うほうが無難?
0770デフォルトの名無しさん
NGNGどこに割り当てられるかは処理系依存だろうけど
どちらにしろ、大きな配列を確保しようとすると
エラーになる可能性がありますね。
エラー処理の方法は私もわかりません(ないのかな?)
エラーで強制終了させたくなかったら、ALLOCATEを使って
ちゃんと確保できたか調べるのが無難みたいですね。
0771767
NGNGありがとうございます。良く見たらマニュアルにも書いてありました。
(かなり簡単な説明でしたが。)
あまり大きな配列でなければ、allocate()、deallocate()を使わなくて済む分便利かもしれませんね。
0772名無しさん@ピンキー
NGNG×>>767
○>>768
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNGマルチは駄目です
0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNG答えたい人は答えるだろ。
0777デフォルトの名無しさん
NGNGある数xとyのそれぞれの約数xとyの最大公約数と最小公倍数を計算しなさい
関数副プログラム、サブルーチン副プログラムのどちらかを用いること。
0778デフォルトの名無しさん
NGNGマルチは駄目です
0779デフォルトの名無しさん
NGNGとあるテキストの演習問題と全く同じ文体ですね。
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG合掌。
0782デフォルトの名無しさん
NGNG検索エンジンで調べても答が見付かりそう。
0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNG0785デフォルトの名無しさん
NGNGhttp://www.amath.washington.edu/~lf/software/CompCPP_F90SciOOP.html
とか読めば?所詮OOPの真似っこしかできないけど
0786デフォルトの名無しさん
NGNGとりあえずモジュール内にprivate属性の変数とサブルーチンを書いておけば、少なくとも
データの隠蔽は実現できます。
0787デフォルトの名無しさん
NGNGそして、get_hoge と set_hoge を大量に書けよ!
0788デフォルトの名無しさん
NGNGOOP な言語から Fortran を呼びなさいってこった.
0789デフォルトの名無しさん
NGNGFortran 2003 完全準拠のコンパイラを使う。
ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.pdf
http://www.fortran.com/fortran/fcd_announce.html
FortranでOOPするつもりはないからよく読んでないけど
Finalization とか Polymorphic entities とか
Deferred bindings とか書いてある。
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG可能性: 技術的な理由 <<<<<<... (越えられない壁) ...<<<<< 人的な理由
特殊な用途では必要かも知れませんが,そんな時はどうせ特殊なわけで,
fortran をかじった程度の経験では無きに等しいのでしょうね.
というわけで目的なしに学ぶ価値は無しだと思います.
プログラミング全般に言えそうですが > 目的無しに学ぶ
0793デフォルトの名無しさん
NGNG私の場合、まさに人的な理由ですね・・・。
・過去の資産がすべてFortran
・プログラミングを教える時間に余裕が無い
・ゼロからコーディングする人がいない
・教授がFortranしか知らない
(なんだか愚痴っぽくなってしまった。)
開発環境がPC/WSの場合で、C/C++に対する決定的な
アドバンテージをどなたか教えてください。
0794デフォルトの名無しさん
NGNG別の高級な言語で書いて,単純で計算量の多いところだけ
Fortran や C で書くと,設計がしっかりしていなくても
動くものが早く (not 速く) 作れますよ.
書くのが大変だと作る前からしっかり設計しないとならなくて大変です.
何も作れません.
って,私のスキルの場合です w
0795デフォルトの名無しさん
NGNGどこかにベンチマーク結果とかあるのでしょうか?
0796デフォルトの名無しさん
NGNGC
Pascal
Fortran
0797デフォルトの名無しさん
NGNGそれは「自動車より電車の方が速いって本当ですか?」
と聞いているようなもんだぞ。
使用するコンパイラやプログラムなどの前提条件によって
結果が変わってくるから、答えようがない。
0798F77
NGNGinteger v
real m
v=func(m)
write(*,*) v ...(1)
stop
end
integer function func(a)
real a
...(途中の処理)...
write(*,*) func ...(2)
return
end
というプログラムで(1)と(2)の出力が違ってしまいます。
なぜですか?
えろい人おしえてくだちい
0799retrun func
NGNG0800programの先頭に「integer func」
NGNG主プログラムに関数FUNC の宣言がない。
↓
頭文字が"F"の関数FUNCは主プログラムでは実数を返す関数と仮定される。
↓
「v=funv(m)」で呼ばれた関数FUNCが整数値を返す。
↓
主プログラムは戻ってきた値をむりやり実数として読み込む。
(当然、その値はでたらめなものになる)
↓
出力が違ってくる(運が良いとエラーになる)
↓
(゚д゚)マズー
0801デフォルトの名無しさん
NGNG以下のプログラでは、配列Aの部分配列(スライス)をポインタPと結合しています。
このとき、ポインタの添字の下限値 lbound(P)が1、上限値 ubound(P) が 4 になってしまうんだけど、なんとかポインタPの下限値を結合先Aと一致させる方法はありませんか?ポインタの下限値と上限値をそれぞれ 0 と 3にしたいのです。
program main
integer,dimension(0:3,0:3,0:3,0:10),target :: A
integer,dimension(:,:,:),pointer :: P
p => A(:,:,:,2)
print *, lbound(P), ubound(P)
print *, lbound(A), ubound(A)
end program main
添字の偶奇が本質的なコードを書いているので、ポインタ結合で偶奇がズレてしまうのは、致命的なのです。方法がなければ、cppで対応するしかないのですが、cppはバグの温床となるので、なるべく Fortran の機能範囲内で書きたいと思っています。助言ください。
ちなみに、以下のように、配列A全体を結合させると、結合先と添字の下限値が一致しますが、目的はこのようなコードではありません。
program main
integer,dimension(0:3,0:3,0:3),target :: A
integer,dimension(:,:,:),pointer :: P
p => A
print *, lbound(P), ubound(P)
print *, lbound(A), ubound(A)
end program main
0802デフォルトの名無しさん
NGNGどなたか教えていただけませんか?
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNG事故フォロー。
できたー。関数を2枚ラッパにつかった。
0805tsuru
NGNG途中で
Floating point stack fault at address 〜
という見たことも無い文章がでてきてプログラムが異常終了してしまいました。
今まではちゃんと動いていただけに原因がわかりません。
Googleで調べてみたところ、
はっきりとしたことはわかりませんがメモリーを超過したということなんでしょうか?
どなたか教えて下さい!!
0806デフォルトの名無しさん
NGNGそれだけの情報じゃよくわからんが、
多分関数の呼び出し側と関数の型があってないんだろう。
今までも「ちゃんと動いてた」んじゃなくて
「たまたま実行時エラーがでなかっただけ」の可能性が高い。
FTN77にはデバッガが付属してるから、それでデバッグしろ。
1./BREAK オプションを付けてコンパイルすると
コンパイル正常終了後デバッガが起動するので
「GO」のボタンを押してプログラムを実行する。
2.エラーの発生した箇所で止まるので、
その前後の部分をよく見てデバッグする。
0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNGparameter(N = 4)
parameter(M = 5)
real a(N, M), pivot, w
integer k ! pivot
integer i ! row
integer j ! column
C
data ((a(i, j), j=1,M), i=1,N)
* /11, 13, 17, 19, 279,
* 23, 29, 31, 37, 547,
* 41, 43, 47, 53, 817,
* 59, 61, 67, 71, 1133 /
C
write(*, *) "多元連立一次方程式の係数行列と右辺"
call matprint(a, n, m)
C
do k = 1, N
pivot=a(k,k)
write(*, *)
write(*, *) "PIVOT:", k, ",", a(k, k)
do j = 1, M
a(k, j) = a(k, j) / pivot
end do
call matprint(a, n, m)
0809デフォルトの名無しさん
NGNGdo i = 1, N
if(i /= k) then
w = a(i, k)
do j = 1, M
a(i, j) = a(i, j) - w * a(k, j)
end do
end if
end do
write(*, *)
call matprint(a, n, m)
end do
end
C
subroutine matprint(matrix, n, m)
real matrix(n, m)
integer n, m, i, j
C
do i = 1, n
write(*, 600) (matrix(i, j), j= 1, M)
end do
600 format(1h , 10(G15.7:))
end
0810デフォルトの名無しさん
NGNG>>809
のプログラム(808の続きが809です)を次の様に改良せよ。
1.PIVOTが0になると、割り算が出来ないので、
「0」で割らないようにする。
2.PIVOTより下の要素を計算しないようにせよ。
また、PIVOTがほぼ0(10のマイナス20剰ぐらい)になって
しまう数値の例を試し、正しくプログラムが動くことを確認せよ。
どういう根拠で正しく動いたと言えるのか説明せよ。
という課題が解りません。どのように改良すればいいか教えてください。
宜しくお願いします。
0811デフォルトの名無しさん
NGNG0812810
NGNGa(1,1)
a(2,1),a(2,2)
a(3,1),a(3,2)a(3,3)
a(4,1),a(4,2)a(4,3)a(4,4)
の値は計算しないようにすると言う意味です。
何方かどうか宜しくお願いします。
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG冬休み前の宿題か?
それにしても固定形式なのにF90風の文法を
多用していて中途半端な書き方だな。
ここまでするなら完全に自由形式で書くか
互換性重視でF77準拠の固定形式で書くか
どちらかにした方が良いのに。
0815デフォルトの名無しさん
NGNG下手な煽りだな
中途半端な煽りなら止めとけばいいのに
0816デフォルトの名無しさん
NGNG奥村先生の「C言語による最新アルゴリズム事典」を参考にすると良いかも。
俺は似たような問題(学校の課題ではないけど)を解くのに
中身のプログラムをそのままFortranに直して使った。
0817デフォルトの名無しさん
NGNGFortranより算数の勉強からはじめてください
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNGttp://www.sw.nec.co.jp/hpc/sx6i/product/what.html
0821デフォルトの名無しさん
NGNG(買収とかでややこしいことになっていますが、もとはDigitalのFortran)
http://h18009.www1.hp.com/fortran/
0823デフォルトの名無しさん
NGNG何をしたいのか書いてくれないとネタカキコしかできませんよ.
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG古いものを笑ってはいけない。
FORTRAN は私も笑うけど、Lisp を笑ったらあかん。
0829デフォルトの名無しさん
NGNGvisual F
0830デフォルトの名無しさん
NGNGそういや最初のLispはFORTRANで書かれたらしい.
0831デフォルトの名無しさん
NGNGうそーん。FORTRANで構文解析なんて、いくらS式がparseしやすいっていったって無理だろう。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNGそれが出来るんだよ。
0834デフォルトの名無しさん
NGNG比較的最近のやつだけど
「FORTRAN によって実現された会話型LISP システムとその応用」
ttp://www.ipsj.or.jp/members/Journal/Jpn/2304/article002.html
ついでに、Prologも最初はFORTRANで記述されていたようです。
ttp://www.shoeisha.com/book/pc/20c/chap07/gen.htm
0835デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNGFORTRANくらいしかなかったからね。
今なら迷わずC言語で書くようなプログラムもFORTRANで
つくってたんだよ。
>>835
最新のコンパイラでも固定形式で書くと
空白を無視したり、73桁目以降を読み捨てたりしてくれる
とってもステキな言語です(泣
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNG> 今なら迷わずC言語で書く
今なら C++ で書くのが普通だろ。
0840デフォルトの名無しさん
NGNGC/C++で書いたときに出る例外エラーはつきとめるのがFortranと比べると遥かにややこしいと思う。
0841デフォルトの名無しさん
NGNGFortran ではデバッグの段階まで書くこともできない私は OTZ
みなさん,どの言語でも同じ期間に完成させられるという
前提に立っているように感じます.
0842デフォルトの名無しさん
NGNGおねがいします。
0843デフォルトの名無しさん
NGNGread(*,*)ar,ai
write(*,*) atan(ai/ar)
end
バグあり。デバッグは任せる。
0844デフォルトの名無しさん
NGNG77 と 90 でずいぶん言語仕様が違うようなので選択に困っています。
よろしくお願い致します。
0845デフォルトの名無しさん
NGNGFortran90はFORTRAN77のすべての仕様を含んでいる。
Fortran95はFortran90のほぼすべての仕様を含んでいる。
(一部古い機能が廃止されているが、今となってはほとんど使わない機能ばかりだ)
よってこれから勉強するのなら、Fortran95が良い。
>>838
f90 = 数値計算向けの手続き型言語
f77 = 縄文式スパゲッティ製造器
0846デフォルトの名無しさん
NGNGひとつしかやりたくないんなら、C++とか他のやったほうが良い。
0847デフォルトの名無しさん
NGNGありがとうございます。
大変参考になりました。
0848デフォルトの名無しさん
NGNGFTN95じゃstackoverfllow
しっかし・・・visual fortran?なら動く・・・
なぜ?
0849デフォルトの名無しさん
NGNGたぶんVisual Fortranでも /check:all オプションを付けてコンパイルすると
実行時エラーがDELL。
0850デフォルトの名無しさん
NGNGPlato3で作ったexeはoverflowするのに・・・orz
意味わからん・・・orz
0851デフォルトの名無しさん
NGNG落ちたところでデバッグしないの?
0852デフォルトの名無しさん
NGNGsubroutinの中の話だけど
if (条件) goto 10
文
文
文
10 continue
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNGスルーするってこと?
とんだ先のcontinueには意味ないってこと?
実際には↓みたいになってるからさっぱりわからん(TT)
昔の人はすごいな〜
if (条件) goto10
ごちゃごちゃ
if (条件) goto20
ごちゃごちゃ
20 continue
ごちゃごちゃ
10 continue
0855デフォルトの名無しさん
NGNGif (条件1) go to 10
文1
if (条件) go to 20
文2
20 continue
文3
10 continue
1. 条件1が .TRUE. なら何もしない。
2. 条件1が .FALSE. で
2-1. 条件2が .TRUE. なら文1、文3の順で実行される。
2-2. 条件2が .FALSE. なら文1、文2、文3の順で実行される。
> とんだ先のcontinueには意味ないってこと?
入門書読んで出直してこい。
0856デフォルトの名無しさん
NGNG入力された整数を1次元配列に格納し、値が小さいものから順に(flagを使って)出力。
というプログラムってどうやって作るんですか?誰か教えてください。
0857デフォルトの名無しさん
NGNGFortranとは関係ない。
プログラミング初心者は素直にアルゴリズムから勉強しろ。
0858デフォルトの名無しさん
NGNGprogram hage
integer :: n, i, a0, a(1073741824), flag
print *, "データの個数を入力しろ."; read *, n
print *, n, "個の整数を小さい順に入力しろ."; read *, a(1:n)
a0 = a(1)
do i = 1, n
flag = a(i)
if (flag < a0) then
print *, "入力データが不正だ!気分が悪いので終了する."
stop
end if
print *, flag
a0 = flag
end do
end program hage
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNGttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html
08611つめ
NGNG誰かたすけて(例 12,345,678)fortranをつかっています。
character(100) x,z(1:100),v,k,kk
integer y,s,w,i,a,b,amari
write(6,*) '正の整数を入力してください。'
read(5,*) x
k=adjustl(x)
x=adjustr(x)
y=len_trim(k)
if(y<3) then
write(6,*) y
write(6,*) '3桁以内なのでプログラムを終了します。'
else
a=103
b=101
w=y/3
amari=mod(y,3)
kk=k(1:amari)
s=100-y-w+2
08622つめ
NGNGa=a-3
b=b-3
z(i)(b-1:a)=','//x(b:a)
if(i==1)then
v(b-1:100)=z(i)(b-1:a)
else
v(b-1:100)=z(i)//z(i-1)
end if
end do
end if
write(6,*) trim(trim(kk)//trim(v(s:100)))
end
配列の使い方とかおかしいかも知れません。
大分考えましたが解決できないのでお力を貸して頂きたいです。
0863デフォルトの名無しさん
NGNG難しく考えすぎだと思います.
文字列をコピーする方法を考えてください (後ろからの方がいいです).
で,3 文字コピーするごとに ',' を入れればいいんじゃないでしょうか.
もっと簡単な方法もあるかも知れませんが.
0864デフォルトの名無しさん
NGNG数値を文字列に変換する方法がある。
FORTRAN66のENCODE/DECODE文。
FORTRAN77の内部ファイル。
Fortran90のTRANSFER文。
内部ファイルでのやり方を書いておこう。
CHARACTER*5 buff
....
n = 1
WRITE(buff(1:1), '(i1)') n
WRITE(buff(5:5), '(i1)') 2 * n
こうするとbuff = '1 2' となる。
あとは、>>863の言うように、MOD(n, 10**k) で1桁ずつ切り出して
文字列に書き出して、3文字毎に','を書き出せばよい。
補足:
パソコン、WSでよく使われるASCII CODEを用いた文字−数字変換は、
EBCDICが普通だったメインフレーム、スパコンでは使えなかった。
0865デフォルトの名無しさん
NGNG焦点がずれてるよ.
861は最初から文字列で数字を入力させてるんだから,内部ファイルとか関係ないし.
863がいうのはこんな感じかな?
--
program test
implicit none
integer, parameter :: MAX = 100
integer :: i
character(MAX) :: number, sepd_number
print *, '正の整数を入力してください。'
read(*,'(a)') number
number = adjustr(number)
sepd_number = number(MAX-2 : MAX)
do i = MAX-3, 1, -3
if (number(i : i) == ' ') exit
sepd_number = number(i-2 : i) // ',' // sepd_number
end do
print *, sepd_number
end program test
--
0866デフォルトの名無しさん
NGNGNCAR Community Atmospheric Model (CAM3.0)を使うとき
gmakeして
undefined reference to `history_mp_fincllonlat_'
というエラーがでたらIFCを最新のversionにかえるとよい。
0867デフォルトの名無しさん
NGNGreal x
x=1
x=1.0
0868デフォルトの名無しさん
NGNGコンパイラのオプションには,「アセンブリコードにする」ものがあるから
双方のアセンブリコードを比較することができます.
でも始めから型に合わせたリテラルを書くのがいいと考えています.
x が double precision なら「x = 1.0d0」と書くなど.
0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG急にFORTRANのプログラムを使わないといけなくなったのですが、どうしたら良いのか分かりません。
どうやらMS-FORTRANで作ったそうで、実行ファイルはあっても動きません。
ソースファイルは残っているのですが、どうすれば良いのでしょうか?
よろしくお願いします。
0871デフォルトの名無しさん
NGNGには、組み込み関数は入っていないのでしょうか?
乱数の生成プログラムを書きたいのですが。
0872デフォルトの名無しさん
NGNG実行ファイルが動かない原因が判らないなら、ソースをコンパイルしても動かない確率が高いな。
どう動かないのか詳しく書かないと全然分からない。動かないなら、エラーメッセージなんかが出るの?
0873デフォルトの名無しさん
NGNG組み込み関数は入ってますが、乱数生成ルーチンはFORTRAN77標準ではありません。
FTN77用の乱数関係の組み込み関数ならUserGuide.pdfの344頁に説明があります。
integer i
double precision a
double precision random
read(*,*) a
call set_seed@(a)
a = random()
C 0.0D0 < a <= 1.0D0
write(*,*) a
call date_time_seed@
do i = 1, 10
a = random()
write(*,*) i, a
end do
end
0874デフォルトの名無しさん
NGNGどうもありがとうございます。
もう少し勉強してみます。
0875デフォルトの名無しさん
NGNGwrite(*, fmt='(a)') 'mako-tan sama'
write(*, '(a)') 'kako-tan sama'
print '(a)', 'aiko-tan sama'
みな同じこと。コンソール出力。
fmt=は省略可。文字列の中身はFORMAT文中に書く物と同じ。
文字列は文字定数である必要はなく、変数であってもよい。
つまり出力データ毎にフォーマットを動的に変えるという荒技も出来るがバグの元。
0876デフォルトの名無しさん
NGNG曖昧な質問なのに丁寧にありがとうございました。
0877デフォルトの名無しさん
NGNGISMLライブラリを使ってみたのですがどうも結果がうまく出ません。
80*80*80の立方体を変換したいのですが要所だけを以下にコピペします。
結果は全ての座標が0になります。
どこがおかしいのでしょうか?
USE NUMERICAL_LIBRARIES
・・・
CALL FFT3F(80,80,80,GC1,80,80,GC2,80,80)
0878デフォルトの名無しさん
NGNG単に多すぎるだけとか。
何なら16x16x16 ぐらいで試してみそ。
0879デフォルトの名無しさん
NGNG最適化しても同じ結果になるようにソースを書き換えるのか
最適化しないオプションを指定してこんぱいるするのか、どっちが基本でしょうか。
0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNGそれだけでは要所にならない。せめて使用配列の宣言部が必要だ。
FORTRAN77だと、型のチェックと整合配列のチェックを人間がやらないといけないからだ。
一般論だが、外部ライブラリでうまくいかない場合。
1.イニシャライズのし忘れ。(配列のクリア。イニシャライズルーチンの呼び忘れ。等)
2.配列の型、サイズを間違えている。
というパターンが、多い。
今回のチェックポイントは
0.GC1、GC2は単精度複素行列になってるか?
1.GC1、GC2の大きさが、呼び出し時の引数と矛盾していないか?
2.変換前のGC1に値がちゃんと入っているか?
(呼び出しは正しいが、0しか入ってないと、当然GC2は0だ)
>>878 の意見に関してだが、
IMSLのマニュアルを見る限り、配列サイズが2のべきである必要はないようだ。
まず小さいマトリクスで試してみよという意見には賛成だ。
0882デフォルトの名無しさん
NGNGさすがは糞言語だ。
0883デフォルトの名無しさん
NGNGintel fortran compiler 8.1なんですけどね。
CPUもintelのXEON使ってます。
0884デフォルトの名無しさん
NGNG現在、ソース中で、
A(B+C) = D
となっている部分があります。A(*)は配列です。
コンパイルしますと、
"A has non-integer subscript" と表示されます。
添え字の(B+C)が整数だと認識されていないようですので、
(B+C)を整数にキャストしたいのですが、その方法を見つけることが出来ませんでした。
とりあえず、勘に頼って
A(int(B+C)) = D
としたところ、エラーは出なくなったのですが、
コンパイラのマニュアルやFORTRAN入門書をみても、web検索をしてもint(*)という関数がみつからず、
これでいいものかどうか悩んでおります。
BおよびCの変数宣言をINTEGERを用いて行うのも1つの方法かと思われるのですが、
ソースが自分のものではないため、出来る限り問題のある箇所以外は触らないようにしたいと考えております。
利用コンパイラはSalfordのFTN77です。
よろしくお願いいたします。
0885デフォルトの名無しさん
NGNGhttp://wwwst.sc.musashi-tech.ac.jp/~bulletin/fort77.htm
【13】組込関数
整数型へ変換 INT(X) 整,実,倍,複 → 整
0886デフォルトの名無しさん
NGNG明示的に型宣言をしない場合,下記の約束がまもられる.Fortranの特徴の1つである.
I, J, K, L, M, N で始まる変数は 整数型 と解釈される.
例 IJ, NO, JX, KOSU
A〜H, O〜Z で始まる変数は実数型
例 ATOM, XCORD, COORD, MAX
0887884
NGNGありがとうございます。
おかげさまで解決いたしました。
0888デフォルトの名無しさん
NGNG1+2+3+4+5+6+7+8*9=100のように、1,2,...,9の9つの数字の間に
+−×÷の記号を1つずついれて、計算結果が100になるような算術式を全て求めよ。
ただし、除算はFORTRANの整数除算ではなく、通常の算術計算であるとする。
という問題と、
n×nの実数正方行列A={a(i,j)}の行列式|A|を、再起手続きを使って求めよ。
Aの第1行第j列を抜いた残りの部分行列をA'(j)とするとき、行列式|A|は、
|A|=a(1,1)|A'(1)|-a(1,2)|A'(2)|+a(1,3)|A'(3)|...
=破=1〜n a(1,j)|A'(j)|*(-1)**(j+1)
で与えられる。ただし、1行1列の行列{a}の行列式は要素aそのものである。
という問題の2つなのです。助けてくださいm(- -)mお願いします。
0889デフォルトの名無しさん
NGNGおそらく,何が分からなくてできないのかがわかってないみたいだから.
単に宿題の丸投げなら誰も助けてくれないだろうけどね.
0890デフォルトの名無しさん
NGNGどうすればいいのかいきなり詰まっています。
0891デフォルトの名無しさん
NGNGFortran90だと再帰呼び出しが使えるが、FORTRAN77だと使えない。
どちらが対象かで難易度がずいぶん変わってくる。特に2番目。
どっちかな?
0892デフォルトの名無しさん
NGNGじゃあ,記号の意味をFortranに教えればいいよね.
0893877
NGNG16*16*16でやってみましたが結果は全部0になります。
変数は全て正しい型で宣言しています。
少しいじくって2次元のFFTではうまくいったんですがお手上げです。
便乗質問ですが、
今回の3次元FFTはそれ自体が目的ではなく他の計算の確認のためです。
3次元の立方体で特定方向に各配列の要素の和をとって2次元配列を作ります。
その2次元配列をフーリエ変換しフーリエスペクトル(実数部の二乗と虚数部の二乗の和)を求めます。
数学に疎いのでよく分かりませんがスペクトルのイメージは上下左右対称のはずらしいですが
私の作ったコードでは正確に対称にはなりません。
3次元FFTはコードが正しいかどうかの確認のためです。
しかし、私は任意のイメージのフーリエスペクトルが対称型になることがいまだに理解できないのですがどうなのでしょうか?
0894デフォルトの名無しさん
NGNG落としてきてビルドしようとしているのですが、途中でNMAKEが以下のエラーを
吐きました。
NMAKE : fatal error U1071: cycle in dependency tree for target 'c:\Documents'
ファイルはC:\Documents and Setting\washi\..... の下に置いているのですが、
ファイルパス名に空白が入っているのをNMAKEがチョチョギっているような
気がします。 どう対処したらよいのでしょうか?
08951/2
NGNGMODULE mod_eval
IMPLICIT NONE
INTEGER :: inum(5) = (/1,2,3,4,5/)
CHARACTER :: ops(5) = (/ '*', '+', '-', '/', '='/)
CONTAINS
SUBROUTINE eval(res, op_next)
IMPLICIT NONE
REAL , INTENT(OUT) :: res
CHARACTER, INTENT(OUT) :: op_next
INTEGER, SAVE :: ipos = 1
res = REAL(inum(ipos))
DO
SELECT CASE (ops(ipos))
CASE ('+', '-', '=')
op_next = ops(ipos)
ipos = ipos + 1
EXIT
CASE ('*')
ipos = ipos + 1
res = res * REAL(inum(ipos))
CASE ('/')
ipos = ipos + 1
res = res / REAL(inum(ipos))
CASE DEFAULT
PRINT *, 'ipos=', ipos, ' op=', ops(ipos)
STOP 'eval'
END SELECT
END DO
RETURN
END SUBROUTINE eval
END MODULE mod_eval
08962/2
NGNGPROGRAM main
USE mod_eval
IMPLICIT NONE
INTEGER :: inum(5)
REAL :: sum, tmp
CHARACTER :: op, ops(5)
sum = 0.0
op = '+'
DO
SELECT CASE (op)
CASE ('+')
CALL eval(tmp, op)
sum = sum + tmp
CASE ('-')
CALL eval(tmp, op)
sum = sum - tmp
CASE ('=')
EXIT
CASE DEFAULT
PRINT *, 'op=', op
STOP 'main'
END SELECT
END DO
PRINT *, 'value =', sum
STOP
END PROGRAM main
インデント死んだw >>895,896
0897デフォルトの名無しさん
NGNGPROGRAM test
USE NUMERICAL_LIBRARIES
IMPLICIT NONE
INTEGER :: i, j, k
REAL :: pi
COMPLEX :: gc1(8, 8, 8), gc2(8, 8, 8)
pi = 4.0 * ATAN(1.0)
gc1(1:3, 1:3, 1:3) = (1.0, 1.0) / REAL(3**3)
CALL FFT3F(3, 3, 3, gc1, 8, 8, gc2, 8, 8)
print *, gc2(1, 1, 1)
!
DO i = 1, 6
gc1(i, :, :) = EXP( CMPLX(0.0, 2.0 * pi * REAL(i - 1) / 6.0 ) ) / REAL(6**3)
END DO
CALL FFT3F(6, 6, 6, gc1, 8, 8, gc2, 8, 8)
print *, gc2(2, 1, 1)
END PROGRAM test
最初のFFTはδ関数を出すので、gc2(1,1,1)に1が立つ。
2個目のFFTは、x軸方向にのみexp(i2π(k−1)/N)の変化があるのでgc(2,1,1)に(1.0,0.0)が立つ。
出力例:
(1.000000,1.000000)
(1.000000,3.8894690E-08)
これ以外は0になる。E-7~E-8 のオーダーの数は単精度の誤差で0とおなじ。
対称になるのは、折り返しとかの事情だろう。行列要素は実onlyかな?
0898デフォルトの名無しさん
NGNGFORTRAN90を使っています。
記号の意味をFortranに教える、というのは、どういうことなのでしょうか?
a(4) = (/ '*', '+', '-', '/'/)で、
a(1) = * のようなことではダメですよね。
文字を計算式に使うと変なことになってしまいますし、
お手上げの現状なのですが...
0899デフォルトの名無しさん
NGNG>記号の意味をFortranに教える、というのは、どういうことなのでしょうか?
その書き込みは無視したほうがいいw
CHARACTER :: a(4)
a(1) = '*'
なら文法にかなっている。
0900884
NGNGもう一点、お聞きしたいことがあるのですがよろしいでしょうか。
比較演算子に関してなのですが、現在、
IF (A . NE . B) THEN
と記述されている箇所がありまして、コンパイルを行いますと、
"The use of .EQ. or .NE. with non-integer operands can produce misleading results"
と表示されます。コンパイラはSalford FTN77です。
論理素子AとBが整数型でないことが原因だと思われ、ソースを
IF (int(A) . NE . int(B)) THEN
と改変するとエラーは消えます。
ただ、実際にはAやBが実数で、その値を比較している場合もあると思われ、
勝手に整数にまるめても良いものか、悩んでいます。
FORTRANでは.NE.および.EQ.で比較する場合、その値は整数で無ければならないという決まりがあるのでしょうか?
参考書やweb等で調べた限りでは、そのような約束事はみつかりませんでした。
何度も申し訳ありませんが、もしよろしければお教えくださいますか。
お願いします。
0901デフォルトの名無しさん
NGNG結論から言うと、INT型にはしないほうがいい。変にいじらないほうがいい。
それは、エラーではなくウォーニングだろう。コンパイラによっては、この種の警告を与える。
浮動小数点の実数の場合、イコールを取る意味が曖昧なので注意しろと言ってる。
その辺の事情が分かった上でイコールを取るなら問題ない。
移植しているのならば、とりあえずプログラムを書いた奴を信じるしかないw
これはFORTRANに限らず、浮動小数点一般の問題だ。
”その辺の事情”を知りたいなら、桁落ちとかで検索して浮動小数点の誤差について調べてみるとよい。
たぶん実数ではイコールを取る意味が無いとか色々書いてあるはずだ。
0902デフォルトの名無しさん
NGNGa = 0.0
do j=1,10
a = a + 0.1
do i=1,10
b = i * 0.1
if (a .eq. b) then
write(*,*) a, ' = ', b
else
write(*,*) a, ' <> ', b
end if
end do
end do
end
0903あるのかな?
NGNG0904デフォルトの名無しさん
NGNGFortran95から CPU_TIME という関数が用意されている。
大概のFortran90コンパイラでは、規格先取りで採用されている。
これ以外にはDATE_AND_TIMEという時計サブルーチンが存在している。これは90の正式規格。
FORTRAN77時代は、FORTRANの規格としては時間がらみの関数・サブルーチンは存在しない。
しかし、各ベンダーが用意した固有のルーチンが大抵用意されている。
マニュアルのお終いの方の非標準関数のあたりをあさってミソクソテクニック。
0905903
NGNGプログラムはC言語から始めたので何とも使い勝手が悪く感じるんだが,
気のせい?
0906デフォルトの名無しさん
NGNG気のせいではない。計算速度の速さを除いては、糞言語ですから。
0907デフォルトの名無しさん
NGNGサブルーチン DATE_AND_TIME
西暦と時刻を返す。
FORTRANはバッチ処理で実行されることが多い。
TSS処理が前提のC言語とは歴史的な事情が違っている。
0908884
NGNGそうです、ウォーニングでした。
なるほど、実数だと厳密にイコールであるという意味が曖昧なのですね。
感覚的にですが、なんとなくわかる気がします。
非常に勉強になります、ありがとうございました。
昨日から色々と作業しておりましたが、
皆様のおかげで先程なんとか希望の結果が得られるプログラムができました。
どうもありがとうございました。
0909デフォルトの名無しさん
NGNGvoid main() {
FILE *fp_in, *fp_out;
int gen, kob, average;
int n;
fp_in = fopen("seiseki.txt", "r");
if( fp_in == NULL ) {
printf("Can't open 'seiseki.txt'\n");
return;
}
fp_out = fopen("kekka.txt", "w");
if( fp_out == NULL ) {
printf("Can't open 'kekka.txt'\n");
fclose(fp_in);
return;
}
0910909の続き
NGNGn = fscanf(fp_in, "%d%d", &gen, &kob);
if(n != 2) {
if(n != EOF) {
printf("fscanf error.\n");
}
break;
}
average = (int)(
( (float)(gen + kob) / 2.0 )
+ 0.5
);
n = fprintf(fp_out, "%d %d %d\n", gen, kob, average);
if(n < 0) {
printf("fprintf error.\n");
break;
}
}
fclose(fp_in);
fclose(fp_out);
}
プログラム1で現国と古文の点数を入力し、プログラム2でその平均点を出力するという問題を解きたいんですが、
FORTARNでのプログラム2がどうにもうまくいきません。
何方か上記のCのプログラムをFORTARNに翻訳して下さい。
どうかよろしくお願いします。
0911デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGsystem_clockっていうサブルーチンがなかったけ?
intelとpgiにはあるけど規格外かな.
0914デフォルトの名無しさん
NGNGあります。Fortran90の規格です。
でも、CPU消費時間ではなく、ある原点からの積算の秒数を返していたと思います。
ずーーーと1,2,3・・・・と指折りしながら数えてる律儀なサブルーチンさん!
0916デフォルトの名無しさん
NGNGc2f.zipだけでいいだろ。
で、cというフォルダにdebug.cを、fというフォルダにc2f.fdとc2f.fiとc2f_lib.f90を
入れる。
c2f.exeを起動し、debug[enter]と押すと、debug.cがfフォルダにdebug.f90という
名前で生成される。
で、>>909>>910のプログラムを翻訳してみたが、fscanf()とfprintf()がうまく翻訳
されなかった。どうも一文字単位の入出力しか現在の所サポートしていないようなので、
その部分は手でちまちまとエディットするしかない。
あと、FORTRAN90のソースになるので、FORTRAN77に変える場合は、他の翻訳
プログラムを探そう。探してないが、さすがにあるだろう。
0917デフォルトの名無しさん
NGNG一つのファイルの中にデータが複数個あり、(例えば、"DATA.TXT"というファイルの中に、1,2,2,4,3,3,1,1,4,3,2,1という12個のデータが入っている)
それらを読み込み、データの数字ごとのファイル(ファイル名=データの数字)をプログラム中で新たに作り、
それぞれのデータを該当番号のファイルの中に出力する(仕分けする)というものです。
(例では、"1"は"1.TXT"というファイルを作り、そこへ出力し、結果、"1.TXT"の中には"1"が4つ入っている。"2.TXT"には"2"が3つ。他同様。)
GO TO文は使わず、DOループとIF文のみで作りたいと考えています。
当方プログラム初心者でして、また、ファイル中のデータ量が多い(10万個)ため、苦戦しています。
初歩的な質問で申し訳ありません。宜しくお願いします。
0918デフォルトの名無しさん
NGNGそういう処理ならawkなんかのスクリプトでやった方が
手っ取り早いと思うけど。
BEGIN { FS = ","; max = -1 }
{
for (i=1; i<=NF; i++) {
data[$i]++
if ($i > max) max = $i
}
}
END {
for (i=1; i<=max; i++) {
if (data[i] != 0) print data[i] > i ".TXT"
}
}
0920デフォルトの名無しさん
NGNGありがとうございます。
しかし、残念ながらFORTRNしか分からないものでして・・・
せっかく教えていただいたものも、理解できない状況です。
申し訳ありません。宜しくお願いします。
0921デフォルトの名無しさん
NGNGFortran が使えて awk が使えない人はいないから,
とりあえず使い方を調べてみませう.
Fortran を捨てたくなるかもね.
awk で扱うのが自然な問題は awk でやるのが一番楽です.
0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNGそのDATA.TXTの中身がどういう書式で書かれているかで
書き方がずいぶん変わってくるかと。行ごとに1個の数字しか
書いてなければ話は簡単だとは思いますが・・・。
PROGRAM test
IMPLICIT NONE
CHARACTER(len=260) :: infile = "DATA.TXT"
CHARACTER(len=260) :: outfile
CHARACTER(len=16) :: cnum
INTEGER :: ios
OPEN(1,FILE=infile,STATUS="old",iostat=ios)
IF(ios /= 0) STOP
DO
READ(1,*,iostat=ios) cnum
IF(ios /= 0) EXIT
WRITE(outfile,*) cnum(1:LEN_TRIM(cnum)) // ".txt"
OPEN(2,FILE=outfile,POSITION="append")
WRITE(2,*) cnum(1:LEN_TRIM(cnum))
CLOSE(2)
END DO
CLOSE(1)
END PROGRAM test
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG0928KG
NGNGいらっしゃれば教えて下さい。
0929デフォルトの名無しさん
NGNG0930KG
NGNG0931fortran
NGNGforrtl:error (75): floating point exception
0: __FINI_00_remove_gp_range[0x3ff81a6de38]
・
・
・
実行するとこのようなエラーが出てしまうのですが・・・
0で除算していることは決してないのでオーバーフローなのかあぁ・・・
0932デフォルトの名無しさん
NGNGOSやコンパイラの種類もわからない
何をしようとしていたのか、ソースもない
そんな状態で何を答えろと?
0933デフォルトの名無しさん
NGNG禿同
まぁ、あとは、sqrt(a)やa**3でa<0とか、
0934デフォルトの名無しさん
NGNGググルといっぱい出てくる。
http://www.google.co.jp/search?sourceid=navclient&ie=UTF-8&rls=GGLD,GGLD:2004-15,GGLD:en&q=forrtl%3Aerror+%2875%29%3A+floating+point+exception
答えはないようだが、雰囲気的にはコンパイラーのバグだろう。
http://www.cpmd.org/pipermail/cpmd-list/2002-November/000481.html
forrtl: error (75): floating point exception
0: __FINI_00_remove_gp_range [0x3ff81a6de38]
1: __FINI_00_remove_gp_range [0x3ff81a76e60]
2: __FINI_00_remove_gp_range [0x3ff800d5120]
3: cnstfc_ [./cnstfc.f: 118, 0x1201cb028]
4: detdof_ [./detdof.f: 191, 0x1201c9b10]
5: mdmain_ [./mdmain.f: 119, 0x1201daa00]
6: mdpt_ [./mdpt.f: 124, 0x1201d9ff0]
7: cpmd_ [./cpmd.f: 120, 0x12003dac4]
8: cpmd_stuttgart_ [./cpmd.f: 3, 0x12003d590]
9: main [for_main.c: 203, 0x1203fc66c]
10: __start [0x12003d3b8]
time: command terminated abnormally.
0935877
NGNG>>897さんのコードはうまく動くのですが自分のコードは全部0になります。
元のコードから編集したのをコピペするので見てもらえないでしょうか?
USE NUMERICAL_LIBRARIES
INTEGER N
INTEGER G(16,16,16)
INTEGER I, J, K
REAL GRI(16,16,16)
CHARACTER FILENAME*15
101 FORMAT(16E16.8)
N=16
DO K=1,N
DO J=1,N
DO I=1,N
IF(MOD(I,2)==1.AND.MOD(J,2)==1.AND.MOD(K,2)==1)THEN
G(I,J,K)=1
ELSE
G(I,J,K)=0
END IF
END DO
END DO
END DO
0936877
NGNGDO I=1,N
WRITE(FILENAME,*)INT(I)
FILENAME=TRIM(ADJUSTL(FILENAME))//'.dat'
OPEN(8,FILE=FILENAME)
DO J=1,N
WRITE(8,101)(GRI(I,J,K),K=1,N)
END DO
CLOSE(8)
END DO
END
0937877
NGNG!
INTEGER G(N,N,N)
INTEGER I, J, K
REAL GRI(N,N,N), GG(N,N,N)
REAL*8 ABC1,ABC2
COMPLEX GC1(N,N,N), GC2(N,N,N)
!
DO I=1,N
DO J=1,N
DO K=1,N
GG(I,J,K)=G(I,J,K)
IF(G(I,J,K).EQ.-1) GG(I,J,K)=0.5
GC1=CMPLX(GG(I,J,K),0.0)
END DO
END DO
END DO
CALL FFT3F(N,N,N,GC1,N,N,GC2,N,N)
0938877
NGNGDO J=1,N
DO I=1,N
ABC1=REAL(GC2(I,J,K))
ABC2=AIMAG(GC2(I,J,K))
GRI(I,J,K)=(ABC1**2+ABC2**2)
END DO
END DO
END DO
!
RETURN
END
0939デフォルトの名無しさん
NGNGどっかのアップローダにアップしろよ。
0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNGDO I=1,N; DO J=1,N; DO K=1,N
! 整数G(I,J,K)を実数GG(I,J,K)に入れる
GG(I,J,K)=G(I,J,K)
! G(I,J,K)は0か1なのに、-1だったら、GG(I,J,K)に0.5を入れる。
IF(G(I,J,K).EQ.-1) GG(I,J,K)=0.5
! GC1のすべての値をGG(I,J,K)+0.0iにする。
GC1=CMPLX(GG(I,J,K),0.0)
END DO; END DO; END DO
! GC1(:,:,:)=GG(N,N,N)+0.0i=0.0+0.0iをFFTにかける。
CALL FFT3F(N,N,N,GC1,N,N,GC2,N,N)
DO K=1,N; DO J=1,N; DO I=1,N
! なぜかABC1,2だけ倍精度
ABC1=REAL(GC2(I,J,K))
ABC2=AIMAG(GC2(I,J,K))
GRI(I,J,K)=(ABC1**2+ABC2**2)
END DO; END DO; END DO
0942935
NGNG長くなってすいません。
>>941
前任者からもらったコードを改造して、さらにここに貼るときにいろいろ
はしょったので変なところが多いかもしれません。
>GC1(:,:,:)=GG(N,N,N)+0.0i=0.0+0.0i
がなぜだが分からないのですが教えていただけないでしょうか?
0943デフォルトの名無しさん
NGNG>>GC1(:,:,:)=GG(N,N,N)+0.0i=0.0+0.0i
>がなぜだが分からないのですが教えていただけないでしょうか?
>>937のループの最後で
GC1=CMPLX(GG(I,J,K),0.0)
が
GC1=CMPLX(GG(N,N,N),0.0)
になるからだろ。
0944デフォルトの名無しさん
NGNG入門と専門書の中間くらいのものがあれば、助かるのですが。。。。
主に科学計算に使います。
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNG私の御師匠さんも以前はC言語で書いていておられたが
Fで書いてみると20%近く早くなったっていってた。
0947デフォルトの名無しさん
NGNGそんなばかな
0948デフォルトの名無しさん
NGNGFortran90以降なら配列演算
FORTRAN77以前は・・・ないな
0950奈菜氏
NGNG助けてください・・・・2(X*X)−5X−3=0です。
とても、おっ馬鹿なんで・・・
0951デフォルトの名無しさん
NGNGFORTRAN 以前の問題。ここで聞くことではないと思うのだけど。
0952デフォルトの名無しさん
NGNG正直、氏んだ方がいいですね。
0953897
NGNGすでに >>941 が指摘しているように
GC1=CMPLX(GG(I,J,K),0.0)
が原因ですね。本来GC1(I,J,K)=CMPLX(GG(I,J,K),0.0)
Fortran90は配列操作に長けているので、
WHERE (iG == -1 )
GG = 0.5
ELSEWHERE
GG = REAL(iG)
ENDWHERE
GC1 = CMPLX( GG, 0.0 )
の様に書けば意味が明解になります。
(iG は型を明確にするために、Gを直してあります。)
今回の事とは直接に関係しませんが、変数名の命名に関しては、
暗黙の型宣言に忠実であることが望ましいです。
これは、たとえFORTRAN90でIMPLICIT NONEをかけても言えることです。
その理由は2つあります。
1.いちいち変数の定義部まで型を調べに戻る必要がない。
2.FORTRAN中・上級者は型を守らないような人を相手にしたがらない。
他言語出身者が『暗黙の型宣言なんかシラネ、宣言すればいいだけのことだろが!』
と言うことがありますが、それは2chで『”がいしゅつ”は既出と読むんだ。日本語知らないのか!』
と言う様なものに当たります。ネタにマジレスな人が2chでスルーされるように、
FORTRAN界ではその内部の伝統を守らないものはスルーされてしまいます。
0954デフォルトの名無しさん
NGNG1、ガンマ乱数の生成プログラム
2、面積等分割のプログラム
3、適合度検定のプログラム
0955デフォルトの名無しさん
NGNGスレ違いですよ。
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0956デフォルトの名無しさん
NGNGa1 b1 c1
a2 b2 c2
a3 b3 c3
...以下続く
みたいなファイルがあって、そこから
まず一行目のa1とb1とc1だけを使って計算した結果を出力して、
次に二行目のa2とb2とc2だけを使って計算した結果を出力して…というのをひたすら繰り返したいのですが。
超素人質問ですいません。
よろしくお願いします。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGdo i=1,N
read(*,*) a, b, c
end do
としとくと(文法自信ないですが。)i=1で最初の3つ(a1,b1,c1)を読み込んだら、
i=2の時は勝手にその次の3つ(a2,b2,c2)を読み込んでくれるのでしょうか??
ってか、自分で試してみればいいわけですね。
やってみます。
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNGそのFortran中上級者と思っている人間にかぎって、
スパゲティなソースを量産しているFortranの現状。
全部が全部といいませんが。
0961デフォルトの名無しさん
NGNGそりゃしょうがないよ。
スパゲッティーが良くないとは、ALGOL、PASCALの時代から計算機学科の人々が言い続けてきたが
実際問題としてFORTRAN90以前は言語の特質として、原理的にスパゲッティーでないプログラムを
書くことは不可能だったんだから。
そもそも、FORTRAN界にはスパゲッティーなプログラムが良くないという価値観は存在しない。
自分で書いて、自分で使う、他人が使うことは想定しない、という古い時代の価値が保たれていて、
プログラムそれ自体が完成価値を持つという、計算機学科系の価値観とは深淵の隔たりがあるもの。
0962デフォルトの名無しさん
NGNGfortran コードを吐く fortran みたいなアプローチがあればいいんですよね.
インラインをうまく制御できたり強力なマクロがあったりという感じで,
計算コストを上げずに可読性を良くできる仕組みがあれば.
1, 2 文字の変数名が良く使われるのは,
紙に書いてある数式を写したからじゃないでしょうか.
下付き文字やギリシア文字がうまく書ければ
1, 2 文字に固執されないと思います.
TeX の数式がそのまま貼れて,しかも計算コストを考えて式変形してくれたら
いいですよね.maxima にあったような気もしますが,
これを言語仕様に含めたり.
0963デフォルトの名無しさん
NGNGなるのは避けられるけれど、
FOATRAN中上級者はratforを使うのは邪道だと思っているような希ガス。
ちなみに漏れも暗黙の型宣言に忠実じゃない香具師(´・ω・`)
0964デフォルトの名無しさん
NGNGFortran77で、
暗黙の型宣言を守り、IMPLICIT NONE。
COMMONはクリティカルなデータのみで、直交性を考えてやる。
GO TO 文はbreak用途のみに使う。
DO~END DOを使い、DO ~ CONTINUE は使わない。
WHILE文は使う。
無駄なFORMAT宣言は避ける。(WHITE(6,'(A)'
プリプロセッサも使う。
分岐が多くなってきたら、コメント付けで意図を明確に。
これやるだけで、かなり可読性が増すと思うんです。
私の指針ですが。
逆にこういう気遣いができないFortran使いは許せぬ。
その、ぐちゃぐちゃした物を動かんからデバッグしてといわれても。
良く読んで、理解しろといわれても。
・゚・(ノД`)・゚・。
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNGinteger,dimension(2,2) :: IAA = (/ 1,2,3,4 /)じゃだめなの?
0967デフォルトの名無しさん
NGNGFortran90 の場合、多次元配列は
integer, dimension(2,2) :: IAA = reshape((/ 1,2,3,4 /), shape(IAA))
のように reshape を使う。
この場合、
IAA(1,1) = 1
IAA(2,1) = 2
IAA(1,2) = 3
IAA(2,2) = 4
のように列順であることに注意。
0968デフォルトの名無しさん
NGNGできました.
reshapeってのがあるんですね.
早速の回答 thxでした.
気持ちよく新年を迎えられそうです.
0969デフォルトの名無しさん
NGNGどっかにわかりやすく解説してくれてるページないっすか??
ぐぐってみたりしたのすが、よくわからん。。。
別にそんなに大した計算量じゃないし答えさえ出ればいいから、計算コストとかアルゴリズムの美しさとかどうでもいいんだが。
ちなみに係数にランダムに0が入ってきてしまうのですが、いちいち場合わけしないとだめなんですかね??
よろしくです。
0970デフォルトの名無しさん
NGNG自分で作りたいというわけでも無さそうですので,
matlab, octave, scilab, R, などをお勧めします.
多くの言語のライブラリには行列を扱うものがありますので,
そういうのでもいいと思います.
自分で作るのでしたらすみません.
0971デフォルトの名無しさん
NGNG未知数3なら、公式をプログラムすればいいんじゃないの?
0972デフォルトの名無しさん
NGNGデータ解析で一時的に式を解かないとならないので、新たにほかのを使うのもちょっと・・・。
それとかろうじてかじったことがあるのがfortranだけなので。
条件をランダムに変えたときの解の一覧をずらーっとだしたいのでfortranでも使うかと思った次第。
>>971 ありがとうございます。
とりあえず、
ttp://astr-www.kj.yamagata-u.ac.jp/~shibata/kbg/ludecomp2000.html
の一番下のやつをほとんどコピペで最初の1〜15行目にいろいろ値が入るような感じでカスタマイズして
やってみます。
0973デフォルトの名無しさん
NGNGgoogle で `octave 連立一次方程式' と検索してみる.
すると,このようなコードに出会う.
| x + 2*y = 2, 3*x + 4*y = 3 の解の計算
|
| octave: > A = [1, 2; 3, 4]
| octave: > b = [2; 3]
| octave: > A\b
あーあ.これだけで計算できるのに使わないんですか.
間違っても知りませんよ.ヽ(´▽`)ノ
「ちょっと計算するだけ」は,fortran の守備範囲じゃないと思うのよ.
0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNGほんとだ。ありがとう、エロ異人。
なんか簡単そう。
でも、係数いろいろかえるの自動でやるのどうやるんだ??
ちょうどf95ちゃんがubondを叫んでるところでした。
0976デフォルトの名無しさん
NGNGcygwinで動かそうとすると[プロシージャエントリポイント_impure_ptrがダイナミックリンクライブラリcygwin1.dllから見つかりませんでした。]と怒られる。。。
すいません、そろそろすれ違いですね。よそ行きます。
って、どこいきゃいいんだ???迷子になったら戻ってきます。
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNGふつーに線形代数の教科書の行列式そのまんま書き下してしまいました。
しかもサブルーチン等一切使わず思いっきりすぱげっちです。
が、、、なんか、簡単にできた。
やっぱり新しいものを付け焼き刃でやれるだけのテクがないっす。
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG最初の3000通りくらいまではコピペでexcel使ってやったんだけど。
結局出力ファイルのサイズがx,y,zの組をtextで出力しただけで700MBとか超えてたから
よっぽどがんばってマクロとかお勉強しないとexcelじゃ無理だったのではと。
0981デフォルトの名無しさん
NGNGmatlab 系より手軽に数値計算しやすいならすごいことさね.
>>980
> 結局出力ファイルのサイズがx,y,zの組をtextで出力しただけで700MBとか超えてたから
計算結果をテキストで出力して,それからどうするつもりだったの?
0982デフォルトの名無しさん
NGNGです。
もちろん700MBは条件つける前の結果だから、そんなものはすぐに破棄しましたが、
条件つけるためには一度は700MB分計算しないといけなかったのです。
0983デフォルトの名無しさん
NGNGhttp://members.at.infoseek.co.jp/kitaurawa/fortran.html
レス数が950を超えています。1000を超えると書き込みができなくなります。