[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 12:09 / Filesize : 350 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん [2006/11/22(水) 00:00:36 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

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


●前スレ
くだすれFORTRAN(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1138063703/

●関連スレ
FORTRAN W
pc8.2ch.net/test/read.cgi/tech/1163319215/


321 名前:デフォルトの名無しさん [2007/03/05(月) 00:06:07 ]
>>317
一桁目は歴史的な理由から予約されていることが多い。
処理系によっては90番台も予約されていたりする。

特に理由が無ければ避けるのがよろし。


>>320
たしか、77の規格には無かったはず。
EXPを使って解け。


322 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 00:44:52 ]
>>320
こんなとき(だけ)役に立つ、岩波FORTRAN辞典〜♪
によるとFORTRAN77でもSQRTの引数複素数時の個別名はCSQRTだ。よかったな。

だが、総称名使え。

323 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:01:36 ]
>>321
一桁目ってunit=1から9のことdふぇすか?


複素数のはびっくりした。ああなるほどっておもた。オイラーの公式だね

exp(iθ)=cosθ+i sinθ

>>322
ということは、たとえばD=B**2-4*A*Cという式があって、REAL Dとしているとき、
sqrt(D)を計算しようとしますよね。BとAの与え方によってはD<0となり複素数と
なりますよね。そのときCSQRT(D)とすればいいのですか?

324 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:13:49 ]
ま、あれですかね。複素数ってプログラムで扱うもんじゃないんですかね

325 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 06:51:59 ]
>>323
CSQRTの引数は複素数型。
そしてFORTRANではC言語などの様に引数の型を(関数宣言に合わせて)自動変換したりはしない。

326 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 07:51:42 ]
ということは

あらかじめ変数宣言でCOMPLEX Dとしていて
CSQRT(D)ならばありってことですか?

327 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:05:32 ]
>>326
文法的にはあり

だがまあその場合、SQRT(D)としとけば内部的にCSQRTを呼んでくれるので
わざわざCSQRT(D)とする必要はないけどな。

328 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:59:22 ]
>まぁクイズとか解いてりゃいい新型言語とは違うし

かっこいいな


329 名前:デフォルトの名無しさん [2007/03/09(金) 19:51:16 ]
ちょっとしつもんです。

txtファイルで
0 0.1 3.2 
6.3
1 2.1 5.6 
5.9
・・・

のようにちょっとずれたテーブルがあるんすけどこれを次のようにグラフ化できるように
整理できるプログラムって作れますか?
0, 0.1 ,3. ,6.3
1, 2.1, 5.6, 5.9
・・・

条件は入力がtxtファイルで出力もtxtファイルかcvsファイルにするものです。




330 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:14:07 ]
作れるけど、わざわざ FORTRAN で作るもんでもないと思われ。

331 名前:デフォルトの名無しさん [2007/03/09(金) 20:54:43 ]
>>330
おしえてくださいませんか?また、フォトラン使わないならば何を使うのか教えてください。
お願いします先生

332 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:29:25 ]
awk がちょうどいいんでない?

333 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:38:15 ]
じゃあawkで

#! /bin/gawk -f
BEGIN { NMAX = 4; n = 0 }

{
for(i=1; i<=NF; i++) { a[n++] = $i; if (n >= NMAX) { putn(a, n); n = 0; } }
}

END { if (n>0) printn(a, n) }

function putn(a, n, i) {
for(i=0; i<n-1; i++) printf("%4.1f, ", a[i])
printf("%4.1f\n", a[i])
}

もっと簡単に書けるかもしれないけど、こんな感じで。

334 名前:デフォルトの名無しさん [2007/03/10(土) 11:17:50 ]
awkってなんですか

335 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:35:44 ]
awkは語るまい。

336 名前:デフォルトの名無しさん [2007/03/10(土) 11:56:57 ]
awk というのは、加齢臭の漂うおっさんスクリプト言語。

パソコンの処理能力が上がって、データ後処理がパソコンで実用的にできるようになった頃に
流行っていたスクリプト言語がawkだった。あの頃はperlも何も無かった。

大型計算機のFORTRAN出力をパソコンに落として、awkで整形処理、xyプロットソフトで描く。
という流れが80年代末から90年代初頭に流行った。

そういうわけでロートルはawkが使える。


337 名前:デフォルトの名無しさん [2007/03/10(土) 13:10:53 ]
じゃぴったりなわけだ。

awkってコマンドプロンプトさえあればできるんですよね?

338 名前:デフォルトの名無しさん [2007/03/10(土) 14:16:18 ]
"フォトラン"ってなんかカワイイ

339 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 16:11:24 ]
フォトラン20 平成20年バジョン



340 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:24:56 ]
>>337
基本的にコマンドラインでスクリプト・ファイルを指定したり、直接コマンドを書き込んだりして使う。

Linuxには大抵、最初から入ってる。
Windows用のもググれば色々見つかる。

341 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:54:03 ]
にゃるほどシグウィンにするかな。いろいろありがとうごzぁいましゅ

342 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:12:56 ]
すげーすげーすげー
オークすげー

ここの人のおかげで先ほどのデータ並べ替えができるようになりました。
ありがとうございました。
オークの勉強もフォトランと一緒にしようとおもいます

343 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 22:35:19 ]
>>329
もしFORTRANでやるならどうしますか

344 名前:@がばい佐賀 mailto:sage [2007/03/10(土) 23:17:15 ]
先ほどからしつこくてすみません。テキストデータの並べ替えを質問してAWKに感動したものです。
実はフォートランでもプログラムを組んでみました。

REAL A,B,C,D
C 読み込みファイル指定(既存)
OPEN(UNIT=3,FILE='data.TXT',STATUS='OLD')

DO 20 I=1,4
READ(3,*) A,B,C,D

WRITE(*,100) A,B,C,D
C 書き出しのフォーマットを指定
100 FORMAT(F6.3,',',F6.3,',',F6.3,',',F6.3)
20 CONTINUE
C 開けたファイルは閉じましょう
CLOSE(UNIT=3)

END

こんなぐあいでやったらコンパイルはちゃんと通ってデータも並びなおしてました。

でも、ちょっと腑に落ちないところがあります。
DO文のところです。俺は、なんとなくI=1,4として「これで1行から4行まで勝手に読み込んでくれるだろ」
という乗りでやったのですが実際のどげんですか?
このI=1,4はA,B,C,Dを読み込むのを4回やれということになりますか?
それとも1行目から4行目までA,B,C,Dを読むのを繰り返せというような行数を表すのですか?

普通、DO文でI=なんとかとしたら
処理のところにA=A+IとかIの入った式を書いたりするじゃないですか。でもこの問題の場合
Iを処理の回数として勝手に認識してくれているのであれば私のプログラムに間違いはない
ですよね


345 名前:デフォルトの名無しさん [2007/03/10(土) 23:51:46 ]
>>343
AWKは最近流行らないから、本とかも無いだろ。
今更感が無きにしも非ずだがFORTRAN界では大丈夫かw

PROGRAM test
IMPLICIT NONE
REAL :: a(4)
INTEGER :: i, ip
DO
READ(9, *, END = 999) a
WRITE(*, '(3(f10.4, ","), f10.4)') a
END DO
999 STOP
END PROGRAM test


>>344
あぁ、もう自作したかw

FORTRANでは歴史的な事情により、指定しない限りフォーマット付きI/Oでは、
入力データの空白は0として扱われる。(FORMAT文のNB/NZオプションあたりの説明嫁)

しかし*での自由書式だと空白が区切り記号として解釈される。
また今の場合のようにデータが足りないと改行して読んでくれる。

大昔は容量を節約するため出力データは空白を開けないで続けて書いたりしていたw

質問の解答は『A,B,C,Dを読み込むのを4回やれ』ということになる。
ところがFORMATを指定した場合はこうはならない。
/などで明示的に改行してやらないといかん。

細部は漏れも忘れたので文法書でFortmatのところ嫁。

346 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:58:03 ]
うわーありがとうございます!

347 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 01:04:48 ]
ところでおすすめの書ありますか?

348 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 05:38:38 ]
>>345

。・゚・(ノд`)・゚・。
そりゃあ流行じゃないし、数もそれほどじゃないけど絶版になってないのもあるよ
オライリーのとか。


349 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:08:55 ]
>>336
うちの研究室では awk を教えられたぞ。



350 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:00:33 ]
ホムペじゃあまだオークを語ってるところもあるね

351 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:39:20 ]
FORTRAN よりは若い言語だよな。

352 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:32:57 ]
>>351
そりゃFORTRANと比べたら……

353 名前:デフォルトの名無しさん [2007/03/11(日) 18:52:48 ]
どなたかご教授下さい!!

FTN95とfcpadの組み合わせで使いたいのですが、
fcpadでコンパイラのパスを「C:\Program Files\Silverfrost\FTN95\ftn95.exe」
として、いざf95のソースファイルをコンパイルすると
[FTN95/Win32 Ver. 5.01.0 Copyright (c) Silverfrost Ltd 1993-2006]
*** Invalid executable file suffix - only .EXE is permitted
と出てコンパイルできません。ファイルの拡張子を.fにしても駄目でした。

どうしたらFTN95+fcpadでコンパイルできるのでしょうか!?
おとなしくplato3を使うしかないのでしょうか・・・

354 名前:デフォルトの名無しさん [2007/03/11(日) 19:26:27 ]
>>353
前にも誰かが聞いていたような・・・・

まぁあのキモイ顔のプラトン使ってやれよ!



355 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:40:25 ]
>>353
FTN95のコマンドラインの書式は
> ftn95 <filename> [option [option] ...]
一方、CPad (for FTN77)がコンパイラに渡すコマンドラインの書式は
> ftn95 [option [option] ...] <filename>
書式が違うのでそのままではエラーになる。

解決策としては例えば、↓の様な内容のバッチファイルを

@REM --- ここから ---
@shift
ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 %0
@REM --- ここまで ---

ftn95.exe と同じディレクトリに作成し、fcpadの「基本設定」の「コンパイラのパス(W)」に
このバッチファイルを指定する。

しかし自由書式のプログラム作成とか考えるとCPad for FTN77を使うよりも
付属のplato3か他のエディタを使うことをお勧めする。

356 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:44:46 ]
>>353
このスレの57のあたりを見直せば

357 名前:353 mailto:sage [2007/03/11(日) 23:32:50 ]
>>355さん
ありがとうございます!
早速バッチファイルを作ってみましたが、結局うまくいきませんでした。
たしかにfcpadにこだわる必要はなさそうなので、vimを使ってみようと思います。

>>354さん
>>356さん
ご意見ありがとうございます!
前述の通り結局vimを使うことにしました^^;

358 名前:デフォルトの名無しさん [2007/03/16(金) 18:37:39 ]
こんにちは。現在Fortranでプログラムをしているのですが、難しくててこずっています。
そこで、知恵を貸していただきたいと思い、書き込んでいます。

A=x*exp(-u*B)+y*exp(-v*B)+z*B^(-(w+1))
という関数があり、x,y,z,u,v,wは未知数で
AとBはExcelのA列とB列にそれぞれデータが600与えられていて、
test.csvとして保存しています。

このx,y,z,u,v,wの未知数6個を上式の関数とA,Bの配列(?)を用いて,
収束させることによって求めたいと思っています。

ご教授お願いします。

dimension、open、write、read、doなどを使うのはなんとなく分かるのですが、
、難しくてよく分かりません。
どうぞよろしくお願いします。

359 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 20:56:50 ]
salford FTN90 とPLATO3のダウンロードできる場所をおしえてくださいお



360 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 03:57:05 ]
>>358
まずは問題点を切り分けよう。
ファイルの読み込みと実際の計算部分だ。
どちらならできる? 両方とも難しいかい?

361 名前:デフォルトの名無しさん [2007/03/20(火) 16:53:44 ]
質問させてください
DO i=1,10
 DO j=1,10
  DO k=1,10
   dt_den(i,j,k) = den(i,j,k) * div_vel
  END DO
 END DO
END DO

というコードを書いたのですが、『ランクが違うので計算できない』という旨のエラーが出ました。
「配列の一つの要素を取り出し、計算して、別の配列の要素へ代入する」
ということをやりたいのですが、どのように書けばいいのですか?

362 名前:デフォルトの名無しさん [2007/03/20(火) 21:37:08 ]
Fortran77のコンパイラの選択に関する質問です。

私はこれからFortran77を学ぼうとしているところです。
利用の目的は学術的な数値の計算です。
有償、無償の様々なコンパイラがあることは調べているうちにわかりました。
しかしなにぶん右も左もわからないもので、どれが良いか決めかねています。
信頼性を重視した場合、やはり有償のものを購入する方がよいのでしょうか。
また、お勧めのコンパイラがありましたら教えていただけますと幸いです。

当方Windowsを使用しており、主な環境は以下の通りです。
OS:WindowsXP Professional
CPU:Pentium D(4?) 2.8GHz
Mem:1GB

なお、購入の場合は5〜10万円程度の予算を考えております。
どうぞよろしくお願い致します。


363 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 21:49:54 ]
!これから学ぶのに、いきなり5-10マソも出すなんてすごい!しかも77だなんて。
!どこかの研究者さんでしょうか。メモリ1GBということは、大規模な計算では
!なさそうなので、無料のG95かgfortranでいい気がするのですが、どうなんでしょう?
!学生の私には判断できません・・・。

364 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:20:08 ]
上に同じ。
安い/無償の環境と高い環境の違いは
・開発のしやすさ
・ライブラリの有無(例:高速な数値演算ライブラリ)
・最適化の性能(=計算速度)
あたりにあるので、まずはフリーのコンパイラを使ってみたらどうか。

365 名前:361 mailto:sage [2007/03/20(火) 22:37:36 ]
すみません。自分で解決しました。原因は
REAL(8),ALLOCATABLE :: div_vel(:,:,:)
としていたことでした。正しくは
REAL(8) :: div_vel
でした。

366 名前:デフォルトの名無しさん [2007/03/21(水) 17:29:05 ]
>>358
その式を解くとなると、
非線形の最小二乗法(または、自乗法)が
必要になります。
もちろん、FORTRANで計算可能ですが、
一からプログラムを書くとなるととっても大変だよ。


367 名前:362 mailto:sage [2007/03/21(水) 17:40:00 ]
ご返信ありがとうございます。
研究に用いるため信頼性をなによりも重視しており、
予算も高めに覚悟しておりました。
有償無償の間にバグに関して差がないのであれば、
最初は無償のものを使おうと思います。
Salfordのものを使うつもりです。
相談に乗っていただきありがとうございました。

368 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 02:02:25 ]
>>367
大規模計算はスパコンで、解析は自分のPCでフリーのコンパイラだけど、
特に問題は出ていない。
少なくとも、今のところ、バグで酷い目にあったことは無いかな。

知り合いは、その昔、スパコンのコンパイラのバグで酷い目にあったそうだから、
有償/無償の差よりは、運/不運のファクターの方が大きいかも。
多くの人が使っているものを選べば、まぁ、大丈夫だと思う。

コンパイラのバグに出会ったことは無いけれど、
大規模な新型スパコンが導入されると、設定ミスが発覚したり、
ジョブ管理のシステムの挙動がおかしかったり、トラブルが続いて
落ち着いて使えるまでに少し時間がかかることもある。
数が多く出ているようなシステムは、こういうことは少ないと思うけど。



369 名前:デフォルトの名無しさん [2007/03/25(日) 13:03:53 ]
>>367
金があるなら、Intel Fortran + MSVisualStudio の組み合わせでいいんじゃないの?
ソフトは利用者が多い物が勝利するので、寄らば大樹の陰。

VisualStudioはアカデミックなら5,000円なので無問題。
IntelFortranは、やや高いし、毎年$200のお布施でライセンス更新をしないといけないが。
(再インストール出来なくなるだけで、使えなくなるわけではない)
Linux版でよければただで使える。

バックエンドが富士通なら、富士通/Laheyのコンパイラを使うという手もある。

Fortranは未だコンパイラ市場が存在できてい牙城なので、フリーソフトを排撃してこれを守ってゆこうw



370 名前:デフォルトの名無しさん [2007/03/25(日) 15:33:39 ]
すいません、初心者です。
↓のようなデータを画面に出したいのですが
参考プログラムを教えていただけませんか?
1964/1/1 115 89 80 81 104 154 209 256 287 298 285 260 229 199 176 170 189
1964/1/2 155 111 89 81 91 124 171 227 266 293 292 274 252 221 190 174 181
1964/1/3 191 147 112 92 94 113 151 194 241 271 290 283 267 241 214 189 176
1964/1/4 222 185 147 117 101 107 134 168 208 248 274 284 274 256 233 208 185
1964/1/5 238 213 184 156 134 127 139 164 193 227 259 276 274 267 249 226 204
1964/1/6 248 234 214 190 165 151 149 161 181 206 234 257 267 266 257 243 222
1964/1/7 234 236 229 215 199 184 175 175 184 203 224 241 256 264 259 248 233
1964/1/8 216 228 234 229 221 213 203 192 190 197 210 225 239 252 258 254 243
1964/1/9 193 212 227 237 238 231 220 209 199 194 195 205 217 232 243 250 246
1964/1/10 163 181 203 226 238 243 240 229 217 205 195 196 202 215 232 245 251

371 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 16:33:21 ]
>>370
write(6,'(A)') '1964/1/1 115 89 80 81 104 154 209 256 287 298 285
&260 229 199 176 170 189'
write(6,'(A)') '1964/1/2 155 111 89 81 91 124 171 227 266 293 292
&274 252 221 190 174 181'
write(6,'(A)') '1964/1/3 191 147 112 92 94 113 151 194 241 271 290
& 283 267 241 214 189 176'
write(6,'(A)') '1964/1/4 222 185 147 117 101 107 134 168 208 248 2
&74 284 274 256 233 208 185'
write(6,'(A)') '1964/1/5 238 213 184 156 134 127 139 164 193 227 2
&59 276 274 267 249 226 204'
write(6,'(A)') '1964/1/6 248 234 214 190 165 151 149 161 181 206 2
&34 257 267 266 257 243 222'
write(6,'(A)') '1964/1/7 234 236 229 215 199 184 175 175 184 203 2
&24 241 256 264 259 248 233'
write(6,'(A)') '1964/1/8 216 228 234 229 221 213 203 192 190 197 2
&10 225 239 252 258 254 243'
write(6,'(A)') '1964/1/9 193 212 227 237 238 231 220 209 199 194 1
&95 205 217 232 243 250 246'
write(6,'(A)') '1964/1/10 163 181 203 226 238 243 240 229 217 205
&195 196 202 215 232 245 251'
end


372 名前:デフォルトの名無しさん [2007/03/25(日) 20:01:53 ]
PROGRAM omanko
IMPLICIT NONE
CHARACTER (LEN = 80):: fmt
INTEGER :: iy, im, id, idat(17)
fmt = '(i4, 2("/", i2.0), 17i4 )'
iy = 1964
im = 3
id = 24
idat = (/115, 89, 80, 81, 104, 154, 209, 256, 287, 298, 285, 260, 229, 199, 176, 170, 189/)
WRITE(*, fmt) iy, im, id, idat
STOP
END PROGRAM omanko

373 名前:370 [2007/03/26(月) 12:12:59 ]
>>371
それはDO文でやった方がいいですねw

>>372
年月日のところが上手く表示できなかったので
参考にしてみます。

>>371,372
感謝です。

374 名前:デフォルトの名無しさん [2007/03/26(月) 20:58:14 ]
plato3で作成したプログラムのエグゼファイルのアイコンをアイコンエディターでつくった
アイコンに変えるにはどうしたらいいですか?

375 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 22:11:04 ]
>>374
プラトン先生はよく知らんが、リソースファイル書いてアイコン指定すれば?

376 名前:デフォルトの名無しさん [2007/04/02(月) 21:07:05 ]
Fortranで何ができるのかも良くわかっていないのですが,
データを出力したときにメモリーの状態はどうなっているのか?
ということを教えて下さい.

その内容は
「Fortranでエクセル形式データを出力させた場合,データは一度
メモリーに格納され,エクセルへ出力するのだと思っているのですが,
出力した後,メモリーは開放されるのでしょうか?」ということです.

当方の環境は,
コンパイラ : fujitsu fortran77
OS : WindowsXP Professional


以上,よろしくお願いします.


377 名前:デフォルトの名無しさん [2007/04/02(月) 22:07:34 ]
死にたい

378 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:09:26 ]
>>376
質問の意味が不明瞭だ。

原則としては、プログラムが終了するなら、メモリーは解放される。 

実行中は、静的に確保した部分は確保されたままだし、動的に確保されたものはDEALLOCATE
すれば開放される。




ただしOSやコンパイラにバグがなければ。 
昔のMS-PowerStationにはメモリーリーク・エラーがあって実行中にI/Oがあると、
徐々に使用メモリーが増えていった。


379 名前:デフォルトの名無しさん [2007/04/03(火) 02:15:04 ]
>>377
死ぬなら中国大使館に爆弾持って特攻だ!!





380 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 14:14:52 ]
>>379
FXって言う為替取引で倍率を200倍でやると良いって、死ぬきあるなら博打をしてから詩ねってことだな

381 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 10:24:58 ]
       r'::::::::,:::::::::::::::::::::::\     【USBオナホを実現させる会】に入会しませんか^^^
         \::/::;;;:::::::::::::::::::::::::\
      , ─ -v_;;. -─ ─ ── ─-、このオナホが実現すれば、パソコンにUSB接続して
    | ,   f-‐ ''_ .二 二二二 二._t  対応エロゲを立ち上げてペニスを挿入するだけで
      Y__,rYニニ -- ‐─ ──‐‐─`ー─‐-- 、画面のキャラクターが喘ぐんだよぉ♪
  ,..‐Kノ,h;;::.,-rェ;ェエf7fv!Tl TiTit.、--':::::::::ノ キミの腰の動きに合わせて
  (:::::::::l::::ヽ.|l.|/,|l.1,!H、ト|`  H┼I、l|l |l ト.-‐ ''´ わたしたちがアニメーションするの。
  `,ニl:::::::::レl/!|lイh_ l|`` ,イrマ,イ| |l |レノ     とっても素敵なアイテムでしょっ☆
  く /|:::::::::レl.ィ!ll.l. ー‐'   , kノハト,イレ:::::l
 / / !:::::::::|1l_l.|l.|ゝ"" (.ア  ,仆!|::´:::::::|   ゆっくり動かすと・・・じわじわと感じて、
└t. l l:::::::::N'::: N´ヽ`,,ーr t1リ::レ::::::::::: !   はげしく動かすと・・・失神とかもするんだよ☆
  `ー弋:::::::`:::::::::ゝ ニァ@'ノ::、:::::::::::::::: ノ
     `ー、::::::: /:::::::,イ !ト`ヽ::ヽ:::::, ‐'´  わたしたちとバーチャルで繋がるから
        `ー1::::::└Ll_rー'::::::〉´    もう、即射精しちゃうよねっ☆

 でも・・・USBオナホールは、まだ実現していないの・・・。
 はやくみんなとエッチなことしたいなぁ・・・。
 USBオナホールを実現させて次元を超えたSEXをしましょうねっ☆
 入会方法はとっても簡単。毎週1回どこかのスレに↑をコピペするだけでいいヨ♪


382 名前:デフォルトの名無しさん [2007/04/05(木) 09:23:54 ]
Intel Visual Fortran9.1を使っています.
Fortran90形式でプログラムを書いており,
マトリックスを表示させたいのですが,これに関して質問があります.

現在,2次元配列に格納されたマトリックスを表示するために,

integer         ::  i,j,N
integer,allocatable  ::  A(:,:)
〜〜〜
N=10
allocate(A(1:N,1:N))
A = 123
do i=1,N,1
 write(6,'(100I3)') (A(i,j),j=1,N,1)
enddo

という風にしています.
つまり,横に並べて表示するformatとして 100I3 という風に反復回数を十分大きくとって
対応しています.
この反復回数100の部分を変数にしたいのですが不可能なのでしょうか?

383 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:45:17 ]
>>382
文字型変数で書式を作って渡す。
character(len=20) :: fmt
...
write(fmt, "('(', I5, 'I3)')") N
do i=1,N,1
write(6, fmt) (A(i,j), j=1,N,1)
end do

または、Visual Fortran限定で良ければ書式中の <> 内に整数式を書き込む。
do i=1,N,1
write(6, '(<N>I3)') (A(i,j), j=1,N,1)
end do


384 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:17:58 ]
>>382
これは実はFAQ。このスレでもすでに何回も出てきている。

教科書も少しはこういう事を書けw


385 名前:382 mailto:sage [2007/04/06(金) 06:49:35 ]
>>383
ありがとうございます.
助かりました.

386 名前:デフォルトの名無しさん [2007/04/09(月) 07:37:06 ]
式の前に入れる空白の数によってコンパイルエラーが出たりでなかったりするのですが、
これはどのように決まっているのでしょうか?


387 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 08:30:56 ]
>>386
ソースやエラーメッセージも貼らずに(ry

空白を追加したら1行が73桁以上になった、に10エスパー

388 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 10:26:38 ]
73行以上っていつの時代のコンパイラだよw

389 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 20:02:39 ]
gfortran やIntel Fortran 9.1 でも固定形式ではしっかり73桁目以降を無視してくれますよ。



390 名前:デフォルトの名無しさん [2007/04/09(月) 23:45:40 ]
>>388-389
そうじゃないぞ諸君。
一般的なコンパイラでは拡張子によって、デフォの挙動が変わる。
拡張子が.fや.forの場合は、固定書式になって72カラムモードとなる。
.f90などの場合は自由書式になる。

あと、ワークステーションなどでは、よく同じコンパイラが、コマンドとしてf77とf90呼び出される設定に
なっていて、デフォの挙動を変えて作動する。この場合も、固定書式と自由書式にそれぞれなっている。


まぁFORTRANを使うなら固定書式の爽やかさを味わってみるのもいいだろう。


391 名前:デフォルトの名無しさん [2007/04/13(金) 19:22:44 ]
n(nx,ny)
という配列をバイナリ形式で
write(8)n
という風に書き出した場合、格納順序はどのようになるのでしょうか?
n(1,1),n(1,2)....
でしょうかそれとも
n(1,1),n(2,1)....
あるいは処理系に依存なのでしょうか?


392 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 19:30:32 ]
>>391
n(1,1),n(2,1)....
ただし格納されたデータ形式は処理系依存

393 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:40:47 ]
>>391
FORTRANでは規格でn(1,1),n(2,1)....の順にメモリー上に入っている。
さすがにこれは教科書にも書いてある。

というか、これを知らないと整合配列がらみでF77などでは実用的なサブルーチンとか書けない。
またライブラリを呼ぶにしても引数の意味が理解できないだろう。

まぁマニュアル嫁。


394 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 05:11:11 ]
合同乗積法による乱数生成プログラムを作成しなければならないのですが
どこか参考になるページなどはありませんでしょうか。
かれこれ2、3時間探しているのですが見つかりません。

395 名前:デフォルトの名無しさん [2007/04/17(火) 16:42:15 ]
配列の初期化について質問があります.

以下のプログラム (Fortran90です) のように,
変数宣言部で初期化すると,data文が効かずににMatrixの要素がすべて0になってしまいます.
もちろん変数宣言部を

integer :: Matrix(1:3)

に書き換えるとMatrixの要素はそれぞれ 1, 2, 3 と入ってくれます.

これは一体どういうことなんでしょうか?
最適化を外しても同じです・・
頭が変になりそうです.

!---プログラム-----
program MATRIX_TEST
implicit none
integer :: Matrix(1:3) = 0
data Matrix/1,2,3/
write(6,*) Matrix
end program MATRIX_TEST

396 名前:395 mailto:sage [2007/04/17(火) 17:09:51 ]
色々やった結果,以下のようにしたら期待通りになりました.
変数宣言部で初期化するとsave属性が付くという仕様に気づきませんでした.
data文はsave属性の変数に値を入れることができない(?).
何がなにやら・・

もうdata文を使うのはやめます.

!---プログラム-----
program MATRIX_TEST
implicit none
integer :: Matrix(1:3) = 0
!data Matrix/1,2,3/ ←やめて,下のようにした.
Matrix = (/1,2,3/)
write(6,*) Matrix
end program MATRIX_TEST

397 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 17:48:06 ]
そういえばfortran90ではdata文を使うのはやめましょうっていう記述結構見かけるんだけど、
多次元配列にデータ入れたい場合どうやってます?

たとえば2×2のマトリックスを3個用意する場合。
1次元目がマトリックスを区別し、2次元目が行、3次元目が列を表すものとして、

integer :: A(1:3,1:2,1:2)
data A(1,:,:) /1,2,3,4/
data A(2,:,:) /5,6,7,8/
data A(3,:,:) /9,10,11,12/

に相当するコードをdata文なしでどうやって書きます?
>>396みたく

A(1,:,:) = (/1,2,3,4/)

と書ければいいんだけど、これはコンパイルエラーになる…

変数宣言部で一気に

integer :: A(1:3,1:2,1:2) = (/1,2,3,4,5,6,7,8,9,10,11,12/)

ってやるしかない??
これだと目的の要素に値入れるのにメモリ上の並びを考えないと
いけないので4次元5次元となると、きついっす。


398 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:51:49 ]
>>394
合同乗積法による乱数 でググルとトップにFortranのプログラムが出てくるぞ!
しょんべんで顔洗って出直して来い!

>>395-397
DATA文は実行文ではなく初期化文だ。
F90では初期化が直接出来るので、わざわざDATA文を使う理由がない。

宣言文での初期化とDATA文での初期化のどちらが優先されるのかは、規格書を見ないと分からんが
そんな使い方は想定していないので、たぶんメーカーの実装に依存していると思われる。

A(1,:,:) = (/1,2,3,4/) がうまく行かないのは、次元があっていないから。
RESHAPE関数を使って次元をあわせればおk。これはよく教科書にも載っているので調べそ。


399 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 02:24:37 ]
二項分布のプログラムについてなのですが(硬貨の表裏)、表を0、裏を1とした場合
それぞれが1/2の確率で現す書き方がわかりません。
超初心者ですみません。



400 名前:397 mailto:sage [2007/04/18(水) 06:26:52 ]
>>398
サンクス!
調べてくるお

401 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 07:00:39 ]
すいません、質問させてください。
コンパイル時どうしても
/opt/intel/fc/9.0/lib/for_main.o(.text+0x41): In function `main':
: undefined reference to `MAIN__'
と出てしまうのですが、これはどういう事なのでしょうか。

402 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 09:56:11 ]
>>399
0以上1未満を返す乱数のサブルーチンは用意してあるとする。
このとき0以上0.5未満だったら表、0.5以上1未満だったら裏とすればよい。

>>401
確認していないので想像で書くw
メインルーチンが無いだけじゃない?プログラム文が無いとか。
昔のHITACのFORTRANだと、サブルーチン名をMAINにすると、
それをスタートアップルーチンと勘違いしていきなりそこから実行が始まるウンコ仕様だったがw

403 名前:399 mailto:sage [2007/04/18(水) 14:43:32 ]
なるほど。。
やってみます。ありがとうございました。

404 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 16:08:05 ]
NaNを検出するような関数ないですか・・

405 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 16:16:14 ]
すみません自己解決しました
isnan(real)でした

406 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 22:32:46 ]
>>404-405
IEEEのフラグがらみの関数はFortran2003で導入される予定なので、それはコンパイラ独自の拡張。
コンパイラの種類などを書かないと、誰も答えられないし、何の情報にもならん。
おまんこ。

407 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 13:18:38 ]
g77はFortran90の機能も内包しているのですか?

408 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 14:44:17 ]
YES
おまんこ。

409 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 16:08:24 ]
>>407
ちょっとだけだけどな。



410 名前:デフォルトの名無しさん [2007/04/23(月) 14:23:26 ]
実行時間を計ろうと思って色々検索したら,dtimeというサブルーチンが
用意されていると知り,使ってみたのですが,よくわからないエラーが発生してしまいました.

>>410のプログラムをコンパイル&実行すると,なぜか出力がNaNになってしまいます.

call dtimeを削除すると期待した値が出るのですが,なんでこんなことになるのかわかりません…
どなたか助けて下さい (´;ω;`)
ただdtimeがfortran標準でないという記述も見かけたので,使わない方がいいのでしょうか…

コンパイラはIntel Visual Fortran 9.1で,コマンドは f90 /check:all /Od test.f90 でした.

411 名前:410 [2007/04/23(月) 14:24:32 ]
すみません>>410ではなくて>>411です orz

!-- test.f90--
program test
implicit none
real(8) :: x,y
call SUB
x = 11.d0
y = Func(X)
write(6,*) y

contains
subroutine SUB
implicit none
real tarray(2),result
call dtime(tarray,result)
call dtime(tarray,result)
return
end subroutine SUB

complex(8) function Func(x)
implicit none
complex(8),parameter :: IU=(0.d0,1.d0)
real(8),intent(in) :: x
Func = exp(IU*x)/sqrt(2.d0)
return
end function Func
end program test

412 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 14:56:37 ]
>>410
Intel Visual Fortranの DTIME は引数が1つの関数だ。サブルーチンじゃない。
SUB の先頭に USE IFPORT をつければちゃんとコンパイル時にチェックしてエラーを出してくれる。

413 名前:410 mailto:sage [2007/04/23(月) 16:33:19 ]
>>412
アッー!たしかにそうです!
ライブラリ・リファレンスに書いてました・・・・・
ありがとうございました!


414 名前:デフォルトの名無しさん [2007/04/24(火) 15:35:00 ]
(1) 2×2の行列A,B の要素を入力し,A+B とAB およびA−1 計算する部分をそれぞれサブル
ーチンとするプログラムを作成せよ.

415 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 15:40:12 ]
A-1ってA-I(もしくはE)のことか?

416 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 15:41:13 ]
ああ、逆行列のことか。スマン。

417 名前:1/2 mailto:sage [2007/04/24(火) 18:53:50 ]
>>414
program main
use la_precision, only: WP => DP
implicit none
integer, parameter :: N = 2
real(WP), dimension(N,N) :: A, B, C, D, E
print *, "input A:"
call sub_read(A)
print *, "input B:"
call sub_read(B)
call sub_add(A, B, C)
print *, "A + B ="
call sub_write(C)
call sub_mul(A, B, D)
print *, "AB ="
call sub_write(D)
call sub_inv(A, E)
print *, "inv(A) ="
call sub_write(E)


418 名前:2/2 mailto:sage [2007/04/24(火) 18:55:08 ]
contains
subroutine sub_read(X)
real(WP), intent(out) :: X(N,N)
integer :: i, j
do i = 1, n; read *, (X(i,j), j=1,N); end do
end subroutine sub_read
subroutine sub_write(X)
real(WP), intent(in) :: X(N,N)
integer :: i, j
do i = 1, n; print *, (X(i,j), j=1,N); end do
end subroutine sub_write
subroutine sub_add(X, Y, Z)
real(WP), intent(in) :: X(N,N), Y(N,N)
real(WP), intent(out) :: Z(N,N)
Z = X + Y
end subroutine sub_add
subroutine sub_mul(X, Y, Z)
real(WP), intent(in) :: X(N,N), Y(N,N)
real(WP), intent(out) :: Z(N,N)
Z = matmul(X, Y)
end subroutine sub_mul
subroutine sub_inv(X, Y)
use f95_lapack, only: la_getrf, la_getri
real(WP), intent(in) :: X(N,N)
real(WP), intent(inout) :: Y(N,N)
integer :: ipiv(N)
Y = X
call la_getrf(Y, ipiv)
call la_getri(Y, ipiv)
end subroutine sub_inv
end program main

419 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 00:54:13 ]
>>417-418
正直なところ、たかがこれしきの行列演算をサブルーチンにする意味が分からん。

おまけに逆行列はLAPACK使ってるし。2*2限定なら高校で習う公式で十分だろ。

すべてがjokeなのかもしれないが



420 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 02:18:40 ]
宿題か何かなんじゃないか?
っていうか超初心者用スレなんだから
サブルーチンにする意味なんか問うな。
Hello worldなんか意味がないとか言っているのと同じだ。

421 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 00:00:42 ]
>>421
たぶんFORTRAN77での宿題なんでね?
Fortran90では意味を成さない希ガス。






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

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

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