トップページ⇒tech
992コメント455KB

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

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

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


●前スレ
くだすれ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/


●関連スレ
FORTRAN �W
http://pc11.2ch.net/test/read.cgi/tech/1163319215/
0856デフォルトの名無しさん2010/01/19(火) 21:03:41
やっぱ総称名って使わないほうがいいの?
0857デフォルトの名無しさん2010/01/19(火) 21:21:43
インテル Visual Fortranコンパイラ9.1を使っているんですが、インストール後
サンプルプログラム(sample.for)をコンパイルしたところ、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'

このため、.objファイルは出力されるのですが、exeファイルが出力されません。
よろしくお願いします。
0858デフォルトの名無しさん2010/01/22(金) 23:41:44
>>857
MSのSDK入れろ
0859デフォルトの名無しさん2010/01/24(日) 21:39:26
"2500/500"のような文字を読み込んで、
2500 / 500 = 5
を計算したいのですが、下のコードでは
"/"が読み込めないみたいです。
改善方法を教えていただけないでしょうか?

できれば、"2500"や"500"の部分を任意の桁数でできると幸いです。
コンパイラはG95です。

IMPLICIT NONE
CHARACTER :: A*5, B, C*5
REAL*8 :: Num1, Num2
PRINT*, "Input"
READ*, A, B, C
PRINT*, "A=", A, " B=", B, " C=",C
READ(A(1:), *) Num1
READ(C(1:), *) Num2
PRINT*, Num1/Num2
END

よろしくお願いします。
0860デフォルトの名無しさん2010/01/24(日) 22:12:58
>>859
FortranのI/Oでは「/」は改行を意味している。
よって文字と解釈していなのだろう。

前にもそんな事を聞いていた奴がいたような・・・

回避する方法は、わからん。
文法書のI/Oのところをじっくり読んで自分で考えてくれ。
08618602010/01/24(日) 22:27:59
>>859
しらべたw
READ文にFORMAT指定をすればよろし。
READ '(3A)', A,B,C
とすれば多分おk
08628592010/01/24(日) 22:57:22
>>860

"/"を文字として認識することができました。
ありがとうございます。
08638602010/01/25(月) 00:38:43
>>859
おk。

任意の桁数でやるには
INTEGER :: kslash
CHARACTER(128) :: text
READ '(A)', text
kslash = INDEX(text, '/')
READ( A(1:kslash - 1), * ) num1
READ( C(kslash + 1:), * ) num2

という感じだろう。TRIMでtextの尻の空白を切ったほうがいいかもしれん。
むろん任意と言ってもREALの範囲内の数だが・・
0864デフォルトの名無しさん2010/01/25(月) 00:39:52
訂正www

READ( text(1:kslash - 1), * ) num1
READ( text(kslash + 1:), * ) num2
08658592010/01/25(月) 07:35:21
>> 863

おお!重ね重ねありがとうございます。
無事に作ることができました。
0866デフォルトの名無しさん2010/01/25(月) 20:32:37
初心者すぎて笑われるかもしれませんが平面上の3点の座標で三角形つくるときの面積を求めたいのですが
当然ながらヘロンの公式でやりました
辺の長さが出てる場合であればうまくいくのですが長さの計算も入れようとするとどう座標を扱えばいいかちんぷんかんぷんで
X(I)とY(I)で1〜3まで動かしかたがわからないというか…その考えが間違ってるのかもわからないです
0867デフォルトの名無しさん2010/01/25(月) 20:57:24
>>863
Fortran兄貴降臨!いつもお疲れさまっす。

ただ、Fortranの思想的に>>859みたいなことは、やるべきではないとは思う。
perlでもpythonでもシェルでもいいが、Fortran実行ファイルを適当なラッパーで
くるむほうが、素直で良いと思う。
0868デフォルトの名無しさん2010/01/25(月) 21:11:49
>>866
君なりのソースをここに書けば直して貰えると思うよ。
0869デフォルトの名無しさん2010/01/25(月) 21:54:30
>>866
数学がわからんの?
Fortranがわからんの?

上の方も書いてるけど、わかってるところまでのソースを書くとよろし。
0870デフォルトの名無しさん2010/01/26(火) 01:04:31
>>867
Fortranでパーサー書こうぜ!
再帰があるから、77時代ほど難しくないはず・・・
0871デフォルトの名無しさん2010/01/26(火) 14:19:14
>>870
とてもうろ覚えだけど・・・
DECのVMSってFortranでかなりの部分は書かれていたような。
IMEというか英語を日本語に変えるやつは堂々Fortranだったような。
・・・とてもうろ覚えだけど。
0872デフォルトの名無しさん2010/01/29(金) 08:26:49
はじめまして。初心者ですがよろしくお願いします。
突然ですが、この問題を解ける方いらっしゃいますか。
学校の宿題なのですが、どうしても分からないのでここにきました。
お願いします。

問題こちら↓
階乗 n! を計算する関数を作成し,
順列
 n個の異なるものからr個取り出して並べる。
 このときの順列の総数をnPrとあらわす。
 nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
 異なるn個からr個取り出して組を作る。
 このときの組合せの総数をnCrとあらわす。
 nCr = nPr/r!

を計算するプログラムを作成しなさい。(問題終わり)

よろしくお願いします。
0873デフォルトの名無しさん2010/01/29(金) 18:29:35
Permut[n_, r_] := Pochhammer[1 + n - r, r]
Permut[n, r]/r!
0874デフォルトの名無しさん2010/01/29(金) 19:47:54
オープンしている特定のファイルのバッファを
フラッシュする方法はありますか。コンパイラはifortです。
出来ればクローズしないでフラッシュしたいのですが、
どうしてもバッファにたまってしまいます。
よろしくお願いします。
0875デフォルトの名無しさん2010/01/30(土) 01:06:31
872の丸投げぶりはすごいな。
途中まで書いたソースコードでもここに貼ったら?

0876デフォルトの名無しさん2010/01/30(土) 01:14:32
C/C++の宿題スレが丸投げだからその流れがこちらまで来たか
0877デフォルトの名無しさん2010/01/30(土) 10:34:15
初秋の青空を連想するくらいのすがすがしい
丸投げw
0878デフォルトの名無しさん2010/01/30(土) 16:23:48
>>874
CALL FLUSH(ユニット番号)
08798742010/01/31(日) 04:55:24
できました! >>878
ありがとうございます!
0880デフォルトの名無しさん2010/01/31(日) 21:11:44
プログラムで値を入力して計算結果を得たいのですが、結果を出力するとNaNが出てしまいます。
NaNが出力される原因だけでもいいのでわかる方いらっしゃったら宜しくお願いします。
ttp://www.dotup.org/uploda/www.dotup.org610825.txt
長いのでろだに上げました。テキストファイルですみません…
0881デフォルトの名無しさん2010/01/31(日) 21:24:10
丸投げ、流行ってるな。
0882デフォルトの名無しさん2010/02/01(月) 09:17:59
ifort -g -check all traceback
とかでNaNにかぎらず異常値が発生したらその行を教えてくれるような実行ファイルをつくってくれる
オプションがあるはずだから、マニュアルよんでみよう。
>>878
それ、よさそうだね。
ログ生成がゆっくりの場合、あるていど溜るまでディスクには書かれないから不便な事がおおかったけど、
いろいろと助かりそうだ。参考にするよ!
0883デフォルトの名無しさん2010/02/01(月) 18:38:34
へぇそんなんあったんだ
0884デフォルトの名無しさん2010/02/02(火) 00:00:51
>>880
66スタイルで何やってるかわからんなw
NUMPACK使っているところを見ると、富士通、名大・九大・京大あたりの流れか。
ライブラリ関数が無いから実行することもできないしもっと詳しく書いてくれないと誰も答えられないだろう。

まぁ定数や関数の一部が単精度のままなので倍精度にしている意味がない可能性が高い。
その辺かな?w
0885デフォルトの名無しさん2010/02/02(火) 00:04:41
>>882
FLUSHはFortran2003で導入された命令。
IntelのHELPはF2003命令がいまいち入ってなかったりしてアレなので、
文法解説書を買って学ぶがよろしい。

0886デフォルトの名無しさん2010/02/06(土) 09:14:48
>>885
そうなんだ。何年か前に g77 でサブルーチン版の flush をつかったことあがった。
今確認したら、やっぱり使えた。因みに g95 だと関数版の flush が使えた。関数
版だと戻り値でエラーチェックできるから有り難い。
0887デフォルトの名無しさん2010/02/07(日) 15:54:15
FFTについて質問させてください。

大学の講義で、離散フーリエ変換のプログラムについて勉強中です。
講義の最後に、「バイオリンの音のデータをフーリエ変換し、
フーリエ変換した結果を横軸:周波数、縦軸:振幅としてグラフ化せよ」
という課題が出ました。
配布されたデータの読み込みを試みたのですが、どう読み込ませたらいいのかが分かりません。
配布されたデータは2列で構成されており、左の列が時刻データ、右の列は音の振幅を表しています。

↓にプログラムを書きます。よろしくお願いします。
0888デフォルトの名無しさん2010/02/07(日) 15:56:08
--前半--

program fft

implicit none
!========================================================================
include "fftw_f77.i"
integer*8 ::plan
!========================================================================
!サンプリング条件の設定
!サンプリングデータ数N , aの数Ma , bの数Mb
!サンプリング間隔dt = 1/44100 [s] , サンプリング周波数 f0 = 44100 [Hz] , N, Ma, Mb
!周波数分解能df=1/(N・dt)
integer,parameter:: N=10000,Ma=5000,Mb=4999
real(8),parameter:: df=44100/dble(N) , dt=1.0d0/44100
!入力波形のデータの設定fin=100Hz
real(8) ::fin,a0
!作業用の変数
complex(8):: in(N),out(N),c(0:n-1)
integer ::i
real(8) ::t,a(0:Ma),b(1:Mb),x,y
0889デフォルトの名無しさん2010/02/07(日) 15:57:26
--後半--
!入力データの設定
write(*,*) 'Input data:'
open(unit=11,file='violin.dat')
do i=1,N
※ここが分かりません!※
end do
close (11)
!========================================================================
!ライブラリを利用したフーリエ変換(作業領域作成と実行)
call fftw_f77_create_plan(plan,N,FFTW_FORWARD,FFTW_ESTIMATE) !準備
call fftw_f77_one(plan,in,out) !実行
!========================================================================
!結果の変換
c(0:N-1)=out(1:N)
a(0)=c(0)
a(1:Ma)=dble( c(1:Ma)+c(N-1:N-Ma:-1) )
b(1:Mb)=dble( (c(1:Mb)-c(N-1:N-Mb:-1))*(0.0d0,1.0d0) )
!========================================================================
!結果の出力
write(*,*) 'Output data after forward FFT:'
open(unit=22,file='ab-.csv')
open(unit=21,file='c-.csv')
do i=1,N
write(21,'(i6,'','',1pe16.8,'','',1pe16.8)') i,out(i)
end do
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') 0.0,a(0),0.0
write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') (i*df,a(i),b(i),i=1,Mb)
if (Ma/=Mb) write(22,'(1pe16.8,'','',1pe16.8,'','',1pe16.8)') Ma*df,a(Ma),0.0
close (21)
close (22)
0890デフォルトの名無しさん2010/02/07(日) 15:59:09
--ラスト--

!========================================================================
!フーリエ変換(作業領域消去)
call fftw_f77_destroy_plan(plan)
end program fft
0891デフォルトの名無しさん2010/02/07(日) 19:29:00
>>889
クラスの友達に聞いた方が早いよ。
0892デフォルトの名無しさん2010/02/07(日) 20:20:13
むしろ、データファイルの中身が必要なんじゃね?
0893デフォルトの名無しさん2010/02/07(日) 20:37:52
>>891
きっとボッチなんだよ。
0894デフォルトの名無しさん2010/02/07(日) 22:48:06
そうなんすよ。
彼女と遊びすぎて留年しちゃったもんで・・・。
0895デフォルトの名無しさん2010/02/07(日) 23:02:40
お前はこのスレを敵にまわした。
0896デフォルトの名無しさん2010/02/07(日) 23:10:16
>>894
教えようと思ったがやめた
0897デフォルトの名無しさん2010/02/08(月) 03:48:18
自分が今いるサブルーチンの名前を取得する方法ってありますか?
デバッグするときにどのサブルーチンで止まってるか確かめたいんですが。
0898デフォルトの名無しさん2010/02/08(月) 07:30:51
終了したのが
なんていうサブルーチンで何行目か、とか
ソースファイルの何行目だったか、とか教えてくれるようにする
オプションってあったと思うけどなぁ。というわけでマニュアルを読もう!

Fujitsuだと超最適化かけてもこの機能はついてくるのが素晴らしいが
PC向けではなかったような・・・。出してくれんかねぇ
0899デフォルトの名無しさん2010/02/08(月) 07:59:22
>>898
いえ、それがめんどくさいことに終了せずにどこかで停止してるんですよ。
write文の中身をいちいち変えてもいいんですけど、
出来るだけコード汚さないように書きたいので。
0900デフォルトの名無しさん2010/02/08(月) 11:25:45
すみません、もう一つ。subroutineの最後に

return
end

って書くのはなんででしょう。サブルーチンでのendってreturnと
同じ意味じゃないんでしょうか?returnが無いと困るケースってあります?
0901デフォルトの名無しさん2010/02/08(月) 12:13:11
ヒント: returnはサブルーチンの最後である必要は無い。
0902デフォルトの名無しさん2010/02/08(月) 13:12:13
大昔はEndSubroutineが無かったから、
このEndはサブルーチンのですよ、とチェックをいれる意味で
推奨されてた名残だね。ぶっちゃげ無くてEndだけでもいい。
Returnはサブルーチン抜けを意味するのだからメイン階層では絶対出てこないので。
0903デフォルトの名無しさん2010/02/08(月) 18:54:13
900じゃないけどreturnとか使った事ありませんでした
勉強になるスレです
0904デフォルトの名無しさん2010/02/08(月) 22:05:26
>>897
__FILE__ を使って後はゴニョゴニョとよくやってた。
Fortran 自体を使わなくなって数年(足を洗ったので)。
0905デフォルトの名無しさん2010/02/08(月) 23:08:56
>>899
Fortranにはそういう命令はない。
しかしコンパイラのtracebackオプションを使えばいい。
大抵のコンパイラにはそういう機能がある。
だがそれは、処理系に依るのでマニュアルでオプションを調べるしか無い。

コンパイラの種類とバージョンを言えばわかる可能性はある。

0906デフォルトの名無しさん2010/02/08(月) 23:13:26
__LINE__使えるんじゃないの?
0907デフォルトの名無しさん2010/02/09(火) 00:35:53
>>906
標準のFortranにはないべ。
Unix系のプリプロセッサの機能だろ。方言のなまりがきつすぎる。
0908ごめんなさい、お願いです。2010/02/10(水) 00:51:22
このプログラムを
明日までに作ってください!!お願いします。

Fortranで,

階乗 n! を計算する関数を作成し,

順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成してください。
おねがいします。
0909デフォルトの名無しさん2010/02/10(水) 01:55:59
>>908
最近勉強しているのでFortran95 で書いてみた。
たぶん君が求めているのはF77ヴァージョンだろうw

MODULE m_2chan
IMPLICIT NONE
CONTAINS

ELEMENTAL INTEGER FUNCTION factorial(n)
INTEGER, INTENT(IN) :: n
INTEGER :: i
factorial = PRODUCT( (/ (i, i = 1, n) /) )
RETURN
END FUNCTION factorial

ELEMENTAL INTEGER FUNCTION permutation(n, r)
INTEGER, INTENT(IN) :: n, r
INTEGER :: i
permutation = PRODUCT( (/ (i, i = n, n - r + 1, -1) /) )
RETURN
END FUNCTION permutation

ELEMENTAL INTEGER FUNCTION combination(n, r)
INTEGER, INTENT(IN) :: n, r
combination = permutation(n, r) / factorial(r)
RETURN
END FUNCTION combination

END MODULE m_2chan
!
0910デフォルトの名無しさん2010/02/10(水) 01:57:29
PROGRAM twochannel
USE m_2chan
IMPLICIT NONE
INTEGER :: n, k
PRINT *, 'INPUT n and k'
READ *, n, k
PRINT *, 'nCk = ', combination(n, k)
STOP
END PROGRAM twochannel

77育ちの俺様は、暗黙の型に従っていないのですげー気持ち悪いぜwww
0911デフォルトの名無しさん2010/02/10(水) 02:27:41
>>908
数学的にチューニングすべきだが、提示された式のとおりに作った。PROGRAMは改行多杉になるので省略
integer function factorial(n)
implicit none
integer i, n
i = n
factorial = 1
do while(i .gt. 0)
factorial = factorial * i
i = i - 1;
end do
end
integer function permutation(n, r)
implicit none
integer n, r, i
i = 1
permutation = 1;
do while(i .le. r)
permutation = permutation * (n - i + 1)
i = i + 1
end do
end
integer function combination(n, r)
integer n, r, factorial, permutation
combination = permutation(n, r) / factorial(r)
end
0912デフォルトの名無しさん2010/02/10(水) 08:48:40
908の人気に嫉妬
0913デフォルトの名無しさん2010/02/10(水) 08:58:43
>>901
>>902
あ、そうなんですか。別に書かなくてもいいってことですね?

>>904
>>905
>>906
ありがとうございます。でも、エラーが出て終了するんじゃなくて、
ジョブは走ってるんですけどどこかで止まってるっぽいんですよ。
出力ファイルが計算途中で更新されなくなるんです。
で、どこまで進んでどこでどうなってるか調べたいのでいちいちwrite文挟んでるんですが…
tracebackって終了したときしか使えないですよね?
0914デフォルトの名無しさん2010/02/10(水) 10:05:57
デバッガー無いのか? アタッチ出来れば楽勝だな。
0915908です。2010/02/10(水) 11:57:13
みなさん、ありがとうございました!!(泣
0916デフォルトの名無しさん2010/02/10(水) 23:09:07
>>913
仰る通り Traceback は異常終了しないとでない。
しかし、望みの機能が存在しないのは、世の中の人がその機能を欲していないということなので
がんばってPRINT文をばらまいて解決しなさいw

プログラム相談員とか、そういう人に聞くのも、連中の人を小馬鹿にしたような寝言を我慢しないと
駄目だが、有効w
0917デフォルトの名無しさん2010/02/11(木) 13:16:13
>>916
>連中の人を小馬鹿にしたような寝言を我慢しないと駄目だが
ワロタw
あの目線はどうにかならんのか
0918デフォルトの名無しさん2010/02/11(木) 22:18:28
ちょっとお聞きしたいのですが、
fortranでguiプログラミングはできないのでしょうか?
0919デフォルトの名無しさん2010/02/11(木) 23:26:53
>>918
C用のライブラリのAPIを呼びまくるという形ではできる。
0920デフォルトの名無しさん2010/02/13(土) 17:03:50
つ Digital Visual Fortran
0921デフォルトの名無しさん2010/02/14(日) 19:08:39
>>918
NAG社の Fortran Builder for Windows なら,GTK+ というライブラリが付いてきて,
「GTK+を利用して、ウィザードから簡単にGUIアプリケーションの構築が可能です。
 Windows + Fortranという環境で、シミュレーションプログラムや各種計算プログラム、
 及び可視化プログラムなどの作成が容易に行えます。」
↑ ttp://www.nag-j.co.jp/nagfor/fb/index.htm より引用
0922デフォルトの名無しさん2010/02/15(月) 00:03:25
AbsoftもLaheyもQuickWin相当のGUI開発用の付録は付けている。
0923デフォルトの名無しさん2010/02/16(火) 06:07:45
>>920
なつかしいw

use dflib
(中略)
call YesOrNo()
で「はい・いいえ」ボタンが出てきてそれだけで感動したなw
0924デフォルトの名無しさん2010/02/25(木) 07:35:58
絶対に通らないIF文が速度に与える影響ってどんなもんでしょうか
つまり、IF(ndebug==0) THEN....って感じでデバッグ用の表示を各所に
挟みこみたいんですけど、これってndebug.ne.0の時でも速度に影響しちゃいますか?
0925デフォルトの名無しさん2010/02/25(木) 12:37:36
ndebug の値が静的に(Paramete文とかで)与えられていると
そのIF〜Endifブロック全体を無視するコンパイラ(IntelとFujitsuはそうだった)も
あるよ。その場合には速度に影響なし。
Ndebugが動的に変わる数の場合にはいちいち判定処理するから
少しは遅くなるだろうね。でも、検算やデバッグの部分は躊躇せず
ガンガン埋め込んで使うほうが(精神的にw)いいとおもう。

プリプロセス有りのコンパイラなら
#if 文つかっていろいろ出来るけどね。
Fortranの標準機能ではないからなぁ。
0926デフォルトの名無しさん2010/02/25(木) 12:55:38
タイトなループ中だとパイプラインが乱れて遅くなる場合もある。
投機実行等の手法もあるけど、分岐は無い方がCPUに優しい。
0927デフォルトの名無しさん2010/03/03(水) 16:30:25
くだすれがなんの略語なのか最近気付いた…
0928デフォルトの名無しさん2010/03/04(木) 04:01:58
なに?
0929デフォルトの名無しさん2010/03/05(金) 06:08:16
皆さん専門はなんです?
今時FORTRAN使ってるてことはアカデミックな人ですよね?
私は物性物理です。
0930デフォルトの名無しさん2010/03/07(日) 06:35:47
流体
0931デフォルトの名無しさん2010/03/07(日) 06:43:42
>>927
なに?
0932デフォルトの名無しさん2010/03/07(日) 11:55:01
>>931
しゅくだいスレ
0933デフォルトの名無しさん2010/03/07(日) 17:28:28
全然気付かないというか気にもとめてなかたぜよ
0934デフォルトの名無しさん2010/03/07(日) 17:48:54
プログラム技術
くだすれFORTRAN(超初心者用)
くだすれC++Builder(超初心者用)
くだすれPython(超初心者用)
くだすれDelphi(超初心者用)
くだすれCUDAスレ

WEBプログラミング
くだすれPerl
くだすれPHP
0935デフォルトの名無しさん2010/03/07(日) 17:55:15
web制作管理
くだすれAjax(超初心者用)
0936デフォルトの名無しさん2010/03/08(月) 06:11:10
で、なんで「宿題」が「くだすれ」になったの?
0937デフォルトの名無しさん2010/03/08(月) 09:43:53
CUDAスレ
0938デフォルトの名無しさん2010/03/08(月) 10:16:50
>このスレッドは、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

0939デフォルトの名無しさん2010/03/20(土) 00:06:59
fortran77です
各サブルーチンでcommon文をまとめてincludeしようと思いますが、
当然サブルーチンによっては使用しない箇所も出てきます。
この場合、各サブルーチンで最小限のcommonを設定するのに比べて
速度が遅くなったりするのでしょうか?
0940デフォルトの名無しさん2010/03/20(土) 03:01:50
しない。
Commonブロックそのものを一つにまとめるのならメモリ番地走査が遅くなって悪影響が出るかもしれないけど。
Commonブロックのリストを使わない分まで書いても悪さしない。
0941デフォルトの名無しさん2010/03/20(土) 13:29:50
commonなんて使うな
0942デフォルトの名無しさん2010/03/21(日) 03:16:43
>>940
たぶんそうだと思うのだが、改めてF77の規格を読んでみると、名前付きCOMMONはSAVEで
ないから、動的に取られたり消えたりしてもおかしくない気もする。

ただ、慣例から静的にとられていると思うが。
0943デフォルトの名無しさん2010/03/21(日) 05:46:40
ね。
Commom使うな教の教義は静的であることの保証がないという点にある。
でもDEC神がCommonはLabelアリ無し関係無しに静的配置にしますと規定したので後続もしたがった。
だから、規格原典にしたがえば、Allocateした変数をCommonに関連付けることもできるけど、
ほとんどのコンパイラは警告するか処理を打ち切る・・のが普通だけど、
やはり規格外のベンダ依存な部分は恐いやね。うっかりやっちゃいそうだし、
複数人でなんかコード作るときは禁忌にしておかないとあとで悲惨な事になる><

以前はコモン使いまくりだった(実際その方が速かった時期が長い、とおもう)けど
最近では固定サイズなら配列名をArgumentに羅列しても速度は違わんね。
動的配列やら自動配列みたいにコンパイルする時点でサイズ不明だと遅くなる事がおおいけど、
これはループの終端値が不定なせいでUnrollingが抑制されるからで
メモリ配置最適化ができないことの影響は無いか小さいとおもう・・・ので最近
コモン使うよ教から使わないよ教に主旨かえしたw。 コモン使うなよ教になる気はないけどね。
0944デフォルトの名無しさん2010/03/21(日) 17:50:52
毎年入ってくる新入生がfortranを勉強しようと77の本を手に取るのを
黙って見過ごすのはえも言われぬ空しさがある・・・
嗚呼負のスパイラル
0945デフォルトの名無しさん2010/03/21(日) 19:03:59
Visual Basic のように簡単に Windows用 GUI アプリケーションが作れる Fortran のベンダーを知りませんか。
Intel の Visual Fortran だとなんだか難しそうで‥‥。
Absoft Pro Fortran や PGI Visual Fortran なら簡単にできますか?
0946デフォルトの名無しさん2010/03/21(日) 20:51:54
>>944
これ以上77なソースを増やさないでくれ
たのむ
0947デフォルトの名無しさん2010/03/22(月) 08:06:59
>>945
DEC神wの系列の quickwin 以上に簡単なもの無理じゃないかねぇ
>>944,946
wwww
F77より後の機能をちゃんと間違えなく使おうとするとF77しらないと、
ということも多いからね。LatexとTexみたいなもので知ってても困らん。
まあ学生のうちに複数の計算機なり人間の言語に触れることは良い事だ
0948デフォルトの名無しさん2010/03/22(月) 12:52:03
>>947
しかし、大概の77のテキストは

100 FORMAT(1H , ・・・・・

などとなっていて、「この1H っては何ですか?」などと聞いてこられるので、
66から勉強しろとも言えず、ホレリスからイチイチ説明するのもメンドイので
いい加減に流すのであった。ラインプリンタも見ることも無いし。


テキスト書く人は、もう少し頑張って欲しい。
ほとんど情弱化している。
最近出た入門Fortranとか、g95とGNUPlotでFortranとか期待したのに、中身があまりに古くて爆死した。

0949デフォルトの名無しさん2010/03/22(月) 13:25:00
なるほど、Hは・・・聞かれるといろいろ困るなw

どこまで・どこからの線引きは難しいなあ。
Doループも長〜いやつだと意図して番号+Continueするとかあるし・・・
gfortran -Wall
だと年代wのチェックはしないしねぇ。いいチェッカがあるといいんだけど。

教科書は・・・英字のも含めてあまり進歩はないような。
教科書的なのは儲からんのだろうね。
漫画でわかる・・とかでないといかんのかね。だれか
「やる夫がFortranで何かするようです」でも作ってよ。
0950デフォルトの名無しさん2010/03/22(月) 13:58:59
やる夫がやる気のない教科書を参考にしたようなコードを書こうとする度に
やらない夫のツッコミが入るとかw
0951デフォルトの名無しさん2010/03/22(月) 18:35:01
>>947
>F77より後の機能をちゃんと間違えなく使おうとするとF77しらないと、
“ちゃんと”学ぶのであればそれでいいんだけど、大半はそこまでの探求心を持たないんだよね。
つーかこの手の問題はFortranに限った話じゃないのかもしれん・・・
0952デフォルトの名無しさん2010/03/23(火) 04:15:24
(AA略)
いまどき固定書式〜
固定書式が許されるのは50過ぎだけだよね〜

・・・むかつくな
0953デフォルトの名無しさん2010/03/23(火) 04:24:44
まったく関係ないけど、gfortran を入れるとおまけ(?)でgccも入ってくるのね。
Win機に一年前にいれてたのに今気づいた・・・
0954デフォルトの名無しさん2010/03/23(火) 06:37:25
>>953
gfortran が gcc のオマケ
0955デフォルトの名無しさん2010/03/23(火) 07:22:19
>>954
そうなんだけど、このスレ的には指摘してほしくなかったw
レス数が950を超えています。1000を超えると書き込みができなくなります。