トップページ⇒tech
983コメント350KB

FORTRAN II

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
FORTRAN総合スレッドです。
FORTRAN77/90/95, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・前スレ
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/ (dat落ち)
0002デフォルトの名無しさんNGNG
・関連スレ?
FORTRAN専用スレッド
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デフォルトの名無しさんNGNG
・FORTRAN関連情報
The 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デフォルトの名無しさんNGNG
Fortran90プログラミングの教科書
http://www.geo.titech.ac.jp/fujimotolab/renewHP/numexe/manual/10_3/f90/start.html
0005デフォルトの名無しさんNGNG
FORTRAN II とか書いてあるから、何をいまさらそんな古い規格について語ることがあるんだ ?

って思ったら、2スレ目なわけね。
0006fortran初心者NGNG
お助けください・・・fortranで質問です。
1から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デフォルトの名無しさんNGNG
SUBROUTINE RUNGE_KUTTA(X,Y,A,B,N,F,Y0)
REAL 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素人NGNG
質問だけでも何なので>>6 こんなのがあります。

    LOGICAL 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デフォルトの名無しさんNGNG
>>7-9
PROGRAM TEST中の
    F=X**2-Y     ! 変数 F への代入
は
    F(X,Y)=X**2-Y  ! 文関数 F の定義
では?

でも文関数の有効範囲はそれを定義したプログラム単位(ここでは PROGRAM TEST)
内だけなので、F() を SUBROUTINE RUNGE_KUTTA() で使うには
FUNCTIONで別に関数定義する必要があると思います。
0013素人NGNG
>>12 早速ありがとうございます。

<変更点>
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
>>10
遅レスですが・・・
無事にプログラムを走らすことができました
ほんとうにありがとうございましたヽ(´ー`)ノ
0015デフォルトの名無しさんNGNG
文関数は実行文ではないので,プログラム単位中では全ての宣言文のあと,
全ての実行文の前に書く。
0016デフォルトの名無しさんNGNG
Fortranにプリプロセッサは無いのでしょうか?
環境が変わるたびに書き換えるのは非常に面倒です。
0017デフォルトの名無しさんNGNG
VFの設定にはPreprocessorというカテゴリがありますが
0018デフォルトの名無しさんNGNG
>>17
VFとは 何でしょうか?ひょっとして Visual Fortran ですか?
0019デフォルトの名無しさんNGNG
HP FortranはCプリプロセッサ (cpp) 指令も認識します。
Sun Fortranはfppとcppというソースファイルプリプロセッサをサポートしています。
UNIX系コンパイラでは、拡張子を".F"とすることで、FORTRANのコンパイルの前にCプリプロセッサによって処理される。
0020デフォルトの名無しさんNGNG
Fortranの歴史
http://members.at.infoseek.co.jp/kitaurawa/fortran.html
0021デフォルトの名無しさんNGNG
大学の研究でFortranを使い始めたばかりの者です。
コンパイラはVisual Fortranを使ってます。
私はC言語の経験があるのでプログラムの流れなどは入門書を読めば分かるのですが、
先輩からもらったプログラムを解読するためにはリファレンス的な本が必要です。
何かおすすめがありましたらお願いします。
0022デフォルトの名無しさんNGNG
>>22
市販のf90本では富田本かねぇ
彼のwebページも読んでおくべし
本当はbit別冊のf90入門書が良いがもう市販されてない
0023デフォルトの名無しさんNGNG
富田本って>>4でしょ
0024デフォルトの名無しさんNGNG
大文字はやめてくれ〜っ
0025デフォルトの名無しさんNGNG
だれだ〜っ、とてつもなくどでかいコアファイルはきださせたのは〜っ!
0026デフォルトの名無しさんNGNG
HPのVisualFortranってコンパイラのバグはどう?
IDEに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デフォルトの名無しさんNGNG
>>26
HP の 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デフォルトの名無しさんNGNG
>>26
IDEにVS使えるから,VisualFortranと言っているが,IVFでは要VC.netです.
0029デフォルトの名無しさんNGNG
やっほー、ふぉーとらんらんらん
0030デフォルトの名無しさんNGNG
>>28
> IDEにVS使えるから,VisualFortranと言っているが,IVFでは要VC.netです.

おっ!ということは逆に言えば、VS.NETならVFなしでも動くということですよね?
今までVF買えなくてg77でがんばってきたけど、VS.NETならアカデミック版が生協で簡単に手に入るので買っちゃおうかなぁ。
0031デフォルトの名無しさんNGNG
>>30
Visual 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++ のリンカを使用するために
>    上記ソフトウェアが必要になります。
003230じゃないYO!NGNG
>>31
ねぇねぇ!!
ということはCのライブラリもリンクできるのぉ?
0033デフォルトの名無しさんNGNG
>>32
呼び出し規約が正しく記述されていれば可能です。

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
003430NGNG
>>31
> 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
>>34
> 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
>>35
> >>31で言ってるのは(まだ発売されてない)Intel製VFのことだよ。

うわ、そうでしたか(^^;失礼しました。
00375NGNG
ど素人なのですが、教えてもらえますか?
y=3x**2+4x+3
うえの式を微分するプログラムは、どうすればいいのですか?
大学に入って、初めてプログラムをするので、まったく分かりません。
教えてください。
0038デフォルトの名無しさんNGNG
>>34
リンカとは,ソースプログラムをコンパイルしてできた中間オブジェクトファイル群を結合して
1つの実行可能なプログラム形式を作成するためのものです
なので,リンカだけがあっても,どうしようもないですよ
0039デフォルトの名無しさんNGNG
>>37
ttp://www.shirai.info.waseda.ac.jp/~tani/autod/node2.html
0040デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1068356003/503
誰かよろしく
0041デフォルトの名無しさんNGNG
NAGのライブラリーよこせ.
004221NGNG
富田本とやらを読みました。
先輩からもらったプログラムの中で
USE DFLIB
SECNDS
RAN
などは入門書に載ってないのですがどうすればいいでしょうか?
いろんな関数が載っているリファレンスのような本があればキボンヌです。
0043デフォルトの名無しさんNGNG
>>42
ftp://ftp.compaq.co.jp/products/dvf/cvf-help.zip

QuickWinか,Win32ですね
0044プ〜多浪NGNG
FORTRANの自動並列化コンパイラでオープンソースってある?
004521NGNG
>>43
ありがとうございます。
0046デフォルトの名無しさんNGNG
課題で分からないところがあるのでどなたか知恵を貸してください。

integer*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
f77か。
この程度は自分でやれよ。
わからないところって、丸投げじゃねーか。

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デフォルトの名無しさんNGNG
>46
s を integerのままにしておくなよ。
0049デフォルトの名無しさんNGNG
何でわざわざ,integer*2なんだろう
0050デフォルトの名無しさんNGNG
あ、ここの話題は66でも77でも90でも95でもいいんだっけ
0051デフォルトの名無しさんNGNG
なんでもいいんだろうけど66はちょっといやだな・・・
0052デフォルトの名無しさんNGNG
>>50
FORTRAN II だけだろ。(→ >>5)
0053デフォルトの名無しさんNGNG
カードやテープがいるの?
0054デフォルトの名無しさんNGNG
最強のカード?

10 CONTINUE
0055素人NGNG
FORTRAN77で出力されたデータを、グラフ化する事を学ぶにはどうしたらいいのでしょうか?
相性がいいグラフィックソフトがあったりするのでしょうか?
0056デフォルトの名無しさんNGNG
>>55
とりあえずGNUPLOTかな?
個人的にはExcel+VBAもよく使うけど。
使い方はそれぞれのソフトを紹介している本なりWebサイトなりを探せば
いっぱい見つかるよ。
0057デフォルトの名無しさんNGNG
g77ってもっとスピード上がらないのかな?
もう見捨てられてる?
0058デフォルトの名無しさんNGNG
>>55
おそらくプログラム実行中に出力されるデータを逐一グラフ化するんじゃなさそうだから、
FORTRAN77で出力云々はほとんど関係ないと思う。
出力するデータの形式とデータの種類だけが関係してくる。

グラフ化ソフトで読み込みしづらい様な出力データなら、
プログラムのコードを変更してそれに適した出力データを吐かせるのが普通だと思う。
もしくは、すでにある出力データをそれ用にフォーマットし直すスクリプトを組む方法もある。

手元に適当なソフトがあるならそれ使えばいいんじゃないかな。
安く済ませるならGNU PLOT。
しかし、これいまいち使い勝手がわるいんだよな〜

>>57
最新のCPUへ最適化されたコードを作れないなら、すでに見捨てられてるカモね。
これによってプログラムの実行速度が全然違ってくるし。
g95もβ(?)版は出てるようだけど、用途が用途だけに信頼性がまだ今ひとつ…
LinuxならintelのFortran90が無償で提供されてるからそれ使う手もあるけど、
これは使ったことが無いので良く分からない。

3000行未満程度のコードならあまり変わらないかもしれないけど、
コードがある程度の行数があってこれから大幅に変更するんなら、
早めにF95に移行した方が幸せになれるかも。
"F77に比べれば"格段に構造化しやすくなってます。
005957NGNG
>>58
レス有難う
でも僕の書いたソースじゃなくて、僕のいる分野で使われているソースをコンパイルするのに使いたいので
多分g77じゃないとだめっぽいんですよね。
行数はすべて合わせたら数万から十数万行は確実にいってると思います。
0060デフォルトの名無しさんNGNG
>>58 ヽ(`Д´)ノ gnuplot ハイイゾ!
0061素人NGNG
>>56-57早速ありがとうございます。

>>56
excel,vb共に、持っていますが、vbは全く使ってません。
今まではexcelは一次元データ列ならそのまま扱えるのですが、
txtで開けないから、どういうフォーマットの細工をしたらいいか検討がつきませんでした。
もっと調べてみます。GNUPLOTも勉強してみます。

>>57
最終的には、2,3次元のデータを微小時間ごとに逐一だしたいのですが、
そこまで全く至るための知識不足です。

>グラフ化ソフトで読み込みしづらい様な出力データなら、
>プログラムのコードを変更してそれに適した出力データを吐かせるのが普通だと思う。
>もしくは、すでにある出力データをそれ用にフォーマットし直すスクリプトを組む方法もある。

GNUPLOTで描画するためには、FORTRANで吐かせるデータのFORMATを工夫すればいいだけですか?

0062デフォルトの名無しさんNGNG
>>61
GNUPLOTでグラフを描くなら特に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デフォルトの名無しさんNGNG
>>61
EXCELは配列データをテキストで開けますよ
0064素人NGNG
>>62
その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素人NGNG
n=9なので、
100 format(8(1h ,8f10.5/))
での、繰り返しは8です。
0066デフォルトの名無しさんNGNG
>>64-65
Excelでデータファイルを開くときに「カンマやタブで区切り区切られたデータ」(CSV)
で開いてない?
区切り文字にスペースを指定するか固定長フィールドのデータとして開くと
きちんと値毎に区切られて開けるよ。
0067素人NGNG
>>66
できました!ありがとうございます。
0068デフォルトの名無しさんNGNG
g77 や f77 にて,standard な F77 でないところを指摘してくれる
オプションは無いのでしょうか.
別個の構文チェッカがあるのでしょうか.

これが妥当なのか知りたいのです:

WRITE(UNIT=*, FMT='(A, F3.1, A)') 'It is ', FOO, '.'
とする代わりに,
WRITE(UNIT=*, FMT='(\'It is \', F3.1, \'.\')') FOO
0069デフォルトの名無しさんNGNG
>>68 ftnchek
ttp://www.dsm.fordham.edu/~ftnchek/
007068NGNG
>>69
サンクスコ.
早速やってみました.後者はダメでした.
みなさんはどうですか?まさか FORMAT 文ではないですよね?
0071デフォルトの名無しさんNGNG
>>68
WRITE(UNIT=*, FMT='("It is ", F3.1, ".")') FOO
これでも同じみたいですね.
007268NGNG
>>71
ほんとだ! ftnchek に怒られなかったよヽ(´▽`)ノ
まだ Professional Programmer's Guide to Fortran77 の 3 章を読んでいる
くらいなので,クォートの違いが何なのかは分からず...
0073デフォルトの名無しさんNGNG
"がF90だからじゃねの
007468NGNG
Professional Programmer's Guide to Fortran77 (どう略せばいい?) の
4 章によると,ダブルクォートは Standard じゃないみたいです.残念.
0075デフォルトの名無しさんNGNG
シングルクオートをトイツにしてエスケープするのもダメ?
WRITE(UNIT=*, FMT='(''It is '', F3.1, ''.'')') FOO

0076デフォルトの名無しさんNGNG
>>68
よくわからんが,こうしたいのか?
WRITE(UNIT=*, FMT='(''It is '', F3.1, ''.'')') FOO
007776NGNG
75と同じだった.逝ってくる.
''と"が同じにみえた.
0078デフォルトの名無しさんNGNG
リンク中・・・
0079質問者NGNG
質問があります。お願いします。

SUBROUTINE内で定義した、
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デフォルトの名無しさんNGNG
◎クリスマスは楽しいなー!!◎お正月も楽しいなー!!◎一発やりてー!!◎
http://homepage3.nifty.com//hot-hot/7254.html
0081デフォルトの名無しさんNGNG
値が入っていないとは?
それらの配列を初期化していないなら、"基本的には"値は不定だよ
いくらcommon文とはいえ、初期化する必要があるなら、するべきだと思う
「いつも0になるから、0で初期化しなくていいや」なんて思わずに
0082デフォルトの名無しさんNGNG
>>79
BLOCK DATA で初期化されている可能性がある。
0083デフォルトの名無しさんNGNG
>81 :デフォルトの名無しさん :03/12/04 22:47
>値が入っていないとは?
>それらの配列を初期化していないなら、"基本的には"値は不定だよ
>いくらcommon文とはいえ、初期化する必要があるなら、するべきだと思う
>「いつも0になるから、0で初期化しなくていいや」なんて思わずに

そのとおり。Fortranは基本的には最初にメモリを静的に確保して、そこで
閉じている処理系。なぜなら大昔はメモリが極端に少ないから、そうするのが
当然だったんだろう。

今は当然違う。スタックを多用するので、特に副プログラム内の変数はコールさ
れるたびにアドレスが違っている可能性がある。大昔はそんなことやりたくても
できなかった。

だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
り、全く動かないこともある。そのときには、スタックを使わないオプションで
コンパイルしたりする。

変数の初期化は、愚直にやった方が後々楽だ。
0084デフォルトの名無しさんNGNG
>>83
単にスタックのないプロセサだったんだろ。
普通、サブプログラム/関数のローカル変数を使いまわしができるスタック方式の方がメモリーには優しいよ。

> だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
> り、全く動かないこともある。そのときには、スタックを使わないオプションで
> コンパイルしたりする。

ちゃんとデバッグしろよ。
008568NGNG
>>75-76
セクション 5.2 「Constants」を読んで,やっと何のことだか分かりました.
文字列リテラル内でシングルクォートを表現するには,
2 つ書けばいいんですね.てっきりパーレンを括っているのかと...
ありがとうございます.

どうでもいい話ですが,2ch や e-mail でも
FORTRANer なら一行 72 文字ですよね?
今まで 80 くらいでやっていたので反省しています.
0086デフォルトの名無しさんNGNG
f77 に完全準拠したコードを書くために ftnchek を使用するにあたって,
IMPLICIT NONE だけを許可したいときには,どんなオプションになりますか?
# ftnchek -f77 -nof77=implicit-none hoge.f
では
No string setting allowed for -nof77=implicit-none: ignored
と言われ,無視されてしまいます.
まさか,-f77= に implicit-none 以外の全てをリスト...?
008787NGNG
すみません、どなたかこのプログラムは、どういった物か教えてください。
フォートランには、まだあまり詳しくないもので、お願いします。
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
>>87
バグのあるプログラム
0089デフォルトの名無しさんNGNG
>>87
> DICE(M)=0

不定なインデックスのところに 0 を代入.

> CALL SEED(794)

泣くよ?

> WRITE(*,*)I,DICE(I)/100000.

20 回やったのに 100000 で割るのはなぜ?
009087NGNG
すみません、訂正です。
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,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
>90
細かいバグは目をつぶって変数名などから想像すると
たぶん「20面体のさいころを10万回振ってそれぞれの目の出た確率を出力する」プログラム。
0092デフォルトの名無しさんNGNG
「目の出た*確率*」っていうのは妙だな。 「目の出た割合」か。
0093デフォルトの名無しさんNGNG

>> だから、大昔のFortranプログラムをコンパイルすると実行時に答えが全く違った
>> り、全く動かないこともある。そのときには、スタックを使わないオプションで
>> コンパイルしたりする。
>
>ちゃんとデバッグしろよ。

10万行のプログラムをね。あんた、どれくらいの問題をやってる。
20年以上使われるとね、バグが本物になってしまうんだよ。

ここはバグですから直しておきましたと言って、余計なことをするなと
殴られる。
0094デフォルトの名無しさんNGNG
>>93 勉強になります.南無阿弥陀仏.
0095デフォルトの名無しさんNGNG
すみません。質問です。
fortran90で、目的のファイルが更新されたら
自動的にプログラムを実行させるっていうプログラムは
どうやって書いたらいいのでしょうか?
0096デフォルトの名無しさんNGNG
>>90
訂正って,Mは結局不定のままじゃん.

>>95
VFならできなくもないが,Fortranで常駐プログラム作るよりは,Cで組んだ方がいいと思うが.
0097デフォルトの名無しさんNGNG
Intel Visual Fortran Compiler 8.0 for Windows 発売age
0098デフォルトの名無しさんNGNG
>>93
オプション変えて、答えが合ってたら安心するんだ...。

まあ、そういうプログラムってことね。(藁
0099デフォルトの名無しさんNGNG
>>95
OS に依存する方法しか無いでしょう (?)
cron.d があるシステムならスクリプト数行!?
0100デフォルトの名無しさんNGNG
>オプション変えて、答えが合ってたら安心するんだ...。
>
>まあ、そういうプログラムってことね。(藁
それくらいにしとけ。お坊ちゃん。
010195NGNG

ありがとうございました
0102デフォルトの名無しさんNGNG
相談があります。
学校での授業でこれからしばらくの間、FORTRANを使う事になったのですが、
それに伴って友人数名でコンパイラを買う事にしました。
ちなみに富士通のやつ。

複数のパソコンにインストール可能ですか?
何か複雑極まりないセキュリティが入ってて、パソ一台にしかインストール出来ないって事はありませんか?

無いとは思うんですが、やはり万が一って事もあるので・・・
法律的にはダメだって判ってるんですが、やっぱり一人では高くてとてもとても・・・・

アドバイスよろしくお願いします。
0103102NGNG
正確に言うべきでした。
富士通のこれです。
ttp://software.fujitsu.com/jp/fcaca/intro.html
0104デフォルトの名無しさんNGNG
もし俺が>>102と同じ立場なら、1つだけ買って3人で使う。
アカデミック版とはいえ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
Salford FTN77 Personal Edition Compiler
これじゃ駄目?
0106デフォルトの名無しさんNGNG
ifcはノンコマーシャル版がありますが?
0107デフォルトの名無しさんNGNG
>>106
いや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
http://gcc.gnu.org/fortran/
とうとうG95プロジェクトから正式にGCCへ...
0110102NGNG
winです。
フォートラン90が必要なので・・・・
0111102NGNG
オンラインでドコにも売ってないってどういう事だゴルァ
全部古い奴だったし・・・・・
0112デフォルトの名無しさんNGNG
>>102,111
オンラインで売ってる安い奴だとここかな?
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デフォルトの名無しさんNGNG
>>102
90じゃなくちゃ駄目な理由はよく分からんけど
コンパイラ買うなら、その金で良い本買ったほうが良いと思うけどなあ。

授業を担当している先生に、熱心に家でも勉強したいんですって言えば
Fortran90をインストールしたノートパソコンとか貸してくれそうだけど。
どこの研究室でも、ちょい古めのいらないパソコンは転がってるからね。
0114デフォルトの名無しさんNGNG
>>113
> 授業を担当している先生に、熱心に家でも勉強したいんですって言えば
> Fortran90をインストールしたノートパソコンとか貸してくれそうだけど。

「そうか。がんばれよ。学校に来ればいくらでも使えるから。」と言われるに一票。
0115デフォルトの名無しさんNGNG
勉強用ならWin版のコンパイラ買うよりも、古いパソコンにLinuxとIntel Fortran入れた方が安上がりかも。
0116デフォルトの名無しさんNGNG
プログラミングの勉強をするなら Windows なんてやめなさい.
苦労するだけです.
0117デフォルトの名無しさんNGNG
>>116
先生、その代わりになるステキなOS名とその訳をお教え願いたいわけですが、
いかがですか?
0118デフォルトの名無しさんNGNG
>>117
たとえば Solaris9 がある.
x86 向けも売られているし,Linux 用バイナリも動くから
Intel の無償コンパイラも走るわけだ.
0119102NGNG
Solaris9・・・・・名前しか知らない・・・

90じゃなきゃ駄目な理由。それは学校が指定したから、です。
77って、CASL2みたいに書かなきゃ駄目な奴でしたっけ?

>>114
おいどんもイピョ

ソフトは見つけました。安いトコ。
ttp://www.getplus.co.jp/pr/product641208.asp
0120デフォルトの名無しさんNGNG
>>119
> ソフトは見つけました。安いトコ。

安いどころじゃなくて,Intel 製の無料のがあるんですよ.Linux 用ですが.
http://developer.intel.com/software/products/compilers/flin/flin_noncom_lic.htm
non-commercial 版なので, 30 日限りの試用版とは違うのでしょう.

私は使ったことがないので良く分かりませんが,
今日にもダウンロードして試してみるところです.
0121デフォルトの名無しさんNGNG
>>119
77は1桁目にC, *を書くとコメント行、6桁目に文字を書くと継続行、コードは2〜72桁
と言った具合にプログラムを書く位置が決められている。

> ソフトは見つけました。安いトコ。
学生用は定価で8割引か・・・すごいね。
0122デフォルトの名無しさんNGNG
とりあえず、即製品を買うのはお薦めできない。
その富士通のコンパイラ、90日間試用できるみたいだから、とりあえずそれ使ってみたら。
0123102NGNG
Linuxですか・・・
レッドハットあたりだと、まあ直ぐに買えるとして、問題はハードディスクですな。
私はリナックスをダウンロードして組むような知識はありません・・・
パーティション分けして空けてやらないと・・・・

めんどくさい・・・・・

完全日本語化のディストリビュータってありますか?レッドハットは英語ばっかし・・・
ターボリナックスとかいっぱいあるけど使った事無い・・・

富士通のは、既に使った事があります。何度も。
VStudioと比べたら凄まじく使い難いけど、ウィンドウを調整したら行けそうです。
それにアカデミックで安いし。
送料込みで25k円弱・・・・うーむ。

インテルって英語版ばっかし・・・・?うわ。英語勉強しなきゃ。まあ単語覚えたら終わりですけど・・・
0124アホNGNG
富士通のコンパイラ、90日間経ったらOSごと再インストールしなおせばまた使えるようになるんじゃない?
0125デフォルトの名無しさんNGNG
>>102
ところで、どんな授業でFortran90を使うんですか?
これから先、自分の研究なりで確実にFortranを使っていく必要があるなら
自宅にもFortranが使える環境があるに越したことはないけど、
「計算機基礎」とかプログラミングの基礎的な講義で使うだけなら、わざわざ
高い製品版を買ったり、新たにOS入れたりする必要はないと思いますよ。

#このスレでこんなことを言うのもナンですが
WindowsでもC/C++やPascalならフリーの処理系がたくさんあるから
これらで勉強すればFortran90でのプログラミングも理解できると思います。
Fortran90なら基本的なことはCやPascalとあまり変わりませんから。
0126102NGNG
>>124
いけるんですかね・・・・・?OSごと・・・・・

>>125
情報系の演習です。
ですが、将来、目指す研究室(物理系)で使う予定です。入れたら、の話だけど・・・・
CはVSで頑張ってます。
0127デフォルトの名無しさんNGNG
>>102 いいやつがあるんですよ.

KNOPPIX という,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デフォルトの名無しさんNGNG
>>127
CD-Rドライブ持っていませんがなにか。
0129デフォルトの名無しさんNGNG
買いなさい。
0130デフォルトの名無しさんNGNG
>>128 最近は大学の計算機でも CD 焼けます.
0131デフォルトの名無しさんNGNG
VisualFortranで電力計算センターの作画ライブラリCalcPS使いたいんですけどうまく使えません。
リンクも設定してるんですけどなんででしょう。ビルドエラー出ちゃうんですよねえ。
0132デフォルトの名無しさんNGNG
>>131
ビルドエラーの内容を示さない時点でネタと見倣されました.
0133デフォルトの名無しさんNGNG
Intel Visual Fortran Compiler 8.0 for Windows ってAMDのプロセッサでも動く?
0134デフォルトの名無しさんNGNG
>>133
動く。
しばらく前のAthlon搭載PCで、SSEを有効してコンパイルしたらしっかり動いた。
ベクトル化も可能。
0135デフォルトの名無しさんNGNG
>>134
ありがとう。
コンパックだった頃は必要動作環境が、PC/AT互換機ってなってたのが、
インテルになってから、PentiumあるいはXEONってなってたんで心配だったよ。
0136デフォルトの名無しさんNGNG
ttp://cc2.ce.nihon-u.ac.jp/~inui/kamoku/practical-programming-2003/2003-10_file/
ここにあるやつの宿題なんですけれども・・・
どなたか解いてくれませんか、お願い先生。
0137デフォルトの名無しさんNGNG
学校名さらしてんじゃねえよ。常識を考えろ。
0138デフォルトの名無しさんNGNG
>>137
そうすね、スマソ
0139デフォルトの名無しさんNGNG
FORTRANでいい本ありますか?
初心者です。F90を習いたいです。
0140デフォルトの名無しさんNGNG
ポン大かよ・・・
0141デフォルトの名無しさんNGNG
>>139
私の知る限り、>>4の冨田博之著「Forrtran90プログラミング」(培風館)か
定番(?)戸川隼人先生の「ザ・Fortran 90/95」(サイエンス社)ですかね。

それにしてもFortran90/95の日本語書籍は少ないですね。
一般書店ではFORTRAN関係の本も見かけなくなっちゃったし。

>>136
宿題は自分でやってこそ意味のあるものです。
また来年もがんばってね♪
0142初心者NGNG
FORTRANって一般的に何をする言語ですか?
土木屋がよく使ってると聞いたのですが…
0143デフォルトの名無しさんNGNG
数値計算
0144初心者NGNG
なるほど…解析とかに使うんですね。
C++ではできないんですか?
0145デフォルトの名無しさんNGNG
>>144
それは禁句。
0146初心者NGNG
ん?禁句とは?できないんですか?
すいません。初心者なので。
これから、言語を学ぼうかと思っているんですが、
有限要素法などの解析をやりたいんですけどどちら
(C++とFORTRAN)が良いでしょうか?
0147デフォルトの名無しさんNGNG
143 名前:デフォルトの名無しさん[sage] 投稿日:03/12/19 23:07
数値計算

144 名前:初心者[] 投稿日:03/12/19 23:13
なるほど…解析とかに使うんですね。
C++ではできないんですか?

一人上手!
0148デフォルトの名無しさんNGNG
>>146
「昔からの実績あるライブラリがたくさんあって、高速計算マンセー」
ならFORTRAN
「参考書がたくさんあって、オブジェクト指向マンセー」
ならC++
ってとこでしょうか

↓こんなスレもあるから参考にしてみては?
【科学技術計算】C言語とFortran どっちがいい?
http://science2.2ch.net/test/read.cgi/sim/1042715803/l50
0149初心者NGNG
148
ありがとうございます。まさに今私が求めているような
答えがありそうです。

>>143
わざわざありがとうございました。
0150初心者NGNG
>>148
">>"つけるの忘れてました。
0151デフォルトの名無しさんNGNG
知名度ってのは恐しいものだね >>C++
0152デフォルトの名無しさんNGNG
g95 はどのくらい使えるんでしょう?
ちゃんと配列の,要素ごとの足し算ができました.
intel のは大きくて使いづらいので,普段は g95 で逝きたいのです.

配列まわりの文には似たような書き方がたくさんありますね.
なるべく f77 と f95 でコンパチブルにしたいので,困ったものです.
0153デフォルトの名無しさんNGNG
なぜ、SUN でf77では
keta=5
write(text,'(i<keta>)') num
ができるのに、
f90ではできんのだ〜。・・・つかわなくて済ますことを考えるか・・・
0154デフォルトの名無しさんNGNG
>>141
ありがとうございます。
ザの方をゲットしました。
0155デフォルトの名無しさんNGNG
あーーーー、眠い
シミュレーション用にFORTRANでプログラム組んだ人は、
どの程度の行数書きますか〜?
あーーーー、分子動力学計算の時は3千行程度で済んだのに...
ただいま、13K突破(禿鬱
0156デフォルトの名無しさんNGNG
>>155
眠いところすみません.
1 つのファイルが 13k (行ですよね) にもなってしまうことがあるんですか?
実際にカッコいいシミュレーションプログラムを
組んだことが無いので知らないんです...
FORTRAN では長いプログラムを回避できないのでしょうか?
0157デフォルトの名無しさんNGNG
>>156
合計 13k だろ...。
分割コンパイルくらいできるわ。
0158デフォルトの名無しさんNGNG
>>148
別に FORTRAN の関数を C++ から呼ぶことくらい
いくらでもできるんだがな...。
0159デフォルトの名無しさんNGNG
富士通のコンパイラ買っちった・・・・
で、届いた。
0160デフォルトの名無しさんNGNG
>>159 レポートキボン.速度とか.
0161デフォルトの名無しさんNGNG
学校で富士通のコンパイラ使ってるけど使いやすいよ。
コンパイルログが細かいし日本語だからデバックしやすい。
0162デフォルトの名無しさんNGNG
>>161
> 日本語だからデバックしやすい。

なんとなく悔しい.
0163デフォルトの名無しさんNGNG
>>161
何県?
0164デフォルトの名無しさんNGNG
>>163
愛知県。
なんで?
0165159NGNG
>>160
それなりに使える。
ってか慣れかなぁ・・・・・
visualと比べると、かなり劣る。操作性とか。
0166デフォルトの名無しさんNGNG
Fortran90は大文字と小文字を区別しますか?
また、キーワードは、大文字限定ですか?
0167デフォルトの名無しさんNGNG
>>166
ttp://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
>161
デバッ「ク」??
0169デフォルトの名無しさんNGNG
>>168 まぁまぁ.だから日本語じゃないと困ってしまうわけでしょう.
0170デフォルトの名無しさんNGNG
Fortranを始めたいのですが、Fortranのプログラムを書くためのソフトってどこ
に売ってるのですか?また、何て名前のソフトを買えばいいのですか?値段とか分かる
ようでしたら、それも教えて下さい。お願い致します。
0171170NGNG
独学でFortranを始めたいと思っています。宜しければ、プログラムソフト(フリーの物が
あればそれも教えて下さい)と参考にする本を教えて下さい
0172デフォルトの名無しさんNGNG
フリーのFortran http://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm
0173デフォルトの名無しさんNGNG
Fortran ResQ - Fortran初心者に捧ぐ
http://homepage.mac.com/galois21/fortran/index.html
0174170NGNG
>>172,173
早速教えて頂きありがとうございます。ですが
実際にダウンロードしてみて、ホームページに指定されてた通り

WRITE(*,*) 'TEST'
END  

と左から6文字開けて試しに打ってみたのですが、 test と表示されません。
代わりに 「ディレクトリは存在しません」というエラー表示がでてしまいます。
どこが、いけないのでしょうか?もし、宜しければ教えて頂けないでしょうか?
0175デフォルトの名無しさんNGNG
>>174
http://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文字を開けられる。プログラムを書く。
ツールバーの右向き三角でコンパイル&実行
0176170NGNG
>>175
タビタビ申し訳ありません。 ご説明通りしてはいるのですが、
『コンパイルできません』とのエラーが出てしまいます。なぜでしょうか?
0177170NGNG
>>175
あっ、すみません、上手くいきました。
教えて下さった皆様どうもありがとうございました。
また、分からない時はどうぞ宜しくお願い致しますm(−−)m
0178デフォルトの名無しさんNGNG
・・・
0179デフォルトの名無しさんNGNG
土木屋はFORTRANオンリーユー。
0180デフォルトの名無しさんNGNG
完全に初心者なら、本買え
0181デフォルトの名無しさんNGNG
>>180
プログラミング初心者なら,FORTRAN から始めるのが適切かどうかから
考えた方がいいんじゃない?
このスレ推薦の「Fortran90プログラミング」は,
初めてプログラミングする人も対象になっていますか >持っている人

うかつにも変な本を買っちゃって,しかもそれで勉強しようと躍起になると
後遺症がひどくなるからね.
0182デフォルトの名無しさんNGNG
>>181
Fortran自体、簡単な言語だと思うが・・・
0183デフォルトの名無しさんNGNG
>>182
でも,同じことをするのに方法がたくさんあるなぁと.perl みたいに.
0184灯台離散@悠久の貞淑 ◆777zZZSC5A NGNG
うーん、Fortranを勉強しようっていってるだけで、
他の言語知識が全く無いとは、まだわからないわけであり。
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
f90gl を使い始めたのですが、どこかに日本語の良い資料等はないでしょうか?

今のところ下記ページの例題をFortran90に直して遊んでいるような段階なのですが
googleで調べても日本語の情報が見つからないので・・・。

GLUTによる「手抜き」OpenGL入門
http://www.center.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
0187デフォルトの名無しさんNGNG
>>181
残念ながら、FORTRANの和書に自信をもってお勧めできるものは無い。
他のメジャーな言語なら、初心者・中級者・上級者用と品揃えも豊富だけど、
化石と言われる言語だけあって、ろくに揃っていない。
大型書店でも、初心者用しか揃えていないのが実情だ。
また、このスレ推薦の書籍も、FORTRAN90の機能を全て網羅している訳ではないので、
FORTRAN90らしいmoduleの使い方を覚えられるとは思えないよ。
F90系の書籍は、どれも基本の文法書って感じ。

>うかつにも変な本を買っちゃって,しかもそれで勉強しようと躍起になると
>後遺症がひどくなるからね.
多少わかりにくい書き方でも、それを読み解く能力は必要だと思うぞ。
多かれ少なかれ、誤植や著者の誤認識はあるしな。
0188デフォルトの名無しさんNGNG
http://www.seshop.com/detail.asp?pid=2725
これは?
0189デフォルトの名無しさんNGNG
>>188
Larry Nyhoff / Sanford Leestma 「入門 Fortran90」
> 「情報処理技術者試験」のプログラミングの選択科目にあるように、
> 科学技術計算用のプログラミング言語として、まだまだ需要は衰
> えておりません。
読んだことないので内容はどうか知らないが、この紹介文見てると
ちょっと躊躇するなぁ。
0190デフォルトの名無しさんNGNG
最近fortran90/95でコード書いてみたりしてるんだけど、
いわゆる中・上級者用のおすすめ書籍とかあるんでしょうか?
洋書で無問題です。

メモリストライドを工夫した高速化とかの基本的なことは知ってるんだけど、
fortranならではって奴は全然知らないもので。
0191デフォルトの名無しさんNGNG
とりあえず、FORTRANの文法に関しては>>43に書いてるのを嫁

アルゴリズム
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
http://www.books.or.jp/ResultList.aspx?scode=&searchtype=0&title=fortran90&writer=&syuppansya=&showcount=100&startindex=0

コレが全部みたい。
今、海女損でフォートラン本の中古出てるけど。
出品者がなんかヤバめ。
0193デフォルトの名無しさんNGNG
bit別冊 詳細Fortran90 ってのが好き
白黒で 色気が無いけど
重版してくれないかな

ttp://product.esbooks.yahoo.co.jp/product/all/top?accd=19319404
0194デフォルトの名無しさんNGNG
Fortran.netをはじめたのですが、資料がほとんどありません。
いい本がなにかありませんか?
0195190NGNG
これってどうなんでしょう。誰か読んだ人居ません?
http://www.amazon.co.jp/exec/obidos/ASIN/0521574390/

あと、これ。評価高いけれど、ちょいと高過ぎ...(しかもペーパーブック
http://www.amazon.co.jp/exec/obidos/ASIN/0070119384/

>>193
禿胴
あるところでたまたま、時間潰しにぱらぱら見たんですが、
思わず欲しくなりました(今も欲しいですけど
復刊希望はまだ無いみたいですね@復刊ドットコム

>>194
Laheyですか?
言語リファレンス(日本語版が9800円)とマニュアルくらいかも。
0196灯台離散@悠久の貞淑 ◆777zZZSC5A NGNG
http://www.amazon.co.jp/exec/obidos/ASIN/0198505582/qid%3D1072881844/249-6199884-8309140#product-details
在庫アリだって。
詳解Fortran90の原本?
0197デフォルトの名無しさんNGNG
nrはオンラインでも見れたりする
http://www.numerical-recipes.com/nronline_switcher.html
0198190NGNG
>>196
多分そうですね。原著で買ってしまうのも手だなぁ。
0199190NGNG
>>197
すいませんでした。検索してたときはてっきりソース乗せてるだけだと思ってた(汗
ありがとうございます。
0200灯台離散@悠久の貞淑 ◆777zZZSC5A NGNG
・・・・・・・ちょっとしか読めない・・・・・クソ
太平洋戦争で日本が勝ってたら、世界の標準語がじゃぱにーずだったのに・・・・・!
0201デフォルトの名無しさんNGNG
詳説FORTRAN90、この前YahooAuctionに出てたよ。
0202193NGNG

僕、間違えてましたね。すみません。詳細でなくて、詳解。

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
家にあるFORTRANの本何冊あるか数えてみました・・・12冊・・・
会社に確か4冊ぐらいあったから、合計16冊か。
本屋にある本ほとんど買ってしまったからねえ。
古い本だとパンチカードの解説から始まります。
みんなそろってサンプルプログラムはタコ。GO TO文使いまくり・・・
0204デフォルトの名無しさんNGNG
ふぉーとらんらんらん
0205デフォルトの名無しさんNGNG
シェイプアップフォートラン
0206デフォルトの名無しさんNGNG
              __,,,,,,
         ,.-'''"-─ `ー,--─'''''''''''i-、,,
      ,.-,/         /::::::::::::::::::::::!,,  \
     (           i:::::::::::::::::::::;ノ ヽ-、,,/''ー'''"7
      `''|         |:::::::::::::::::::::}     ``ー''"
        !       '、:::::::::::::::::::i
        '、 `-=''''フ'ー''ヽ、::::::::::/ヽ、-─-、,,-'''ヽ 
         \_/     ヽ--く   _,,,..--┴-、 ヽ
                     ``"      \>
0207デフォルトの名無しさんNGNG
だれか、go to , common , if(a)100,110,100
とかで、わけわからんソースの効率的な読解法
教えてくれ、もう限界だ…(ToT
0208デフォルトの名無しさんNGNG
4*4 行列の逆行列の求め方がわからん。鬱
0209デフォルトの名無しさんNGNG
>208
小行列式をといて、余因子をもとめれば(ここまでならサラスの方法でできる)
4*4行列式もすぐに解けると思うんですけど。
0210デフォルトの名無しさんNGNG
>>209
手計算は分かるんですけど、それをどうプログラムするか分からないんですよ。
数値計算の宿題が急に出されて。
プログラミング初心者です。すみません。
0211デフォルトの名無しさんNGNG
学生なら線形代数の教科書嫁 .or. ぐぐれ
0212デフォルトの名無しさんNGNG
>208
逆行列の求め方
余因子展開をプログラムで組むのが難しいなら、
掃きだし法と同じ操作を単位行列に対しても行う
のが一番簡単。

原理は簡単
逆行列というのは掃きだし法の操作をすべて掛け合わせてできる行列だから。
ただし、ある程度の精度を出したいなら対角要素にはなるべく大きな値を
持ってくるように行列の入れ替えなどを考慮する。
0213デフォルトの名無しさんNGNG
寝れない。 >>210 それほど難しくない。どっか適当なfortranホムペを一通り真剣に読んできなされ。 私もそうやって勉強したfortran。
0214デフォルトの名無しさんNGNG
改行入ってない(´д`;;)
寝よ…
0215デフォルトの名無しさんNGNG
A B 1 0 … (1)
C 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
Visual Fortran 5.0 で、配列はどれくらいまで取れますか?
メモリーは256MBです
0217デフォルトの名無しさんNGNG
余因子展開は,実際に逆行列を求めるときには使わないと思っていました.
意外と使われるんですね.LU やら掃き出し法が主流かと思っていました.
0218デフォルトの名無しさんNGNG
>>208
逆行列をFortranでできますよ
だけど、逆行列が忘れてしまいました
詳しく教えてくれれば、逆行列のサンプルプロ考えます
0219デフォルトの名無しさんNGNG
助詞を変だな。
0220デフォルトの名無しさんNGNG
>>219
あぁ、FORTRANでの逆行列の求め方ならここにかいてあるよ。
本気で理解しようとすれば、すぐ組めるようになるよ。
http://www.geocities.co.jp/SiliconValley/5634/t82A8_0004.html#2107
0221219NGNG
>>220
何で俺に言うかな。
0222208NGNG
少し本を読んでわかりました。すこしずつプログラム書いてます。ありがとうございます
0223デフォルトの名無しさんNGNG
あのお・・・
Visual Fortran 5.0 で、配列はどれくらいまで取れますか?
メモリーは256MBです


0224デフォルトの名無しさんNGNG
>>223
自分で実際にテストしてみればすぐわかる。
0225デフォルトの名無しさんNGNG
>>223
配列の型による
配列の確保が動的か静的かによる
コードによってはコンパイルオプションによる
仮想メモリの設定による
配列が大きくなるとスワッピングが激しくなるので,>>223の忍耐力にもよる
0226デフォルトの名無しさんNGNG
OpenMPを使って、研究室で今まで使ってきたコードを並列化してるんですが、
速くならないとか言う以前にNaNNaN攻撃をくらいます。

!$omp do parallel

してるループ内で関数を呼んでるんですが、やっぱこの辺が悪さをしてるんでしょうか…。

で、とりあえずOpenMPでぐぐったんですが出てくるサンプルは単純なものばかり。
どこかに実際にOpenMPを使って配列したコードを公開してたり、実践的な情報を集めたりしてるページを
ご存じないでしょうか?
0227デフォルトの名無しさんNGNG
>>226
どんな関数を呼んでるの?
詳しく教えてplz
0228デフォルトの名無しさんNGNG
>>226
http://www.cc.uec.ac.jp/SGI3000.doc/documents/programming/training/parallel_programming/sect7.pdf

NaNって,0で割り算してるんじゃないの?
0229226NGNG
>>227-228

うおっ!まさに228さんのリンク先に書いてあるような関数を呼び出してました!さっそくじっくり見てみます。
情報ありがとうございました。
0230デフォルトの名無しさんNGNG
変数に格納されたものがNaN or INFか、否かの判定はどうればいいのですか?
0231デフォルトの名無しさんNGNG
う〜ん・・・
0232デフォルトの名無しさんNGNG
>230
処理系の拡張機能に頼る。
VF だと ISNAN(x) つうのがあるね。
0233デフォルトの名無しさんNGNG
>>232
> 処理系の拡張機能に頼る。
> VF だと ISNAN(x) つうのがあるね。

うわ、isnan()ってVF依存だったんですね。Intel Compilerでも使えてるけど、それは単にportlib使うように
してるから動いてただけか…。
0234デフォルトの名無しさんNGNG
>NaN (Not-a-Number)---数でないものを表すIEEE浮動小数点ビット・パターン。
>DIGITAL Fortran 90は、NaN値を出力ステートメントでは「NaN」で識別します。
>NaNは、signaling NaNまたはquiet NaNにすることができます。
>・quiet NaNは、0./0のような計算の結果として発生し、すべてが1の指数部と最初の仮数ビットが1を持ちます。
>・signaling NaNは、意図的に設定する必要があり(計算の結果ではなく)、すべてが1の指数部と最初の仮数ビットが0で、1つ以上の仮数ビットが1となります。
0235デフォルトの名無しさんNGNG
f(x,y)=exp((x-a)**2+(y-b)**2)において、a,bに任意の値を入力して
f(x,y)が最小となるx,yを求めるプログラムの課題を出されたのですが、
全く分かりません。ヒントはニュートン法と数値微分らしいのですが
どなたか手順だけでも教えていただけませんか。

0236デフォルトの名無しさんNGNG
>>235
とりあずそのヒントをキーワードにしてググりなさい。
0237デフォルトの名無しさんNGNG
print *,"aとbを入力してぽ"
read *,a,b
print *,"f(x,y)が最小となるx,yはx=",a,"y=",b,"でふ"
0238デフォルトの名無しさんNGNG
>>230
a=NaNかInfinityとして
if(a/=a)then
write(*,*) "NaNです"
else
b=a*0
if(b/=b) write(*,*) "Infinityです"
end if
とかじゃだめ?
0239名無しNGNG
自然数nを代入すればその2,3,4,5,6,7,8,9進数表示を求めるプログラムを教えて
下さい??途中まででもいいんでお願いします。
0240デフォルトの名無しさんNGNG
>>239
ほい。
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
≫238 
ありがたいんですけど誰かfortranでお願いします。
0242名無しNGNG
↑≫239の間違いです
0243デフォルトの名無しさんNGNG
>>239
ほい。
途中までだけど。

    PROGRAM HOGE
    WRITE(*,*) 'INPUT N:'
    READ(*,*) N
    DO 100 I=2, 9
     CALL NSHIN(I, N)
 100 CONTINUE
    STOP
    END
0244名無しNGNG
プログラムの説明簡単に教えて下さい??
0245デフォルトの名無しさんNGNG
>>239
ほい。
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デフォルトの名無しさんNGNG
算数の問題だな。
p 進数の n 桁目をどうやれば求められるか、という。
頭振り絞って考えれ。
0247名無しNGNG
≫245さんへ
いろいろ詳しいですねぇ!!fortranのプログラムの意味が全く分からない
んですけど…。あぁこれができないと留年だぁ。
0248名無しNGNG
2^0+2^1+2^3+…2^n乗のようにすれば求められるって分かるんですけど、式
にしろっていわれるとできないんですよね
0249デフォルトの名無しさんNGNG
まず10進数で考えると分かりやすい。
0250名無しNGNG
10進数にしたらなおさら分かりにくいような気がするんですけど…
0251デフォルトの名無しさんNGNG
そんなことないって。
得られるべき結果がすぐに分かるから
チェックが楽。

先ず、123 から 1 の位を取得してみ。
0252名無しNGNG
1の位は3、10の位は2、百の位は1で…。えっと次は…
0253デフォルトの名無しさんNGNG

n = 123
first = ... 1の位を取得するには何を書けばいい?
0254名無しNGNG
すいません。分かりません。
0255デフォルトの名無しさんNGNG
全ての整数nについて、手計算!
0256デフォルトの名無しさんNGNG
例えば66の7進数を手計算で求めるにはどうすればよいか。
その手順を細かくノートに書き出してみる。
あとはそれをプログラムに置き換えればいい。

それでも解らなきゃもう一年勉強し直した方が・・・
0257名無しNGNG
これでも某国立大学なんですけどねぇ・・・ トホホ
0258デフォルトの名無しさんNGNG
もしかして、mod しらないのかな。
0259デフォルトの名無しさんNGNG
どこの大学?
0260名無しNGNG
北陸の大学です。まだ1年生なもので・・・
0261デフォルトの名無しさんNGNG
1年で留年とかあるのか。
0262名無しNGNG
これは必須の教科なので絶対単位を落としたらダメなんですよねぇ!!
っていってもそんな難しい課題じゃないんですけどねぇ…
0263デフォルトの名無しさんNGNG
176 ÷ 10 = 17 ... 6

これ見てピンと来ない?
0264名無しNGNG
あぁあぁ。そういうことか!!非常に分かりやすいですねぇ。本当
自分馬鹿だ・・・
0265デフォルトの名無しさんNGNG
本当に難しくないならできるでしょ、

といってみるテスト
0266名無しNGNG
でもどうやって他の進数に応用を効かすんですか??
0267デフォルトの名無しさんNGNG
もちーと考えてみ。
適当な数値を紙と鉛筆で実際に変換してみ。
0268名無しNGNG
今日はちょっと眠いんで寝て考えます。また掲示板に何か書き込むかも
しれないのでヒントをお願いします。ありがとうございました。
0269デフォルトの名無しさんNGNG
とりあえず全部手計算で求めれ。

 16 進数: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
>>268
普通に,x を n 進数で表すなら,
割り算の筆算を上下逆に書いて,x を n で割り続ける.

ex. 60(10) を 7 進で.
60/7
8/7 ... 4
1 ... 1

だから下から並べて 114(7) .下に行くほど重いからね.

答えを言ってスマンかった >all
0271270NGNG
>>245 LISP でやるなら,もっとちゃんと書いてくれないとイメージダウンですw
(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
>>239
ほい。
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デフォルトの名無しさんNGNG
>>273
VBで、

> Option Explicit

ってのはFortranで言うところの

implicit none

と同じでしたっけ?
0275デフォルトの名無しさんNGNG
>>239,241,247,248,252,254,257,260,262,264,266,268 さんは
まだ寝てるのかな?明日提出かもね.
まあ lisp でやれば先生も分かってくれるって (w

ところで,Fortran や C では
先に n 進数で何桁になるか計算して,アロケートしないとなりませんよね?
0276再帰も知らんのか ?NGNG
>>275
FORTRAN は知りませんが、C では「ノー」です。
0277275NGNG
>>276
再帰にしたところで,どこに格納すれば良いのでしょうか.
出力に書き出すのは無しです.

ところで,末尾再帰をループに直すように仕様に定めないのはなぜですか?
0278デフォルトの名無しさんNGNG
integer型の範囲がわかってるなら、結果の桁数もわかるじゃん
0279デフォルトの名無しさんNGNG
>>277
スタック
0280275NGNG
>>278
あ,なるほど.でもちょっと計算機を意識しすぎというか,何というか.

>>279
動的アロケート無しにスタックを使う,良い例をお示しください m(__)m
in Fortran.

面白い Fortran スレになってきましたね.
0281デフォルトの名無しさんNGNG
recursive subroutine print_shinsu( num, base )
integer, 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
0282281NGNG
失敬
>write(*,'(i1)') m
write(*,'(i1)', advance='no') m
だわ
0283デフォルトの名無しさんNGNG
fortran 77 compiler (Watcom)が無償配布されたよー
0284デフォルトの名無しさんNGNG
>>280
> in Fortran.

>>276 >FORTRAN は知りませんが

日本語も理解できないのか...。
0285275NGNG
>>281 出力吐き出しちゃってる(⊃д`)

>>284 誰が書いてもいいではないですか.Fortran スレなんですから.
0286デフォルトの名無しさんNGNG
誰が書いてもいいけど、話の流れぐらい読んでからにしてくれ。
0287デフォルトの名無しさんNGNG
>275
>あ,なるほど.でもちょっと計算機を意識しすぎというか,何というか.
それを持ち出すなら、当然、入力された数字列に合わせて、
自然数(n)を格納するメモリ領域を決定する訳だ。
入力した数字(桁数無制限)を、1文字ずつ配列に格納して。。。
0288デフォルトの名無しさんNGNG
Fortran -> Fortran90 以降
FORTRAN -> FORTRAN77 以前
0289デフォルトの名無しさんNGNG
上の90のプログラムの完成系はどんなんですか?
0290デフォルトの名無しさんNGNG
>>289
programでprint_shinsu()を呼ぶだけ
0291デフォルトの名無しさんNGNG
>>290
何度もすいません
print_shinsu()の呼び方を教えてください。
0292デフォルトの名無しさんNGNG
はあ?
0293デフォルトの名無しさんNGNG
>>291
>>4
0294デフォルトの名無しさんNGNG
次は
「別の××の○○が□□してしまいます.」
と言うのかな.
0295275NGNG
>>287
> 入力した数字(桁数無制限)を、1文字ずつ配列に格納して。。。

う,,,でもほら,
2 進では 10 進で小さい数でも桁が多くなってしまうではないですか.
と思ったりしましたが,大きさ 64 の配列で十分そうですね...

高速化の妨げになるから動的アロケートを避けるというのが本当なら,
割と仮定が多いプログラムになってしまうのでは,と思っているのですが,
何でも動的アロケートに訴えるのは病気ということでしょうか.
0296デフォルトの名無しさんNGNG
>>295
例えば int を変換する場合、
INT_MAX が 2 進で何桁になるかが分かってれば、
最低でもそれが格納できるだけのサイズのバッファがあれば十分。
これは常に正しく動くという意味で、仮定でもなんでもない。
無駄になる領域はあるかもしれないけど。

動的にアロケートした場合も
16-byte 境界(環境依存)に合わされたりして
若干無駄になる領域はあるけど、
固定長の時よりはまし。
0297デフォルトの名無しさんNGNG
同じinteger型でも、多くの処理系ではinteger(16)=128bitまでだから、
2進数を格納する文字列の長さが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.NGNG
流れを遮って申し訳ないないです。
Fortranで多倍長演算をしたいのですが
どのライブラリを使ったら良いでしょうか?
GNU のMultiple Precisionは、Fortranから使うには不向きなようでして…
ご助言いただけると助かります
0299デフォルトの名無しさんNGNG
倍精度や四倍精度だったら
プログラム中の変数やパラメータの値を
real(16) : : aとか1.0d0みたいに置き換えてあげればいいだけだと思うけど・・・
コンパイラによるのかな??
0300名無しNGNG
≫275
返事遅れました。10進数をn進数にするプログラムの話ですが。数学的には求める
ことができたのですがプログラムで書くとなると余りの部分をどうやって抽出して書けばいいの
か分からないんですけどどうすればいいでしょうか??できればBASICとFORTRANで
説明していただくとありがたいです。馬鹿な質問ばかりしてすいません。…
0301仕様書無しさんNGNG
fortran77でSSF法を書きたい板で書いた者です。
本スレは削除依頼を出してきたので、こちらで質問したいと思います。
FFT(高速フーリエ変換)を使ったスプリットステップフーリエ法を
どうかご教授お願いいたします。

Cのソースはあるのですが
http://photonics.ece.umd.edu/software/
fortran77で記述できなくて困っています
どうかよろしくお願いいたしますm(_ _)m
0302298NGNG
>>299
記述が正確ではなかった様ですみませんでした。
コンパイラはCygwin 上のgcc(F77)を使っていまして
多倍長整数の演算が主な目的です。
F90が必要であればIntelの評価版を試すつもりではいます。
再度ご助言頂けると大変助かります。
0303デフォルトの名無しさんNGNG
>>301
>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
0304301NGNG
>>303
リンクありがとうございますm(_ _)m
CとFortranの文法比較ができないっていうのと
SSFMが分からないのと半分半分です・・
fortranもCも初心者なもので・・・
0305デフォルトの名無しさんNGNG
Fortran2000(?)は95に比べてどの辺が新しくなってるんですか?
というか2000の規格はもう正式に決まったの?
0306デフォルトの名無しさんNGNG
Fortran2000の仕様(ISO/IEC Technical Report)を一部先取りしています。
0307デフォルトの名無しさんNGNG
機械工学専攻なんですが、FortranとC++どちらかとらないといけないんですが、
どっちをお勧めしますか?
0308デフォルトの名無しさんNGNG
C++覚えれば、Fortranを覚えるのはすぐできると思うから、
ここは難しいほうのC++で・・・。
0309307NGNG
>>308
C++の前にCをとるのですが、Cも難しいですか?
プログラミングの知識ゼロなんで、なにがどうなのかC++って何をするため
とか全くわからないんです。。
将来的にはFortranとC++ではどちらが役にたちますか?
0310デフォルトの名無しさんNGNG
Cは別に難しくないよ。(というと語弊があるかもしれんが)
入門書も氾濫してるし、応用も利きくから、
初めての言語としてはいい選択かと。

>将来的にはFortranとC++ではどちらが役にたちますか?

気にするな。みんなFortranの子孫だw
0311デフォルトの名無しさんNGNG
Fortran。FORTRANはだめだぞよ。
0312fortranranNGNG
どなたかCVF6.6からIVF8.0に移行して
いろいろ試している人いる?

なんか実行速度おそいんだよねぇ
PEN4(HT)だから期待してたのに・・・

最適化レベルを上げようとすると、CVFの時は出なかった
エラーが出てLEVEL2どまりです。

まっ会社のお金でかったんだからいいけど
0313デフォルトの名無しさんNGNG
>>309
> C++の前にCをとるのですが、Cも難しいですか?

結局先に C をやるのね.
すぐ数値計算に使うなら Fortran かと思いますが,
たぶん,数値計算するときにはまた覚え直すことになると思うので,
C++ が良いでしょう.

C は計算機の一般的な知識が無いと使いにくいんですが,
C++ は知らなくても良いように高級になっているんです.
とっても計算量が多いプログラムでは,C++ より C が使われるんだそうです.
そうでないものには,ほとんど C++ なんだそうです.y
0314デフォルトの名無しさんNGNG
むしろ,CとC++のちゃんぽんだな
0315デフォルトの名無しさんNGNG
>>312
移行しました。
全く使いこなせてません。
全然最適化されてる気がしません。
ソースレベルで自ら最適化しないといけないのでしょうか。
0316デフォルトの名無しさんNGNG
>>315
IVF8.0はVS6でもイけますか?
それとも.NETおんりー?
0317315NGNG
Microsoft Visual C++ .NET 2002/2003 スタンダード版かそれ以上がないと使えません。
はっきり言って面倒くさいです。
C++のインストールにすごい時間かかりますし。
上にも書いたように全然使いこなせてないので、.NETがどれだけすごいのかも分かりません。
結局DOS窓からコンパイルしてます。
0318316NGNG
>>317
そうですか.だめですか
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
>>319
釣られてみる
[スタート]→[設定(S)]→[コントロール パネル(C)]→[プログラムの追加と削除]
0321デフォルトの名無しさんNGNG
>>319
m9(´∀`)アハハ八八ノヽノヽノヽノ \ / \/ \
0322319NGNG
一度見たときに無いような気がしてただけで、よく見たらありました;
アリガトございました & スイマセンでしたっ><
0323319NGNG
一度見たときに無いような気がしてただけで、よく見たらありました;
アリガトございました & スイマセンでしたっ><
0324319NGNG
_no
0325デフォルトの名無しさんNGNG
最近CPad for Salford FTN77を使い始めたのですが、
メインプログラム、サブルーチンごとにfファイルが分かれている
場合、どのようにコンパイルしたらよいのでしょうか?市販の
コンパイラーだとメイクファイルを自動生成できるのですが、
手書きの場合、書き方がわからないのです。
たとえばkota1.f(メインファイル)kota2.f,
kota3.f(それぞれサブルーチン)のファイルを
実行するためにはどのような手順を踏めば良いですか?
どなたかアドバイスをお願いします。
0326デフォルトの名無しさんNGNG
>>325
FTN77 User's Guide 265ページ 「21. Using MK and MK32」
0327デフォルトの名無しさんNGNG
リンク中・・・
0328デフォルトの名無しさんNGNG
リンク中...
0329デフォルトの名無しさん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
>>329
「ホレリス定数」でぐぐれ。
1HS, 1HM, 1H --> 'S', 'M', ' ' (または "S", "M", " ")
最後の奴はHの後ろにスペースかタブがあるのだろう。

IVFってホレリス定数が使えないの?
0331デフォルトの名無しさんNGNG
IVFのonline helpにはHollerith Constantsは載ってるから使えるっぽいけど.
内容はCVFのhelpと同じこと書いてた.
0332デフォルトの名無しさんNGNG
なんでびじゅある何たらどっとネットが必要なのさintel visual fortran
0333デフォルトの名無しさんNGNG
Intel C/C++ Compiler 8はVS6でOKなのに、Intel Fortan Compiler 8はVS6でだめぽだってさ。
同じようにリリースされているのに…(´・ω・`)

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
fortranで、400000*400000位、巨大な配列を
扱うには、どうしたら良いのか教えてください
ませんでしょうか。
0335名無しさん@Vim%ChaliceNGNG
そのサイズはさすがに並列計算すべきかねぇ。
0336デフォルトの名無しさんNGNG
400000*400000 〜 150G
1 つ 8 バイト(倍精度浮動小数)としたら
約 1.2TB にもなるな。
0337名無しさん@Vim%ChaliceNGNG
生半可な並列じゃだめポ…
0338デフォルトの名無しさんNGNG
ハードディスクを使わないときつそうね。
0339デフォルトの名無しさんNGNG
>>334 は,4e5 x 4e5 の行列を何に使いたいの?
疎な行列の逆を求めたいとかその類じゃないの?
それにはそれのアルゴリズムがある.

見くびってたらスマソ.でも説明不足は否めない.
0340デフォルトの名無しさんNGNG
生半可なハードディスクじゃだめポ…
0341デフォルトの名無しさんNGNG
説明不足ですね。申し訳ありませんでした。
4e5*4e5について逆行列を求めたいのです。
確かにアルゴリズムもあることはあるので
あとは、メモリの問題なんですね。皆さま
ありがとうございました。
0342デフォルトの名無しさんNGNG
数値計算を舐めすぎ!
0343デフォルトの名無しさんNGNG
>>341
なんにもわかってないのにわかったつもりなのは痛いぞ。
0344デフォルトの名無しさんNGNG
ランチョス法だっけ?
0345デフォルトの名無しさんNGNG
地球シミュレータを使うのかな?
あれFortranできるし
0346デフォルトの名無しさんNGNG
Lahey Fujitsu Fortran では正常に動くのに、
Compaq 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デフォルトの名無しさんNGNG
>>346
Lahey Fortran でも -chk オプションを付ければ実行時エラーになる
に一票。
0348デフォルトの名無しさんNGNG
346さん この問題、漏れも興味あり。
Compaq Visual Fortranでの解決策はどうなんだべ?
0349デフォルトの名無しさんNGNG
access violation!
access violation!
access violation!
access violation!
access violation!
0350デフォルトの名無しさんNGNG
>>348
> Compaq Visual Fortranでの解決策

/check /traceback で再コンパイル
 ↓
プログラムを走らせてエラーメッセージから問題を起こしている箇所を特定
 ↓
ソースを修正
0351デフォルトの名無しさんNGNG
Lahey Fujitsu Fortran では不正常に動いているに一票
0352デフォルトの名無しさんNGNG
access violation!
access violation!
access violation!
access violation!
access violation!
0353デフォルトの名無しさんNGNG
access violet No.1〜♪
0354デフォルトの名無しさんNGNG
stack fault?
0355デフォルトの名無しさんNGNG
>351 に一票
0356デフォルトの名無しさんNGNG
FORTRANでシステムコマンドを実行できるのでしょうか?
0357デフォルトの名無しさんNGNG
356>
処理系依存の関数が用意されているかと
CVF: SYSTEM, SYSTEMQQ, RUNQQ
0358デフォルトの名無しさんNGNG
>>357
サンクスコ
0359デフォルトの名無しさんNGNG
Intel Fortran ってどうよ?
0360デフォルトの名無しさんNGNG
>>359
ただで90使えるから以前使ってたけど、可無く不可無くってところ
今absoft使ってるけど、比べると速度が70%くらいだった
フリーにしては十分かなー
0361デフォルトの名無しさんNGNG
WinXP で Lahey/Fujitsu Fortran 95 Express を使っているのですが
この処理系では書式付きで画面に出力すると最初の1文字目が
行送り制御文字にされてしまいます。

これだけで使う分にはこれで良いのですが、他の環境からソースを
持ってきた時に表示がおかしくなってしまいます。

書式を使ったときに1文字目も普通の文字として表示させる方法は
ないでしょうか?
0362デフォルトの名無しさんNGNG
初心者です。
MacでFortranやりたいんですけど、
お勧めのソフト教えてください。
出来れば値段の高くないやつ・・・
0363デフォルトの名無しさんNGNG
>>361
Compaq Fortran 6.6 では コンパイラオプションで
/ccdefault:none を指定するか、
OPEN文で、CARRIAGECONTROL = 'NONE' と指定(当然処理系依存機能)
することによって復帰制御を無効にできる。

Fujitsu Fortranは持ってないのでスマソ
0364デフォルトの名無しさんNGNG
>>362
MacOS Xならとりあえずココ。

ttp://hpc.sourceforge.net/
0365デフォルトの名無しさんNGNG
>>362
FORTRAN77 なら GCC を使えばいいよ。タダだし。
最初から入ってる GCC には g77 は含まれてなかった気がするので、
自分でインストールする必要があると思うけど。
0366デフォルトの名無しさんNGNG
>>362
ttp://www.hulinks.co.jp/software/pf/
これなんかどうでしょう?
IBMのFortranは新作だし結構安いと思えるが...
0367デフォルトの名無しさんNGNG
>>366
> IBMのFortranは新作だし結構安いと思えるが...

20万で?確かUSでは1000$しなかった気が。
0368名無しNGNG
CPad for Salford FTN77 でプログラムを組んでるんですけど,
write文で表示されるテキストをカラー表示することはできないんでしょうか??
0369デフォルトの名無しさんNGNG
だからcommonやめろて
0370デフォルトの名無しさんNGNG
大学のゼミでFORTRANを使用する事になりました。
PCは今使ってるXP(Visual Studio .NETがインスト済)と
サーバが組んであるRed Hat Linux 9.0がインストしてあるのを
持っています。

自宅でもFORTRANを使えるようにしたいのですが
何を入れるのが一番簡単に使える環境に出来るのでしょうか?

出来ればFORTRAN77形式で書いても動く環境がほしいです。
初心者なのでどなたかアドバイスをお願いします。
0371デフォルトの名無しさんNGNG
>>370
> PCは今使ってるXP(Visual Studio .NETがインスト済)と
> サーバが組んであるRed Hat Linux 9.0がインストしてあるのを
> 持っています。
> 自宅でもFORTRANを使えるようにしたいのですが
> 何を入れるのが一番簡単に使える環境に出来るのでしょうか?

自宅のPCがWindowsXPであればCygwinをイントールすれば使えるよ.
一番簡単かどうかは知らない.
0372370NGNG
>>371
Cygwinはインストしたんだけど
その後が何をすればいいかが;;;
g77とかのインスト方法が今一分からないです;
0373デフォルトの名無しさんNGNG
http://www.google.co.jp/
http://www.google.co.jp/
http://www.google.co.jp/
0374デフォルトの名無しさんNGNG
RHL ならすぐ入るんじゃないすか > g77
0375デフォルトの名無しさんNGNG
77イラネ
0376デフォルトの名無しさんNGNG
>>370

f90を使うなら素直にRedhatにintel fortranの非サポート版をいれとけ
f77も当然サポートしている
0377370NGNG
RHLのPCの方に
intel-ifort8-8.0-40.i386.rpmをインストしました。
これでOKなのかな?
0378デフォルトの名無しさんNGNG
>>377
あなた次第.
0379デフォルトの名無しさんNGNG
>>361で質問した者ですが、一応自己解決しました。

というかLaheyから新バージョン(v7.1)リリースの通知が来まして
それによるとこのバージョンから新しく追加されたスイッチ
-nconcc を使うとコンソールでの行送り制御を抑制できるようです。

試しに体験版をダウンロードして使ってみたところ、
見事に他の処理系と同じように表示することが出来ました。

要するに表示を他と合わせたかったらバージョンアップしろ
ということらしいです。

まあ、新バージョンはSSE2命令を使った最適化にも対応してるし
そろそろバージョンアップしてもらおうかなぁ・・・
0380デフォルトの名無しさんNGNG
      ,.-‐''^^'''‐- ...,
    ; '          ' ,
   .;'    uvnuvnuvn ;
    ;    j        i
    ; .,,  ノ ,.==-    =; 
   ( r|  j.  ーo 、  ,..of
    ': ヽT     ̄  i  ̄} 救出費用の45億円(税金)?俺は払わないっつーの( ゚,_ゝ゚)プッ
    ': . i !     .r _ j /
    '; | \  'ー-=ゝ/
     人、 \   ̄ノ
-‐  ̄    ' ーイ ̄ー-- 、
        ヽ | ;'     ヽ
0381デフォルトの名無しさんNGNG
Intel Visual Fortran Compiler V8を購入しました。
VC++無しでも,コンパイルできるとの事でしたが,
エラーでVC++が必要だと言われてしまいます。
(ifort main.f)
main.fをコンパイルしてmain.exeを作成したいだけですが,
やはり,VC++が必要なのでしょうか?
よろしくお願いします。
0382デフォルトの名無しさんNGNG
Fortranなんか使うのヤメりゃいい。
0383デフォルトの名無しさんNGNG
> VC++無しでも,コンパイルできるとの事でしたが,

どこでそんな嘘を聞いたんですか?必要ですよ。

もしかしたら最近出た
http://msdn.microsoft.com/visualc/vctoolkit2003/
でいけるのかもなー。試してみれ、ただだから。
0384デフォルトの名無しさんNGNG
フォルトラーノ
0385デフォルトの名無しさんNGNG
ヤ〜〜ホ〜〜
0386デフォルトの名無しさんNGNG
フォーート
0387デフォルトの名無しさんNGNG
ラン!ラン!ラン!
0388デフォルトの名無しさんNGNG
ヤッホ
0389デフォルトの名無しさんNGNG
Fortranranran
0390デフォルトの名無しさんNGNG
谷保?
0391デフォルトの名無しさんNGNG
fort.777
0392デフォルトの名無しさんNGNG
Yahoo!
0393デフォルトの名無しさんNGNG
>>381
コンパイルできても、リンクできないから実行ファイルできんよ
0394デフォルトの名無しさんNGNG
仕事をFORTRAN使うことになった。
プログラムは基礎はある程度解るが、数学がサッパリ解らん。
どっか中学生レベルの数学を解り易く解説してるサイトないかな。
0395デフォルトの名無しさんNGNG
人様のFortran77で書かれているコードを読むハメになったんですが、
インデントがぐちゃぐちゃだったりするんです。でも、vimとかemacs
の整形コマンド使っても
do 10 i=1,100
do 10 j=1,100
    ....
10 continue
みたいな do 数字 連発 & 数字 continue で一発抜け、みたいなコードが
思うように整形されないんですよね。
皆さんはどんなエディタもしくは整形ツールを使っていらっしゃいますか?
なにか良い知恵がありましたら教えて下さい m(_ _)m。
ちなみにできればUnix系で動く環境がいいです。
0396デフォルトの名無しさんNGNG
>>394
数学ってあなた・・
そのコードは何の計算してるコードよ?
0397デフォルトの名無しさんNGNG
FortranIV3.40GHz
0398デフォルトの名無しさんNGNG
>>395
Real programmer don't use indent. (嘘)というのはおいといて、
その場合だと emacs の fortran mode とかで、do 10 i=1,100 と
do 10 j=1,100 の 2 行を無理矢理同じレベルにして先に進むしか
ないような気がしますね。切ないとこだな。
0399デフォルトの名無しさんNGNG
Fortranで数値計算しようと思っているのですが、計算専用ののライブラリを用いれば速くなると聞きました。
こういったライブラリとはプログラムにどのように用いればいいのでしょうか?
ライブラリで定義された関数を用いてプログラムを書けばよいということでしょうか?

PCは素人でFortranの組み方ぐらいしか知りません。よろしくお願いします。
用いているPCはpen4でコンパイラはIFCです。
0400デフォルトの名無しさんNGNG
>>399
MKL買ってリンクする。使い方はMKLのマニュアルに書いてある。
0401デフォルトの名無しさんNGNG
>>399
そのFortranにライブラリは無いか?
CVFならCXMLとかみたいに
0402デフォルトの名無しさんNGNG
freeの実装じゃだめなの?
Atlasとか…
0403デフォルトの名無しさんNGNG
AMD Core Math Libraryはどうよ
0404デフォルトの名無しさんNGNG
FORTRANが楽しく学べるサイトってないですか?
やはり自分でプログラムを地道にやっていくことでしょうか?
0405デフォルトの名無しさんNGNG
>>404
Google 検索: FORTRAN
http://www.google.com/search?num=50&hl=ja&lr=lang_ja&ie=sjis&q=FORTRAN
0406デフォルトの名無しさんNGNG
IFCとPen4を用いています。
キャッシングのために巨大な配列を作りたいのですが、
巨大な配列を宣言するとsegmentation faultと言うエラーがでます。
何らかの方法で巨大な配列を作る方法はありますか?

REAL CACHE(10^8)

ぐらいの配列にしたいです。もしくは、

REAL CACHE(10^4, 10^4)

という形でもかまいません。
0407デフォルトの名無しさんNGNG
>>406
こんなんでどうですか?一応動いたけど。

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デフォルトの名無しさんNGNG
>>407
g95でも動いた.
0409デフォルトの名無しさんNGNG
VS.NET 2002 & IVF 8.0
(Fortran) Static Library & (C++) Console Application
という構成なのだが…

Fortranのサブルーチンに配列を渡す設計なんだけど
/check:bounds 付きでコンパイルすると
_for_emit_diagnostic が参照できない LNK2019 を吐かれる。
どうにかなんないのかな、これ。

教えて、偉い人。
0410デフォルトの名無しさんNGNG
>>409
ttp://softwareforums.intel.com/ids/board/message?board.id=5&message.id=9214
0411デフォルトの名無しさんNGNG
>>410
ありがとうございます。
上記のスレの方法で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
>>411
形状引き継ぎ配列の場合、引数は配列先頭のアドレスではなく配列記述子を使って渡されます。
(先頭アドレスだけでは配列の上/下限、範囲などの情報が伝わらないため)
詳しくは「ユーザーズ・ガイド Vol I」の「配列と Fortran 配列記述子の処理」等を参照して下さい。
0413デフォルトの名無しさんNGNG
>>412
ありがとうございます。
上記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
>>411
そんなのマニュアルに載ってる
0415デフォルトの名無しさんNGNG
>>414
載ってるには載ってるが淡々とだろ
0416デフォルトの名無しさんNGNG
>>411
形状引継ぎ配列として渡さないのが一番じゃないの?
だって、f90の仕様では形状引継ぎ配列はinterfaceでプロトタイプ宣言みたいに
書いてやらないとダメじゃん。C++側でinterfaceが用意できないんだから
無理なんじゃないの?諦めて整合配列にしなよ。
0417411NGNG
CVF6.6BとIVF8.0では多少記述子が異なりましたが
なんとかできました。

>>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;
0418411NGNG
void AssignDescriptor(LPDESCRIPTOR dp, void *address, const int size, const int order, const int rank, ...)
{
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
>>419
#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;
}
0421419NGNG
fortran90でお願いします。
0422デフォルトの名無しさんNGNG
program hoge
 implicit 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
>>419
文字列変数に数字を書き込んで、後はそれぞれの桁の文字のアスキーコードを
数字に変換して足し合わせてます。

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
0424419NGNG
>>423
character(20) :: cn
write(cn,*) n
if( cn(i:i).ne.'' ) then
isum=isum+(ichar(cn(i:i))-48)

のそれぞれのやってることの意味がよくわかりません。
初心者ですみません。おしえてください。
0425デフォルトの名無しさんNGNG
>>424
character(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デフォルトの名無しさんNGNG
program test
implicit 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
0427419NGNG
>>425
大変大変勉強になりました。ありがとうございました。
0428デフォルトの名無しさんNGNG
>>425
> 文字から整数へ変換する組み込み関数が見つからなかったので
こんなときこそ内部ファイルを使って
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デフォルトの名無しさんNGNG
program test
implicit 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デフォルトの名無しさんNGNG
このスレは勉強になるな〜!
0431デフォルトの名無しさん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
>>431
読み込むファイルの中身がおかしいか、読み込むデータと
プログラム側のread文が正しく対応してないかのどちらかだと思われ。
デバッガでトレースすれば?
0433デフォルトの名無しさんNGNG
>>419 氏
10 で割っていくのが最短のような気がしますが...

9876 ==>
mod(9876,10) + mod(987,10) + mod(98,10) + 9
勘違いでしたらごめんなさい.
0434デフォルトの名無しさんNGNG
でも、全部文字列で扱って、最後の足し算のところで整数の結果にすれば
何百桁の自然数でもオケーなので、割り算するより強力だね。
実用上は意味無いだろうけど。
0435デフォルトの名無しさんNGNG
>>433
>>426

>>434
>>429
0436デフォルトの名無しさんNGNG
フォートラン始めたばっかの初心者ですが、
*10**40
など、ある実数に大きな数字をかけるとへんてこな答えが出るか NAN となってしまいます。
*10**10とかくらいからおかしくなってきます。
これはどうすれば良いんでしょうか?

コンパイラはGnu Fortran 77です。
0437デフォルトの名無しさんNGNG
>>436
単精度・倍精度・浮動小数点などについて調べてみてください。
0438デフォルトの名無しさんNGNG
比較する演算子は, <,>,= よりも .gt. 等の方が
エディタの色付けの恩恵があって見やすいと思ってしまう orz
0439デフォルトの名無しさんNGNG
>>436
質問の仕方がなんだかアレですね。

・目的は何なのか?
・何を解決したいのか?
・解決しようとする過程で、自分が詰っている箇所の詳細な説明。

を丁寧に説明すれば助けてもらえると思います。
0440デフォルトの名無しさんNGNG
>437,439
すいません。ちゃんと書きます。(^ ^;;

以下の式で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デフォルトの名無しさんNGNG
整数は整数であると見抜ける人でないと(FORTRANを使うのは)難しい。
0442デフォルトの名無しさんNGNG
10 という整数定数を 45 乗することになっちゃうので、
その段階で整数の桁あふれが起こってるんでしょう。
倍精度浮動小数点型の定数の表現を調べること。

h=6.6261d-34

あと g77 使ってる環境なら ftncheck もあると思うので、
使えるようになっときましょう。

さらについでにいうと、t とか x1 とかは integer では
なく double precision にすべきだと思う。これはモデル
の段階での話だけど。
0443デフォルトの名無しさんNGNG
>>440
単位系も大きすぎる気がする。原子単位系とか使ったら良くないか?
0444デフォルトの名無しさんNGNG
IFCを使っているのですが、実数の値が

?????????????????

となる時があるのですが、これは実数がNaNになっているのですか?
それともINFになっているのですか?
isnan文で判定できなくて困っています。
さらに、

++++++++++++++

なる時もあるのですが、これは何ですか?
0445444NGNG
自己レス
IFCでは、

+++++++++++++++++ 正の無限大
----------------- 負の無限大
???????????????????? 非数

らしいです。
質問変更
変数が無限大かちゃんとした値かを
判定できる関数ってないのですか?
0446デフォルトの名無しさんNGNG
>>445
今ifcが手元にないので分からないけど、ひょっとして
xが無限大だと「x+1.eq.x」が真になったりとかしない?
0447444NGNG
>>446
なります。
0448デフォルトの名無しさんNGNG
fortran77ソース読み込んでフローチャート描いてくれるツールないかね?
0449デフォルトの名無しさんNGNG
さすがにフローチャートまではしらないなあ。
call tree くらいだったら前出の ftnchek で
出してくれるけど…
0450デフォルトの名無しさんNGNG
>>445
環境依存になるが、IVF(CVF)なら
fordef.for で定義されてるシンボルと
FP_CLASS関数を使えば判別出来る。

>>448
こんなのがあった。
解析・構図(FORTRAN 用)
http://www.vector.co.jp/soft/win95/prog/se308859.html
使ったことないが。
0451デフォルトの名無しさんNGNG
フローチャートって、役に立ったことが無い。
0452デフォルトの名無しさんNGNG
プログラミングの知識が構造化以前で止まっている上司に
プログラムの内容を説明するときに役立ちます。



イベントドリブンなプログラムを
「フローチャート書いて説明しろ」
なんて言われてもねぇ・・・(泣
0453デフォルトの名無しさんNGNG
do i=1,10
do j=1,10
write(1,*)x(i,j)
end do
end do

テキストファイルに i 行 j 列の表として出力する方法はありませんか?
0454デフォルトの名無しさんNGNG
>>453
出来たファイルをawkで整形しる
$ awk '{if(NR%10==0)print;else printf"%s ",$1}' 1.txt
0455デフォルトの名無しさんNGNG
>>453
do j=1,10
write(*,*)(x(i,j),i=1,10)
end do
0456デフォルトの名無しさんNGNG
なんかまた宿題スレみたいになってきたな…
0457デフォルトの名無しさんNGNG
>450
解析・構図(FORTRAN 用)
はちゃんとしたフローチャートじゃないんだよね・・
テキスト出力だし。やっぱしないのかねぇ。。
0458453NGNG
>>454
良いもの教えてくれてありがとう御座います。
awk使ってみます。

>>455
それだと倍精度実数からなる要素の場合みたいに
データが長いと、途中で勝手に改行されちゃいませんか?
0459デフォルトの名無しさんNGNG
またまた内部ファイルを使ってもいいんなら、こんなんでどうですか?

program 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
>>458
勝手に改行は書式が*の問題だろ
書式を指定尻
nmax=10
do j=1,nmax
write(1,'(<nmax>f10.6)')(x(i,j),i=1,nmax)
end do
0461デフォルトの名無しさんNGNG
ブレネリ
あなたのお家はどこ
私のお家はスゐッツランドよ
綺麗なおすぎのピーコなのよ

ヤーッ


ホーッ

Fortranranran
ヤホ
Fortranranran
0462デフォルトの名無しさんNGNG
さむい
0463デフォルトの名無しさんNGNG
なつい
0464デフォルトの名無しさんNGNG
FORTRANが滅亡してしまえば勉強しなくてすむのに
0465デフォルトの名無しさんNGNG
ベクトル化や並列処理を考えたら、まだまだ存在価値はあるんじゃ?
言語仕様が簡単だから、最適化もやたらと効きそうだし
0466デフォルトの名無しさんNGNG
言語仕様が簡単ですか...混沌としてて鬱ですよ.
ガイドラインキボンヌですよ.

しかも,リストとかツリーってどうやって作るの? fortran77 で.
0467デフォルトの名無しさんNGNG
>>466
そうっすか?C++と比べると、かなりストレートな言語だと思うけど
0468デフォルトの名無しさんNGNG
>>467
それは比べる対象が悪いかと
0469デフォルトの名無しさんNGNG
Fortranも正直使いたくないんだが、使う分には許容出来なくもない。
問題なのは未だにFORmula TRANslaterとして、モジュール化もへったくれも無
いコードをこのクソ言語で書かれるとどーしよーもない事なんだよな。

ま、Cでポインタ覚えたてのアホが書くコードも、C++でtemplate覚えたての
カスが書くコードも一緒か。
0470デフォルトの名無しさんNGNG
>>469 がいいことを言った.

ftnchkek みたいな使い方で,望ましくないコーディングも教えてくれる
やつがあればいいのにね w
0471デフォルトの名無しさんNGNG
MATLABって、どのあたりがFortranと関わりがあるんでせうか?

最近授業で習い始めて、「Fortranから派生した」みたいなことを聞いたんですが、、
0472デフォルトの名無しさんNGNG
http://www.lahey.com/check.htm
0473デフォルトの名無しさんNGNG
最近フォートラン始めたんですがこれってマック剥けコンパイラありますか?
0474473NGNG
ってか前に出てますね。ごめんなさい。
0475466NGNG
自己レス.

リストとかツリーを使おうと考えるからいけないんですね.
Fortran には Fortran の考え方がある,と.


また,紙に書いて煮詰まったものしかコードに表せないのも,
Fortran の仕様ですね.
0476デフォルトの名無しさんNGNG
ツリーだろうとハッシュテーブルだろうと、ある程度機能をわりきれば、
Fortran77の制限内でも案外楽に実装できるぞ。

メモリ空間なんて所詮一次元の配列だし(暴論)、
その配列の添字がポインタの代わり、
ポインタのポインタが使いたかったら、その添字を値とする整数配列を作る。

>>466 がんばれ
0477466NGNG
>>476
うほっ.別の意味で教育に良い言語ですね.
ちょっと試してみます.
0478デフォルトの名無しさんNGNG
とある subroutine の中で,

IMPLICIT 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
>>479
買え
http://www.saiensu.co.jp/books-htm/ISBN4-7819-0511-0.htm
0481デフォルトの名無しさんNGNG
>>479
パスカルの三角形(>>4)を求めて、メモリに保存して、逆から出力していけばええんで内科医
0482デフォルトの名無しさんNGNG
>>479
./a.out | tac
0483479NGNG
>>480-482
ありがとうございました! なんとかがんばってみます。
0484479NGNG
と、思ったのですが。 どうやったらピラミット型に…?
0485デフォルトの名無しさんNGNG
>>484
宿題の文面を晒さないと何がしたいのかさっぱり分からないよ.
1 2 1
1 1
1
0486デフォルトの名無しさんNGNG
やっほー♪ふぉーとらんらんらん♪
てのはガイシュツ?
0487デフォルトの名無しさんNGNG
>>486
>>29
>>385-388
>>461
0488デフォルトの名無しさんNGNG
>>484
逆じゃない三角形は作れるの?
まず普通にできてから,逆を考えた方がいいかもよ.
出力は write (fmt='()') で整形しないといけないよ.
0489デフォルトの名無しさんNGNG
>>484
program joke
write(6,'("1 2 1")')
write(6,'(" 1 1")')
write(6,'(" 1")')
stop
end
0490484NGNG
1 みなさんすいません… Fortran77で、こういった三角形をつくれというものでした。
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
0491デフォルトの名無しさんNGNG
つまり四角錐にしろと言うのか。難問だ
0492484NGNG
もとのプログラムはこれです

integer 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

です。
0493484NGNG
>491

言葉が足りずすいませんでした! こういった形です。

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
::::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デフォルトの名無しさんNGNG
714?
0496デフォルトの名無しさんNGNG
>>492
配列のインデックスが逆になっている (C 言語みたいな) ところが多いですね.
修正しないと直角三角形にもなりませんよ.


ところで >>484 ではありませんが,
きれいに三角形を出してみようとしました.
ところが,fortran の経験がほとんど無く,文字列を操作して
write() に与える fmt 文字列を作ることさえできません.
adjustl() とか trim() は fortran77 にありますか?これが無いと話になりません.
Professional Programmer's Guide to Fortran77 には書いてないのですが...?
0497デフォルトの名無しさんNGNG
FORTRANでは配列の外にアクセスするのってOKなんですか?
   dimension XX(120)
   XX(0)=0.
   XX(300)=1.5
みたいな代入があって、これが通るのが信じられません。単にコーディングミス
かとも思ったのですが、作者も用途も全然別なのに古いプログラムでは結構見ます。
そしてなぜかまともに動いています。(理解に苦しみますが)

-fbounds-check等をつけてコンパイルすると当然動きません。
C等ならまず駄目だと思いますがFORTRANは仕様としてOKなのでしょうか?
0498496NGNG
とりあえず大きくても 5 桁だと決めないと大変ですね...
write() が勝手に改行しないようにするために,fmt='(I5$)' のようにドルを
付けましたが,これが fortran77 か何を見れば分かるのか教えてください.
気軽に仕様を調べられないと,すごくストレスを感じますよね.

>>492
_____|_____|_____|_____|____1
_____|_____|_____|____1|_____|____1
_____|_____|____1|_____|____2|_____|____1
_____|____1|_____|____3|_____|____3|_____|____1
____1|_____|____4|_____|____6|_____|____4|_____|____1
アンダーバーは空白,縦棒は本当は出力しません,
ということで,等幅フォントで見てください.
どういう順番で出力すればできるか気付いてもらえるかと思います.
0499デフォルトの名無しさんNGNG
>>498
英文で良ければ
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デフォルトの名無しさんNGNG
>>496
ADJUSTL, TRIM, 書式末の'$'はFORTRAN77の仕様ではないよ。
大抵の処理系はサポートしてると思うけど。
0501デフォルトの名無しさんNGNG
>>484
FORTRAN90で書いても結構面倒だったよ.
0502デフォルトの名無しさんNGNG
>>497
普通にプログラムでは、配列の外にアクセスするのってOKではないでしょう。
FORTRANでは配列は先頭アドレスからいくらでアクセスするから、エラーチェックをかけなければ走らないということは
ないでふ。real*8だとして
XX(300)にアクセス=XXの先頭アドレス+8bit*300にアクセス
0503デフォルトの名無しさんNGNG
>>492の様に結果が配列に格納されているとして
IW=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
0504496NGNG
>>499
(・∀・)イイ!! ケド、改行の抑止の valid な方法はどこだろう?
例が少ないのは仕方がないのでしょうが,用語を覚えるまで実際に書けないです.

「手元の処理系で動くから」って,悪名高い BASIC のマネか知らん.

>>500
ですよね...
文字列処理がこんなに貧弱なのに,fortran で処理系を書かれる方も
いらっしゃるそうですね.

出力の整形ルールだって,今からでも C の printf 作ろうよ,って思います.

>>503
すごい...write が低機能なんじゃなくて,私が低いんですね.
しかも配列のインデックスの順番がわざとだったとは orz
0505デフォルトの名無しさんNGNG
>>502
thanks. 結構業界では有名なプログラムだったのでひょっとしたら、と思いまして。
0506デフォルトの名無しさんNGNG
>>492 はちゃんと動かんぞ。

>>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
0507506NGNG
ちょこちょことイタいミスしてるな(はづかし
改訂版
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
>>496
テキトーに書いてみた。

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
0509506NGNG
>折れのコンパイラ (Compac cfal for Alpha Linux) では駄目だった。何故だろう?
>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デフォルトの名無しさんNGNG
てことは、これでいいんだな。
INTEGER, 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デフォルトの名無しさんNGNG
g77 だったらこんな感じかな。
parameter (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デフォルトの名無しさんNGNG
スレ違いだが Python だったらこんな感じだな。
import 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
>>502
私は >>497 ではありませんが,ちょっと 1995 年頃に書かれたプログラムを
コンパイルする過程で,大量の warning に出逢いました.
out of definition range です.
わざわざ dimension を使っておきながら,越えた範囲に堂々とアクセスしているんです.
しかも,そのプログラムは bug fix 済みな感じで使われています.

目的が知りたいです.
浅学の私では,dimension の数字を増やせば済むのでは,と考えてしまいます.
0514デフォルトの名無しさんNGNG
商用Fortran90だとIntelとPGIの名前がよく出るけど、absoftってどうなんでしょ?
amd64 + Linux な環境でIMSL使いたいので検討中なのです。
ttp://www.hulinks.co.jp/software/pf/

速度や安定性について、>>360 さんみたいな体験談や情報の在処お持ちの方いらっしゃいますか?
0515479ですNGNG
みなさんこんなにたくさんの御返事ありがとうございます!
0516デフォルトの名無しさんNGNG
結局 >>497 が言うようなプログラムが
堂々と出回っている理由を知る者はいないのですか... orz
0517デフォルトの名無しさんNGNG
>>516
サブルーチンで引数として長さが不定の配列をもらうとき、今だと
   subroutine sub(a, ...)
   dimension a(*)
      …
みたいに宣言するよね。
でも、これが正式な規格となる前(FORTRAN77以前?)は、
   dimension a(1)
や、>>497みたいに、適当な配列サイズの宣言をしてコンパイラを騙す
「テクニック」があったそうな。

もちろん、今となっては過去の遺物。
0518デフォルトの名無しさんNGNG
>>497
EQUIVALENCE で他の配列に重ねていないか?
0519デフォルトの名無しさんNGNG
>>517
過去の遺物とは言え、fortran90コンパイラでコンパイルしてもエラーにはならなくない?
自分の場合、全てのsubroutine, functionに対してinterfaceを宣言したヘッダファイルを
includeしてバグを回避してたりする
0520516NGNG
>>517
そうだったんですか!ありがとうございます.
使うときは,ちゃんとそれなりの大きさで定義済みだから
正しく動いていたんですね.
今度 dimension a(*) だと意識しながら読んでみようと思います.

! あれを書いている人のコンパイラは warning を出さないのだろうか...
0521名無しさん@そうだ選挙に行こうNGNG
Linux用intelFORTRANコンパイラの導入方法と使用方法教えてください
0522名無しさん@そうだ選挙に行こうNGNG
>>521
ディストリビュージョンは?
0523デフォルトの名無しさんNGNG
>>521
自分で調べろ
0524デフォルトの名無しさんNGNG
fortran90でライフゲームができるプログラムを教えてください。
0525デフォルトの名無しさんNGNG
卒研くらい自分でやれ。
0526デフォルトの名無しさんNGNG
>>524

program hoge
use DFPORT
integer :: r
r = system('lifegame.exe')
end program
0527デフォルトの名無しさんNGNG
>>524
まずは簡単そうなライフゲームをのソースコードを探して,
Fortran90 に書き直してみるとか?
0528デフォルトの名無しさんNGNG
0,1なら八桁で遺伝的アルゴリズムが上手く機能すると聞いたことがある
0529デフォルトの名無しさんNGNG
>>522
fedoracore1です。
おながいします。
0530デフォルトの名無しさんNGNG
>>529
man gzip
man tar
man rpm
0531デフォルトの名無しさんNGNG
>>529
ttp://jp.xlsoft.com/documents/intel/flin/relnotes_j.pdf
これで分からないようなら入れてもどうせ使いこなせないので諦めた方がいい。
0532522NGNG
>>529
ゴメンネー.Debian に入れる方法しか知らないの.
でも,配布の .rpm はもともと Fedora に向けたパッケージ (?) だから,
きっと簡単に入ると思うよ.ちょうどいいスレもあるし.
ttp://pc5.2ch.net/test/read.cgi/linux/1007024009/

インストールできればすごく速い生活が送れるよ.ガンガレ.
0533ど素人NGNG
助けてください、課題レポートなんですけど
どうやってもわからないんです
--------
150までの任意の整数値Nをあたえ、以下を求めるプログラムを作成する
・N番目に小さい素数
・N番目までの素数の和
・N番目までの素数の逆数の和
--------------

というもので”エラトステンスのふるい”を使うことや、
大体、素数の個数を170ぐらい出せばいいと言う事は思いつくんですけど
プログラムに書き表すことができません。
手の空いている方がいらっしゃいましたら、
何卒手助けをお願いいたします……(´Д`;)
0534デフォルトの名無しさんNGNG
"エラトステンス"ってのは始めて見た。typoなのか「表記のゆれ」なのか判らんけど。
「エラストテネス」か「エラトステネス」で検索してみそ。きっとヒントが見つかるから。
0535デフォルトの名無しさんNGNG
>>533
小さい方からN個の素数が分かれば後は簡単.
0536デフォルトの名無しさんNGNG
150までなら、素数のデータベースを作ればいいだら
0537デフォルトの名無しさんNGNG
ttp://www.vector.co.jp/soft/win95/edu/se319061.html
この辺で素数を探して、
a(1)=2
a(2)=3
a(3)=5
・・・・・
0538デフォルトの名無しさんNGNG
>>533
Fortran90で書いたら,60行位で終わった.
夏休みの課題だとすれば短過ぎるか.
0539デフォルトの名無しさんNGNG
コメントと空行は除き、継続行はまとめて1行とカウントするルールで
何行で書けますか?
0540538NGNG
>>539
空行を抜いたら57行だった.ただし,150と言わず何個でも
対応出来るようにde/allocateしている.150に制限して,
飾りのprintを外すともう少し短くなるか.
0541デフォルトの名無しさんNGNG
FORTRAN77でも
充分な大きさの配列を用意して
ふるいにかけて素数だけ集めて
Nを入力して
和を計算して
 ・・・
と、だらだらやっても50行程度で終わるな。
サブルーチンに分けたりするともうちょっとかかるかもしれないが。
0542ど素人NGNG
>>533のど素人でございます

>>534様
ご指摘の通りエラトステネスです
期限が迫りテンパっておりました申し訳ないです


>>手助けをしてくださった方々
本当にありがとうございます
ぢつは上の課題というのは再履修に与えられた課題でありまして
……これが出来なければ4年目の情報処理となってしまうわけでして
無理を承知でお願いいたします。プログラム文を教えていただけないでしょうか
助けてください
「必死だな」と罵られても構いません、むしろ罵ってくださいませ
もう必死です(;´Д`)
0543デフォルトの名無しさんNGNG
必死だな.
まあ,わからないんだったら,もう一年やってもいいんじゃない.
0544デフォルトの名無しさんNGNG
>>542
本当に必死なら、どんな物でもいいから自分でつくったプログラムを
晒して下さい。

多少なりとも自分で考えた上でプログラムの間違いを指摘して欲しい、
と言うのであれば協力もしてやろう。

だが、授業内容を理解していないのに課題を人に丸投げするような奴は
単位取れなくて当然だ。
0545デフォルトの名無しさんNGNG
>>512
これは3年前の質問ですか?
http://fc2bbs.com/bbs?action=reply&uid=5595&tid=1947619

エラトステネスのふるい法は>>4でもソースはあるし、ぐぐればあちこちにあるんだけど。
0546545NGNG
間違えた昨年度だ
0547538NGNG
>>541
subroutine 2つとfunction 1つを使っていた.
それらをprogramに押し込んだら34行になった.
0548デフォルトの名無しさんNGNG
>>547
ソースをうp plz
0549538NGNG
program test
implicit 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デフォルトの名無しさんNGNG
9行ででけたー (Fortran95 固定形式)
integer::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デフォルトの名無しさんNGNG
さあ,お次は 7 行プログラミングかな?
0552デフォルトの名無しさんNGNG
さすがに7行はつらいな。

っていうか、配列の宣言と入出力、END文書いたら残り3行しかない。
マルチステートメント使ってもいいなら書けるけど。
0553デフォルトの名無しさんNGNG
; は無し?
0554デフォルトの名無しさんNGNG
WindowsXP proでVisual Fortran6.1Aを使ってどのプログラムを実行しても

Loaded '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
554
自己レス。
実行ボタン以外の場所を押してました。情けない・・・・・
0556デフォルトの名無しさんNGNG
CASE1
-------------------------
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デフォルトの名無しさんNGNG
今回の件と関係あるかどうかは知らないけど、
CPUの計算速度 >>> ファイル等入出力の速度
なので一般的に入出力はなるべくまとめた方が速くなります。
0558デフォルトの名無しさんNGNG
至急、質問があります。
FFT(高速フーリエ変換)のプログラムを作ってます。
今まで処理データ数が16000個くらいで、順調に計算できていました。
しかし、データ数を70000個くらいに増やすと、出力ファイルに
『*』印がたくさん出てきます。
ちなみに言語はフォートランで出力はCSV形式で出力してます。
これはフォーマットの設定が悪いんでしょうか?
0559デフォルトの名無しさんNGNG
>>558
FORTRAN専用スレッド
http://pc5.2ch.net/test/read.cgi/prog/1052290911/131
0560デフォルトの名無しさんNGNG
ブレネリ
あなたのお家はどこ
















しらねーよ
ボケッ



良いこのみんなはこういう無慈悲なことを言っちゃいけないぞ
0561デフォルトの名無しさんNGNG
やーふぉー

FORTHらんらんらん
0562デフォルトの名無しさんNGNG
Salford Software のFortran95コンパイラ FTN95 Personal Edition が
非商用・個人利用に限り無料で利用できるようになりました。
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デフォルトの名無しさんNGNG
>>562
ifc が強力すぎて,なんかパッとしないね.
0564デフォルトの名無しさんNGNG
Windows上で使えるフリーのFortran90/95はほとんど無かったから
これはこれで良さそうな気がする。
ifc (IVF)は製品版と期間制限付きの体験版しかないし。

しかし、Fortranで .NETするメリットってあるのかね?
0565デフォルトの名無しさんNGNG
>>564
windows となると,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デフォルトの名無しさんNGNG
>>566
http://www.geo.titech.ac.jp/fujimotolab/renewHP/numexe/manual/10_3/f90/sec9.html#9.1.
0568デフォルトの名無しさんNGNG
レスありがとうございました
g90 の登場が待ち遠しいですね.
0569デフォルトの名無しさんNGNG
>>568
g95のバイナリを試してみるとか
http://www.g95.org/
0570デフォルトの名無しさんNGNG
なぜ>>562を使わない?
0571566NGNG
ゴメンなさい
ボク linux なので...
>>562 は wine でも動くのかな?
とりあえず >>569 を試してみます.

>>569, >>570 ありがとうございました.
0572デフォルトの名無しさんNGNG
>>571
intel のすごくいいやつがあるよ.無料の.
0573566NGNG
そういえば以前のレスで
コンパイラごとにコマンドの実行速度を
比較したページがありましたね.
gnu よりも intel の方が3倍くらい早かった記憶がします.
そこで intel をダウンロードしようと思ったんですけど,
non-commercial 版なのに会社を書けといわれてしまいました
う〜ん学生なんですけど学校の名前書いちゃっていいんですかね?
0574デフォルトの名無しさんNGNG
>>573
もう登録したかも知れないけど「personal」とか「personal use」でいいんじゃない?
まあ、別に学校名で登録しても問題ないと思うけど。
0575デフォルトの名無しさんNGNG
MATLABのFFTSHIFTに相当する機能をFORTRANで簡単に
やるには、どうしたらいいんですか?
0576ダメ名無しNGNG
かなり初歩的な質問で恐縮なのですが、
値をTAB区切りで出力するにはどうしたらよいのでしょうか?
テキストファイルをエクセルファイルに変換したいのですが・・・
0577デフォルトの名無しさんNGNG
VFなら、C文字列使えるから、\tでいけるが、ほかはしらね。
おとなしく、カンマ区切りテキストにすれば。
0578デフォルトの名無しさんNGNG
タブはCHAR(9)でだめ?
0579デフォルトの名無しさんNGNG
別にスペースでもエクセルでセル分割できるよ。
ファイルから開くで、種類をテキストファイルとしてみ。
0580ダメ名無しNGNG
わ!ほんとだ!解決しました!
ありがとうございます〜!!!
もっとはやくここにくるんだった _| ̄|○
ほんとありがとうございます!
0581デフォルトの名無しさんNGNG
しょうもない質問ですがどなたか教えてください。
メモリー512MBで1024×1024の配列の計算を行なおうとすると、
上手くいきません。512×512ならできるんですが。
やっぱり、メモリーを1GBとかにしないとだめですか?
ちなみに、計算内容は速度u,vをフーリエ変換してエネルギースペクトル
を出すというものなんですけど。。。
0582デフォルトの名無しさんNGNG
そんな質問で答えられるやつはネ申
0583デフォルトの名無しさん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デフォルトの名無しさんNGNG
>>583
subroutineへの受け渡しは配列の先頭アドレスとサイズですよ
0585デフォルトの名無しさんNGNG
>>584さん ありがとうございます
ってことはsubroutineとで同じ物理メモリ領域を共有してるってことでいいんですよね?
0586デフォルトの名無しさんNGNG
ポインタ 使うってのはどうなんかな?
0587名前は開発中のものです。NGNG
>581
スタックが溢れてるね。
自動変数だとスタック領域が足りなくなるので
グローバル変数を使うしかない。
てか、最近のVCとかではスタックとかデータ領域とかって
どうやって指定するの?9801のころは気にしながらプログラミング
しなきゃならなかったから。
0588デフォルトの名無しさんNGNG
>>587
CVFならコンパイル時に/4Naオプションを付けると
すべての局所変数が静的に割り付けられる。

個別に指定するときは変数宣言時にSAVEかSTATIC
属性を付ける。
0589デフォルトの名無しさんNGNG
めもりは動的に確保してもいいんだが
0590デフォルトの名無しさんNGNG
長年UNIX上でFortran使ってるせいか、Windows上のVisual Fortranが使いにくくて
たまらないんですが。なんであんなワークスペースファイルなどのいらないファイル
を作るんだろ。
0591デフォルトの名無しさんNGNG
>>590
浦島太郎ですか?
0592デフォルトの名無しさんNGNG
>>590
コマンドラインから使いなさい。
0593デフォルトの名無しさんNGNG
>>591
0594デフォルトの名無しさんNGNG
>>590
同意。それと、いろいろごちゃごちゃウィンドウがあって、肝心のコード見るためのウィンドウが狭い。
漏れも結局Windows上でもEmacs(Meadowだけど)使ってます。
0595デフォルトの名無しさんNGNG
Windows上のVisual Fortranで数値計算ライブラリをコンパイルする方法ってないですかね?
もともとはソースコードが沢山入っててLinuxやUnix上ならMakeユーティリティで一発と
いう奴なんですが。
0596デフォルトの名無しさんNGNG
普通にソースをプロジェクトにくわえれいいんでないかい。
fortranの場合、訛りがあることがあるから、ソースの修正が必要かもしれんが
0597581NGNG
>>587,588
ありがとうございます。とりあえず無駄な配列を省いて
何とかできました。ただ、もうメモリの限界っぽいです。
金たまったら1Gにします。
0598デフォルトの名無しさんNGNG
>>595
そういう状況では、うちではcygwinのGNU make + Visual Fortranのコンパイラという組み合わせで対処してます。
0599デフォルトの名無しさんNGNG
>>590
おれも昔はそうだったが、IDE環境も良いもんだよ。デバッグも楽だし。
0600デフォルトの名無しさんNGNG
Intel版のVisual Fortranでetime関数を使いたいのですが、やり方がうまく行きません。
ライブラリ・リファレンスをビルド時にオプションで指定しなければならないようなんですが、
どうしたらよいのでしょうか?
0601デフォルトの名無しさんNGNG
FORTRANの基礎的な事は分かったのですが
数学的に難しい計算をするときにやり方が分かりません。
例えば2次元フーリエ変換はどのようにすればいいのでしょうか?
0602601NGNG
コンパイラはVISUAL FORTRANを使ってます。
0603デフォルトの名無しさんNGNG
>>600
もうちょっと具体的に、どんなエラーが出るとか書いてくれないと答え難いんだが。

ETIMEを使っているプログラムまたはサブルーチンの先頭に
USE IFPORT
を追加すれば特に追加のライブラリを指定しなくてもコンパイルできるはずです。

「未解決の外部シンボル_ETIMEが…」とエラーが出る場合は
プロパティ ページの Fortran --> Compatibility で
Use PowerStaion Portability Library が Yes になっているか確認して下さい。
デフォルトでは Yes ですが No になっていると ETIME を含むライブラリが
リンカに渡されません。(コマンドラインでは /fpscomp:nolibs)
0604デフォルトの名無しさんNGNG
>601 にマジレス
別段FORTRANに限った話ではないが

1. 数学的に難しい計算を、自分でプログラムにする。
2. 数学的に難しい計算を、人にプログラムしてもらう。
2-1. 新たに書いてもらう
2-2. すでに書いてあるものを探してきて利用する
2-2-1. 買ってくる
2-2-2. フリーの物を使う
3. あきらめる

0605デフォルトの名無しさんNGNG
>601 にマジレス
FORTRANの基礎的なことがわかったら
数学の基礎的なことも勉強しておく。
でないと、間違ってプログラム使っても気づかなかったりする
0606デフォルトの名無しさんNGNG
フーリエ変換は簡単なようで奥が深い
0607デフォルトの名無しさんNGNG
>>603
ありがとうございます。
早速ためしてみます。
0608604NGNG
>601
2-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デフォルトの名無しさんNGNG
今仕事でFORTRANのプログラムで演算処理させてるんですけど、時間が
50分くらいかかってしまって、とてもじゃないけどこまめに修正できない状態
です。で、新しいPCを入れて半分以下に短縮させたいんですが、どのくらいの
マシンを入れたら効果的でしょうか?プログラムは繰り返しの部分はサブルーチンで
記述されています。

現在、Cerelon2.66GHz+Visual Fortran 6.0+WindowsXP Proで動かしています。
これをXeon2.8GHz+Visual Fortran8.0に変更したら約半分くらいになるでしょうか?
また、Itanium1.3Gくらいにしたら1/10くらいになるでしょうか?
それならそれぞれ30万、150万近くでも金をかける価値があるのですが...

多くの人が理解できるように、OSはWindowsでプログラムの改良については、
下手にいじくると結果に保証が持てないので、行わない前提で良いアドバイス
をご教授いただけたらと思います。
0610609NGNG
読みにくい文章ですいません。
あと、XEONを入れる場合は、Xeon2.8G×2です。

Visual Fortran6.0でもデュアルPCを活かして処理できるのであれば
それで行きたいです。

以上、よろしくお願いします。
0611名無しさん@Vim%ChaliceNGNG
半分とか1/10とかって…CPU変えるだけでそこまで上げるのはキツくね?
とりあえずプロファイル取ってみてボトルネックだけでも直した方が速くなる
んじゃないのかねぇ。
0612609NGNG
>>611
やっぱそうですか。
デュアルCPUを使って、マルチスレッドのコンパイラを使えば約2倍になって
くれるのかな、と思ったのですが。
0613デフォルトの名無しさんNGNG
>609 十年ほどじっと待ってみるのもよいかと。

しかし、経験的には611の言うようにプログラム見直したほうがよいかと。

ただし、経験的にはこれを行うと(もとのプログラムのほうにバグがあり。
思わずこれを直してしまったという事象も含めて)新たにバグを埋め込む
可能性も非常に高いということも否定できない。
0614デフォルトの名無しさんNGNG
バージョン管理システムは必須だぜ!
0615デフォルトの名無しさんNGNG
>>609
要するに、「プログラムを変更しないで計算時間を速くさせるにはどうしたらいいか?」
ということなんですね?どういう種類のプログラムで50分かかるのか分かりませんが、
メモリが足りなくてスワップしまくりで50分なら、メモリの追加で計算時間が1/100に
なるかもしれませんね。
0616609NGNG
>>613-615
アドバイスさんくすこです。
ところで、今日、こんなページを見つけまして、
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デフォルトの名無しさんNGNG
>>616
CVF6.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
0618609NGNG
>>617
ということは、引数に変な値を入れない保証があればFastにしても問題
無いってことですね。

過去ログ読んでみましたが、1400×1400くらいの配列を作っていては、
1GB積んでいてもメモリがスワップしているようですね。
なので、なるべく固定できるものは固定する方が良いのでしょうか?

会社が新PCを購入することも検討してくれているので、40万くらい出すの
ならどのように使うのが一番効果が高いか悩んでいるところなのですが...
(金の割に性能がイマイチだったら肩身が狭いので...)
0619デフォルトの名無しさんNGNG
勉強になるな。
大学の研究でやってるのが一回の計算がパラメータによっては50時間くらいかかる。
予算の時期的な都合で大型計算機使えないし上にかかれてる事試してみよう。
0620デフォルトの名無しさんNGNG
でも >>616の通りにして50分→15分っていうのは
ただ単に今までデバッグ版で使ってただけじゃ…
0621デフォルトの名無しさんNGNG
Optimization LevelをMaximamにはしないのかい(ny
0622デフォルトの名無しさんNGNG
FujitsuのFortran&C(v2.1)でプログラムをビルドすると、

Fatal error LINK.1070:Cannot open object input file -- No such file or
directory "c0x32.obj"

と出てビルド処理が中断されてしまいます。
マニュアルもなくて対処法が分からないのですが、これは何が問題なんでしょうか。
0623デフォルトの名無しさんNGNG
>>622
c0x32.objがなくてリンクができないってことが問題なんでしょうね.
0624デフォルトの名無しさんNGNG
>>622
No such file or directory "c0x32.obj"
0625622NGNG
>>623
>>624
どうもありがとうございます。
ズバリc0x32.objがないのが問題なのですね・・。
このc0x32.objというファイルをどこからか探してきて、
Fortran&Cのフォルダのどこかにコピーすれば動くでしょうか。
何度か再インストールしても同じエラーが出続けて参ります。
0626622NGNG
探したところFortran&Cのlibフォルダ内にありました>c0x32.obj
設定ができてないのかもしれませんが、まだ解決してません。
いろいろいじってみます。もし正常に動作したらまた報告します(いりませんかね・・
スレを汚して申し訳ありませんでした。失礼します。
0627622NGNG
正常に動きました。この使い方で合っているかどうか分かりませんが、
libフォルダ内の全ファイルとソースファイルを同じ場所に置いてやって
ビルドするとリンクまで正常に行えました。役に立たない報告かもしれませんが。
どうもありがとうございました。          
0628デフォルトの名無しさんNGNG
環境変数でPATHが通ってないんじゃないの?
0629622NGNG
>>628
たぶんどこかでlibフォルダにPATHを通す必要があるんだと思いますが、
どこで設定するのか分かりません。翻訳オプションという項目があって、
ここっぽいのですが、ヘルプを呼んでもそれらしいことも書いてなくて、
お手上げです。ソースファイルと一緒にlibフォルダ内のファイルを一緒に
置いてやれば動くので、とりあえずこのまま使用しています。
0630しろうとNGNG
現在Salford FTN77 Personal Edition Fortran 77 Compilerを使っているのですが、これでグラフの作成もできると聞きました。どのように操作するのかご存知の方いらっしゃいませんか?
0631デフォルトの名無しさんNGNG
>>630
FTN77 Library Reference P.45〜
0632しろうとNGNG
>>631
ありがとうございます。がんばって読んでみます。
0633デフォルトの名無しさんNGNG
>>630
気分がいいので、マジレス
>>55あたりから、見直せ
0634609NGNG
>>383
それを使ってIVF8.1の試用版をやったら動きました。サンクスコ。
VC6.0なんかは入っていないほうがいいみたいです。
(PATHの設定でなんとかなるのかもしれないけど。)
0635デフォルトの名無しさんNGNG
複素数の虚数部分を取り出す関数を教えてください。
0636デフォルトの名無しさんNGNG
age
0637デフォルトの名無しさんNGNG
>>635
IMAG()

が使えなければ

(a - CONJG(a) )/2

で定義する。
0638635NGNG
サンクス。
IMAGで検索したら分かった。
日本語で調べるときは「虚数部」じゃなくて「虚部」なんだな…
0639デフォルトの名無しさんNGNG
AMDのプロセッサにもっとも最適化されているコンパイラって何ですか?
0640デフォルトの名無しさんNGNG
>>639
AMD Core Math Libraryをリンク
0641デフォルトの名無しさんNGNG
ヤーッ

ホーッ


FORうわなにをするやめ亜wせdrftgyふじこlp;@
0642デフォルトの名無しさんNGNG
        ヾ  /    < 仮面ライダー1000が>
       ,. -ヤ'''カー、   /Y⌒Y⌒Y⌒Y⌒Yヾ
 ー―ァ  /r⌒|:::|⌒ヾ
   _ノ オ{(  |0|  )} オオオォォォォ!!!!!
     __,ヽ,ヾ,_|V|,_ノ、/ ,r-,,=
    ,゛==ゝ_ViV_ノ~i/ 〃 `ー―-、
    /  /⌒`//´⌒c/^^^ ))))))))))
 ,,―イ  {ー''"~{ {~゛`ー`/'`'~/ー--―'
))   ,./ゝ_/∧ゝ_ノ  ノ
 ー''"  |ロ  ロ    |
 人,_,人,_,人,_,人,_,人,_,人_,人,_,人
< 華麗にスイス民謡をを阻止!>
 Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒
0643デフォルトの名無しさんNGNG
遺伝的アルゴリズムのサブルーチンがおいてあるとこってないですかねぇ???
0644デフォルトの名無しさんNGNG
>>643 英語でググればいっぱいひっかかるぞ
0645デフォルトの名無しさんNGNG
>>643
遺伝的アルゴリズムを利用したサブルーチンは探せば、いっぱいある。
ただ、あくまでアルゴリズムなので、>>643がそのまま流用できるソースはないかと。
0646デフォルトの名無しさんNGNG
プログラムのどこの処理で時間がかかってるか知りたいけど
それを解説したサイトってないですかね?
例えばただの計算、IF文、乱数の発生などをそれぞれの処理ごとに時間を計った例とか。
0647デフォルトの名無しさんNGNG
前任者から引き継いだコードがメインの部分に延々と全ての処理を書いているんです。
どうみても分かりにくいです。
前任者はITの鬼という評判なのでが、なにかこの書き方のメリットはあるのでしょうか?
私はもう書き直そうかと思っているのですが。
0648デフォルトの名無しさんNGNG
Staticオプションを付けるとどう変わるのでつか?
0649デフォルトの名無しさんNGNG
>>647
メリットは色々あるが、主なものを挙げると
1.サブルーチンの呼び出し/復帰がない分、処理速度が向上する(ような気分になれる)
2.万が一ソースが流出した場合でも、処理の流れがわかり辛いので機密保持に役立つ
3.サブルーチンの名前を考える手間が省ける


「ITの鬼」というより鬼門な人だな。
まあ、世間一般の評判というのは必ずしも実力で決まるもんじゃ無いから・・・
0650デフォルトの名無しさんNGNG
>>646
$ g77-3.4 -pg hoge.f

$ ./a.out    # ここで gmon.out が作られる

$ gprof a.out

すると,ズラーっと役に立ちそうな情報が出てきます.
0651デフォルトの名無しさんNGNG
プログラムというのは
最適化をかけない場合と
極限まで最適化をかけた場合では
おおよそどのぐらい計算速度に差が出るのでしょうか。

4倍くらいにはなりますか?
0652デフォルトの名無しさんNGNG
implicit none の無いソースを受け継いだ。

動かない。でかい。資料は六法全書のような厚さ。

いったいどうしろと・・・・・・やるしかないか・・・。
0653デフォルトの名無しさんNGNG
数字を文字列に変換する関数は何でしょうか?
1.dat 2.dat 3.dat ...
というファイルを次々に出力したいのですがやり方が分かりません。
また、>>635も私ですが必要な命令の調べ方も教えてくれるとうれしいです。
Visual Fortranをもっています。
0654デフォルトの名無しさんNGNG
>>653
> 数字を文字列に変換する関数は何でしょうか?
> 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デフォルトの名無しさんNGNG
Cとfortranはどっちが速いの?
0656デフォルトの名無しさんNGNG
>>655
アルゴリズムも同じとして,,,
高度なコンパイルが出来るコンパイラがある fortran の方が速いらしい.
だから,どうしても fortran でないとできない問題もあるんだって.
実際に見たわけじゃないけど.

個人で問題になるのは完成までの時間の方だと思うし,
だいたい fortran を使ってたら出来るものも出来無い (俺が問題) よ.
0657デフォルトの名無しさんNGNG
>>653
VFなら、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
>>653
>必要な命令の調べ方も教えてくれるとうれしいです。

マニュアルに組み込み手続きの一覧が載っていると思うので
それを概要だけでも眺めてみると良いかと。
0659デフォルトの名無しさんNGNG
先に処理系のマニュアルを見ると,移植性のないコードを書きそうだけれども,
Fortran では普通なのかな?
0660デフォルトの名無しさんNGNG
>>659
まともなマニュアルなら、標準と独自拡張ぐらいちゃんとわけて書いてあると思われ。
0661デフォルトの名無しさんNGNG
Visual Fortran のマニュアルも拡張部分は色分けされて書かれてますよ。

FORTRAN 77はともかく、F90/95は処理系のマニュアル以外に
ろくな日本語の参考書が無いからなぁ…
0662若葉マークNGNG
微分が式の中に入ってる時のprogram上での式の書き方がわからないです。
オイラーとかで展開していくのか、何かコマンドみたいなのがあるのか教えて下さい。
下の式では(∂f/∂s)の表現の仕方がわかりません。

f=(k-h)ln(s'/s)
dt=r・(∂f/∂s)

k,hは既知です。sは変数です。
print,readで入力します。
誰かお時間ある方・・・教えて下さい
0663デフォルトの名無しさんNGNG
windowsで使えるフリーのコンパイラを教えてください
0664デフォルトの名無しさんNGNG
>>662
勘違いがありましたらすみません.

read で読んだ式を処理するのですか?
とても難しい問題だと思います.
(GNU bc のソースコードを見てみてください)

また,一般にプログラムには,用意された演算しか書けません.
+, -, *, /, ^ などの演算子の他は (計算機で言う) 関数しか使えません.
「数値計算」について調べてみてください.
微積分などを加減算だけでやる方法の学問といった感じです.
方法はいろいろあります.

解析的な答えを出したいときは,数式処理ができるプログラムを
使用します.数値ではなく記号を扱うので「記号処理」などと呼ばれます.
0665デフォルトの名無しさんNGNG
>>663
g77 を使うなら,cygwin 以外にもありますよ.
MinGW や DJGPP というプロジェクトがあります.
DJGPP にあるプログラムを持ってくれば Unix なコマンド群も
あるから作業しやすいかも.
環境をインストーラでサッサと作ってしまうなら MinGW でしょうか.
0666若葉マークNGNG
>>664の方
有難うございます。
dos画面でsの値をとりあえず手入力してdtの値を一つ一つ計算してもらいたいです。
「数値計算」で調べてみてそれでも駄目ならまた戻ってこようかと思います…
では
0667デフォルトの名無しさんNGNG
レポート厨うざい
0668デフォルトの名無しさんNGNG
>>666
元の関数 f を変形しないのならば,

function f(...) を定義して,

eps=1e-6
dt = r * (f(s+eps,...) - f(s, ...)) / eps

とやればいいと思います.微分の定義そのままです.
変形するなら,df/ds を手で求めてその導関数を使えばいいだけのことです.
0669デフォルトの名無しさんNGNG
>>663

>>562
0670デフォルトの名無しさんNGNG
PGI fortran win版でdtime命令使うと、0.00000となって経過時間が取得できないのですが、
何をすればよいのでしょうか?
0671デフォルトの名無しさんNGNG
64ビットXeon用のFortranコンパイラは無いのかなー。
0672デフォルトの名無しさんNGNG
>>670
スタート個所と終了個所で合計2回呼ばないといけないとか
0673デフォルトの名無しさんNGNG
ある配列変数の値をファイルに出力するoutputという名のサブルーチンがありまして、
ソースファイルに

call output                --------------------A
call subfunc

という様に並び、subfuncの中身は

subroutine subfunc
common変数をまとめたファイルのinclude
局所配列変数の宣言
call output                --------------------B
やりたい計算処理

というように並んでいます。
AとBの値は同じになるはずなのですが、Aは数値でBは!!!!!!!!(非数表示)となってしまいます。


皆様の経験上、この原因としてどのようなミスが考えられますでしょうか?


0674デフォルトの名無しさんNGNG
>>673
fortran90にして、全てのサブルーチンとファンクションの interface を書いておけば
そういうのは無くなるよ。commonも使わないほうがいい
0675デフォルトの名無しさんNGNG
俺もcommonによるバグを最後まで取りきれずに、結局全部
引数渡しにした事があったっけな・・・。
学部の頃はモジュールなんて知らなかったよ。

個人的にはimplicit noneとinterfaceが強制されない仕様が気に入らない。
どうして自由形式になった時に変更されなかったんだろ?
0676デフォルトの名無しさんNGNG
>>672
以下のように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デフォルトの名無しさんNGNG
>>676
dtimeってのはよく知らないけど,system_clockとおなじなら,
ed-stにしないと意味がないような.
0678デフォルトの名無しさんNGNG
>>677
ed-stでやってみたけど、0.00000となった。
ユーザーズ・ガイドのsystem_clockの例を試したけど、
ビルド後の最初の実行時は、経過時間が表示されたが、2回目以降の実行時は
0.00000の表示になった。プログラムを変更しないで、もう一度ビルドした後、
実行すると、経過時間が表示されるが、再度実行すると0.00000の表示になる。

ちなみに、timeコマンドで
time a
とすると、実行時間が正しく表示される。

なんでだろう?
0679デフォルトの名無しさんNGNG
>674
>675

返答ありがとうございます。

なぜ、commonは使わないほうがいいのでしょうか?
0680デフォルトの名無しさんNGNG
>>678
PGI 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
>679

・COMMON は グローバル変数のようなものだから、
どこのルーチンで何をされるかわからない。
バグの原因。メンテナンスが困難。

・COMMON は グローバル「変数」というか グローバル「メモリ」。
変数並びの部分はルーチン間の整合性をコンパイラが担保してくれない。
整合を取るのはプログラマの責任。
バグの原因。メンテナンスが困難。

・COMMON変数が多くなると、どれがローカル変数でどれがCOMMON変数だか
よくわからなくなる。(せめてIMPLICIT NONE であればまだ救われるが...)
バグの原因。メンテナンスが困難。

ってなかんじかな
0682デフォルトの名無しさんNGNG
変数のスコープが細かくないのは,Fortran のアプローチなのかな.
C で言うブロックを作って,狭い範囲だけで名前を使いたかったりするんだけれど.
これができないおかげで速いコンパイラが作れるということなんでしょうか?
0683デフォルトの名無しさんNGNG
>>680
どうもありがとうございました。
NT環境だからなのか?
PGI Fortran winXP環境で、プログラム内で経過時間を測定する
まともな方法を誰か教えてください。
0684デフォルトの名無しさんNGNG
>>682
> C で言うブロックを作って,狭い範囲だけで名前を使いたかったりするんだけれど.
> これができないおかげで速いコンパイラが作れるということなんでしょうか?

狭い範囲で名前付けられるならむしろその方が速いコンパイラ作れそうな気がするなぁ。

0685デフォルトの名無しさんNGNG
デバッガって話題になりました?

gdbはFortranに対応ということですが,どうにも情報が少ない気が...
idbはintelにバンドルされている以上Fortranに対応していると思うのですが,こちらもあまり情報がありませんよね...

静的なツールに関しても詳しい方いらっしゃったらお願いします.
0686デフォルトの名無しさんNGNG
>>683
Cで計測ルーチン作ってリンクするとか
0687デフォルトの名無しさんNGNG
>681

ありがとうございます。
0688デフォルトの名無しさんNGNG
>>685
なんとなく,フリーソフトウェアの開発している人って,速度より可搬性,移植性を
優先するから Fortran 使ってなさそう...
機能は限られるものの, C でやるように gdb できるみたいですから,それでいいのでは?
gcc, g77 のオプションも gcc が基本ですから.
0689デフォルトの名無しさんNGNG
INTELのFORTRAN(Windows版) の開発環境(VS.NETでしたっけ?)の
使い心地って、どうなんでしょうか?
0690デフォルトの名無しさんNGNG
>>688

ええと,おっしゃるとおりだとは思うんですが, gdbに関するドキュメントってほとんどCのデバッグについてですよね?

Fortranをターゲットにしたドキュメントってないのかなあ?と思ったわけです.
0691デフォルトの名無しさんNGNG
簡単な解析(固有値解析等)をしたいのですが、FortranとC++で
したらどちらを使用した方が良いでしょうか?
また、Fortranはどのような目的で使用するものなのでしょうか?
0692デフォルトの名無しさんNGNG
コンパイルすると
Error: Illegal character in statement label field [.].
といるメッセージが出てしますのですが、これは何を意味しているのでしょうか?
お願いします。
0693デフォルトの名無しさんNGNG
>>691
C++ で,ライブラリを使うのがベストかと.
Fortran は環境が特殊な場合以外は,強制されるまで使わなくていいと思う.
なんというか,マゾっぽかった (´Д`)
0694デフォルトの名無しさんNGNG
>>692
ifc かな?
f90 からサポートされる free format で書いているのに,
f77 としてコンパイルされているのでは?
ファイル末尾を .f90 にするかコンパイラオプションを使いましょう.
0695デフォルトの名無しさんNGNG
>>691
簡単な解析ならどちらでもいいが、その程度の計算でオブジェクト指向の恩恵はほとんど受けられないと
思われ。CじゃなkてC++にしたいのは何故?
0696デフォルトの名無しさんNGNG
>>695
>>691 じゃないけど,C99 に沿って書かないと言語仕様の制限がキツくないですか?
STL があるだけでも幸せなプログラミングが出来ますし.
やっぱり複素数が無いと.
数値以外のデータには std::list を使いたいものです.
0697いなむらきよしNGNG
FORTRANのコードをカードにパンチしてた頃が懐かしいキケー!
0698デフォルトの名無しさんNGNG
今日、初めて「Compaq Visual Fortran」を使い、簡単なプログラムを書いたんですけど、
エラーが出て困っています。
助けて下さい。

状況は
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デフォルトの名無しさんNGNG
>699
699さん、返事が遅くなり、ごめんなさい。
以下にエラーメッセージを載せます。
よろしくお願いします。

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デフォルトの名無しさんNGNG
フォルダに日本語使ってるのが悪い。
2バイト文字イクナイ!
0702デフォルトの名無しさんNGNG
>701
701さん、ありがとう御座います!!!
フォルダを直したら、問題が解決しました。
感謝です!
早速、プログラムを書いてみます(^^)
0703デフォルトの名無しさんNGNG
教科書に載っていたプログラムで解らないことがあったので、教えてください!
質問1.
変数の宣言で、
complex*16 xin(2,0:ndata),y(0:ndata),ww(2,0:ndata+1)

と書かれているのですが、*16とは何を意味しているのですか!?

質問2.
変数に値を代入する所で、
pow1=1.0do
のように数字の後にdoという文字がありました。
これは何を意味していのですか?
よろしくお願いします。
0704デフォルトの名無しさんNGNG
1.倍精度
2.倍精度(doじゃなくてd0)
0705703NGNG
704さん、ありがとうございます。
そのキーワードを参考に、もう一度勉強してみます。
0706デフォルトの名無しさんNGNG
リテラルに d0 を付けるのはなぜ?
式に double precision があればコンパイル時に直してくれるような.
変数は double precision 以上しか使いませんよね.最近.
0707デフォルトの名無しさんNGNG
>>706

組み込み関数の「個別名」が嫌いなんで、
例えば、 πが欲しい時なんか 4*atan(1.0d0) ってしてまつ。
atan(1.0)のままだと単精度。


0708デフォルトの名無しさんNGNG
>>706
d0を付けて明示的に倍精度にしないと定数はデフォルトの
realのサイズ(たいてい単精度)になるから。

double precision a, b, c
c = 0.0
a = c + 0.123456789
b = c + 0.123456789d0
write(*,*) a, b

コンパイラのオプションで倍精度をデフォルトにできる場合も
あるけど、古いプログラムを使い回してたりすると COMMON
ブロックのサイズがずれてきて…
0709706NGNG
>>707
そうですね.忘れていました.orz

>>708
桁が多い実数が,コンパイル時に丸められる可能性もあるんですね.

結局,今どきの実数は全部 `d' を付けておかないとなりませんね.
! 他の言語でも大抵 `e' と `d' はサポートするからいいか...
0710デフォルトの名無しさんNGNG
/Opか/Qprecオプション付けたらいーんでネーノ?
Intel Visual Fortranの場合だけど。
0711デフォルトの名無しさんNGNG
これからfortran勉強する価値はあるの?
fortranの他の言語に対する利点て何?
0712デフォルトの名無しさんNGNG
無い


資産が利点になるかどうかは微妙.
他の言語から呼べればいいんだし.
0713デフォルトの名無しさんNGNG
>>712
VBから呼べるの?
0714デフォルトの名無しさんNGNG
>>711
数値計算に限れば、Cで開発するくらいならFortran90/95使ったほうがはるかにまし。
0715デフォルトの名無しさんNGNG
>>713
呼べないとしたら、今すぐ手放すことをお勧めします。
0716デフォルトの名無しさんNGNG
>>714
どこらへんがましか、教えていただけませんか?
私的には C/C++ と変わらないように感じるのですが。。。
ちなみに FORTRAN 初心者です。
0717デフォルトの名無しさんNGNG
>>716
>>714じゃないが、配列機能が最強なところとか?
Fortran90/95の多次元配列の扱いやすさは他言語の比じゃないよ。そのお陰で
より数式に近い形で書けるし。
あと、Cに比べてある程度ハードウェアを覆い隠してくれるのでコーディングしやすい
っていうのもあるね。

しかし、Fortranの文法に古臭さを感じるのも事実・・・。
0718デフォルトの名無しさんNGNG
>>717
これって、C++ の演算子オーバーロードとか使えば
C++ でもあまり変わらないってことありませんか?
0719デフォルトの名無しさんNGNG
fortran は数値計算用だから,
昔から言語の方でそういう仕組みが用意してあったということですね.
ちゃんとした C++ 用行列ライブラリもいっぱいあって使いやすいです.

C だけでは辛いのは同意.あれは OS を書く言語です.
0720デフォルトの名無しさんNGNG
C++はCを基礎に作られたSM用具です。ゆめゆめ手を出さぬよう...
0721デフォルトの名無しさんNGNG
>>720
> C++はCを基礎に作られたSM用具です。ゆめゆめ手を出さぬよう...
それは分かるが、節度をもって使えば便利だと思うよ。
0722デフォルトの名無しさんNGNG
>>720
> C++はCを基礎に作られたSM用具です。ゆめゆめ手を出さぬよう...

漏れは使いたくないのに強制されるんだよぅ...
0723デフォルトの名無しさんNGNG
C++は必要なものだけを使えばCより使いやすいと思う。

最近までは数値計算の分野ではオブジェクト指向プログラミング
の恩恵が少ないと思っていたけど、オートマトンの様に内部状態
を持つモデルの構築をやり始めるとその必要性を感じてきました。
0724デフォルトの名無しさんNGNG
>>723
内部状態!? ならば lisp でクロージャを使うんだ!
0725デフォルトの名無しさんNGNG
C++初心者がOOPを駆使して作ったプログラムはFortranの何倍も遅い場合がある。
コンストラクタとデストラクタが死ぬほど呼び出されてるのも気にせず組んだりするから。
その点、Fotranは良いアルゴリズムさえ用いれば、初心者でもプロでもそれほど実行スピードに
違いは無い(例外はもちろんあるが)。
0726デフォルトの名無しさんNGNG
>>725
> その点、Fotranは良いアルゴリズムさえ用いれば、初心者でもプロでもそれほど実行スピードに

この言語仕様で良いアルゴリズムが組めれば上級 w
0727723NGNG
>>724
クロージャがどういったものかは分からないけど、C++もboostにありますね。
仮にそこまで勉強して実装したとしても、他の院生や学部生には扱えない罠。

僕の所属している研究室(音声信号関連)では、学生が20人もいるのにどういう訳かCを
扱える人間が一人もいません・・・全員f90コンパイラでFORTRAN77つかってます。(; ;)
0728デフォルトの名無しさんNGNG
FORTRANのプログラミングってもうフリーソフトでないんですか?
サイトに行ってもライセンス取得しないとだめみたいで・・・。
0729デフォルトの名無しさんNGNG
>>728
g77 ってのがある。
http://www-rocq.inria.fr/~kern/G77/g77.html
Cygwin からでも使えるゾ。
0730デフォルトの名無しさんNGNG
>>728

>>3
>>562
0731デフォルトの名無しさんNGNG
GCC には Pascal やら Ada も入ってるんだよね.
ちょっとやってみる人や,やらされる学生はこれでいいのに.
0732デフォルトの名無しさんNGNG
>>729-730
ありがとうございます!
とても助かりましたww
0733732NGNG
>>562 の使い方いまいちわかりません。
教えていただけないでしょうか?
0734デフォルトの名無しさんNGNG
>>733
何がわからないのか
何を教えてほしいのか

が全然わかりません。
0735俺はエスパーだぜ?NGNG
>>733
たぶん,統合開発環境が初心者にやさしいとは限らないのでしょう.
いろいろありすぎますからね.
私も最近のボタンをポチポチやる開発には嫌気がさして出来ません.

g77 で hellow, world! から始めた方がいいと思います.
そういうサイトがあるのかは知りません.
0736デフォルトの名無しさんNGNG
>>733
> >>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デフォルトの名無しさんNGNG
xの初期値、終了値、増分を読み込んで
exp(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の値の誤差をどうやって消すのか教えてください。
0738737NGNG
すいません。自分が作った物を張り忘れました。

   real 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デフォルトの名無しさんNGNG
b
0740デフォルトの名無しさんNGNG
>>738
>write(*,*)"x=",x,"exp(x)=",y,"log(x)=",z
に書式指定付けて、xの小数点以下の桁数を短くすれば?
0741デフォルトの名無しさんNGNG
realのdo変数って廃止予定事項だったような。
0742デフォルトの名無しさんNGNG
>>738
これは慣用句だ:

do
  if(x.ge.100.0) exit
  ...
  x=x+1.0
end do
0743デフォルトの名無しさんNGNG
xの値を0〜360度まで可変し(10度刻み)、sin(x)の値を求める。

但し、2次元配列にxとsin(x)の値を収めて、その中身を出力する事。
xとsin(x)の値は一列に並べ、データ個数分の行数(37行)を出力する事。

という問題が解りません。何方か御教授お願いします。
0744デフォルトの名無しさんNGNG
for を使え
0745デフォルトの名無しさんNGNG
>>743
--
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デフォルトの名無しさんNGNG
こんな感じにすると、いかにもFortranっぽい。

program 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文を使ったソースで解らないことがありました。
それは、
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デフォルトの名無しさんNGNG
10の-5乗
0749デフォルトの名無しさんNGNG
単精度 →1.0E-5
倍精度 →1.0D-5
4倍精度→1.0Q-5
0750デフォルトの名無しさんNGNG
>>745
>>746

どうも有難うございます。大変助かりました。


0751747NGNG
749さん、ありがとうございました。
勉強のし直しです。
また、よろしくお願いします。
0752478NGNG
・・・。
0753747NGNG
748さん、失礼しました。本当にごめんなさい!!
ありがとう御座いました。
1.0d-5とは10の-5乗という意味なんですか?
749さんの説明と違いますよね?
これは、何か意味のある事なんですか?
それとも、どちらも正しいことを言っているのかなー??

0754747NGNG
何度もすみません。
748さん、749さんの説明の意図がようやく解りました。
ありがとう御座いました。
また何かあったら相談にのってください。
では、失礼します。
0755デフォルトの名無しさんNGNG
当然ながら、748も749もどちらも正しい。
0756デフォルトの名無しさんNGNG
fortranを勉強できるサイトを教えてください
0757デフォルトの名無しさんNGNG
>>756

要求している程度が分からんケド,こんなもんで。
最後のは 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デフォルトの名無しさんNGNG
↓のHTML講義ノートも

ttp://www.ip.media.kyoto-u.ac.jp/htomita/
0759デフォルトの名無しさんNGNG
Fortran 90のリファレンスとして良く利用してます。

ttp://www.rs.kagu.tus.ac.jp/yama/
0760デフォルトの名無しさんNGNG
>>759

おお『入門Fortran90実践プログラミング』の人ですね。
この本が絶版と知って吃驚してます。
0761デフォルトの名無しさんNGNG
FORALLとDO〜END DOは最適化すれば同じでしょうか?
0762デフォルトの名無しさんNGNG
>>761
違う。
0763デフォルトの名無しさんNGNG
fortranでのファイルの読み書きがわかりません。
書き込みだけでもいいので教えてください。
Cの経験はあります。
0764デフォルトの名無しさんNGNG
Visual Fortran(~o~)
0765デフォルトの名無しさんNGNG
open(unit=10,file='unko.txt')
write(10,*)'うるせーバカ'
0766デフォルトの名無しさんNGNG
>>765
ワラタ
確かに答えになってる
0767デフォルトの名無しさんNGNG
Fortran 90ってC99みたいに可変長配列をサポートしていましたっけ?
当方使っているコンパイラは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デフォルトの名無しさんNGNG
>>767
Fortran 90ならサポートしてるよ >自動割付け配列
0769デフォルトの名無しさんNGNG
「自動割付け配列」って、ヒープじゃなくてスタックに確保するのかな?
割付けに失敗した時のエラー処理とかもできないよね。
やっぱり、デカイ配列を動的に確保したい時はallocate文を使うほうが無難?

0770デフォルトの名無しさんNGNG
>>769
どこに割り当てられるかは処理系依存だろうけど
どちらにしろ、大きな配列を確保しようとすると
エラーになる可能性がありますね。
エラー処理の方法は私もわかりません(ないのかな?)

エラーで強制終了させたくなかったら、ALLOCATEを使って
ちゃんと確保できたか調べるのが無難みたいですね。
0771767NGNG
>>767
ありがとうございます。良く見たらマニュアルにも書いてありました。
(かなり簡単な説明でしたが。)
あまり大きな配列でなければ、allocate()、deallocate()を使わなくて済む分便利かもしれませんね。
0772名無しさん@ピンキーNGNG
間違えた・・・
×>>767
○>>768
0773デフォルトの名無しさんNGNG
FORTRAN77の問題お願いしてもよろしいですか?
0774デフォルトの名無しさんNGNG
>>773
マルチは駄目です
0775デフォルトの名無しさんNGNG
マルチってなんですか?素人なんでまったく知らないんです
0776デフォルトの名無しさんNGNG
いちいち断らずに質問書けばいいじゃないか。
答えたい人は答えるだろ。
0777デフォルトの名無しさんNGNG
FORTRAN77でお願いします。
ある数xとyのそれぞれの約数xとyの最大公約数と最小公倍数を計算しなさい

関数副プログラム、サブルーチン副プログラムのどちらかを用いること。
0778デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1097932699/586
マルチは駄目です
0779デフォルトの名無しさんNGNG
>>>777
とあるテキストの演習問題と全く同じ文体ですね。
0780デフォルトの名無しさんNGNG
マルチではなくて、あっちには間違えてカキコしちゃったんです
0781デフォルトの名無しさんNGNG
あっちで一言間違ったと書けば何も問題無かったであろうに。
合掌。
0782デフォルトの名無しさんNGNG
謝罪と保障を要(ry

検索エンジンで調べても答が見付かりそう。
0783デフォルトの名無しさんNGNG
Fortran70から77になっているぞ。
0784デフォルトの名無しさんNGNG
fortranでOOPする方法を教えてください
0785デフォルトの名無しさんNGNG
>>784
http://www.amath.washington.edu/~lf/software/CompCPP_F90SciOOP.html

とか読めば?所詮OOPの真似っこしかできないけど
0786デフォルトの名無しさんNGNG
>>784
とりあえずモジュール内にprivate属性の変数とサブルーチンを書いておけば、少なくとも
データの隠蔽は実現できます。
0787デフォルトの名無しさんNGNG
>>784
そして、get_hoge と set_hoge を大量に書けよ!
0788デフォルトの名無しさんNGNG
>>784
OOP な言語から Fortran を呼びなさいってこった.
0789デフォルトの名無しさんNGNG
>>784
Fortran 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デフォルトの名無しさんNGNG
Fortran++がいいよ!
0791デフォルトの名無しさんNGNG
fortranをこれから学ぶ価値ってあるの
0792デフォルトの名無しさんNGNG
>>791
可能性: 技術的な理由 <<<<<<... (越えられない壁) ...<<<<< 人的な理由

特殊な用途では必要かも知れませんが,そんな時はどうせ特殊なわけで,
fortran をかじった程度の経験では無きに等しいのでしょうね.
というわけで目的なしに学ぶ価値は無しだと思います.

プログラミング全般に言えそうですが > 目的無しに学ぶ
0793デフォルトの名無しさんNGNG
>>792
私の場合、まさに人的な理由ですね・・・。
・過去の資産がすべてFortran
・プログラミングを教える時間に余裕が無い
・ゼロからコーディングする人がいない
・教授がFortranしか知らない
(なんだか愚痴っぽくなってしまった。)

開発環境がPC/WSの場合で、C/C++に対する決定的な
アドバンテージをどなたか教えてください。
0794デフォルトの名無しさんNGNG
>>793
別の高級な言語で書いて,単純で計算量の多いところだけ
Fortran や C で書くと,設計がしっかりしていなくても
動くものが早く (not 速く) 作れますよ.

書くのが大変だと作る前からしっかり設計しないとならなくて大変です.
何も作れません.


って,私のスキルの場合です w
0795デフォルトの名無しさんNGNG
Cよりfortranの方が速いって本当ですか?
どこかにベンチマーク結果とかあるのでしょうか?
0796デフォルトの名無しさんNGNG
うちのがっこうのぱそこんでつかえるもの
C
Pascal
Fortran
0797デフォルトの名無しさんNGNG
>>795
それは「自動車より電車の方が速いって本当ですか?」
と聞いているようなもんだぞ。

使用するコンパイラやプログラムなどの前提条件によって
結果が変わってくるから、答えようがない。
0798F77NGNG
program ...

integer 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 funcNGNG
じゃないか。
0800programの先頭に「integer func」NGNG
>>798
主プログラムに関数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
COMMONとDIMENSIONの概要がわからないのですが、
どなたか教えていただけませんか?
0803デフォルトの名無しさんNGNG
common禁止。module使え
0804デフォルトの名無しさんNGNG
>>801
事故フォロー。
できたー。関数を2枚ラッパにつかった。
0805tsuruNGNG
Salford FTN77でプログラムを実行していたところ
途中で

Floating point stack fault at address 〜

という見たことも無い文章がでてきてプログラムが異常終了してしまいました。
今まではちゃんと動いていただけに原因がわかりません。
Googleで調べてみたところ、
はっきりとしたことはわかりませんがメモリーを超過したということなんでしょうか?
どなたか教えて下さい!!
0806デフォルトの名無しさんNGNG
>>805
それだけの情報じゃよくわからんが、
多分関数の呼び出し側と関数の型があってないんだろう。

今までも「ちゃんと動いてた」んじゃなくて
「たまたま実行時エラーがでなかっただけ」の可能性が高い。

FTN77にはデバッガが付属してるから、それでデバッグしろ。

1./BREAK オプションを付けてコンパイルすると
 コンパイル正常終了後デバッガが起動するので
 「GO」のボタンを押してプログラムを実行する。
 
2.エラーの発生した箇所で止まるので、
 その前後の部分をよく見てデバッグする。
0807デフォルトの名無しさんNGNG
0808デフォルトの名無しさんNGNG
integer N, M
parameter(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デフォルトの名無しさんNGNG
C
do 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
>>808
>>809
のプログラム(808の続きが809です)を次の様に改良せよ。
1.PIVOTが0になると、割り算が出来ないので、
  「0」で割らないようにする。
2.PIVOTより下の要素を計算しないようにせよ。

また、PIVOTがほぼ0(10のマイナス20剰ぐらい)になって
しまう数値の例を試し、正しくプログラムが動くことを確認せよ。
どういう根拠で正しく動いたと言えるのか説明せよ。

という課題が解りません。どのように改良すればいいか教えてください。
宜しくお願いします。
0811デフォルトの名無しさんNGNG
レポート厨うざい。
0812810NGNG
ちなみにPIVOTより下の要素を計算しないようにせよ。というのは
a(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デフォルトの名無しさんNGNG
ある意味すごいな。
0814デフォルトの名無しさんNGNG
>>810
冬休み前の宿題か?

それにしても固定形式なのにF90風の文法を
多用していて中途半端な書き方だな。

ここまでするなら完全に自由形式で書くか
互換性重視でF77準拠の固定形式で書くか
どちらかにした方が良いのに。
0815デフォルトの名無しさんNGNG
>>814
下手な煽りだな
中途半端な煽りなら止めとけばいいのに
0816デフォルトの名無しさんNGNG
>>810
奥村先生の「C言語による最新アルゴリズム事典」を参考にすると良いかも。
俺は似たような問題(学校の課題ではないけど)を解くのに
中身のプログラムをそのままFortranに直して使った。
0817デフォルトの名無しさんNGNG
>>810
Fortranより算数の勉強からはじめてください
0818デフォルトの名無しさんNGNG
age
0819デフォルトの名無しさんNGNG
お勧めのコンパイラってなんでしょう?
0820デフォルトの名無しさんNGNG
>>819
ttp://www.sw.nec.co.jp/hpc/sx6i/product/what.html
0821デフォルトの名無しさんNGNG
DECというか、Compaqというか、hpというか、x86だとIntelのFortranが使われることが多い。
(買収とかでややこしいことになっていますが、もとはDigitalのFortran)
http://h18009.www1.hp.com/fortran/
0822819NGNG
>>820,821
ありがとうございます。
>>820
さすがに買えません。
0823デフォルトの名無しさんNGNG
>>819
何をしたいのか書いてくれないとネタカキコしかできませんよ.
0824デフォルトの名無しさんNGNG
fortranでメールサーバはかけますか?
0825デフォルトの名無しさんNGNG
書けないことも無いが、お勧めしない。
0826デフォルトの名無しさんNGNG
fortranって・・50年も前の言語なの?wwwwww
0827デフォルトの名無しさんNGNG
>>826
古いものを笑ってはいけない。
FORTRAN は私も笑うけど、Lisp を笑ったらあかん。
0828819NGNG
>>823
その通りですね、すみません。
昨年研究室で買ったアスロン64FX−51のマシンを
使ってCFDの計算がしたいのです。OSはwindows2000が入ってます。
0829デフォルトの名無しさんNGNG
>>828
visual F
0830デフォルトの名無しさんNGNG
FORTRANは古いがFortranは古くない.
そういや最初のLispはFORTRANで書かれたらしい.
0831デフォルトの名無しさんNGNG
>>830
うそーん。FORTRANで構文解析なんて、いくらS式がparseしやすいっていったって無理だろう。
0832デフォルトの名無しさんNGNG
C++ beta2005じゃだめなのかぁああああ!visual fortran
0833デフォルトの名無しさんNGNG
>>831
それが出来るんだよ。
0834デフォルトの名無しさんNGNG
>>831
比較的最近のやつだけど
「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デフォルトの名無しさんNGNG
初期のフォートランて、間にスペースがなくても大丈夫だったんだよね。クレージーな言語だとオモタネ
0836831NGNG
>>833-834
す、すげーぜ…。俺なんかわかりやすいフォーマットの入力データ読むときのFORMATでも右往左往してる。

_| ̄|○
0837デフォルトの名無しさんNGNG
まあ、昔はどのコンピュータでも汎用的に使える言語が
FORTRANくらいしかなかったからね。
今なら迷わずC言語で書くようなプログラムもFORTRANで
つくってたんだよ。

>>835
最新のコンパイラでも固定形式で書くと
空白を無視したり、73桁目以降を読み捨てたりしてくれる
とってもステキな言語です(泣
0838デフォルトの名無しさんNGNG
f77とf90の違いを教えてください
0839デフォルトの名無しさんNGNG
>>837
> 今なら迷わずC言語で書く
今なら C++ で書くのが普通だろ。
0840デフォルトの名無しさんNGNG
Fortranで書くメリットはデバッグのしやすさが一番かな。
C/C++で書いたときに出る例外エラーはつきとめるのがFortranと比べると遥かにややこしいと思う。
0841デフォルトの名無しさんNGNG
>>840
Fortran ではデバッグの段階まで書くこともできない私は OTZ

みなさん,どの言語でも同じ期間に完成させられるという
前提に立っているように感じます.
0842デフォルトの名無しさんNGNG
複素数aの実部と虚部をキーボードから入力し、偏角θを求めるプログラムの作り方を教えて下さい。
おねがいします。
0843デフォルトの名無しさんNGNG
>>842
read(*,*)ar,ai
write(*,*) atan(ai/ar)
end

バグあり。デバッグは任せる。
0844デフォルトの名無しさんNGNG
FORTRAN 77, Fortran 90, Fortran 95 の中で、どれを一番勉強すべきでしょうか?
77 と 90 でずいぶん言語仕様が違うようなので選択に困っています。
よろしくお願い致します。
0845デフォルトの名無しさんNGNG
>>844
Fortran90はFORTRAN77のすべての仕様を含んでいる。
Fortran95はFortran90のほぼすべての仕様を含んでいる。
(一部古い機能が廃止されているが、今となってはほとんど使わない機能ばかりだ)
よってこれから勉強するのなら、Fortran95が良い。

>>838
f90 = 数値計算向けの手続き型言語
f77 = 縄文式スパゲッティ製造器
0846デフォルトの名無しさんNGNG
全部。
ひとつしかやりたくないんなら、C++とか他のやったほうが良い。
0847デフォルトの名無しさんNGNG
>>845
ありがとうございます。
大変参考になりました。
0848デフォルトの名無しさんNGNG
cygwin g77じゃ わけのわからんメモリ関係のエラー?
FTN95じゃstackoverfllow
しっかし・・・visual fortran?なら動く・・・
なぜ?
0849デフォルトの名無しさんNGNG
>>848
たぶんVisual Fortranでも /check:all オプションを付けてコンパイルすると
実行時エラーがDELL。
0850デフォルトの名無しさんNGNG
FTN95 コマンドプロンプトからなら動いた・・・
Plato3で作ったexeはoverflowするのに・・・orz
意味わからん・・・orz
0851デフォルトの名無しさんNGNG
>>850
落ちたところでデバッグしないの?
0852デフォルトの名無しさんNGNG
こういう場合ってどうなるの?
subroutinの中の話だけど

if (条件) goto 10
 文
 文
 文

10 continue
0853デフォルトの名無しさんNGNG
条件が満たされてなければ、文文文がただ実行されるだけでは?
0854デフォルトの名無しさんNGNG
条件がTrueならば?
スルーするってこと?
とんだ先のcontinueには意味ないってこと?
実際には↓みたいになってるからさっぱりわからん(TT)
昔の人はすごいな〜


if (条件) goto10

ごちゃごちゃ

if (条件) goto20

 ごちゃごちゃ

20 continue
ごちゃごちゃ
10 continue
0855デフォルトの名無しさんNGNG
>>854
if (条件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デフォルトの名無しさんNGNG
>>856
Fortranとは関係ない。
プログラミング初心者は素直にアルゴリズムから勉強しろ。
0858デフォルトの名無しさんNGNG
>>856
program 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デフォルトの名無しさんNGNG
fortran中級者向けのホームページを教えてください
0860デフォルトの名無しさんNGNG
>>859
ttp://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つめNGNG
do i=1,w

a=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
>>861
難しく考えすぎだと思います.
文字列をコピーする方法を考えてください (後ろからの方がいいです).
で,3 文字コピーするごとに ',' を入れればいいんじゃないでしょうか.

もっと簡単な方法もあるかも知れませんが.
0864デフォルトの名無しさんNGNG
>>861
数値を文字列に変換する方法がある。
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
>>864
焦点がずれてるよ.
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デフォルトの名無しさんNGNG
intel fortran compiler for linux 8.1を使って
NCAR Community Atmospheric Model (CAM3.0)を使うとき
gmakeして
undefined reference to `history_mp_fincllonlat_'
というエラーがでたらIFCを最新のversionにかえるとよい。
0867デフォルトの名無しさんNGNG
real変数に1を代入するとの1.0を代入するのって違うの??
real x
x=1
x=1.0
0868デフォルトの名無しさんNGNG
結果は同じだが余計な処理が入る可能性がある,かな?
コンパイラのオプションには,「アセンブリコードにする」ものがあるから
双方のアセンブリコードを比較することができます.
でも始めから型に合わせたリテラルを書くのがいいと考えています.

x が double precision なら「x = 1.0d0」と書くなど.
0869デフォルトの名無しさんNGNG
出力書式fmtの使い方教えてください!
0870デフォルトの名無しさんNGNG
初心者の質問で申し訳ないのですが
急にFORTRANのプログラムを使わないといけなくなったのですが、どうしたら良いのか分かりません。
どうやらMS-FORTRANで作ったそうで、実行ファイルはあっても動きません。
ソースファイルは残っているのですが、どうすれば良いのでしょうか?
よろしくお願いします。
0871デフォルトの名無しさんNGNG
Salford FTN77 Personal Edition Compiler

には、組み込み関数は入っていないのでしょうか?
乱数の生成プログラムを書きたいのですが。
0872デフォルトの名無しさんNGNG
>>870
実行ファイルが動かない原因が判らないなら、ソースをコンパイルしても動かない確率が高いな。
どう動かないのか詳しく書かないと全然分からない。動かないなら、エラーメッセージなんかが出るの?
0873デフォルトの名無しさんNGNG
>>871
組み込み関数は入ってますが、乱数生成ルーチンは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
>>873
どうもありがとうございます。
もう少し勉強してみます。
0875デフォルトの名無しさんNGNG
>>869 質問が曖昧すぎるが、外し気味に答えてみるw

write(*, fmt='(a)') 'mako-tan sama'
write(*, '(a)') 'kako-tan sama'
print '(a)', 'aiko-tan sama'

みな同じこと。コンソール出力。

fmt=は省略可。文字列の中身はFORMAT文中に書く物と同じ。
文字列は文字定数である必要はなく、変数であってもよい。
つまり出力データ毎にフォーマットを動的に変えるという荒技も出来るがバグの元。
0876デフォルトの名無しさんNGNG
>>875
曖昧な質問なのに丁寧にありがとうございました。
0877デフォルトの名無しさんNGNG
Visual Fortranで3次元の高速フーリエ変換をしようと思っています。
ISMLライブラリを使ってみたのですがどうも結果がうまく出ません。
80*80*80の立方体を変換したいのですが要所だけを以下にコピペします。
結果は全ての座標が0になります。
どこがおかしいのでしょうか?

USE NUMERICAL_LIBRARIES
・・・
CALL FFT3F(80,80,80,GC1,80,80,GC2,80,80)
0878デフォルトの名無しさんNGNG
サンプル数が2のべき乗に制限されてるとか
単に多すぎるだけとか。
何なら16x16x16 ぐらいで試してみそ。
0879デフォルトの名無しさんNGNG
最適化のレベルによって計算結果がおかしくなってしまう場合
最適化しても同じ結果になるようにソースを書き換えるのか
最適化しないオプションを指定してこんぱいるするのか、どっちが基本でしょうか。
0880デフォルトの名無しさんNGNG
最適化したら結果がおかしくなるって・・・・コンパイラのバグじゃんそれ。
0881デフォルトの名無しさんNGNG
>>877
それだけでは要所にならない。せめて使用配列の宣言部が必要だ。
FORTRAN77だと、型のチェックと整合配列のチェックを人間がやらないといけないからだ。

一般論だが、外部ライブラリでうまくいかない場合。
1.イニシャライズのし忘れ。(配列のクリア。イニシャライズルーチンの呼び忘れ。等)
2.配列の型、サイズを間違えている。
というパターンが、多い。

今回のチェックポイントは
0.GC1、GC2は単精度複素行列になってるか?
1.GC1、GC2の大きさが、呼び出し時の引数と矛盾していないか?
2.変換前のGC1に値がちゃんと入っているか?
   (呼び出しは正しいが、0しか入ってないと、当然GC2は0だ)

>>878 の意見に関してだが、
IMSLのマニュアルを見る限り、配列サイズが2のべきである必要はないようだ。
まず小さいマトリクスで試してみよという意見には賛成だ。
0882デフォルトの名無しさんNGNG
>>881
さすがは糞言語だ。
0883デフォルトの名無しさんNGNG
>>880
intel fortran compiler 8.1なんですけどね。
CPUもintelのXEON使ってます。
0884デフォルトの名無しさんNGNG
FORTRANでの変数の型のキャストについて質問させてください。
現在、ソース中で、

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デフォルトの名無しさんNGNG
基礎的Fortran文法のまとめ
http://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
0887884NGNG
>885,886

ありがとうございます。
おかげさまで解決いたしました。
0888デフォルトの名無しさんNGNG
はじめまして。どうしても分からないのが2つ。
1+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デフォルトの名無しさんNGNG
>>888
Fortran90だと再帰呼び出しが使えるが、FORTRAN77だと使えない。
どちらが対象かで難易度がずいぶん変わってくる。特に2番目。
どっちかな?
0892デフォルトの名無しさんNGNG
>>890
じゃあ,記号の意味をFortranに教えればいいよね.
0893877NGNG
だめです。
16*16*16でやってみましたが結果は全部0になります。
変数は全て正しい型で宣言しています。
少しいじくって2次元のFFTではうまくいったんですがお手上げです。
便乗質問ですが、
今回の3次元FFTはそれ自体が目的ではなく他の計算の確認のためです。
3次元の立方体で特定方向に各配列の要素の和をとって2次元配列を作ります。
その2次元配列をフーリエ変換しフーリエスペクトル(実数部の二乗と虚数部の二乗の和)を求めます。
数学に疎いのでよく分かりませんがスペクトルのイメージは上下左右対称のはずらしいですが
私の作ったコードでは正確に対称にはなりません。
3次元FFTはコードが正しいかどうかの確認のためです。
しかし、私は任意のイメージのフーリエスペクトルが対称型になることがいまだに理解できないのですがどうなのでしょうか?
0894デフォルトの名無しさんNGNG
フリーのVisual C++を使おうとしているWinプログラマ初心者です。 あるソースを
落としてきてビルドしようとしているのですが、途中でNMAKEが以下のエラーを
吐きました。
NMAKE : fatal error U1071: cycle in dependency tree for target 'c:\Documents'

ファイルはC:\Documents and Setting\washi\..... の下に置いているのですが、
ファイルパス名に空白が入っているのをNMAKEがチョチョギっているような
気がします。 どう対処したらよいのでしょうか? 
08951/2NGNG
>>890 参考にしてちょ!
MODULE 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/2NGNG
!==================================================
PROGRAM 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デフォルトの名無しさんNGNG
>>893 これで試して味噌。 
PROGRAM 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デフォルトの名無しさん NGNG
2問を書き込んだ者です。
FORTRAN90を使っています。
記号の意味をFortranに教える、というのは、どういうことなのでしょうか?
a(4) = (/ '*', '+', '-', '/'/)で、
a(1) = * のようなことではダメですよね。
文字を計算式に使うと変なことになってしまいますし、
お手上げの現状なのですが...
0899デフォルトの名無しさんNGNG
>>898
>記号の意味をFortranに教える、というのは、どういうことなのでしょうか?
その書き込みは無視したほうがいいw

CHARACTER :: a(4)
a(1) = '*'
なら文法にかなっている。

0900884NGNG
昨日、型変換について質問させていただいたものです。
もう一点、お聞きしたいことがあるのですがよろしいでしょうか。

比較演算子に関してなのですが、現在、

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
>>900
結論から言うと、INT型にはしないほうがいい。変にいじらないほうがいい。
それは、エラーではなくウォーニングだろう。コンパイラによっては、この種の警告を与える。

浮動小数点の実数の場合、イコールを取る意味が曖昧なので注意しろと言ってる。
その辺の事情が分かった上でイコールを取るなら問題ない。
移植しているのならば、とりあえずプログラムを書いた奴を信じるしかないw
これはFORTRANに限らず、浮動小数点一般の問題だ。

”その辺の事情”を知りたいなら、桁落ちとかで検索して浮動小数点の誤差について調べてみるとよい。
たぶん実数ではイコールを取る意味が無いとか色々書いてあるはずだ。
0902デフォルトの名無しさんNGNG
>>900
a = 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あるのかな?NGNG
プログラムの実行時間を測定したいときはどういう関数を使えばいいの?
0904デフォルトの名無しさんNGNG
>>903
Fortran95から CPU_TIME という関数が用意されている。
大概のFortran90コンパイラでは、規格先取りで採用されている。
これ以外にはDATE_AND_TIMEという時計サブルーチンが存在している。これは90の正式規格。

FORTRAN77時代は、FORTRANの規格としては時間がらみの関数・サブルーチンは存在しない。
しかし、各ベンダーが用意した固有のルーチンが大抵用意されている。
マニュアルのお終いの方の非標準関数のあたりをあさってミソクソテクニック。
0905903NGNG
現時刻を得る関数もあるのかな?
プログラムはC言語から始めたので何とも使い勝手が悪く感じるんだが,
気のせい?
0906デフォルトの名無しさんNGNG
>>905
気のせいではない。計算速度の速さを除いては、糞言語ですから。
0907デフォルトの名無しさんNGNG
>>905
サブルーチン DATE_AND_TIME
西暦と時刻を返す。

FORTRANはバッチ処理で実行されることが多い。
TSS処理が前提のC言語とは歴史的な事情が違っている。
0908884NGNG
>901

そうです、ウォーニングでした。
なるほど、実数だと厳密にイコールであるという意味が曖昧なのですね。
感覚的にですが、なんとなくわかる気がします。
非常に勉強になります、ありがとうございました。


昨日から色々と作業しておりましたが、
皆様のおかげで先程なんとか希望の結果が得られるプログラムができました。
どうもありがとうございました。
0909デフォルトの名無しさんNGNG
#include <stdio.h>
void 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の続きNGNG
         for(;;) {
n = 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デフォルトの名無しさんNGNG
エクセルでやれ。
0912デフォルトの名無しさんNGNG
>>909
http://www.unics.uni-hannover.de/rrzn/gehrke/c2f.html
0913デフォルトの名無しさんNGNG
>>903
system_clockっていうサブルーチンがなかったけ?
intelとpgiにはあるけど規格外かな.
0914デフォルトの名無しさんNGNG
>>913
あります。Fortran90の規格です。
でも、CPU消費時間ではなく、ある原点からの積算の秒数を返していたと思います。

ずーーーと1,2,3・・・・と指折りしながら数えてる律儀なサブルーチンさん!
0915909NGNG
>>912

すいません。どれをダウンロードしてどう使えばいいか解らないです・・・。
教えてください。
0916デフォルトの名無しさんNGNG
>>915
c2f.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
>>917
そういう処理なら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"
}
}
0919909NGNG
>>916

おかげで何とか完成できました。
丁寧な解説有難う御座います。
0920デフォルトの名無しさんNGNG
>>918
ありがとうございます。
しかし、残念ながらFORTRNしか分からないものでして・・・
せっかく教えていただいたものも、理解できない状況です。
申し訳ありません。宜しくお願いします。
0921デフォルトの名無しさんNGNG
>>920
Fortran が使えて awk が使えない人はいないから,
とりあえず使い方を調べてみませう.
Fortran を捨てたくなるかもね.
awk で扱うのが自然な問題は awk でやるのが一番楽です.
0922デフォルトの名無しさんNGNG
宿題は他にないのか?
0923デフォルトの名無しさんNGNG
>>917
その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デフォルトの名無しさんNGNG
学生さんはもう冬休みか。 いいねぇ。
0925デフォルトの名無しさんNGNG
あんたも昔は学生だっただろ
0926デフォルトの名無しさんNGNG
てすと
0927デフォルトの名無しさんNGNG
マターリいこうや、ロートル諸君!
0928KGNGNG
Matlabのmファイルをfortranのソースファイルに変換するツールをご存じの方が
いらっしゃれば教えて下さい。
0929デフォルトの名無しさんNGNG
google ですぐに見つかるやつは違うの?
0930KGNGNG
googleで見つかるやつは,まだツールが公開されていないそうで...
0931fortranNGNG
エラーについて質問させてください><
forrtl:error (75): floating point exception
0: __FINI_00_remove_gp_range[0x3ff81a6de38]
・
・
・
実行するとこのようなエラーが出てしまうのですが・・・
0で除算していることは決してないのでオーバーフローなのかあぁ・・・
0932デフォルトの名無しさんNGNG
>>931
OSやコンパイラの種類もわからない
何をしようとしていたのか、ソースもない
そんな状態で何を答えろと?
0933デフォルトの名無しさんNGNG
>>932
禿同
まぁ、あとは、sqrt(a)やa**3でa<0とか、
0934デフォルトの名無しさんNGNG
>>931よ、お前が聞いているのはこの質問と同じかな?
ググルといっぱい出てくる。
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.

0935877NGNG
すいません。うえの方でFFTについて聞いたものです。
>>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
0936877NGNG
CALL FOU100(N,G,GRI)

DO 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
0937877NGNG
SUBROUTINE FOU100(N,G,GRI)
!
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)
0938877NGNG
DO K=1,N
DO 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デフォルトの名無しさんNGNG
精度統一しようよ
0941デフォルトの名無しさんNGNG
>>937
DO 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
0942935NGNG
>>939
長くなってすいません。

>>941
前任者からもらったコードを改造して、さらにここに貼るときにいろいろ
はしょったので変なところが多いかもしれません。

>GC1(:,:,:)=GG(N,N,N)+0.0i=0.0+0.0i
がなぜだが分からないのですが教えていただけないでしょうか?
0943デフォルトの名無しさんNGNG
>>942
>>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
FORTRAN90勉強するためによい参考書があったら、教えてください
入門と専門書の中間くらいのものがあれば、助かるのですが。。。。
主に科学計算に使います。
0945デフォルトの名無しさんNGNG
過去の遺産をのぞいた場合fortranを科学技術計算に使用するアドバンテージって何かあるんでしょうか。
0946デフォルトの名無しさんNGNG
他の言語に比べて計算が早い。
私の御師匠さんも以前はC言語で書いていておられたが
Fで書いてみると20%近く早くなったっていってた。

0947デフォルトの名無しさんNGNG
>>946
そんなばかな
0948デフォルトの名無しさんNGNG
>>945
Fortran90以降なら配列演算
FORTRAN77以前は・・・ないな
0949935NGNG
>>943
ありがとうございます。
OTL・・・
0950奈菜氏NGNG
FORTRAN77でニュートン法でこれを解けって、宿題が出ました。
助けてください・・・・2(X*X)−5X−3=0です。
とても、おっ馬鹿なんで・・・

0951デフォルトの名無しさんNGNG
>>950

FORTRAN 以前の問題。ここで聞くことではないと思うのだけど。
0952デフォルトの名無しさんNGNG
>>950
正直、氏んだ方がいいですね。
0953897NGNG
>>935
すでに >>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デフォルトの名無しさんNGNG
3つのプログラムをおしえてください。

1、ガンマ乱数の生成プログラム

2、面積等分割のプログラム

3、適合度検定のプログラム
0955デフォルトの名無しさんNGNG
>>954
スレ違いですよ。
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0956デフォルトの名無しさんNGNG
fortran90を使って、外部のファイルから1行づつ値を読み込むのってどうしたらいいのでしょう。

a1 b1 c1
a2 b2 c2
a3 b3 c3
...以下続く
みたいなファイルがあって、そこから
まず一行目のa1とb1とc1だけを使って計算した結果を出力して、
次に二行目のa2とb2とc2だけを使って計算した結果を出力して…というのをひたすら繰り返したいのですが。

超素人質問ですいません。
よろしくお願いします。
0957デフォルトの名無しさんNGNG
doループでread文をぶん回せ。
0958デフォルトの名無しさんNGNG
ループでぶん回すとき、一行づつ読み込め見たいな命令っていらないのですか?
do i=1,N
read(*,*) a, b, c
end do
としとくと(文法自信ないですが。)i=1で最初の3つ(a1,b1,c1)を読み込んだら、
i=2の時は勝手にその次の3つ(a2,b2,c2)を読み込んでくれるのでしょうか??

ってか、自分で試してみればいいわけですね。
やってみます。
0959デフォルトの名無しさんNGNG
LAPACKの質問はここでOK?
0960デフォルトの名無しさんNGNG
>953
そのFortran中上級者と思っている人間にかぎって、
スパゲティなソースを量産しているFortranの現状。
全部が全部といいませんが。
0961デフォルトの名無しさんNGNG
>>960
そりゃしょうがないよ。
スパゲッティーが良くないとは、ALGOL、PASCALの時代から計算機学科の人々が言い続けてきたが
実際問題としてFORTRAN90以前は言語の特質として、原理的にスパゲッティーでないプログラムを
書くことは不可能だったんだから。

そもそも、FORTRAN界にはスパゲッティーなプログラムが良くないという価値観は存在しない。
自分で書いて、自分で使う、他人が使うことは想定しない、という古い時代の価値が保たれていて、
プログラムそれ自体が完成価値を持つという、計算機学科系の価値観とは深淵の隔たりがあるもの。
0962デフォルトの名無しさんNGNG
>>961
fortran コードを吐く fortran みたいなアプローチがあればいいんですよね.
インラインをうまく制御できたり強力なマクロがあったりという感じで,
計算コストを上げずに可読性を良くできる仕組みがあれば.

1, 2 文字の変数名が良く使われるのは,
紙に書いてある数式を写したからじゃないでしょうか.
下付き文字やギリシア文字がうまく書ければ
1, 2 文字に固執されないと思います.

TeX の数式がそのまま貼れて,しかも計算コストを考えて式変形してくれたら
いいですよね.maxima にあったような気もしますが,
これを言語仕様に含めたり.
0963デフォルトの名無しさんNGNG
ratfor使えばFORTAN77でもある程度スパゲッチィなソースに
なるのは避けられるけれど、
FOATRAN中上級者はratforを使うのは邪道だと思っているような希ガス。

ちなみに漏れも暗黙の型宣言に忠実じゃない香具師(´・ω・`)
0964デフォルトの名無しさんNGNG
いやな時間に目が覚めた。

Fortran77で、
暗黙の型宣言を守り、IMPLICIT NONE。
COMMONはクリティカルなデータのみで、直交性を考えてやる。
GO TO 文はbreak用途のみに使う。
DO~END DOを使い、DO ~ CONTINUE は使わない。
WHILE文は使う。
無駄なFORMAT宣言は避ける。(WHITE(6,'(A)'
プリプロセッサも使う。
分岐が多くなってきたら、コメント付けで意図を明確に。

これやるだけで、かなり可読性が増すと思うんです。
私の指針ですが。

逆にこういう気遣いができないFortran使いは許せぬ。
その、ぐちゃぐちゃした物を動かんからデバッグしてといわれても。
良く読んで、理解しろといわれても。
・゚・(ノД`)・゚・。
0965デフォルトの名無しさんNGNG
>無駄なFORMAT宣言は避ける。(WHITE(6,'(A,3F8.3)'))
0966デフォルトの名無しさんNGNG
90を使い,module文で2次元の定数配列を宣言したい.

integer,dimension(2,2) :: IAA = (/ 1,2,3,4 /)じゃだめなの?

0967デフォルトの名無しさんNGNG
>>966
Fortran90 の場合、多次元配列は

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
>>967
できました.
reshapeってのがあるんですね.
早速の回答 thxでした.
気持ちよく新年を迎えられそうです.
0969デフォルトの名無しさんNGNG
連立一次方程式(未知数3つ)解くプログラムを書きたいのですが、
どっかにわかりやすく解説してくれてるページないっすか??
ぐぐってみたりしたのすが、よくわからん。。。
別にそんなに大した計算量じゃないし答えさえ出ればいいから、計算コストとかアルゴリズムの美しさとかどうでもいいんだが。

ちなみに係数にランダムに0が入ってきてしまうのですが、いちいち場合わけしないとだめなんですかね??
よろしくです。
0970デフォルトの名無しさんNGNG
>>969
自分で作りたいというわけでも無さそうですので,
matlab, octave, scilab, R, などをお勧めします.
多くの言語のライブラリには行列を扱うものがありますので,
そういうのでもいいと思います.

自分で作るのでしたらすみません.
0971デフォルトの名無しさんNGNG
>>969
未知数3なら、公式をプログラムすればいいんじゃないの?
0972デフォルトの名無しさんNGNG
>>970 ありがとうございます。
データ解析で一時的に式を解かないとならないので、新たにほかのを使うのもちょっと・・・。
それとかろうじてかじったことがあるのがfortranだけなので。
条件をランダムに変えたときの解の一覧をずらーっとだしたいのでfortranでも使うかと思った次第。

>>971 ありがとうございます。
とりあえず、
ttp://astr-www.kj.yamagata-u.ac.jp/~shibata/kbg/ludecomp2000.html
の一番下のやつをほとんどコピペで最初の1〜15行目にいろいろ値が入るような感じでカスタマイズして
やってみます。
0973デフォルトの名無しさんNGNG
>>972
google で `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デフォルトの名無しさんNGNG
そろそろ次スレ要る?
0975デフォルトの名無しさんNGNG
>>973
ほんとだ。ありがとう、エロ異人。
なんか簡単そう。
でも、係数いろいろかえるの自動でやるのどうやるんだ??
ちょうどf95ちゃんがubondを叫んでるところでした。
0976デフォルトの名無しさんNGNG
い、いんすとぉるができなひ。。。
cygwinで動かそうとすると[プロシージャエントリポイント_impure_ptrがダイナミックリンクライブラリcygwin1.dllから見つかりませんでした。]と怒られる。。。

すいません、そろそろすれ違いですね。よそ行きます。
って、どこいきゃいいんだ???迷子になったら戻ってきます。
0977デフォルトの名無しさんNGNG
WindowsならMaTXや(仮称)十進BASICの方が簡単かも。
0978デフォルトの名無しさんNGNG
えーと、なんか難しいので、
ふつーに線形代数の教科書の行列式そのまんま書き下してしまいました。
しかもサブルーチン等一切使わず思いっきりすぱげっちです。
が、、、なんか、簡単にできた。
やっぱり新しいものを付け焼き刃でやれるだけのテクがないっす。
0979デフォルトの名無しさんNGNG
EXCELじゃだめだったの?
0980デフォルトの名無しさんNGNG
30万通りくらい計算したかったので(条件分岐もいくつか入れて)、僕のexcelテクじゃ無理でした。
最初の3000通りくらいまではコピペでexcel使ってやったんだけど。
結局出力ファイルのサイズがx,y,zの組をtextで出力しただけで700MBとか超えてたから
よっぽどがんばってマクロとかお勉強しないとexcelじゃ無理だったのではと。
0981デフォルトの名無しさんNGNG
Excel って Microsoft の?
matlab 系より手軽に数値計算しやすいならすごいことさね.

>>980
> 結局出力ファイルのサイズがx,y,zの組をtextで出力しただけで700MBとか超えてたから

計算結果をテキストで出力して,それからどうするつもりだったの?
0982デフォルトの名無しさんNGNG
その結果に対してさらにいろいろ条件つけてどんどん絞って最終的には数組にする。
です。
もちろん700MBは条件つける前の結果だから、そんなものはすぐに破棄しましたが、
条件つけるためには一度は700MB分計算しないといけなかったのです。
0983デフォルトの名無しさんNGNG
FORTRANの歴史
http://members.at.infoseek.co.jp/kitaurawa/fortran.html
レス数が950を超えています。1000を超えると書き込みができなくなります。