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


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

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



1 名前:デフォルトの名無しさん [2006/01/24(火) 09:48:23 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、 
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 
FORTRAN使いが優しくコメントを返しますが、 
お礼はFORTRANの布教と初心者の救済をお願いします。 


301 名前:デフォルトの名無しさん [2006/05/10(水) 17:17:37 ]
Fortran90で直行座標(x,y,z)を極座標(r,θ,Φ)に変換するプログラムを作れ。
って課題が出たのですがわかりません。教えて下さいm(._.)m

302 名前:デフォルトの名無しさん [2006/05/10(水) 19:38:12 ]
>>301
「直交座標 極座標」でググればすぐ出て来るだろう、というのは置いといて
なんのひねりもなく作ると、

program hoge
 implicit none
 real, parameter :: PI = 3.14159265
 real :: x, y, z, r, th, ph
 
 print *, "x, y, z:"
 read *, x, y, z
 r = sqrt(x**2 + y**2 + z**2)
 th = acos(z / r)
 ph = atan2(y, x)
 print *, "r, θ, φ"
 print "(3F12.3)", r, th*180.0/PI, ph*180.0/PI
end program hoge

303 名前:デフォルトの名無しさん [2006/05/16(火) 00:19:31 ]
はじめて書き込みます。
大学の先輩にFortranのソースプログラム(?)をもらって、それをインストールしたCOMPAQ VISUAL FORTRANで動かそうとしてます
でもコンパイルすると、
Can't open indirect file C:DOCUME~1
みたいなエラー文が出ます。これはどういう事なんでしょうか?


304 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 00:32:43 ]
>>303
ソースのパスが空白や日本語を含まないようにして(例えば"D:\TEST\HOGE.FOR")
再トライ

305 名前:デフォルトの名無しさん [2006/05/16(火) 16:21:12 ]
303です
304さんありがとうございました
エラーなくコンパイルし、実行できました

306 名前:デフォルトの名無しさん [2006/05/16(火) 18:30:45 ]
実行ファイルで条件を入力し、Enterを押すとすぐにウィンドウが消えてしまうのですが、どうしたらいいでしょうか?違うパソコンではそういう状態になりませんでした。

307 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 20:40:49 ]
>>306
いくら何でも情報少なすぎ。
少なくともどんな環境で実行したか位は書いとかんと、まともの答えてもらえんぞ。

まあとりあえず、プログラムの最後に
read *
とか
pause
とか書いとけや。

308 名前:デフォルトの名無しさん [2006/05/16(火) 21:13:52 ]
学校のソフトを使ったので詳しい名前はわかりませんが、fujitsu fortran90
とかいう名前だったと思います。学校のパソコンでファイルを実行したとき
は、条件の値を入力したら答えが出て、答えが出た状態でキーボードに
触れるとプログラムウィンドウが閉じていたんですが、自分のパソコン
(NEC VALUESTAR Pentium4)で実行したときは条件の値を入力した瞬間
にプログラムウィンドウが閉じてしまいます。307さんのアドバイス通りに
最後にpauseと書いたらウィンドウが勝手に閉じることはなくなりましたが、
それでは根本的に解決していないのでまだ困ってます。

309 名前:デフォルトの名無しさん [2006/05/16(火) 23:43:41 ]
>>308
何がしたいのか今一よくわからないんですが…
使っているOSと自分のパソコンに入ってるコンパイラは何ですか?

学校のFujitsu Fortranの開発環境で実行して終了後一時停止していたプログラムを
自分のパソコンでexeファイルをダブルクリックして起動したときでもソースを変更せずに
同じように終了後一時停止するようにしたい。

というのなら>>307の様にして終了直前にキー入力待ちにして止めるか、
コマンドプロンプトを開いてその上で実行しないと無理ですよ。



310 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:44:43 ]
初心者ですがフリーのをDLしてやってみたんですが、あるプログラム
を実行したら入力させる画面が出て、入力したら答えが出ないで、プログラム
が終了してしまいます。どうしたらいいでしょうか?ちなみに正常にコンパイル
されています。

311 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:55:17 ]
>>310
>>309

312 名前:306=308 [2006/05/18(木) 22:21:21 ]
>>309
>コマンドプロンプトを開いてその上で実行

ありがとうございます、解決しました。

313 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 14:54:18 ]
m組の変数xと関数f(x)の値を読み込み、x0に対するf(x0)の値をLagrange内挿する
関数副プログラムを作りなさい。また主プログラムを付けて、
次のデーターに対してf(0.525)を内挿してみなさい。

x f(x)
0.0 1.0
0.1 0.90484
0.2 0.81873
0.3 0.74082
0.4 0.67032
0.5 0.60653
0.6 0.54881

1次〜6次の内挿による解の精度も調べなさい。

参考

dimension XI(N),FI(N)
RLAGRN=0.0
do 20 I=1,N
F=FI(I)
do 10 J=1,N
if(J.ne.I) P=P*(X-XI(J))/(XI(I)-XI(J))
10 continue
20 RLAGRN=RLAGRN+P
return
end

御願いします

314 名前:デフォルトの名無しさん [2006/05/21(日) 21:22:53 ]
放物運動で時刻t、角度θの任意の物体の位置のソースファイル?はあるのですが角度を30度、45度、60度の3通りに
ついて計算し、すべての軌跡を出力せよ。との問題に全く手がでません。
ヒントとして配列を用いて3つの角度をプログラム内で定義する。とあるのですがよくわかりません。
どなたか教えて下さい。
お願いします。

315 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 21:32:10 ]
>>314
元のソースがどんなのか知らんが、「配列を用いて」というところからすると
角度と配列を渡すとその配列に結果を格納するサブルーチンを作って
それを3回CALLすればいいんじゃないの?

316 名前:デフォルトの名無しさん [2006/05/21(日) 21:51:35 ]

すいません初心者なんでCALLとかわかんないです・・・
テキストには
dimension angle(3)
data angle/30.,45.,60./
・・・・・・・
do 20 i=1,3
theta=angle(i)*PI/180.
t=0.
10 continue
・・・・・・・
if(y.lt.0.) then
go to 20
else
go to 10
end if
20 continue
close(1)
end
と書いてあるんですが
・・・・・・
を考える課題なんですけど本当にわかりません。
教えて下さい。

317 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 23:00:36 ]
>>316
配列って角度の方を配列にしてるのね・・・

まあ、プログラムを見る限り、最初の「・・・・・・・」の部分で
・データファイルをOPEN文で開く
次の「・・・・・・・」の部分で
・角度theta、時間t、などから位置x、yを求める

ということなのだろうけど
・初速度や初期位置は既知なのか、自分で決めるのか、ファイルから読み込むのか
・データファイルの書式は?
など不明な点があるのでこれ以上は自分でおやりなさい。

いずれにせよ情報を小出しにされたのではエスパーでもない限り「本当にわかりません」。

318 名前:デフォルトの名無しさん [2006/05/21(日) 23:58:11 ]
1からNまでの整数について、次のそれぞれの分類に属する整数の数を数えて表示するプログラムを作成せよ。
・3の倍数であり、5の倍数でもあるもの
・3の倍数であるが、5の倍数ではないもの
・3の倍数でも5の倍数でもないもの



誰か教えてください。

319 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 00:30:10 ]
プログラムというか数字の扱いの勉強したら?
高校数学あたり。



320 名前:デフォルトの名無しさん [2006/05/22(月) 01:09:08 ]
>>319
ここはどんな質問にもマジレスする擦れです。
宿題も教えまくりますw



321 名前:デフォルトの名無しさん [2006/05/22(月) 01:27:09 ]
>>318 FORT77で書いてみたw 英語はうんこw

PROGRAM vip
WRITE(*, *) ' INPUT N'
READ (*, *) N
N1 = 0
N2 = 0
N3 = 0
DO I = 1, N
M3 = MOD(I, 3)
M5 = MOD(I, 5)
IF (M3 .EQ. 0 .AND. M5 .EQ. 0) N1 = N1 + 1
IF (M3 .EQ. 0 .AND. M5 .NE. 0) N2 = N2 + 1
IF (M3 .NE. 0 .AND. M5 .NE. 0) N3 = N3 + 1
END DO
WRITE (*, *) ' The number of multples of both 3 and of 5', N1
WRITE (*, *) ' The number of multples of 3 but not of 5 ', N2
WRITE (*, *) ' The number of multples not of 3 nor of 5 ', N3
STOP
END

>>320 専ブラ用インデント


322 名前:デフォルトの名無しさん [2006/05/22(月) 01:35:53 ]
>>314,316
出された情報だけでは解けない。
初速度が必要だが、それがファイルに入っているのだろうか?
重力常数も必要だがどうするか?(まぁ知ってはいるが、問題が地球とは限らないかもww)

もうちょっと情報出せ。
テキストプログラムを見る限り出題者はセンス悪いw 
このスレで素直な良い手筋を学べ


323 名前:デフォルトの名無しさん [2006/05/22(月) 02:27:10 ]
>>313 F90でエラーチェックなしウンコプログラムw
PROGRAM Lagrange
IMPLICIT NONE
INTEGER, PARAMETER :: n = 7
INTEGER :: i
REAL :: xin(n), yin(n), x, y
OPEN (10, FILE = 'input.dat')
DO i = 1, n
READ(10, *) xin(i), yin(i)
END DO
x = 0.525
y = alagran(x, 6, xin, yin)
WRITE(*, *) ' x, f(x) =', x, y
STOP
CONTAINS
REAL FUNCTION alagran(x, n, xin, yin)
IMPLICIT NONE
REAL , INTENT(IN) :: x, xin(:), yin(:)
INTEGER, INTENT(IN) :: n
REAL :: tmp
INTEGER :: i, j
alagran = 0.0
DO i = 1, n
tmp = yin(i)
DO j = 1, n
IF (j /= i) tmp = tmp * (x - xin(j)) / (xin(i) - xin(j))
END DO
alagran = alagran + tmp
END DO
END FUNCTION alagran
END PROGRAM Lagrange


324 名前:デフォルトの名無しさん [2006/05/22(月) 02:42:50 ]
>>323 ごめw まちがい このままだと5次w

y = alagran(x, 6, xin, yin)

y = alagran(x, n, xin, yin)

でw

とりあえず、答えは
x, f(x) = 0.5250000 0.591555
のはずw

間違ってても知らんw
ほぼ直線に乗っているのでまぁこんな感じ?

ラグランジュ法はデータの差分の漸化式で計算するほうが一般的なだが
とりあえず参照として出されたサブルーチンと同じく公式どおりに書いた。

1〜6次までの誤差の見積もりのほうは、課題の雰囲気からすれば、まじめな誤差解析は要求して
いないだろうから、0.6と0.5・・・・0.0まで逆進する方向でデータを増やしてサブルーチンを呼んだ
結果を書いて何事かムジャムジャ言えばよかろうw





325 名前:デフォルトの名無しさん [2006/05/22(月) 02:47:20 ]
>>325

DO i = 1, 6
! y = alagran(x, n, xin, yin)
y = alagran(x, i + 1, xin(7 - i:7), yin(7 - i:7))
WRITE(*, *) ' i, x, f(x) =', i, x, y
END DO

i, x, f(x) = 1 0.5250000 0.5921000
i, x, f(x) = 2 0.5250000 0.5915309
i, x, f(x) = 3 0.5250000 0.5915560
i, x, f(x) = 4 0.5250000 0.5915547
i, x, f(x) = 5 0.5250000 0.5915551
i, x, f(x) = 6 0.5250000 0.5915558

こんな感じか? 
誤差が0.1^Nに比例しているとか書けばいいのだろうか?w

ttp://www.library.cornell.edu/nr/bookfpdf/f3-1.pdf
この辺でも読みやがれですぅ


326 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 00:11:48 ]
n個の実数データを配列datに読み込み、読み込んだデータを降順に出力する。
ただし、データを読み込んだ配列の中身は変更せず、別に整数型の配列indexを
用意して、大きい順の並びが
dat(index(1)),dat(index(2)),・・・,dat(index(n))
であたえられるようにする。つまり次のような出力命令
do 30 i=1,n
write(*,*)dat(index(i))
30 continue
によって、データが降順に出力されるようにせよ。

という課題がでたのですが、fortran77の形で教えていただけませんか?
よろしくお願いします<m(__)m>

327 名前:デフォルトの名無しさん [2006/05/24(水) 00:49:46 ]
NAGのFortranBuilderの試用版が無料セミナーで配布されるらしい
以下参照
【日時】 5月31日(水)13時30分〜(13時開場)
【場所】 英国大使館 (東京都千代田区一番町1)
【地図】 www.nag-j.co.jp/fbreleasemap.htm
【内容】 
1:Fortran Builderのご紹介(Fortran Builder開発者 中野 剛)
Fortran Builderの機能、製品コンセプト、事例ご紹介.デモンストレーションなど
2:プログラミング学習とe-Learning
 (法政大学情報メディア教育研究センター所長 竹内 則雄 教授)
プログラミング言語学習用電子ブックと開発環境が連動した体験的なFortran
プログラミング学習環境の概要と、対面授業やe-Learningでのその効用について
3: NAGWare f95 and reliable, portable programming
 (英国NAG NAGWare Fortranコンパイラ開発者、マルコム・コーエン)
How to detect errors using NAGWare f95,and how to write portable,
reliable programs.Support for features from the latest Fortran standard
and plans for future releases.   
4: Fortran Builder を使った数値計算 (筑波大学 長谷川 秀彦 助教授)
行列計算パッケージ LAPACK の紹介と Fortran Builder を利用したLAPACK の手軽な使い方について
5:Fortran Builder 体験コーナー・30日トライアル試用版配布・
ノベリティ配布など もちろん無料です。
英国大使館の警備都合上事前にご登録をお願いしております。
下記URLフォームにて参加登録ができます。


328 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 01:27:04 ]
>>326
特に指定がなかったので解りやすく(?)バブルソートでやってみますた。
   parameter (n=10)
   real dat(n)
   integer index(n)
C
   do 10 i=1,n
    read(*,*) dat(i)
    index(i) = i
  10 continue
C
   do 22 i=1,n-1
    do 21 j=1,n-i
     if (dat(index(j)) .lt. dat(index(j+1))) then
      ntmp = index(j)
      index(j) = index(j+1)
      index(j+1) = ntmp
     end if
  21  continue
  22 continue
C
   do 30 i=1,n
    write(*,*) dat(index(i))
  30 continue
   stop
   end

処理系によっては配列の宣言部分でエラーになるかも知れないので
その時は適時修正のこと。
#F77形式で、って言われるとここが一番難しいかもw

329 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 13:00:42 ]
>>328選択法でプログラミングしてもらえませんか?



330 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 13:35:10 ]
>>329
オレが口をだすべきではないと思うが、苦言を一言。
モノの頼み方を知ってるのか?

このスレはフォートランの超初心者向けではあるが、
人生の超初心者(不躾な厨房)向けではないぞ。

質問をするなら、回答者が答えやすいように、できるだけ詳しく書く。
最も簡単な方法は、(要約などせず)出題内容をすべて書く。
直接選択法の解が必要なら、最初から書け。

労を厭わず、回答案を出してもらえたら、
最初の一言は「ありがとうございます」だ。
次に、再要望であったり、回答内容に対する質問だ。

331 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 15:48:54 ]
>>330
申し訳ありません。
バブルソートでの解に関しましては、御礼申し上げます。
もし、気分を害されてないようでしたら、直接選択法の解をお願いできませんか?

332 名前:デフォルトの名無しさん [2006/05/24(水) 16:16:20 ]
>>330
まぁそうなんだけどさ,ここは2chだし,いいんでないのw

Fortran人口を増やすためにも甘い水で誘うべしw


333 名前:330 mailto:sage [2006/05/24(水) 16:34:51 ]
>>331
オレじゃなくて、>>328 に 感謝して、非礼を詫びろ。

>>332 たしかにそうとも思うが、
そういう教育はだれかがしなければ、
会社に入って恥をかくまで治らないと思う。
社会人になっても治らないものもいるが。orz

Fortran 人口を増やすには、説教より回答が一番だな。
328 えらい。オレばか。orz

334 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 18:18:04 ]
>>331
ほれ、>>328の真ん中のループの所を入れ替えれ。

do 22 i = 1, n-1
imax = i
do 21 j = i+1, n
if (dat(index(imax)) .lt. dat(index(j))) imax = j
21 continue
ntmp = index(i)
index(i) = index(imax)
index(imax) = ntmp
22 continue

君の行動を称えて以下の文章を贈ろう。
コレをよく読んで今後も精進に励め。(どう励むかはお前次第だ)
www.redout.net/data/osietekun.html

>>333
まあそう気にしなさるな。
ここに宿題を丸投げして後で苦労するのも、社会に出てからちんぷんかんぷんな
質問をして恥をかくのも、全て本人の自己責任ってやつだ。

335 名前:デフォルトの名無しさん [2006/05/24(水) 23:01:32 ]
  WRITE(*,'(A5$)')name(i)
のような書式で、表示位置を決める定数"5"の部分をREAD文で読み取って
任意の値に変更できるようにしたいのですが、
どうすればいいでしょうか?

ちなみに
  num=5
 1000 FORMAT(Anum$)
  WRITE(*,1000)name(i)
と書いたのですがうまくいきませんでした。

336 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 23:58:55 ]
>>335
1. 上の方でも出てきているが、<>の中に変数名(整数式)を書く(ただし、一部の処理系の拡張形式)
   write(*,'(A<num>$)') name(i)

2. 文字列の書式を書き込む
   character*10 str
   ・・・
   write(str, '(''(A'',I3,''$)'')') num
   write(*,str) name(i)


337 名前:デフォルトの名無しさん [2006/05/25(木) 00:27:03 ]
>>336
内部ファイルは便利なのに知られていないよう棚。もっと啓蒙が必要なようだ。
FAQにでも入れておきたいところだw

>>335
■必要な第1の知識
FORTMATは
1.FORMAT文で与える。
2.文字常数として与える。
3.文字変数として与える。
という、3通りの方法がある。

たとえば
.....1.FORMAT(A13)
.......WRITE(6, 1) 'WE ARE VIPPER'

.......WRITE(6, '(A13)') 'WE ARE VIPPER'
と等価だし
......CHARACTER*10 fmt
......fmt = '(A13)'
......WRITE(6, fmt) 'WE ARE VIPPER'
とも等価である。

■必要な第2の知識
内部ファイルというものがある。これは文字列がファイルのように読み書きできるということを意味する。

WRITE(9, '(A)' ) ' chin chin man man ' ! これはファイルの9番に文字列を書き出している。
WRITE(fmt, '(A)') ' okki '          ! これは文字列fmtに文字列を書き出している。

ちなみにREAD文でも同様のことができる。
これを利用すれば、好みのfmt文を実行時に動的に生成できる。
文字列操作を使ってもいいが、この方が数値を文字列として書き込むのが楽勝でできる。

338 名前:デフォルトの名無しさん [2006/05/26(金) 02:28:39 ]
無料のWindows用のコンパイラはありませんか?

339 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:41:15 ]
>>338
g77(gccに入ってる)
Salford f77



340 名前:335 mailto:sage [2006/05/26(金) 02:56:34 ]
できました!短時間に二人もありがとうございます!
>337さんの
WRITE(9, '(A)' ) ' chin chin man man '
が顔に見えてちょっとうれしいです。

341 名前:sage [2006/05/26(金) 12:39:43 ]
>338
g95
ttp://www.g95.org/

342 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 15:17:28 ]
>>334
ありがとうございます。
よい勉強になりました。

343 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:05:21 ]
fortranの遺産があるんですが・・・
なぜか配列の出力が20行ごとw
むかしの名残なんでしょうか?

ってか計算だけfortranでやらせてGUI?はほかの言語でやるにはどうしたらいいの?
オシエテ

344 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 10:12:01 ]
あとゎぁ書式の指定で
format(500i4)
ここの500のところを定数とかで指定できないの?

345 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:37:12 ]
>>344
最初から読めとまでは言わないけれど、
10前のレスくらい読もうよ。

>>335-336
答えそのものではないけれど、ほぼ回答。

>>337
少し難しいけれど、極めて有益な情報。

346 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:42:13 ]
サンクスwww
くそふるいマニュアル本みててもわからないわけだ・・・w

347 名前:デフォルトの名無しさん [2006/05/27(土) 15:25:28 ]
>>343
大体はFORTRAN側をDLLにしてVBやDelphiなんかで処理しているみたいだな.

まぁ,GUIもFORTRANでやってる連中もそれなりにいるようだ.

Intelの質問掲示板に行けばうまくいかねーとウンウンうなっている人たちに出会えるw
ttp://softwareforums.intel.com/ids/board?board.id=5


348 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 18:56:55 ]
FTN95でコンパイルしたんですが,
オブジェクトファイルができただけで,
この後どうやって実行すればいいのか教えてください.

349 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:16:08 ]
>>348
1. コンパイル時に「/LINK」オプションを付ける。
例: ftn95 hoge.f90 /link

2. コンパイルが正常終了したら、おもむろにプログラム名を入力してEnterを押す。
例: hoge

3. スプラッシュが消えるまで全裸正座で待機。
例:
 +   +
   ∧_∧  +
  (0゚・∀・)   ワクワクテカテカ
  (0゚∪ ∪ +        
  と__)__) +




350 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 21:56:58 ]
>>349
おお!できました.ありがとうございます。
ちょうど風呂からでたところなので助かりましたw

351 名前:デフォルトの名無しさん [2006/05/28(日) 00:27:25 ]
      (______________ J
 そ 君  (__          ┌―‐―┐    ) き
 ん !  (_             |`l TT了|     }  ゃ
 な     (_           j .| .|:| .l |     /  あ
 か 待  (_            | | .|j .j |     イ  |
. っ ち  (,_             |.| .|l .|:|  ,. -‐ /_.  っ
 こ  た  (               |.|. |! |/     / !
 う  ま  (`           `ー /..:::::\≧,,,、:::7___
 で え  (―――――――――(:::::::>'´ == \::⌒l^⌒
_     (⌒ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ノ く彡/// ∪,ノ   ;|
.レ⌒Y^'⌒`\________ く:::::∧ '_,. -、 く/::::::::/
   |:::| \xく    _,,,...,_       \:::::l、ヽ ,ノ  \,,∠,,__
 \|:::| _,....!,,_ \  iれ__,.、ヽ      lF〒`ヾ.\,,..イ    |::::::::,
   `7´ _,,.ィ  ヽ{|iュ ェッリ      | ||  _,..-/7゙h _|:::::://
 \.{n|.ィァ it}    ', _'_ j)    r'"三¨7´\|    |´.|:::://
   |:::トl、 rュj .    ト ニ イl、  / ゚`.|n./  .イl   ,∧ |:://
   |::,|  'ーケトr'TTlイ  /_`ヾtっ r'l゙    /⌒`lくミV /
 ,r1´|`'六´ //` ̄´ `Y´     |└┬シj  ./ 7ヽ〈  /ヾ)<
./ | ∨|::|∨ ! { r  ,、 _,シ /゙丁〈 /      } { { \
  |   ',|::|/ !  ,ゝ-< (   /   .| |/     ∧ \|
   l  .Y。 .|  |`  〃 ̄ ̄⌒  / 〈     /! ', __,,....::-‐
  .∧.  |。 {  ゙爪` ' ‐- 、..,,,...イ   '、   / .|  `|::::::::::::::::
\/  l  |。./  ,l | l,  .|  .  ||    `'ー' i |  j:::::::::::::::::
ヽ、`'::、L.∧/  / |.{  u   〈.|        イ 〈  /::::/:::::::::::
::::::::`ヽ、 ∨  / ̄| | 、   /  l:l.       | j /::::/:::::::::::::
:::::\::::.....  ̄`|   l |  鬱鬱  .l:l//    l| ∨:::/::::::::::::::::



352 名前:デフォルトの名無しさん [2006/05/28(日) 02:32:45 ]
いいかお前らにためになるお言葉を言い渡しておこう。
「問題はレベルの高いプログラム言語を使うか、レベルの低いプログラム言語をつかうか
 といったことではない、そうではなくて、
 レベルの高いプログラム言語を使うか、もしくはレベルの高いプログラム言語処理系を低レベル言語で作成するか、
 ということだ。」

つまりフォートランなんかいまさら使っている時点で負け組み。
それで半ばコンピュータの専門か気取ってる痛いやつが多すぎなんだよw

353 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 02:59:53 ]
日本語でおk

354 名前:デフォルトの名無しさん [2006/05/31(水) 01:01:28 ]
さて、諸君。次の問題を持ってきたまへ。

355 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 17:45:37 ]
RoR じゃなくて FoR はありませんか

356 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 18:36:58 ]
駐車料金を計算するプログラム
料金は30分単位で切り上げて計算される
最初の一時間まで300円/30分
一時間を越えると200円/30分
入力は実数型 2,35(2時間35分)
この実数を引数で関数の値が料金のFunctionをつくり使用する

↑のような宿題が出たのですがFortran77の型で誰かお願いします

357 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 19:49:52 ]
>>356
program parking
read(*,*) hour,fmin
write(*,*) ifee(hour,fmin)
stop
end

function ifee(hour,fmin)
totalmin=hour*60.+fmin
if(totalmin.le.60.) then
ifee=300*int(totalmin/30)
if(totalmin-30.*int(totalmin)/30.gt.0.) ifee=ifee+300
else
ifee=600+200*int(totalmin-60.)/30
if(totalmin-30.*int(totalmin-60.)/30.gt.0.) ifee=ifee+200
endif
return
end



358 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:09:21 ]
>>357
ありがとうございます

359 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 21:18:09 ]
あ、忘れてたのですが最高課税額が4000円になるようにしてもらえませんか
本当に申し訳ない><



360 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 22:26:55 ]
>>359
357 じゃないけど。
せっかくプログラムがあるんだから、
いろいろいじってみようよ。
ヒント:if 文 をどこかに一行いれる。

361 名前:357 mailto:sage [2006/06/01(木) 11:32:39 ]
慌てて作ったら間違っていたみたい。
それを修正するのも良い勉強になるでしょう。
あと、変数に7文字以上使っているのも問題かも。
実は厳密なFORTRAN77を知らない。

362 名前:デフォルトの名無しさん [2006/06/01(木) 17:35:24 ]
>>361
それ以前に小文字を使っているぞいw




363 名前:357 mailto:sage [2006/06/01(木) 20:21:52 ]
そういやそうだったねorz。字下げもしない方が良かったかな。

364 名前:デフォルトの名無しさん [2006/06/01(木) 23:33:12 ]
1/√π×exp(-x^2)は中央値0、偏差1の正規分布曲線を与える。
〔-1、1〕および〔-2、2〕の範囲に存在する確率はいくらか。台形法で求めよ。

学校の課題なのですがわかる方いたらお願いします。
先生いきなり難しいよ・・・

365 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 23:47:33 ]
小学生の算数じゃなかったか?>台形面積

366 名前:デフォルトの名無しさん [2006/06/02(金) 01:38:52 ]
>>363
いや字下げは文法にかなっているからおk
FORTRAN77までは大文字のみが文法で規定されていた。
小文字は見にくくてキモスw

>>365
おまえは>>1を読み返せ!

このスレは糞既出FAQにも丁寧にマジレスし、宿題も文句も言わずに解いてやり、
FORTRAN依存症を作り出して初心者をFORTRAN Userに引き込む秘密結社の陰謀だ。

まぁ本スレの方ならなじった上で、こっちのスレに誘導してくれればおkwww



367 名前:1/2 mailto:sage [2006/06/02(金) 02:31:16 ]
>>364 Fortran90で難しく書いてみた。が、少しイモくさいw

MODULE mod_integ
IMPLICIT NONE
REAL :: pi
CONTAINS
REAL FUNCTION trapez(n, xmin, xmax)
IMPLICIT NONE
INTEGER, INTENT(IN) :: n
REAL , INTENT(IN) :: xmin, xmax
INTEGER :: i
REAL :: h, x
h = (xmax - xmin) / n
trapez = 0.0
DO i = 1, n
x = xmin + (i - 1) * h
trapez = trapez + sub_trapez(x, h)
END DO
RETURN
END FUNCTION trapez


368 名前:2/2 [2006/06/02(金) 02:32:02 ]
REAL FUNCTION sub_trapez(x, h)
IMPLICIT NONE
REAL, INTENT(IN) :: x, h
sub_trapez = 0.5 * h * ( func(x) + func(x + h) )
RETURN
CONTAINS
REAL FUNCTION func(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
func = EXP( -x**2 ) / SQRT(pi)
RETURN
END FUNCTION func
END FUNCTION sub_trapez
END MODULE mod_integ
!
PROGRAM oppai
USE mod_integ
IMPLICIT NONE
INTEGER :: i
REAL :: s, s1, s2
pi = 4.0 * ATAN(1.0) ! arctan(1.0) = pi / 4; tan(pi/4) = 1.0
! [-1..1]
s1 = trapez(100, -1.0, 0.0)
! [-2..2]
s2 = trapez(200, -2.0, 2.0)
! [-inf..+inf]
s = trapez(1000, -10.0, 10.0)
PRINT *, s, s1, s2
STOP
END PROGRAM oppai
>>367-368

369 名前:367 [2006/06/02(金) 02:53:47 ]
実行結果
0.9999998 0.4213469 0.9953194
Press any key to continue

微妙に問題の偏差の定義などが一般的な統計の場合とずれているが、
ここでの定義を信じてゆくことにするw

正規分布の−∞〜+∞の積分は1になるように規格化してあるはず。
(√π)で割っている部分。それを確かめたのが変数s。
ただし積分範囲は−10〜+10までにしている。
無限大じゃないじゃんか!というかもしれないが、これでも有効数字の範囲では
もう無限大と変わりない。というか、関数は0になっている。
誤差は台形公式の誤差だろう。分割数n(分割の間隔)を変えると調べられる。

-1..1の積分は約0.421、-2..2までの積分は約0.995になっている。
つまり、−∞から+∞まで積分すると1.0になるはずものだが、
−2〜+2までの範囲で約99.5%が尽くされることが分かる。

プログラムでは、メインルーチンは積分範囲を指定して積分ルーチンを呼んでいる。
サブルーチンはモジュールの中に入れてある。
台形(trapezoid)積分は、等間隔にx軸を切ってそれを台形の高さとし、それぞれの
小さな台形の面積の和を返している。小さな台形の面先はさらに台形面積を返す
ルーチンを呼び出している。小さな台形の面積を返すルーチンは正規分布関数の
値を返すルーチンを呼んでいる。

・プログラム
 ・積分ルーチン
   ・台形面積ルーチン
     ・正規関数ルーチン

FORTRAN77で書いてほしければ、はじめから遠慮せずに言うようにw




370 名前:367 mailto:sage [2006/06/02(金) 02:55:02 ]
なお、間違っていても謝罪も賠償もしないので4649!

371 名前:364 [2006/06/02(金) 03:07:46 ]
ありがとうございます!77とか90とかよくわかりません。学校のパソコンはどっちだろう・・・
これをテラパッドに入力してシグインで実行するわけですな

372 名前:367 [2006/06/02(金) 11:19:01 ]
>>371
! [-1..1]
s1 = trapez(100, -1.0, 0.0)
これまちがいw ごめw でも賠償は(ry
正しくは、s1 = trapez(100, -1.0, 1.0) 面積は0.8426729

積分範囲がまちがって-1.0〜0.0になってたwwwwwww
なんか値がおかしいと思ったのだがw 標準偏差の定義が標準と異なるので
表で値を確かめるときに換算を間違えておkと思ってしまったwww
ま、宴会から帰ってきた夜中だったので許せw

*やや無関係な話題w
πの値はパラメータで与えてもいいが、ここでは4.0*ATAN(1.0)を使った。
これは昔からよく使われている定石だが、どこかで1回計算しておかないと
いけない。それがめんどい。だがこうしておくと精度を機械任せにできる。
今のプログラムではやや不自然で、結果醜くなっている。

Fortran2003ならパラメータ文の中で関数が使えるようになるのだが・・・・
(パラメータは実行時ではなくコンパイル時に評価されるので、
今のところ四則演算とベキぐらいしか使えない)

*正規分布の−∞から+∞への積分
∫exp(-x^2)dxは√πになるのだが、不定積分があらわせないので、
必死に積分しようとしないようにw

多重積分のテクニックで直交座標を円座標にして出すのが伝統芸。
∫exp(-x^2)dx∫exp(-y^2)dy=∬exp(-(x^2+y^2))dxdy=∬exp(-r^2)rdrdθ
=-1/2[exp(-r^2)]^∞_0 * 2π = 1/2*2π = π
つまり∫exp(-x^2)dx=√πだお。 

数値積分では無限大の積分は、普通変数変換して有限範囲にしてから実行する。
ここでの-10~10の積分は、あくまで確認のためのお遊びということで。

373 名前:364 [2006/06/02(金) 19:35:00 ]
>>372
ありがとう。使わせてもらいます。

DAIKEIHOU
gakusekibangou NAME
sekibun.f conded at 29 May
DIMENSION NJUN(J)
DATA NJUN/10,50,100/
A=-1,0
B=1,0
WRITE(6,100)A,B
FORMAT(5x,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A'
,F5,2,3X,'B',F5,2)
DO 10 K=1,3
N=NJUN(K)
H=(B-A)/N
S=FX(A)+FX(B)/2,0
DO 20 J* J=1,N-1
X=A+BJ
S*S+FX(X)

ちなみにこれが学校の先生が見本としてやってたのを急いで写したものですが(途中まで)
あってますか?

374 名前:デフォルトの名無しさん [2006/06/02(金) 19:58:25 ]
微妙に写し間違えているw
DIMENSION NJUN(3)
...
S=( FX(A) + FX(B) ) / 2.0
DO 20 J = 1, N - 1
X = A + H * J
S = S + FX(X)
20 CONTINUE
S = S * H
WRITE(6, *) 'BUNKATSU = ', NJUN(I), 'MENSEKI =', S
10 CONTINUE
STOP
END
こんな感じになるのではないかな.
台形公式を>>364の様に素直に小さな台形の和を足して求めると,
関数の値を2回同じ値に対して求めなければならない.

そこを改良すると,ここでの例題のように,両端だけを半分にして,
残りを一回計算して足し上げてゆけば良いことになる.
絵を描いて考えればすぐ分かると思う.

NJUNは分割数だろう.何個の台形に分けるかを指定している.
数学的には分割が細かいほど正確な値になるが(積分は分割→0の極限で定義
されている)現実には数値誤差や計算時間の関係からほどほどの分割数がいい.
いくつがいいかは時と場合によるので一概には言えない.

375 名前:デフォルトの名無しさん [2006/06/02(金) 22:03:08 ]
台形公式の改良版としてロンバーグ加速ってのがある。
台形公式の幅を半分ずつにしていって結果がどのように変化するかを調べて、
幅無限小の時の値を補外するというもの。
関数の形にもよるけど、台形公式とほぼ同じ処理量で凄い精度が出る。

376 名前:デフォルトの名無しさん [2006/06/04(日) 04:09:37 ]
>>50

377 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 04:22:25 ]
ポインタが無いぶん最適化はしやすいと聞くが、
正直微々たる差だろうな。

378 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 08:49:02 ]
GCCの場合、どちらも一旦中間コードに直されてから最適化されるので、同じ構造のプログラムを書いた場合
基本的に最適化に差はほとんどない。

379 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 09:27:59 ]
>>378
GCCに限らず最近のコンパイラは、中間言語を出力する字句解析のフロントエンド部と、
機械語変換のバックエンド部に分離しているから、その理屈ではどんな言語でも
似たようなスピードになる。実際そういう傾向はある。

問題は今後のハードの発展が、CPUの並列化や、非連続な分散メモリー、
SSEのようなベクトル処理の方向に向かっていることで、言語自体が向いていないと
最適化がかかりにくくなってくる。

FORTRANの規格はハードウェアの進化のフィードバックを改定を受けているが、
C言語などは最近のネットセキュリティーの重視を受けてセキュアーさのフィードバックを
強く受けているようなので長期的にはどうなるか・・・

最近のマルチコア・マルチスレッド・計算用専用プロセッサの利用など(GPU流用や
CELLとか)を見ていると、コンパイラによる自動並列化というより、MPIのような
API呼び出しで解決しようとしているようだし、どうなることかw



380 名前:デフォルトの名無しさん [2006/06/05(月) 01:24:19 ]
すみませんフォートランの始め方からしてわかりません・・・

www.g.dendai.ac.jp/lecture/fortran/fort01.html
このサイトにはFTN77 Personal Editionをダウンロードしろとあるのですが、
77でなく95しか置いてないみたいなんです。

Cpadが77向けなので95と77では合わずに不具合が生じてしまう気がするのですが・・・

どなたかご回答願います・・・

381 名前:デフォルトの名無しさん [2006/06/05(月) 01:50:28 ]
>>380
FORTRAN III
pc8.2ch.net/test/read.cgi/tech/1104724162/

861 名前:デフォルトの名無しさん[] 投稿日:2006/05/27(土) 21:37:28
FTN77 Personal Edition ってもうダウンロードできないの?
SalfordのHPやSilverfrostのHPからもリンクが消えてるんだけど…

862 名前:デフォルトの名無しさん[] 投稿日:2006/05/29(月) 01:52:14
>>861
FTN95がFreeになったから消したんでないのかな?

863 名前:デフォルトの名無しさん[] 投稿日:2006/06/03(土) 02:31:53
もうどこでもダウンロードできないんですかね?

864 名前:デフォルトの名無しさん[] 投稿日:2006/06/04(日) 00:35:52
>>863
ロシアか中国あたりにうpられていそうな気もするがw
漏れは使ったこと無いけど、FTN77はそんなにいいものなのかい?
フリーのFTN95はバナーがでてウザかった気はするが使えたよ。
F77だったらOPEN WATFORやg77などがあるので代替手段が無いわけではない。
WATFORもDOS EXTENDER時代に本来の開発が止まったものなので、昔懐かしい
感じを保っているはずだが・・・w

865 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/04(日) 01:38:40
「FTN77PE.EXE」でぐぐるとそれらしきものがいくつか見つかるが
どれもなんか怪しい雰囲気がw
>>864
単体で使う分には取り立ててよいというほどではないと思うけど
CPad for Salford FTN77と一緒に使うとお手軽にプログラムの
作成・実行が出来るので重宝しています。
このセットで紹介しているHPも結構あるみたいだし。

382 名前:380 [2006/06/05(月) 01:58:19 ]
およよ・・・ありがとうございますです。
がんばってみます。

すでにめげそう;;

383 名前:デフォルトの名無しさん [2006/06/05(月) 02:00:48 ]
>>380
文法的にはFTN95はFTN77を包括している。
(完全に規約に準拠していると、77の機能の一部が削られていることになるが)
Cpadの設定を自分で書き直せば何とかなるだろう。

まぁ、そろそろ90、95に移行することをお勧めする。
といっても色々事情もあるだろうから、好きになさいwww

安易な方法としては、違法くさいのがうpされているので、具具ってそれを落としてくれば
とりあえずは足りるべw  
いつまであるかはわからんがw

384 名前:380 [2006/06/05(月) 02:04:19 ]
みなさまありがとうございます。
がんばりますです。

385 名前:デフォルトの名無しさん [2006/06/05(月) 02:06:54 ]
95と77の違いってどんなところ??

386 名前:デフォルトの名無しさん [2006/06/05(月) 02:18:54 ]
>>385
95はモジュール言語の特徴を大きく取り入れた。
ほとんど温泉旅館の新館と旧館のようになかば違う言語がくっついた感じになっている。
Fortran90の時点ではFORTRAN77を完全に包括していた。
Fortran95はFortran90のBugFix的な位置づけだが、一部Fortran90で廃止勧告が
出ていた機能を削っている。ただし、ほとんどのベンダーは過去互換性を重視して
そういう機能を残している。

古い人なら、FORTRAN77がpascalと合体したと思えばいい。

387 名前:デフォルトの名無しさん [2006/06/05(月) 02:27:30 ]
どもっす

388 名前:デフォルトの名無しさん [2006/06/05(月) 15:54:04 ]
行列がわかんねーorz

389 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 16:47:31 ]
>>388
それは FORTRAN の問題じゃなくて数学の問題ではなかろうか。



390 名前:デフォルトの名無しさん [2006/06/05(月) 22:07:14 ]
DAIKEIHOU
gakusekibangou NAME
sekibun.f conded at 29 May
DIMENSION NJUN(J)
DATA NJUN/10,50,100/
A=-1,0
B=1,0
WRITE(6,100)A,B
FORMAT(5x,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A'
,F5,2,3X,'B',F5,2)
DO 10 K=1,3
N=NJUN(K)
H=(B-A)/N
S=FX(A)+FX(B)/2,0
DO 20 J* J=1,N-1
X=A+BJ
S*S+FX(X)
DIMENSION NJUN(3)
...
S=( FX(A) + FX(B) ) / 2.0
DO 20 J = 1, N - 1
X = A + H * J
S = S + FX(X)
20 CONTINUE
S = S * H
WRITE(6, *) 'BUNKATSU = ', NJUN(I), 'MENSEKI =', S
10 CONTINUE
STOP
END

これ実行できないです。どこか間違ってますか?

391 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 22:26:40 ]
>>390
コメントは行の先頭に"C"を付けろとか
小数点(".")とカンマ(",")を混同してるとか
文番号のないFORMATなんて何に使うんだとか
勝手に行を折り返すなとか
実行文の途中に配列宣言入れるなとか
ツッコミどころ多数でどこもかしこも間違っている。

392 名前:デフォルトの名無しさん [2006/06/05(月) 23:39:37 ]
>>390 もう少し自力でがんばれw
PROGRAM DAIKEIHOU
C gakusekibangou NAME
C sekibun.f conded at 29 May
DIMENSION NJUN(3)
DATA NJUN/10,50,100/
A = -1.0
B = 1.0
WRITE(6,100) A,B
100 FORMAT(5X,'SEKIBUN FOR 1/SQR(PI)*EXP(-X*X) A', F5.2, 3X, 'B',F5.2)
DO 10 K = 1, 3
N = NJUN(K)
H = (B - A) / N
S = ( FX(A) + FX(B) ) / 2.0
DO 20 J = 1, N - 1
X = A + H * J
S = S + FX(X)
20 CONTINUE
S = S * H
WRITE(6, *) 'BUNKATSU = ', NJUN(K), 'MENSEKI =', S
10 CONTINUE
STOP
END
C
FUNCTION FX(X)
PARAMETER (PI = 3.14159265)
FX = EXP(- X * X) / SQRT(PI)
RETURN
END
>>392

393 名前:392 [2006/06/05(月) 23:45:25 ]
小数点をカンマにするのは、ドイツ・フランス。中点にするのがイギリス。
あと日本の縦書きの新聞とかも中点にする。

しか〜しw FORTRANやアメリカ・日本では小数点はピリオドだwww

FORMAT文はWRITE文の中に書き込んだほうがいいのだが、
学校教育では、まぁ文番号つきのFORMAT文でやっとけw

関数副プログラムを使ったが、今の場合FX(X)は文関数でも書ける。

質問があれば答えるから、まぁなんちゅーの、もう少し理解するようにしろwwww



394 名前:デフォルトの名無しさん [2006/06/05(月) 23:48:56 ]
>>389
行列の表示の仕方がわからない・・・

395 名前:デフォルトの名無しさん mailto:sage [2006/06/06(火) 00:14:17 ]
>>394
real A(2,3)
data A/1.,2., 3.,4., 5., 6./
do i = 1, 2
write(*,*) (A(i,j), j=1,3)
end do
end
とか
program hoge
implicit none
real :: A(2,3) = reshape((/1.,2., 3.,4., 5.,6./), (/2,3/))
integer :: i
do i = 1, 2
print *, A(i,:)
end do
end program hoge
とか

関係ないがFortran 2003では (/.../) のかわりに [...] と書けるので
可読性が少し良くなる(のかな?)

396 名前:デフォルトの名無しさん [2006/06/06(火) 00:42:54 ]
>>395
解決しました!ありがとうございます。

397 名前:デフォルトの名無しさん [2006/06/06(火) 00:42:56 ]
>>394
もっと具体的に質問すれば、華麗なるFORMATを教えて進ぜようゾナw

398 名前:364 [2006/06/06(火) 17:02:03 ]
>>392
ありがとうございます。家のパソコンにはシグインないので学校行ったらチャレンジしてみます。

399 名前:392 [2006/06/07(水) 12:36:56 ]
>>398
シグインってcygwinのことかな?w

念のため言っておくけどw 変数のAとBが積分範囲の下限と上限なので、
−1,1というのを−2,2にすれば当初の課題が達成されるw





400 名前:デフォルトの名無しさん mailto:sage [2006/06/07(水) 13:10:18 ]
シグインなんてDLすればいいジャンジャン






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

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

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