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

■ このスレッドは過去ログ倉庫に格納されています
2012/08/16(木) 20:58:00.31
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

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

●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/

●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
2012/09/15(土) 19:31:56.26
↑すまん適当言った。C と D は複素数か配列じゃないだろうか。
6562
垢版 |
2012/09/16(日) 17:07:32.38
>>64
ありがとうございます!無事解が一つのみ表示されました。
ご指摘の通りCとDが複素数で宣言されていました・・・・
それにすら気づかず、write文のせいにしていたのが恥ずかしいです。
大変助かりました!
2012/09/18(火) 19:39:09.67

すみません、質問です。

求めたい値=
(a*固定した数値1*メモ帳データx+b*固定した数値2*メモ帳データy+(1-a-b)*固定した数値1)/固定した数値1

a=1-exp(-11.88×s)
b=exp(-11.88×s)×1-exp(-11.88×t)

固定した数値1,固定した数値2,s,tはその都度自分の方で入力しようと思います。



メモ帳のデータx,yはどれも以下のような形式になっています。

1.010629 1.010828 1.011074 1.011356 1.012
1.010916 1.012412 1.014304 1.016474 1.012
1.011208 1.013878 1.017139 1.02069 1.012
1.011433 1.014934 1.019081 1.022747 1.012
1.011525 1.015284 1.019623 1.024372 1.012
1.011341 1.014313 1.017726 1.021465 1.012

ここから何行目の何列目を指定して一つの数値を計算式に代入して「求めたい値」を算出したいのですが
可能でしょうか?
6766
垢版 |
2012/09/18(火) 19:44:05.52
すみません、追記です。

メモ帳データの数値はすべて使用して計算結果として算出したいので、
一枚のメモ帳に結果がすべて表示できる方法があったらお願いします。
2012/09/18(火) 19:50:35.33
この辺を見ておくといいよ
http://www.nag-j.co.jp/fortran/index.html
2012/09/19(水) 03:23:00.74
とりあえずファイルのデータを全部2次元配列に放り込んで
結果も2次元配列の内容を全部吐き出す感じでいいだろ。
x, y に任意の組み合わせを取るなら単純じゃなくなるが。
70デフォルトの名無しさん
垢版 |
2012/09/21(金) 20:29:19.20
プログラムの歴史を学ぼうと思って、FORTRANからやってみようと思いました。

FOTRANのバージョンとか歴史はある程度理解したんですが、
WikipediaのFORTRANの歴史に載っています所謂IBM 704用のFORTRANの最初期の形なんてのは今のPCじゃ動かないんでしょうか?
標準入出力の関係もまだなかったみたいですし、多分そもそも現代のコンピュータ上では実装できないんでしょうけど。

FORTRANの歴史
http://ja.wikipedia.org/wiki/FORTRAN#FORTRAN.E3.81.AE.E6.AD.B4.E5.8F.B2

まぁ、今は諦めまして、Linuxにgfortranを入れたとこです。


Wikipediaの項目を見てたら下記リンクにあるのが昔の正規のドキュメントかなと思っているのですが、
さすがにコンパイラはIBMのものでしょうし、見ることができないですよね。出来たら初期の高級言語のコンパイラのソースも見てみたいんですけど。まぁ、見たってきっとわかりませんがね。アセンブラなんでしょうか?機械語?

Index of /pdf/ibm/704
http://www.bitsavers.org/pdf/ibm/704/

それで、これが一番最初のFORTRANの正式なドキュメントかな?と思っているのですが、当たりですかね?
http://www.bitsavers.org/pdf/ibm/704/FORTRAN_paper_1957.pdf
2012/09/22(土) 12:09:47.77
もともとが業務用だからね。
7266
垢版 |
2012/09/24(月) 16:11:25.31
>>68>>69
ありがとうございます。
2012/09/24(月) 18:53:46.75
>>70
FORTRANの歴史を知りたいなら、Comuter History Museumをチェックしなければ
いかんがねー。
http://www.computerhistory.org/collections/fortranarchive/

たしか、バッカスのFORTRANコンパイラを作りたいと上申書みたいなメモから
あった気がする。マニュアルの類も文法書の他運用書などたくさんある。

704のエミュはなかったが、後のIBM360やIBM1130のエミュは存在している。
その上でFORTRANIVは動いている。FORTRANIIも動いていたかもしれない。
この時代のソフトウェアは著作権の概念がなかったのかパブリックドメインに
なっているよう。時代の進んだIBM370とかFORTRAN77のFORT VSとかのエミュはない。

昔のFORTRANのマシンコードなんかはパンチカードだか、ダンプリストだかが
うpされていた気がするので機械語レベルでは転がってる気がした。
2012/09/24(月) 18:57:59.58
エミュとかはComputerHistoryMuseumではなく、民間のおっさん達がやってる。
ググれば出てくる。
2012/09/24(月) 19:22:07.62
>もともとが業務用だからね。

もしかして“適用業務”のことかw
7666
垢版 |
2012/09/26(水) 19:24:13.20
結局、自分でプログラム組めるほど頭良くないので電卓で手打ち
でやってたんですが、エクセルでやることにしました。
フォートランは、エクセルと比べどういう計算処理をする場合に
特化しているんでしょうか?計算するんだったらfortranが一番
おすすめだそうなのでやってみたんですがチンプンカンプンです。
(>_<)
2012/09/26(水) 21:49:19.25
Excel でできる程度の計算なら Excel でやれば良し。
Excel とか無い時代の産物なので、伝統か信仰によって勧められる事が多い。
2012/10/16(火) 20:22:35.55
質問があります
FORTRANを使って連番ファイルを読み込ませるためのgnuplotのバッチファイルを書きだそうとしているのですが、writeでどうやって書き出すのかわかりません
どういうことかというと、たとえば
plot "output[i].txt" u1:2
をi=1,10でwriteで出力するとき
write(filenumber,*) "plot "output[" i "].txt u 1:2"
となるためwriteで文字を出力するために使う”と、出力する文字の一つとして扱いたい”が干渉してしまうんです。


”を文字として出力するためにはどうしたらよいでしょうか?
どなたかわかる方がいたら教えていただけませんか?
79デフォルトの名無しさん
垢版 |
2012/10/16(火) 21:27:08.31
>>78
確かにそういときどうすんだろ
考えたこともなかったわ
2012/10/16(火) 22:41:51.19
言ってる意味わからんw

do i = 1, 10
write(filenumber, '(a, i2,2, a)') 'plot "output[', i, '].txt" u 1 :2'
end do

これでどうだ?番号は 01,02,... ,10 となるが。
2012/10/16(火) 22:54:18.30
すまんこ。
>'(a, i2,2, a)')
i2.2  ↑  ピリオドな



ついでに。。。0が余計ならformatを動的に生成すればおk

integer :: i, klen, filenumber = 9
character (len = 80) :: fmt

do i = 1, 10
klen = int(log10(real(i))) + 1
write(fmt, '(a, i1, a)') '(a, i', klen, ', a)'
write(filenumber, fmt) 'plot "output[', i, '].txt" u 1 :2'
end do
2012/10/16(火) 23:03:43.98
'(a, i0, a)'
でいいんじゃないの?
2012/10/16(火) 23:35:22.01
>>82
うむ。
i0ってF2003からの機能だと思っていたが、F95から入ってたんだな。
勘違いしてたわ。
一応F95標準縛りをかけていたつもりだったので避けたが、i0 で楽勝だな。
2012/10/17(水) 00:21:39.81
>>78
思いつくものを挙げてみると...

write(filenumber, '(a, i0, a)') 'plot "output[', i, '].txt" u 1:2'
write(filenumber, '(a, i0, a)') "plot ""output[", i, "].txt"" u 1:2"
write(filenumber, '(a, i0, a)') "plot " // char(34) // "output[", i, "].txt" // char(34) // " u 1:2"
write(filenumber, '(a, a1, a, i0, a, a1, a)') "plot ", 34, "output[", i, "].txt", 34, " u 1:2"
write(filenumber, '(13hplot "output[, i0, 12h].txt" u 1:2)') i
2012/11/18(日) 12:45:02.25
バッチファイルをそのまま生成させるって頭いいな
86デフォルトの名無しさん
垢版 |
2012/11/23(金) 13:59:34.03
質問です。
配列を引数にする関数を定義したいのですが、
やり方がよくわかりません。

function FD(w)
implicit none
integer :: i
integer,parameter :: n = 10
real(8) :: w(0:n),FD(0:n)
do i = 0, n
FD(i) = exp( - w(i))
enddo

end function FD

が関数で、これをメインプログラムで使いたいのですが、
x = FD(w)
のような省略形だとちゃんと計算できるんですけど、
do i = 0, m
x(i) = FD(w(i))
enddo
みたいに配列を明示しようとすると
配列の形状が準拠していません。
とエラーが出ます。

()を省略しないで書く方法はないですか?
2012/11/23(金) 16:37:12.25
>>86
w(i)は配列ではなく配列の要素(1個の変数)ですので
当然エラーとなります。
do i = 0, m
x(i) = FD(w(i))
enddo
の3行を、
x(:) = FD(w(:))
にすれば()付きの書き方にはなります。
2012/11/23(金) 18:30:14.20
>>87
回答ありがとうございます。
まだ、違いがよくわからないのですが
例えば、

do i = 0, m
x(i) = FD(w(i)) + y(i+1)
enddo

とか

do i = 0, m/2
x(i) = FD(w(i))
enddo
do i = m/2, m
y(i) = FD(w(i))
enddo

のようなことは関数の場合、出来ないのですか?
(:)だと出来ることが制限されてしまうような気がするんです。
2012/11/23(金) 19:46:12.45
>88

x(0:m) = FD(w(0:m)) + y(1:m+1)

とか

x(0:m/2) = FD(w(0:m/2))
y(m/2:m) = FD(w(m/2:m))

となるかな
2012/11/24(土) 14:54:58.79
それか関数の方を 配列じゃなくて 数値を引数とするように変更するかだな
2012/11/26(月) 19:24:40.40
fortran95 以降になるが、ELEMENTAL属性を使えばできる。
これはスカラーに対して定義しておくと、配列も受け付けるというもの。
ただし副作用のない PURE な副プログラムな必要がある。

elemental pure real(8) function FD(w)
implicit none
integer :: i
real(8), intent(in) :: w
FD = exp( - w )
end function FD

これでメインルーチン側で
x = FD( w )
と呼んでも
do i = 1, 10
x(i) = FD( w(i) )
end do
と呼んでもよろしい。
PURE が何かはマニュアルを見るか、鋼鉄天使くるみPUREを見る事。
シスタープリンセスREPUREでもいい。
2012/12/01(土) 20:48:26.42
ELEMENTAL属性ってのは初めて聞いた 勉強になります
兄ぃありがとう
2012/12/02(日) 15:08:21.56
(ELEMENTALはPUREでもあるから強調しなくてもいいんだけどな…
94デフォルトの名無しさん
垢版 |
2012/12/02(日) 16:57:51.30
x(:)=fd(w(:))
x=fd(w)

って同じ?
: つけとかないと配列であることを
忘れちゃうので
つける習慣にしているけど。
2012/12/02(日) 17:13:25.97
同じだけど、括弧をつけて配列であることを明示したほうがいいね
2012/12/03(月) 19:08:16.44
>>93
どっこい、それがF2008でELEMENTALだがI/Oを許すという風になったので、
ELEMENTALだからと言ってPUREとは言えなくなったのだよ。
妹たちの未来を考えて、ここはPURE。

>>95
これもF2003からは同じではなくなったのだよ。
RAEL,ALLOCATABLE :: a(:)
REAL :: x(100)
a = x
F2003では代入時に割り付け配列は、(再)割り付けされる。
a = x(1:10)
とすると、a はサイズ100から10に再割り付けされる。
a(:) = x(1:10)
の時は、元のサイズ100のまま代入される。

抽象度の高い記法の方が良いのだから、括弧をつけない方が正しいと思う。
F77からの移行期には、括弧を書いて置く方がわかり易かったのは理解できるが
数学だって行列を記号1個で書いて間違わないのだからだいじょぶDEATH
2012/12/03(月) 23:06:44.99
(キリッ
2012/12/04(火) 13:45:46.84
>>96
2003使ったことないけど、うーんと、
要は allocatable な変数は
allocate() 使わなくても、
: 無しで左辺において、
固定サイズ(か既に大きさの確定した配列)が右辺に来る代入式で
随時 deallocate して再び allocate した事にする、
ということなのかな?

・・・・すくなくともワシには危険な香りがするw
2012/12/04(火) 13:48:18.15
ふとおもったけど、文字列で
mojiretsu='abcdefg'
write(*,*) mojiretu(2:4)
で bcd が表示できる例のように
文字列の番地管理の表記法って77からある(とおもうw)けど
これってかなり時代先取りだよね。偶然なのか
規格策定の時にすでにベクトル表現の思考が始まっていたのか
しらないけど。
2012/12/04(火) 17:50:34.81
>>98
2003ではおっしゃる通り、サイズの違う配列が右辺に来ると、勝手にDEALLOCTAEして
右辺のサイズにALLOCATEし直して代入する。
Intel Fortranではデフォルトのオプションでこの機能が切られている。

最近の言語は動的なんちゃらで、みんなそんな感じだから流行り?
危ないけど便利。

>>99
90からはwrite(*,*) 'abcdefg'(2:4)と定文字列?でもできるぞ。
2012/12/05(水) 13:45:40.15
へえ、しらんかった。
でも、どういう場面でつかうんだろう?

i=2
write(*,*) 'shit'(i:4)

とか、・・・英語複数形 s をだしたり隠したり、かな?
でも正直なところ、なくても困らんな。
10288
垢版 |
2012/12/05(水) 18:22:09.77
88です。みなさんありがとうございます。
お礼が遅くなってすみませんでした。
まだ難しくてよくわからないので、素直に括弧つけます。
2012/12/06(木) 14:46:49.96
>>100 最近の言語は動的なんちゃらで、みんなそんな感じだから流行り
だろうね・・・でも量が多いと遅くなりそう。
そういう動的なことは Interactive な言語処理系でやればいいことで、
やることの量がだいたい前もって決まっていることを
なるべく早くたくさんがーっと処理したい、というのが Fortran 人wなので
・・・でもこのままでは老害って言われるし・・・うーん、むつかしいね。
2012/12/06(木) 15:58:43.84
ヤングの諸君を引き寄せるには、ある程度流行りの機能を入れないとまずいんだろう。

それに動的自動割り付けは、FUNCTIONで不定個数を返せるようになったので、
それを受け取るには無いと困るというのがあると思う。

REAL :: x(10)
REAL, ALLOCATABLE :: y(:)
CALL RANDOM_NUMBER(x)
! f90
ALLOCATE( y( COUNT(x > 0.5) ) )
y = f(x, 0.5)
PRINT *, y
! f2003
y = f(x, 0.5)
PRINT *, y

CONTAINS

FUNCTION f(x, a)
REAL, ALLOCATABLE :: f(:)
REAL, INTENT(IN) :: x(:), a
f = PACK(x, x > a)
END FUNCTION

END
この例はあらかじめ必要な配列の大きさが分かるが、計算してみないと
必要な配列の大きさが分からない場合は、大きめに取っておくか
二回計算する必要がある。
2012/12/06(木) 17:15:11.18
可変長文字列も動的割り付けで可能になった。
program varchar
implicit none
character(len = :), allocatable :: text
text = 'automatic allocation'
print *, text
text = 'variable length text'
print *, text
stop
end program varchar
2012/12/06(木) 17:49:33.18
長さ同じだぞw
2012/12/08(土) 17:47:52.98
モジュール内で定義したグローバル変数を
プログラム内で変更しないようにするにはどうしたらよいでしょうか?
(変更があったらエラーを吐くようにしたい)

parameter属性を付けるのが近いと思いますが、
そのグローバル変数はファイルからreadで読み込みます。
つまり、最初に一回だけファイルで読み込んで、
その後は変更せずに、各サブルーチンで参照できるようにしたいです。
2012/12/08(土) 23:34:47.37
>>107
ttp://www.nag-j.co.jp/fortran/fortran2003/Fortran2003_4_3.html
2012/12/10(月) 21:50:33.71
F2003でいいならprotected属性だな。
F90だったら、privateで隠匿して、値を使うところでは関数・サブルーチンで
値を取ってくるかな。
2012/12/11(火) 12:57:04.37
protected つかわない、つかいたくない、つかえない
という時には他には intent(in) をあちこちに配置して
いちどどこかプログラム内で初期値設定した後は変えないようにする、って
手もあるけどこれは107さんの要望とはマッチしないなぁ。

protected がいちばん素直だとおもう。
2012/12/15(土) 21:23:37.92
もりあがってますね
2012/12/16(日) 16:37:19.87
月に一個くらい質問というかお題投下があって
2週間くらいで20スレいく程度で
まったりと
2012/12/18(火) 04:20:26.48
f90から外部モジュールでf77を呼べますか? つまり固定形式で書かれたコードを外部モジュールで呼べるかってことなんですけど
2012/12/18(火) 14:41:34.63
ん、コンパイル別々にしてリンクすればいいとおもうよん。

f77の継続行記号(6ケタ目の空白以外の任意文字)を継続前の行の最後の & に置き換える
だけで、原則f77はf90で解釈できるので、
そこだけいじって同じファイルに追加しちゃうという手もあるけどね。
2012/12/18(火) 14:41:50.10
呼べる。
module f77module

contains
.....
 ここにサブルーチン、関数ならべる。
....
end module f77module

固定フォーマットの独立したファイルにして分割コンパイルすればよし。
2012/12/19(水) 01:27:05.28
旧形式のコードて今でも普通に書かれてるの?
仕方なく再利用してるだけで、新しいコードは全部新しい文法で書くべき?
2012/12/19(水) 13:23:10.08
> 旧形式のコードて今でも普通に書かれてるの?
わしゃバリバリ固定書式で書いている。
左7つ開けとかないとムズムズするのでw
> 新しいコードは全部新しい文法で書くべき?
書くべきだとおもう!
思うが・・・・
2012/12/19(水) 17:31:47.38
>>115
おおー、ありがとーございます。
119デフォルトの名無しさん
垢版 |
2012/12/20(木) 00:16:24.69
>>114
ということは、その処理をすれば固定形式と自由形式の混在したソースコードも
コンパイルできるということですか?
2012/12/20(木) 00:56:53.25
新しい文法使ってもそれはそれで保守できるかという

自由形式として解釈できない固定形式の文法が継続行の扱いくらいかと
2012/12/20(木) 18:26:13.33
素直に固定形式のファイルと自由形式のファイルと分けた方が良いと思うズラ

f77時代は1個のファイルにまとめた方が、引数チェックや最適化のメリットが
あったが、f90以降は、MODULEとか使えば、分割コンパイルにそれほど害はないズラ
2012/12/21(金) 15:22:10.79
インテルだと
ifort -ipo
でファイルがバラバラでも最適処理してくれるよね。
2012/12/22(土) 20:57:03.97
コンパイラが偉い
2012/12/23(日) 16:26:05.54
>>122 ifort -ipo
インテルの中に
はじめの一歩の
母ちゃんのファンがいるに違いない
2012/12/25(火) 20:09:46.90
年内にインテルFortranの更新来ないのかな?二か月に一回の周期来てんだが。
block..end block を早く入れて欲しいわ。
たまに loop index を局所的に確保したい。頭部の宣言部が重くなりがち。
126デフォルトの名無しさん
垢版 |
2013/01/04(金) 12:57:56.98
下記のようなループの外でopenしてループの中で書き足していくプログラムを書いているのですが,
ifortでコンパイルした場合,実行の途中でもファイルが更新されていくのですがpgiでコンパイルした場合はプログラム終了まではファイルが更新されず,
プログラム終了時に全部書き込まれます.pgiでコンパイルした場合でもプログラムの途中で適宜ファイルが更新されるようにできるのでしょうか
open(1000, file='data.dat')
do j = 1, N
write(1000, *), j
enddo
close(1000)
2013/01/04(金) 16:35:30.00
fortran2003のFLUSH命令を使え。
128デフォルトの名無しさん
垢版 |
2013/01/04(金) 17:18:02.62
>>127
うぉー!ありがとうございます
2013/01/09(水) 11:54:21.56
linuxでfortran 77のコンパイラってありますか?
gfortranというのを使うらしいのでそれをインストールして試したのですが知人に貰ったfortran 77のコードがコンパイルできませんでした
2013/01/09(水) 12:25:08.67
>>129
gfortranは77に対応していません。

フリーってことでおk?
fortran77対応のフリーのコンパイラはg77が有名かな。
linuxならintel fortranもnon commercial版になるけどフリーであったはず。
研究や企業での利用はできないから注意。

個人的にはfortran77をいつまでも使っていないで、
90に書き換えて、折角インストールしたgfortranを使った方が良いと思う。
書き換え方は拡張子を変えるのと、改行の&ぐらいでとりあえずは動くでしょ
2013/01/09(水) 12:36:06.11
>>130
g77でコンパイルできました
ありがとうございます
2013/01/09(水) 17:25:39.34
gfortran って f77 コンパイルできないの?
f90 は f77 完全包括しているし、廃止事項をホントに廃止している
処理系はめったにないからオプション変えれば行けるんでね?
誰かおしへて。
133デフォルトの名無しさん
垢版 |
2013/01/10(木) 00:32:04.71
はじめからコードを倍精度で書くのと、コードは単精度でかいて倍精度はコンパイラのオプションに任せるのってどっちがやってる人多いのかな。
後者のメリットはコードがすっきりすることくらいか。
2013/01/10(木) 18:29:17.78
AUTODBLは、べた書きの定数の桁がどう扱われるのかよく分からんとか
微妙な精度の問題が気になってIMPLICIT DOUBLE(A-H,O-Z)に乗り換えたわ。

あと、昔のプログラムだと整数とからんだCOMMONやEQUIVALENCEの整合が狂って
謎な挙動をしたりするから困る。
2013/01/11(金) 01:47:02.97
>>132
g77の拡張機能つかってるコードをそうと知らずにgfortranでコンパイルしようとして互換性ないと勘違いした
136デフォルトの名無しさん
垢版 |
2013/01/12(土) 13:32:51.48
>>133
以前、同じことが気になったので、
中くらいの長さ200行ぐらいの単精度コードを手でw 倍精度化したのと、
コンパイルオプションで倍精度化したのを比べたことがある。
gfortran と ifort ではそれぞれで
実行バイナリが冒頭の一部分(コンパイル時刻?)以外は同一だった。
なので自作コードだけなら、違いはないか気にならない程度だとおもう。

third party library で
単精度と倍精度でサブルーチン名が違う場合があるので
その場合にどうなるか、はしらない。
137デフォルトの名無しさん
垢版 |
2013/01/12(土) 13:34:36.19
あと、OpenMP で並列化したやつもまったく同じだった。

MPI で並列したやつはまるで駄目だったので
これは泣く泣く手で倍精度に揃えたw
2013/01/12(土) 14:57:23.92
third party というかソースのない、かつ組み込みでない関数/サブルーチンは
変換できないし、規定されていない方の値を渡すと意味不明な挙動になるぞ。

なお対応する interface 定義が提供される module を use して総称名で呼ぶと
コンパイル時に型にあった引数定義のサブルーチンが選ばれるようになる。

MPI はこういうトリックとは関係なく、1要素の大きさを渡すあたりに工夫が要るかと。
139デフォルトの名無しさん
垢版 |
2013/01/14(月) 23:43:04.50
知り合いのMPIのコードは倍精度はコンパイルオプションに任せてたな
2013/01/15(火) 12:54:37.70
mpi_float を mpi_double に置き換えてくれるのかな?
MPI で単精度か倍精度が気になるのはその点くらいだよね
2013/02/09(土) 03:59:15.05
emacsのfortranモードについてなのですが、
変数宣言のあとに「::」をつけると、変数名に色がつくのが気に入っています。
ですが、改行すると色わけされません。
解決方法はありますでしょうか?

例、
integer :: i&amp; ←色がつく
  ,j ←色がつかない
2013/02/09(土) 04:25:01.37
>>141
継続行を使わずに2行に分けて書くのはダメなの?
integer :: i
integer :: j
2013/02/09(土) 04:40:54.90
>>142
今はそれで対応しているのですが
なんとなく、同じグループの変数はまとめておきたいなと思いまして・・・
2013/02/09(土) 08:39:18.75
>>141
emacsの事は良く知らないけれど、f90.el内の
;; Variable declarations (avoid the real function call)
の次の行を編集すれば良いのでは?
あとemacsスレの方がレスが付き易いかも知れないね
2013/02/15(金) 04:06:55.05
>>144
返信遅くなってすみません。ありがとうございました。
146デフォルトの名無しさん
垢版 |
2013/02/15(金) 11:05:49.33
ずっと、fortran90メインで書いてたけど、Javaを触ってみようと奮闘したら、
訳わからん。書籍も分厚いのに、全部書いてある本ってあるの?少し違う事を
しようとしたら、必ずネットで調べらなあかん。fortranなら簡単に書けるのに。
Javaって新しい言語だから素人にもある程度優しいもんだと思ってたのは間違い
なの?自分がアホなんだろうなあ。プロの人ってすごいなあと、自らのアホさ
加減にへこむ日々。fortranで簡単にGUI使えたらJavaなんて要らないのに。
アホな書き込みすいません。
ああああああああ、だめだw。いらつかない。いらつかない。
2013/02/15(金) 20:00:07.57
Fortranとかいうアホ言語使ってるからそうなるんだ
C++を使いなさい
C++が使えるようになればJavaなんか簡単
2013/02/16(土) 12:55:18.74
GUI 書くのはどの言語でも(記述量はともかく仕様の理解に)手間だろ…。

>>147 ベターCじゃなくて真面目にC++ならな
2013/02/17(日) 23:13:36.88
>>146
なんでやねん
俺にすればJavaの方がFORTRANよりずっと簡単に思えるぞ
C#もだいたい似てる

使うコンピュータがメインフレームならJava、WindowsならC#がGUIが一番楽
というかメインフレームにはMonoすらない事が多いし

C#はDelphiの流れを受け継いでいるのとJavaやC++の良いとこ取りしている
ある意味卑怯な(?)言語なのでGUIはこれが一番早く完成する
2013/02/21(木) 10:17:06.63
ファイルを読み込んでcharacter型の変数に代入しようとしています。

一行の文字数が不定なときはどうすればいいですか?
あらかじめ要素数をおおきめに用意する以外でおねがいします。
151150
垢版 |
2013/02/21(木) 10:35:58.49
コンパイラーはintelの9.0です

あと、intelの非商用のコンパイラってもう配布されてないんですか?
2013/02/21(木) 23:40:21.69
>>150
//www.nag-j.co.jp/fortran/FI_18.html#AUTOTOC_18_4

>>151
linux用ならnon-commercial板があると思うが
2013/02/22(金) 01:40:20.99
1文字づつ読んで改行まで貯めこむしか無いんでないかな。

IVF9.0では無理だと思うがF2003なら、可変長文字列ではなく文字配列ならIVF9でも可かな。
program test
implicit none
character :: ch
character(:), allocatable :: buf
buf = ''
do
read(9, '(a)', end = 999, advance = 'no', eor = 8) ch
buf = buf // ch
cycle
8 print *, buf
buf = ''
end do
999 stop
end program test
154150
垢版 |
2013/02/22(金) 15:25:21.78
>>152
non commerical で検索したら見つかりました
ありがとうございます

>>153
buf=buf//ch
は代入するたびにallocateしなおしてるやつですか

intel の最新版はF2003に対応しているみたいなので
そっちを使ってみます
2013/02/22(金) 17:32:58.14
>>154
>は代入するたびにallocateしなおしてるやつですか
そう。大量で負荷が重いなら大きなbufferを取るしかない。

IntelFortranの場合F2003文法はデフォではOFFになっているので
standard-semantics をONにする必要があるかも。
配列の場合
buff = [buff, ch]
で配列要素数を拡張していけるが、この場合はオプション必要。
2013/02/25(月) 11:52:14.65
実行時間を計測することはできると思いますが

使用したメモリの最大値を計測することはできませんか?

コンパイラはintelです
2013/02/25(月) 15:41:26.94
Linux なら ps をじっと眺めているw
Windows なら task manager のグラフを眺める。
2013/02/28(木) 02:15:09.70
include文やuse文で読み込むインクルードファイル、モジュールファイルを
別ディレクトリにおいてコンパイルしたいのですが、
インクルードパスの設定方法がわかりません。
コンパイラはifortです。

ifort -I***
***に絶対パスを入れたり、相対パスを入れたりしたのですがダメです。
そもそも、-I/でタブ補完しようとすると
-I/ is not found.と出てきます。
何か別の設定が必要なのでしょうか?
インクルードファイルがあるディレクトリは、カレントディレクトリの中にあります。
2013/02/28(木) 11:49:02.22
fortranの出力指定子でマニアックなものまで全部のってるサイトを教えてもらえないでしょうか

例えば0.005を↓のように出力する指定子を探しています
5.000000000000000-3
2013/03/01(金) 01:51:15.14
>>159
EN(工学用)なら3乗おきに出力できたはず
0.005なら単純に科学系のES記述子でもできる
いつから在るか知らないけど、最近の本(自分が買ったのは5年前)には普通に載ってたよ
Webサイトなら"Fortran 編集記述子"で検索すれば色々出てくるけど、
自分の環境で使える記述子を全部知りたいならコンパイラのリファレンスが一番確実
2013/03/01(金) 17:51:51.58
少しはマニュアル読めよwww
2013/03/02(土) 17:11:35.24
さっき始めたんですがわからないので教えてください
あるモジュールにサブルーチンが二つある時にこの二つのサブルーチンを違うファイルに記述することは出来ますか?
C++でいう名前空間のように分離できるか?ということです
2013/03/04(月) 19:17:12.36
名前空間を分けたいなら、まぁmoduleを二個使え。
USEでエイリアスをつけろ。

どうしてもというなら、一個のモジュールを二個のファイルに書くことは、
includeを使えば出来ることはできる。

またFortran2008で導入されるsubmoduleを使う手も考えられる。が、実装している
処理系はまだないと思う。
2013/03/06(水) 03:56:33.28
Fortranのcharacterって文字コード決まってたりする?環境依存?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況