[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/14 08:15 / Filesize : 180 KB / Number-of Response : 532
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

FORTRAN W



1 名前:デフォルトの名無しさん [2006/11/12(日) 17:13:35 ]
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・FORTRAN関連情報
お約束だが、まずは自分で調べよう
www.google.co.jp/

x86で動作するFortranコンパイラ
www.nminoru.jp/~nminoru/programming/x86-fortran.html

The Fortran Company
www.fortran.com/
Polyhedron Software
www.polyhedron.co.uk/
Google Directory - Fortran
directory.google.com/Top/Computers/Programming/Languages/Fortran/

・前スレ
FORTRAN III
pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
pc2.2ch.net/test/read.cgi/tech/1003214738/


52 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 20:03:11 ]
>>51
Fortran 標準コーディングルール
ttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html

European Standards For Writing and Documenting Exchangeable Fortran 90 Code
ttp://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html

上の和訳
ttp://www.mri-jma.go.jp/Project/mrinpd/eurostand.html

53 名前:デフォルトの名無しさん [2006/11/18(土) 21:18:26 ]
>>52
>推奨する書き方 real:: x(n), y(n)
>x(1:n) = y(1:n)


>×推奨しない書き方 x(:) = y(:) または x = y

これはかなりうそ臭いと思う。
x=y の場合と違って、コロン指定子を使うと、いったん暗にコンパイラが
テンポラリ配列にコピーするのでたいてい余分な時間がかかる。


しかし漏れが疑問に思うのは、F77では変数と配列に同じ名前をAとA(10)を指定できて
別物に扱われる様に規格で決まっていたと思うのだが、F90で矛盾が起きないのか・・・

それとも、これはJIS規格だけでANSIやMILでは違っていたのか?


54 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 22:09:41 ]
>>53
REAL A
DIMENSION A(10)
DO 10 I=1,10
A(I) = REAL(I)
10 CONTINUE
A = 1.23
WRITE(*,*) A
WRITE(*,*) (A(I), I=1,10)
END

規格上どうなってたかは知らないが g77だと
A = 1.23
の部分でコンパイルエラーになった。

g95では(当然)

55 名前:54 mailto:sage [2006/11/18(土) 22:12:21 ]
× g95では(当然)
○ g95では(当然) A は配列全体と解釈された。

56 名前:デフォルトの名無しさん [2006/11/18(土) 23:02:07 ]
>>54
そうじゃなくて
REAL A, A(10)
が可能だったと思う。


57 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 00:16:02 ]
hoge.f: In program `MAIN__':
hoge.f:1:
     REAL A,A(10)
         1 2
Invalid declaration of or reference to symbol `a' at (2) [initially seen at (1)]


58 名前:デフォルトの名無しさん [2006/11/19(日) 01:39:12 ]
たしか変数名と配列名は規格上の定義では別物だった記憶がある。

実際のコンパイラでどうなっていたかは知らん。





59 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 08:30:40 ]
Fortran90なんですが,

integer a(1:100)=0

みたな初期化の仕方はよくやるんですか?

60 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 08:32:30 ]
×みたな
○みたいな

orz



61 名前:デフォルトの名無しさん [2006/11/20(月) 09:01:16 ]
>>60
よくやる。
しかしその初期化はリンク・ロード時に行われるものなので、
実行行でa(1:100)=0と書くのとは微妙に違う。



62 名前:59 mailto:sage [2006/11/20(月) 15:25:10 ]
>>61
レスありがとう

63 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 17:30:12 ]
integer a(1:100)=0
↑これって通る?

integer:: じゃないと通らなかった気が。


64 名前:質問1/3 [2006/11/20(月) 18:45:56 ]
拡散方程式の境界値問題をオイラー陽解法で解くための
参考プログラムというものが教科書にあり、まわしたのですが
errorは出ないものの上手くまわりませんでした。
アドバイスを願います。
ちなみにMX=41,KM=30,DT=0.01としています。
PARAMETER(NX=51)
DIMENSION U(NX),UU(NX)
C**** INPUT & CALCULATE PARAMETERS
WRITE(*,*) 'MX (<52: MESH POINTS) ? KM (NUMBER OF TIME STEP) ?'
READ(*,*) MX,KM
WRITE(*,*) 'DELTA T: DT ? '
READ(*,*) DT
DX=1./FLOAT(MX-1)
R=DT/DX**2
IH=(MX+1)/2
I5=.05/DT
IF(I5.EQ.0) I5=1
CALL OUTPUT(U,NX,MX,1)
C**** INITIAL CONDITION
DO 10 I=1,MX
X=FLOAT(I-1)/FLOAT(MX-1)
IF(I.LE.IH) THEN
U(I)=X
ELSE
U(I)=1.-X
END IF
10 CONTINUE

65 名前:質問2/3 [2006/11/20(月) 18:46:56 ]
C**** MAIN LOOP
DO 20 K=1,KM
U(1)=0.
U(MX)=0.
IF(MOD(K,I5).EQ.1) CALL OUTPUT(U,NX,MX,2)
C
DO 30 I=2,MX-1
UU(I)=R*U(I-1)+(1.-2*R)*U(I)+R*U(I+1)
30 CONTINUE
DO 40 I=2,MX-1
U(I)=UU(I)
40 CONTINUE
C
IF(ABS(U(IH)).GE.10000.) THEN
WRITE(*,*) 'DIVERGE!'
STOP
END IF
C
20 CONTINUE
C
CALL OUTPUT(U,NX,MX,3)
STOP
END
C
SUBROUTINE OUTPUT(U,NX,MX,MM)
CHARACTER Z(60,23)
DIMENSION U(NX)

66 名前:質問3/3 [2006/11/20(月) 18:48:34 ]
IF(MM.EQ.1) THEN
DO 10 J=1,23
DO 10 I=2,MX-1
Z(I,J)=' '
10 CONTINUE
DO 20 J=1,23
Z(1,J)=':'
Z(MX,J)=':'
20 CONTINUE
DO 30 I=1,MX
Z(I,1)='-'
Z(I,23)='-'
30 CONTINUE
END IF
IF(MM.EQ.2) THEN
DO 40 I=1,MX
J=U(I)*40+.001
IF(J.GT.23) GO TO 40
Z(I,J)='*'
40 CONTINUE
END IF
IF(MM.EQ.3) THEN
DO 50 J=23,1,-1
WRITE(*,600) (Z(I,J),I=1,60)
50 CONTINUE
600 FORMAT(1H ,60A1)
END IF
RETURN
END



67 名前:59 mailto:sage [2006/11/20(月) 21:40:21 ]
>>63
そうでした

integer :: a(1:100)=0

じゃないと通らんです.

68 名前:デフォルトの名無しさん [2006/11/22(水) 00:03:15 ]

くだすれFORTRAN(超初心者用)その2
pc8.2ch.net/test/read.cgi/tech/1164121236/

69 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 01:57:44 ]
今度、計算機を3台ばかし構築せねばならないんだが、
CPUはcore2duoとXeonのどちらが良いのだろうか
コンパイラはインテルの非商用フリーのやつを使おうと思っている

70 名前:デフォルトの名無しさん [2006/11/22(水) 03:56:04 ]
Xeon5000番台と比較するならXeon、
Xeon3000番台と比較するならCore2Duoかな



71 名前:デフォルトの名無しさん [2006/11/22(水) 11:20:02 ]
キャッシュに載るならそれでもいいが、メモリーアクセス多いならItanium2で池





72 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 14:12:45 ]
お前らが使っている計算機のスペックきぼんぬ

うちは
CPU:Pentium4 3.2GHz
メモリ:1GB
コンパイラ:Intel Fortran コンパイラ

メモリを2GBにしろと進言したが無理だった。

73 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 14:54:28 ]
便乗しようじゃあないか.

CPU: Pentium4 3.4GHz
RAM: 1.5GB (DDRPC3200デュアル)
コンパイラ: Intel Fortran Compiler 9.1

OS: Windows XP pro SP2

友人のC2D (T7200) 搭載機使って計算したらノートPCのくせに俺の
デスクより2倍以上速くて鬱ry

74 名前:デフォルトの名無しさん [2006/11/22(水) 15:35:21 ]
これはなんですか???教えてください!!
NO ERRORS,4 WARNINGS [<TDOFS>FTN77 Ver 4.03]
NO ERRORS [<FORVIB>FTN77 Ver 4.03]
NO ERRORS [<COEF0>FTN77 Ver 4.03]
NO ERRORS [<COEF1>FTN77 Ver 4.03]
NO ERRORS [<SOLU>FTN77 Ver 4.03]
NO ERRORS [<F_TAN>FTN77 Ver 4.03]
NO ERRORS [<Z_GK>FTN77 Ver 4.03]
NO ERRORS [<INTARG>FTN77 Ver 4.03]
NO ERRORS [<INTARG3>FTN77 Ver 4.03]
NO ERRORS [<INTARG4>FTN77 Ver 4.03]
NO ERRORS [<INTARG5>FTN77 Ver 4.03]
WARNING the following symbols are missing:
DLAX D:\MyDo\Fortran\1122test.obj
(D:\MYDO\FORTRAN\1122TEST.FOR)
DLAXR D:\MyDo\Fortran\1122test.obj
(D:\MYDO\FORTRAN\1122TEST.FOR)

75 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 15:50:10 ]
>>74
エラーはない(おめでと♪)けど、変なのが4つあったよ。
なんか、1122testっていうファイルのDLAX, DLAXRっていう名前が変な感じ。
ちょっと見た方がいいかも・・・(byふぉとらんこんばいら4.03号)。

76 名前:デフォルトの名無しさん [2006/11/22(水) 16:07:08 ]
ありがとうございます☆
今昔の先輩のプログラミングを解析中なだけで、FORTRAN自体を理解してませんが、恥を忍んでお伺いします。
DLAXRというのはたぶんこの部分ですが、どこか変でしょうか?

c **** DLAXR ***************************************
call DLAXR(XX,A,k,hmn,ALU,b,IPP,VWW,icond)
do 110 j=1,mn+1,1
jj=j-1
X(jj)=XX(j)
110 continue
do 111 j=mn+2,hmn,1
jj=j-mn-1
Y(jj)=XX(j)
111 continue
c ***********************************************************
return
end


77 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 16:51:21 ]
>>76
わたしもよくわかんないけど、
DLAXRを呼んでるけど、このファイルではまだ定義されてないから
型・(引数の数とかの)形式があってるか不安・・・
よければファイルに書いといてね

たぶん他のファイルで定義されてるんだろうから
とりあえず適当にくっつけるけど、間違っても怒らないでね(byふぉとらんこんぱいら)

78 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 17:24:56 ]
>>74
DLAX, DLAXR って名前から察すると、富士通の数値計算ライブラリSSL II を使ってるっぽい。

79 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 17:45:18 ]
すれ違いかも知れないが、CoreDuo、Core2DuoでLinuxで動くの?

80 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 18:00:54 ]
>Core2DuoでLinuxで
シンタックス・エラー: 解決されない助詞「で」



81 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 20:45:13 ]
>>80
nice

82 名前:デフォルトの名無しさん [2006/11/22(水) 23:35:23 ]
>>74
それは>>78にあるように、SSLIIのライブラリを読んでいるので、それが無いと言っている。

SSLIIのライブラリがあるコンパイラ(Fujitsu、Lahey)の奴でやるか、
あるいは他のライブラリで置き換える必要がある。

LU分解っぽいので、LAPACKとか何でもあるべ。



83 名前:デフォルトの名無しさん [2006/11/23(木) 14:05:27 ]
n行m列の行列があり、そこからn行m列のそれぞれの値を一列に直して、それぞれに値について大きい順に並べなおし、元のn行m列に直してみたいのですけどどんなプログラムの方法がありますか?

よければ、教えてください><

ちなみにfortran77を使っています></

84 名前:デフォルトの名無しさん [2006/11/23(木) 16:00:07 ]
>>83
言ってることがよく分からないが、2次元行列を列ごとにソートして、
上から下へ大きい順に並べなおしたいということか?


それなら簡単だ。
1.まず1次元ソートのサブルーチンを用意する。これを SORT(n, x) としよう。

2.列ごとにソートする。
DO 10 i = 1, m
 CALL SORT(N, X(1, i))
10 CONTINUE

これでおk。


85 名前:デフォルトの名無しさん [2006/11/23(木) 18:03:09 ]
>>84さん指摘ありがとうございます

でもちょっと違うのです>< 
たとえば、1 5  9 13
     2 6 10 14
     3 7 11 15
     4 8 12 16

について、
1
2
3

16

といってから順番を変更して

16 12 8 4
15 11 7 3
14 10 6 2
13  9 5 1

という風に並べたいのです

86 名前:デフォルトの名無しさん [2006/11/23(木) 19:56:32 ]
>>85
それならもっと簡単だ。FORTRAN77は配列の先頭アドレスしか渡さない。
次元数とか大きさは気にしない。
また、FORTRANの配列はメモリー上では、列方向に隣り合って1次元に並んでいる。
ゆえに、N*Mの要素数で1次元のソートをすればいい。

1.1次元のソートを用意する。
2.CALL SORT(N*M、X)

これでOK

87 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 11:12:38 ]
>>83
元々mixiに書き込んだんだから、解決したらmixiにも書くように。

88 名前:デフォルトの名無しさん [2006/11/24(金) 11:44:03 ]
>>87 
つーか>>83のレベルでは>>86の回答は理解できないんじゃないか。

FORTRANはこういうイカサマ技によって、1次元整数0クリアをつっかって
多次元整数、実数などのクリアーに使えた。一種のPolymorphism wwwww



89 名前:デフォルトの名無しさん [2006/11/24(金) 14:36:03 ]
>86さんありがとうございます

確かに速く知りたいという気がはやりすぎて、いろんな所で質問していますね
ちゃんと自分で理解できたら書いていきたいとは思っているのですけどね
でも、やはりちょっと理解できません^^;
よければ、何か例とかあるとありがたいのですけど><


90 名前:デフォルトの名無しさん [2006/11/24(金) 14:36:17 ]
>>77 
ありがとうございます!

>>78さんの言うとおり、富士通SSLUを使っている様子です。

>>82
LaheyやLAPACKとはどんなものですか??



91 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 20:57:18 ]
>>90
ttp://www.google.co.jp/search?q=lahey+fortran
ttp://www.google.co.jp/search?q=lapack+fortran

92 名前:デフォルトの名無しさん [2006/11/24(金) 23:12:56 ]
>>90
Laheyはコンパイラの自社独自開発をやめて、今では富士通のフロントエンドを使っている。
富士通はLinux版しか出していないが、LaheyはWindows版も出している。
富士通が絡んでいるので、プロフェッショナルバージョンを買うとSSLがついてくる。

あとSSLは名古屋大学のNUPACKと密接な関係があるので、netNUMPACが参考に
なるかもしれないし、ならないかもしれないwww
漏れは富士通系はメインには使わなかったのでよく知らんw


LAPACKは固有地問題と線形問題用のサブルーチン集だ。これは国際標準と化してきているので
どこの機械でも動いている。


93 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 23:33:34 ]
>>89
PROGRAM unko
REAL a(5, 2)
CALL kintama(5 * 2, a)
DO 10 i = 1, 5
PRINT *, a(i, 1), a(i, 2)
10 CONTINUE
END
C
SUBROUTINE kintama(n, x)
REAL x(n)
DO 10 i = 1, n
x(i) = REAL(i)
10 CONTINUE
RETURN
END

実行結果

1.000000 6.000000
2.000000 7.000000
3.000000 8.000000
4.000000 9.000000
5.000000 10.00000
Press any key to continue

サブルーチン 金玉 で、1次元配列xに1〜nまで順番に数を代入している。
一方、メインルーチンから呼び出すときは、2次元配列を引数(ひきすう)に与えている。
要素数は行×列=10個で渡している。 返ってくる結果を見ると、列方向に連続した値で戻って来ている。

同様のことをSORTでやれば、はじめ二次元にランダムだった数が、
列方向にソートされて戻ってくる。

94 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 08:07:15 ]
>>89
>確かに速く知りたいという気がはやりすぎて、いろんな所で質問していますね
それはマルチポストと言って、マナー違反だな。
ここをよーく読んどくように。
ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88

95 名前:デフォルトの名無しさん mailto:sage [2006/11/26(日) 17:18:04 ]
FORTRANのエロゲとかないの?

96 名前:デフォルトの名無しさん [2006/11/27(月) 19:00:46 ]
>>53
>x(1:n) = y(1:n)

この書き方って例えば次のような漸化式に使うと
ちゃんと計算してくれない.

x(1)=0
x(2)=1
x(3:n) = 2*x(2:n-1) - 4*x(1:n-2)

自分に自分を代入するような
式だと駄目っぽい (途中から全部0になる).なんで??


97 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 21:01:20 ]
>>96
配列の演算はすべて並列計算として処理されるので x の要素が 0 で初期化されていた場合、
x(3) = 2*x(2) - 4*x(1) = 2*1 - 4*0 = 2
x(4) = 2*x(3) - 4*x(2) = 2*0 - 4*1 = -4
x(5) = 2*x(4) - 4*x(3) = 2*0 - 4*0 = 0
x(6) = 2*x(5) - 4*x(4) = 2*0 - 4*0 = 0
・・・
となる。

do i=2,n
x(i) = x(i-1) + 1
end do

x(2:n) = x(1:n-1) + 1
では意味が違うのだ。

98 名前:96 mailto:sage [2006/11/27(月) 22:18:19 ]
>>97
おお〜よくわかりました!
ありがとう

99 名前:デフォルトの名無しさん [2006/11/28(火) 00:17:59 ]
>>96
REAL::A(N, N), B(N, N)
A = A * B
のような状況を考えれば、今のFORTRANの仕様がもっともだと分かる。
行列操作がらみで、この仕様はとても便利。いちいち自分でテンポラリにコピーしなくていい。

あと一応、並列化されたときのことも考慮されてそういう仕様になっているらしい。

100 名前:デフォルトの名無しさん [2006/11/29(水) 13:24:49 ]
>>74のプログラムにおいて、ファイルの定義とはどの部分にどのように書き込むものなのですか?
全体のプログラムの中のどこかに隠れているのでしょうか?



101 名前:デフォルトの名無しさん [2006/11/29(水) 21:16:59 ]
次の条件のうちから他の位置の緯度(θ2)と経度(λ2)を求めるプログラムを作成せよ。
1.元の場所の緯度(θ1)を北緯35度40分、経度(λ1)を東経139度12分
2.距離(s)を6242.2kmとする s=R×α°×π/180  (R=6370km)
3.方位角(ν)を86.6度とする sinν=cosθ2×sin刄ノ/sinα (刄ノ=λ2-λ1)
(利用できるのであればcosα=sinθ1sinθ2+cosθ1cosθ2cos刄ノを利用してもよい)
また、他の方法があるのであればそのプログラムを作成せよ。

正直言って、ちんぷんかんぷんなのです><
わかる方がいればよければ、教えてくださいませんか><


102 名前:デフォルトの名無しさん [2006/11/29(水) 23:12:10 ]
>>100
基本的にリンカーに対してライブラリを指定するだけである。

最近のコンパイラは、コンパイラ・ドライバというものが、コンパイラやリンカーなどを
自動的に次々呼び出しているので、そのヘルプをよく読んで、リンカーにライブラリを
指定するオプションを探すべし。

コンパイラ・ドライバには、コンパイラへのオプションと、リンカーへのオプションを
個々に与えることができる。

この辺は、便利になった分かえって昔より何やってるのかわからなくなってる。

>>101
球面三角がんばれw


103 名前:デフォルトの名無しさん [2006/11/30(木) 02:28:58 ]
>>101
どうも熱海の島から射程約6000kmのテポドンを発射しているようだが、
方位角(ν)の定義が分からん。もう少し詳しく。
まぁ式が与えられているので情報としてはすでに十分なのだが、
数式から逆算する気力がない。

cosα=sinθ1sinθ2+cosθ1cosθ2cos刄ノ は内積から出た。

104 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 21:33:37 ]
>>101
今度は2ちゃんに書いた後mixiですか。

105 名前:デフォルトの名無しさん [2006/11/30(木) 22:25:56 ]
>>101
答えは、ハワイのオアフ島だ。 北緯21度24分 西経157度53分だ。
ついでに発射地点は熱海ではなく、八王子のあたりだな。

PROGRAM vipper
IMPLICIT NONE
REAL :: theta1, theta2, phi1, phi2, alpha, anu, pi
REAL :: rot_z(3, 3), rot_y(3, 3), vec1(3), vec2(3)
CHARACTER :: ns, ew
pi = 4.0 * ATAN(1.0)
alpha = 6242.2 / 6370.0
anu = ( 180.0 - 86.6 ) * pi / 180.0
theta1 = ( 90.0 - ( 35.0 + 40.0 / 60.0 ) ) * pi / 180.0
phi1 = ( 139.0 + 12.0 / 60.0 ) * pi / 180.0
!
rot_z(1, :) = (/ COS(phi1), -SIN(phi1), 0.0 /)
rot_z(2, :) = (/ SIN(phi1), COS(phi1), 0.0 /)
rot_z(3, :) = (/ 0.0, 0.0, 1.0 /)
!
rot_y(1, :) = (/ COS(theta1), 0.0, SIN(theta1) /)
rot_y(2, :) = (/ 0.0, 1.0, 0.0 /)
rot_y(3, :) = (/ -SIN(theta1), 0.0, COS(theta1) /)
!
vec1(1) = SIN(alpha) * COS(anu)
vec1(2) = SIN(alpha) * SIN(anu)
vec1(3) = COS(alpha)
!
vec2 = MATMUL(rot_z, MATMUL(rot_y, vec1))
!


106 名前:デフォルトの名無しさん [2006/11/30(木) 22:27:15 ]
theta2 = ASIN(vec2(3)) * 180.0 / pi
phi2 = ATAN2(vec2(2), vec2(1)) * 180.0 / pi
!
PRINT *, theta2, phi2
ns = 'N'
IF (theta2 < 0.0) ns = 'S'
ew = 'E'
IF ( phi2 < 0.0) ew = 'W'
PRINT '(i4, a, i2, 1x, a)', INT(ABS(theta2)), ' ', NINT(( ABS(theta2) - INT(ABS(theta2)) ) * 60.0), ns
PRINT '(i4, a, i2, 1x, a)', INT(ABS( phi2)), ' ', NINT(( ABS( phi2) - INT(ABS( phi2)) ) * 60.0), ew
STOP
END PROGRAM vipper


107 名前:105 [2006/11/30(木) 22:29:33 ]
ごめん 北緯と南緯の処理が間違ったままの古いのうpしてしまった。
ま、本質は変わらんから適当に処理しておいてくれ。

質問があれば、答えやすく論理的に聞いてくれ。


108 名前:105 mailto:sage [2006/11/30(木) 22:33:40 ]
スレ汚し すまんこw

出力結果だ。

21.39687 -157.8804
21 24 N
157 53 W
Press any key to continue


あと、方位角νは真北から時計回りに測ることとした。
つまり今の問題では、八王子からほぼ真東に、地球の半径とだいたい同じだけ飛ぶと
ハワイのホノルル近辺に着くという事だ。

Google Earthで確かめて味噌。定規を使うと2地点間の距離を測れる。


109 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 12:38:00 ]
Mixi より vipper の方が上なのかよw 

110 名前:デフォルトの名無しさん [2006/12/01(金) 15:04:03 ]
>105さんありがとうございます

今日だされた答えを見比べてみたら、合っています!!
でも、私が実際にやってみた所たくさんのエラー出てきてどうしようもない
状態です><
今、私が利用しているのは[fc pad FTR77]というfortran77のものなんですが
どうしてエラーが出てしまうのかがよくわかりません><

もしも今回のものがfortran77でないとしたら、今度から実際にやるとしたら
どのようなプログラムになるのですか?

よければ、教えてください><



111 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 19:50:23 ]
浮動小数点の値がでかすぎて整数型に変えられません
ってエラーが出てくるんですが、どうすれば回避できますか?
浮動小数点のままちっちゃくして(10で割るとか)整数型に変えてから10を
掛けるとかすれば回避できると思いますけど(端数は取っといて後で足すとして)
こんな妙なことする必要ないですよね…

くだすれに書き込むべきかと思いましたが落ちてますよね?


112 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 20:10:12 ]
くだすれFORTRAN(超初心者用)その2
pc8.2ch.net/test/read.cgi/tech/1164121236/

それから質問内容は「具体的に」な

113 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 20:28:00 ]
>>112
あれ?たってましたか…すみません。
そちらで聞いてきます、ありがとう。

114 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:08:57 ]
>>110
つ ttp://ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/sec0.html

これ見て77に直せ。

115 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:14:37 ]
>>111
今の一般のFORTRANの整数は32ビットの整数だ。
その場合表しうる数の範囲は−2^31〜2^31−1だ。

2^31=2147483648〜2*10^9→2ギガ だから、これより絶対値の大きい
実数を整数に変換しようとすればエラーが出る。

たとえ10で割ってうまく収まっても10倍したらオーバーフローするので無意味だ。
整数のオーバーフローは検知されないので(オプションにもよるが)実行時エラーが
出ないまま無意味な計算が続くことになる。



116 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:23:55 ]
>>110
それはFortran90のプログラムだから、Fortran77ではエラーが出るのは当然だ。
ちみは今度からは、くだスレの方に書きなさい。

しかしその程度のレベルで、あの座標回転を使って解いたプログラムを出したら
他人にやってもらったことがバレバレだwww

次からは最初にFORTRAN77でお願いしますと書いておきなさい。

117 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 01:14:47 ]
もっと初心者にやさしくしてやれよ。

Fortranユーザーを増やすために。

118 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 04:16:33 ]
>>117
同意・・・(どうでもいいがw)

119 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 05:14:42 ]
初心者っつーより只の宿題教えてクンっぽいが。

120 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 18:07:18 ]
FORTRAN77
のGOTO文とラベルの嵐に
いやになり,暫くC++系に浮気してたが
Fortran90当りからまたフォトランナーに戻った



121 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 19:04:12 ]
>>120
おかえりなさい。

C言語は、C99,D,C++,ObjectiveC,SecureなCなどに分裂してきているので、
煽ってこの分裂をいっそう深めて、Fortranを有利にしてくれ。



122 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 03:38:34 ]
>>121
それを発展ともいうんだがw

123 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:38:37 ]
計算量が増えてきたので、1台パソコンを増やそうとしているのですが、
(現在Pen4 3.6GHz、IntelVisualFortran9.0)
並列計算しそうにないコードなので、CPUの選択に迷っています。
今までPen4あたりのシングルコアで流していた方はこれから
どうされるつもりですか?
Core2Duoとかどうなんでしょう・・・
上の方ではCore2Duoの方が速いという書き込みがありますが・・・
一応予算は1式20万円位を想定しています.

124 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:45:38 ]
>>122
いや、ハッテンは結構なんだが、うまく同じくらいに枝分かれしてもらえると、内ゲバが始まって
全部衰退してくれて助かる。

あとC派生言語がSecureな方向に向かってくれると、最適化スピードが落ちてやがて自滅するだろう。
バッファーオーバーランの恐怖とかを煽って常にSUBCHKかけたまま走るように仕向けるべし。

JavaやC#などは結局根本的に方向を間違っていると思う。
UCSD p-code Pascalの昔から、VirtualMachineはとてもいいアイデアのように思えて、
それでいてうまく行ったためしがない。スピードがあればエミュレーションで十分だと、むかしから
言われてきたが、スピードが上がると新しい使い方が出てきて、ギリギリのCPU消費が
求められるからうまく行くはずがない。


もっともFortranも規格がどんどん肥大化していてかつてのPL/I型の破滅の道を
たどっている気がしなくも無いのだがw

125 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 10:31:13 ]
>>124
PL/Iかw
VMはわしらのように計算機として使う人には無理だが
普通に遊ぶ程度ならいいんじゃないか?
っていうか大丈夫なくらいPCの性能があがったんじゃないか?

もちろん、FortranでVM使われたら根本的な間違いだが
Javaの方向もアリなんじゃないか?
Fortranと用途が重ならないし・・・

ちょっとPL/Iがなつかしくなって書きコ

126 名前:デフォルトの名無しさん [2006/12/05(火) 14:26:13 ]
C Pad for Salford FTN77 をつかっていますが、プログラムを実行すると
RUN TIME ERROR
00402c50 SOLU [+0174] [recur= 1]
00401000 TDOFS [+09ca]
が出ます。
RUN TIME ERRORとはなんでしょうか??
メッセージ欄には
「 Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0001) omega1 theta0 theta1 alph beta theta g()/kG
*** Unexpected continuation line (have you got more than 19?)

*** Compilation failed

^C  」
とでますが、よくわからないです(−−;)
どなたか教えてください!!





127 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 22:54:37 ]
>>126
>*** Unexpected continuation line (have you got more than 19?)
>*** Compilation failed

せっかくコンパイラがメッセージを出しているのだから、ちゃんと読むように。

128 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 00:05:57 ]
>>126
まったく>>127の言うとおりだ。
子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。


漏れの診断では、2chからコピペしたので、6カラム文の字下げをしていない。
そのせいで継続行に勘違いされている。


129 名前:デフォルトの名無しさん [2006/12/06(水) 12:51:58 ]
>>127
じゃあ英訳してあげたら??
子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。


130 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 13:02:29 ]
>>129は母親に黙らせろって怒鳴るだけの親父。



131 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 13:06:14 ]
>>130
は事件があった後に
インタビューされる近所の人
「よくあの家の子は泣いていましたよ・・・ひどい親ですね
ま、私は関係ないんですけど」


132 名前:デフォルトの名無しさん [2006/12/06(水) 13:52:30 ]
最初の人が馬鹿にした口調で書き込むからこんなくだらないレスが続いてしまったよ。



133 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:08:59 ]
>>132
>>127 は別に悪くないだろ。悪いのは>>128

134 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:31:00 ]
悪いのは>>126。説明を端折った質問をするからこうなる。
「プログラム」が何者かこちらには全く分からない。


135 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:33:15 ]
とりあえず、俺が悪いよ
みんなゴメソ

136 名前:デフォルトの名無しさん [2006/12/06(水) 14:40:20 ]
>>134
でも内容も何もわからない人だったら質問をちゃんとしろってのも難しいんじゃないかな??

137 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 20:08:27 ]
質問をしている人間が自分のやってることの内容も何もわからない状態なら、
それこそ答えようがないだろ。

せめて基本的な文法なりソフトの簡単な使い方くらいは自分で調べて
それでもダメだったら、何がしたくて何を試したけどどう上手くいかなかったか
程度のことは書いて質問すべきじゃないか。

138 名前:デフォルトの名無しさん [2006/12/07(木) 04:08:19 ]
>>137
もっともな意見だが、それが出来ればたいていは自己解決して2chになんか聞きにこなくてすむw


139 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 07:46:51 ]
>>137
Exactly

140 名前:デフォルトの名無しさん [2006/12/07(木) 17:42:48 ]
>>139
(笑)



141 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:56:54 ]

Silverfrost (Salford) FTN95 Version 5.00 キタコレ
ttp://www.download.com/Silverfrost-FTN95/3000-2069_4-10614581.html?tag=pub
ttp://forums.silverfrost.com/viewtopic.php?t=676&start=0&postdays=0&postorder=asc&highlight=

.NET 2.0とVisual Studio 2005に対応したらしいが、VS2005は使ってないので詳細は知らん。

142 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 22:06:05 ]
Intel FortranでMacアドレス取得する方法ありますか?
マニュアル見ても載ってなかったです・・。

143 名前:デフォルトの名無しさん [2006/12/08(金) 23:44:07 ]
>>142
C言語でも難しいようだ。標準のWIN32APIでは出来ないので、他の方法をやっているようだ。

安直な方法は、SYSTEM関数でDOSコマンドのipconfig/all を実行し、
その出力からMACアドレスを切り出す方法ジャマイカ?



144 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 23:52:39 ]
>>143
やっぱりそうなりますかねー。
自分のOS以外で動作を確かめられないのでちょっと大変;;

どうもthx

145 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 10:46:49 ]
>>142
Three ways to get your MAC address.
www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451

Retrieving Information Using GetNetworkParams
msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/creating_a_basic_ip_helper_application.asp

IPHLPAPIを使ってWindowsでネットワーク設定いじるプログラムを書く
www.geekpage.jp/programming/iphlpapi/

この辺だと思うが、PlatformSDKのライブラリをLINKすれば可能なようだ。
しかし自分でインターフェースを書かないと駄目なので難しそう。
TYPEとかの定義が深いので、インターフェースに必要な定義がどれだけあるのかわからん。

146 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 17:06:14 ]
winだったら昔NetBIOSでとったことがある。

147 名前:デフォルトの名無しさん [2006/12/09(土) 20:54:36 ]
PROGRAM MAC
USE ifwinty
IMPLICIT NONE
!
INTEGER, PARAMETER :: MAX_ADAPTER_DESCRIPTION_LENGTH = 128 !// arb.
INTEGER, PARAMETER :: MAX_ADAPTER_NAME_LENGTH = 256 !// arb.
INTEGER, PARAMETER :: MAX_ADAPTER_ADDRESS_LENGTH = 8 !// arb.
!
TYPE :: IP_ADDRESS_STRING
CHARACTER (4) :: String(4)
END TYPE
TYPE :: IP_MASK_STRING
CHARACTER (4) :: String(4)
END TYPE
!
TYPE :: t_IP_ADDR_STRING
INTEGER (LPLONG) :: pNext
TYPE (IP_ADDRESS_STRING) :: IpAddress
TYPE (IP_MASK_STRING) :: IpMask
INTEGER (DWORD) :: Context
END TYPE
!


148 名前:デフォルトの名無しさん [2006/12/09(土) 20:55:07 ]
TYPE :: t_IP_ADAPTER_INFO
INTEGER (4) :: pNext
INTEGER (DWORD) :: ComboIndex
CHARACTER (LEN = MAX_ADAPTER_NAME_LENGTH + 4) :: AdapterName
CHARACTER (LEN = MAX_ADAPTER_DESCRIPTION_LENGTH + 4) :: Description
INTEGER (UINT) :: AddressLength
INTEGER (BYTE) :: Address(MAX_ADAPTER_ADDRESS_LENGTH)
INTEGER (DWORD) :: Index
INTEGER (ULONG) :: iType
INTEGER (ULONG) :: DhcpEnabled
INTEGER (LPLONG) :: pCurrentIpAddress
TYPE (t_IP_ADDR_STRING) :: IpAddressList
TYPE (t_IP_ADDR_STRING) :: GatewayList
TYPE (t_IP_ADDR_STRING) :: DhcpServer
INTEGER (BOOL) :: HaveWins
TYPE (t_IP_ADDR_STRING) :: PrimaryWinsServer
TYPE (t_IP_ADDR_STRING) :: SecondaryWinsServer
INTEGER (ULONG) :: LeaseObtained
INTEGER (ULONG) :: LeaseExpires;
END TYPE
!
INTERFACE
INTEGER (BOOL) FUNCTION GetAdaptersInfo(arg1, arg2)
USE ifwinty
!DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'GetAdaptersInfo' :: GetAdaptersInfo
INTEGER (LPLONG) :: arg1
INTEGER (LPLONG) :: arg2
END FUNCTION
END INTERFACE


149 名前:デフォルトの名無しさん [2006/12/09(土) 20:56:42 ]
!
TYPE (t_IP_ADAPTER_INFO) :: AdapterInfo(16)
TYPE (t_IP_ADDR_STRING) :: CurrentIpAddress
INTEGER (DWORD) :: dwRetVal
INTEGER (PULONG) :: pdwRetVal
INTEGER (BOOL) :: iret
CHARACTER (LEN = 128) :: Description
dwRetVal = sizeof(AdapterInfo)
iret = GetAdaptersInfo(LOC(AdapterInfo), LOC(dwRetVal) )
!PRINT *, AdapterInfo(1)%pNext
!PRINT *, AdapterInfo(1)%ComboIndex
!PRINT *, AdapterInfo(1)%AddressLength
!PRINT *, AdapterInfo(1)%Description(1:128)
PRINT '(6Z3)', AdapterInfo(1)%Address(1:AdapterInfo(1)%AddressLength)
!PRINT *, AdapterInfo(1)%IpAddressList

!PRINT *, AdapterInfo(2)%pNext
!PRINT *, AdapterInfo(2)%ComboIndex
!PRINT *, AdapterInfo(2)%AddressLength
!PRINT *, AdapterInfo(2)%Description(1:128)
PRINT '(6Z3)', AdapterInfo(2)%Address(1:AdapterInfo(2)%AddressLength)
!PRINT *, AdapterInfo(2)%IpAddressList
STOP
END PROGRAM MAC


とりあえず、これでMACアドレスが取れた。

150 名前:デフォルトの名無しさん [2006/12/09(土) 21:09:05 ]
>>142 雪が降っていたので暇つぶしにがんばってみた。
4時間ぐらいかかったが、MACアドレスがIntelFortranで取れた。

方法は>>145の1番目のリファレンスの3番目の方法を用いた。
型などは、2番目のMSDNに書いてある情報から自分で適当に作ってみた。
TYPEのサイズがC++版で求めているのと一致したので多分OKだろう。自信はないw

漏れはメインフレーム育ちの生粋のFORTRANerで、CもC++はHelloWorld以上のものは
書いたことが無いので、文字列とかポインターの扱いとかが今一自信がない。


コンパイルに必要なのはPlatformSDKだが、漏れはインストールのときに
勝手にインスコされていたようだ。この中のライブラリ IPHlpApi.lib をライブラリに
加えておく必要がある。
Linker>Input>Additional Dependency に、そのまま書けばOKだった。

プロジェクトタイプはコンソールでおk。

>>146 >>145の記事によるとNetBiosから取る方法は、最近は推奨されないらしい。
ただし取り方は書いてあった。



151 名前:150 [2006/12/09(土) 22:27:56 ]
>>149のメインプログラム部分は、以下に直しておいてくれ。
デバッグ用のゴミを削った。複数のネットワークアダプタにも(とりあえず16個以下だが)対応。

TYPE (t_IP_ADAPTER_INFO) :: AdapterInfo(16)
TYPE (t_IP_ADDR_STRING) :: CurrentIpAddress
INTEGER (DWORD) :: dwRetVal
INTEGER (BOOL) :: iret
INTEGER :: i
dwRetVal = sizeof(AdapterInfo)
iret = GetAdaptersInfo(LOC(AdapterInfo), LOC(dwRetVal) )
IF (iret /= 0) STOP 'Error'
DO i = 1, 16
PRINT '(5(Z2.2,"-"), Z2.2)', AdapterInfo(i)%Address(1:AdapterInfo(i)%AddressLength)
IF (AdapterInfo(i)%pNext == NULL) EXIT
END DO
STOP
END PROGRAM MAC

152 名前:デフォルトの名無しさん [2006/12/12(火) 14:31:56 ]
compaq visual fortran 6.1を使っています。
1つのプロジェクトの中のsource fileのなかには、二つ以上プログラム
ファイルを入れてはだめなのでしょうか?ためしに片方のプログラム
をコンパイルすると実行時に引っかかってしまいます。
一つを消すと上手くいくのですが…。
では平行して二つのプログラムを作りたい場合どうすればいいのでしょうか?
どうかご返答お願いします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef