くだすれFORTRAN(超 ..
331:デフォルトの名無しさん
06/05/24 15:48:54
>>330
申し訳ありません。
バブルソートでの解に関しましては、御礼申し上げます。
もし、気分を害されてないようでしたら、直接選択法の解をお願いできませんか?
332:デフォルトの名無しさん
06/05/24 16:16:20
>>330
まぁそうなんだけどさ,ここは2chだし,いいんでないのw
Fortran人口を増やすためにも甘い水で誘うべしw
333:330
06/05/24 16:34:51
>>331
オレじゃなくて、>>328 に 感謝して、非礼を詫びろ。
>>332 たしかにそうとも思うが、
そういう教育はだれかがしなければ、
会社に入って恥をかくまで治らないと思う。
社会人になっても治らないものもいるが。orz
Fortran 人口を増やすには、説教より回答が一番だな。
328 えらい。オレばか。orz
334:デフォルトの名無しさん
06/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
君の行動を称えて以下の文章を贈ろう。
コレをよく読んで今後も精進に励め。(どう励むかはお前次第だ)
URLリンク(www.redout.net)
>>333
まあそう気にしなさるな。
ここに宿題を丸投げして後で苦労するのも、社会に出てからちんぷんかんぷんな
質問をして恥をかくのも、全て本人の自己責任ってやつだ。
335:デフォルトの名無しさん
06/05/24 23:01:32
WRITE(*,'(A5$)')name(i)
のような書式で、表示位置を決める定数"5"の部分をREAD文で読み取って
任意の値に変更できるようにしたいのですが、
どうすればいいでしょうか?
ちなみに
num=5
1000 FORMAT(Anum$)
WRITE(*,1000)name(i)
と書いたのですがうまくいきませんでした。
336:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/26 02:28:39
無料のWindows用のコンパイラはありませんか?
339:デフォルトの名無しさん
06/05/26 02:41:15
>>338
g77(gccに入ってる)
Salford f77
340:335
06/05/26 02:56:34
できました!短時間に二人もありがとうございます!
>337さんの
WRITE(9, '(A)' ) ' chin chin man man '
が顔に見えてちょっとうれしいです。
341:sage
06/05/26 12:39:43
>338
g95
URLリンク(www.g95.org)
342:デフォルトの名無しさん
06/05/26 15:17:28
>>334
ありがとうございます。
よい勉強になりました。
343:デフォルトの名無しさん
06/05/27 10:05:21
fortranの遺産があるんですが・・・
なぜか配列の出力が20行ごとw
むかしの名残なんでしょうか?
ってか計算だけfortranでやらせてGUI?はほかの言語でやるにはどうしたらいいの?
オシエテ
344:デフォルトの名無しさん
06/05/27 10:12:01
あとゎぁ書式の指定で
format(500i4)
ここの500のところを定数とかで指定できないの?
345:デフォルトの名無しさん
06/05/27 11:37:12
>>344
最初から読めとまでは言わないけれど、
10前のレスくらい読もうよ。
>>335-336
答えそのものではないけれど、ほぼ回答。
>>337
少し難しいけれど、極めて有益な情報。
346:デフォルトの名無しさん
06/05/27 12:42:13
サンクスwww
くそふるいマニュアル本みててもわからないわけだ・・・w
347:デフォルトの名無しさん
06/05/27 15:25:28
>>343
大体はFORTRAN側をDLLにしてVBやDelphiなんかで処理しているみたいだな.
まぁ,GUIもFORTRANでやってる連中もそれなりにいるようだ.
Intelの質問掲示板に行けばうまくいかねーとウンウンうなっている人たちに出会えるw
URLリンク(softwareforums.intel.com)
348:デフォルトの名無しさん
06/05/27 18:56:55
FTN95でコンパイルしたんですが,
オブジェクトファイルができただけで,
この後どうやって実行すればいいのか教えてください.
349:デフォルトの名無しさん
06/05/27 21:16:08
>>348
1. コンパイル時に「/LINK」オプションを付ける。
例: ftn95 hoge.f90 /link
2. コンパイルが正常終了したら、おもむろにプログラム名を入力してEnterを押す。
例: hoge
3. スプラッシュが消えるまで全裸正座で待機。
例:
+ +
∧_∧ +
(0゚・∀・) ワクワクテカテカ
(0゚∪ ∪ +
と__)__) +
350:デフォルトの名無しさん
06/05/27 21:56:58
>>349
おお!できました.ありがとうございます。
ちょうど風呂からでたところなので助かりましたw
351:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/28 02:32:45
いいかお前らにためになるお言葉を言い渡しておこう。
「問題はレベルの高いプログラム言語を使うか、レベルの低いプログラム言語をつかうか
といったことではない、そうではなくて、
レベルの高いプログラム言語を使うか、もしくはレベルの高いプログラム言語処理系を低レベル言語で作成するか、
ということだ。」
つまりフォートランなんかいまさら使っている時点で負け組み。
それで半ばコンピュータの専門か気取ってる痛いやつが多すぎなんだよw
353:デフォルトの名無しさん
06/05/28 02:59:53
日本語でおk
354:デフォルトの名無しさん
06/05/31 01:01:28
さて、諸君。次の問題を持ってきたまへ。
355:デフォルトの名無しさん
06/05/31 17:45:37
RoR じゃなくて FoR はありませんか
356:デフォルトの名無しさん
06/05/31 18:36:58
駐車料金を計算するプログラム
料金は30分単位で切り上げて計算される
最初の一時間まで300円/30分
一時間を越えると200円/30分
入力は実数型 2,35(2時間35分)
この実数を引数で関数の値が料金のFunctionをつくり使用する
↑のような宿題が出たのですがFortran77の型で誰かお願いします
357:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/05/31 21:09:21
>>357
ありがとうございます
359:デフォルトの名無しさん
06/05/31 21:18:09
あ、忘れてたのですが最高課税額が4000円になるようにしてもらえませんか
本当に申し訳ない><
360:デフォルトの名無しさん
06/05/31 22:26:55
>>359
357 じゃないけど。
せっかくプログラムがあるんだから、
いろいろいじってみようよ。
ヒント:if 文 をどこかに一行いれる。
361:357
06/06/01 11:32:39
慌てて作ったら間違っていたみたい。
それを修正するのも良い勉強になるでしょう。
あと、変数に7文字以上使っているのも問題かも。
実は厳密なFORTRAN77を知らない。
362:デフォルトの名無しさん
06/06/01 17:35:24
>>361
それ以前に小文字を使っているぞいw
363:357
06/06/01 20:21:52
そういやそうだったねorz。字下げもしない方が良かったかな。
364:デフォルトの名無しさん
06/06/01 23:33:12
1/√π×exp(-x^2)は中央値0、偏差1の正規分布曲線を与える。
〔-1、1〕および〔-2、2〕の範囲に存在する確率はいくらか。台形法で求めよ。
学校の課題なのですがわかる方いたらお願いします。
先生いきなり難しいよ・・・
365:デフォルトの名無しさん
06/06/01 23:47:33
小学生の算数じゃなかったか?>台形面積
366:デフォルトの名無しさん
06/06/02 01:38:52
>>363
いや字下げは文法にかなっているからおk
FORTRAN77までは大文字のみが文法で規定されていた。
小文字は見にくくてキモスw
>>365
おまえは>>1を読み返せ!
このスレは糞既出FAQにも丁寧にマジレスし、宿題も文句も言わずに解いてやり、
FORTRAN依存症を作り出して初心者をFORTRAN Userに引き込む秘密結社の陰謀だ。
まぁ本スレの方ならなじった上で、こっちのスレに誘導してくれればおkwww
367:1/2
06/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
06/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
06/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
06/06/02 02:55:02
なお、間違っていても謝罪も賠償もしないので4649!
371:364
06/06/02 03:07:46
ありがとうございます!77とか90とかよくわかりません。学校のパソコンはどっちだろう・・・
これをテラパッドに入力してシグインで実行するわけですな
372:367
06/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
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/06/02 22:03:08
台形公式の改良版としてロンバーグ加速ってのがある。
台形公式の幅を半分ずつにしていって結果がどのように変化するかを調べて、
幅無限小の時の値を補外するというもの。
関数の形にもよるけど、台形公式とほぼ同じ処理量で凄い精度が出る。
376:デフォルトの名無しさん
06/06/04 04:09:37
>>50
377:デフォルトの名無しさん
06/06/04 04:22:25
ポインタが無いぶん最適化はしやすいと聞くが、
正直微々たる差だろうな。
378:デフォルトの名無しさん
06/06/04 08:49:02
GCCの場合、どちらも一旦中間コードに直されてから最適化されるので、同じ構造のプログラムを書いた場合
基本的に最適化に差はほとんどない。
379:デフォルトの名無しさん
06/06/04 09:27:59
>>378
GCCに限らず最近のコンパイラは、中間言語を出力する字句解析のフロントエンド部と、
機械語変換のバックエンド部に分離しているから、その理屈ではどんな言語でも
似たようなスピードになる。実際そういう傾向はある。
問題は今後のハードの発展が、CPUの並列化や、非連続な分散メモリー、
SSEのようなベクトル処理の方向に向かっていることで、言語自体が向いていないと
最適化がかかりにくくなってくる。
FORTRANの規格はハードウェアの進化のフィードバックを改定を受けているが、
C言語などは最近のネットセキュリティーの重視を受けてセキュアーさのフィードバックを
強く受けているようなので長期的にはどうなるか・・・
最近のマルチコア・マルチスレッド・計算用専用プロセッサの利用など(GPU流用や
CELLとか)を見ていると、コンパイラによる自動並列化というより、MPIのような
API呼び出しで解決しようとしているようだし、どうなることかw
380:デフォルトの名無しさん
06/06/05 01:24:19
すみませんフォートランの始め方からしてわかりません・・・
URLリンク(www.g.dendai.ac.jp)
このサイトにはFTN77 Personal Editionをダウンロードしろとあるのですが、
77でなく95しか置いてないみたいなんです。
Cpadが77向けなので95と77では合わずに不具合が生じてしまう気がするのですが・・・
どなたかご回答願います・・・
381:デフォルトの名無しさん
06/06/05 01:50:28
>>380
FORTRAN III
スレリンク(tech板)
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
06/06/05 01:58:19
およよ・・・ありがとうございますです。
がんばってみます。
すでにめげそう;;
383:デフォルトの名無しさん
06/06/05 02:00:48
>>380
文法的にはFTN95はFTN77を包括している。
(完全に規約に準拠していると、77の機能の一部が削られていることになるが)
Cpadの設定を自分で書き直せば何とかなるだろう。
まぁ、そろそろ90、95に移行することをお勧めする。
といっても色々事情もあるだろうから、好きになさいwww
安易な方法としては、違法くさいのがうpされているので、具具ってそれを落としてくれば
とりあえずは足りるべw
いつまであるかはわからんがw
384:380
06/06/05 02:04:19
みなさまありがとうございます。
がんばりますです。
385:デフォルトの名無しさん
06/06/05 02:06:54
95と77の違いってどんなところ??
386:デフォルトの名無しさん
06/06/05 02:18:54
>>385
95はモジュール言語の特徴を大きく取り入れた。
ほとんど温泉旅館の新館と旧館のようになかば違う言語がくっついた感じになっている。
Fortran90の時点ではFORTRAN77を完全に包括していた。
Fortran95はFortran90のBugFix的な位置づけだが、一部Fortran90で廃止勧告が
出ていた機能を削っている。ただし、ほとんどのベンダーは過去互換性を重視して
そういう機能を残している。
古い人なら、FORTRAN77がpascalと合体したと思えばいい。
387:デフォルトの名無しさん
06/06/05 02:27:30
どもっす
388:デフォルトの名無しさん
06/06/05 15:54:04
行列がわかんねーorz
389:デフォルトの名無しさん
06/06/05 16:47:31
>>388
それは FORTRAN の問題じゃなくて数学の問題ではなかろうか。
390:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/06/05 22:26:40
>>390
コメントは行の先頭に"C"を付けろとか
小数点(".")とカンマ(",")を混同してるとか
文番号のないFORMATなんて何に使うんだとか
勝手に行を折り返すなとか
実行文の途中に配列宣言入れるなとか
ツッコミどころ多数でどこもかしこも間違っている。
392:デフォルトの名無しさん
06/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
06/06/05 23:45:25
小数点をカンマにするのは、ドイツ・フランス。中点にするのがイギリス。
あと日本の縦書きの新聞とかも中点にする。
しか〜しw FORTRANやアメリカ・日本では小数点はピリオドだwww
FORMAT文はWRITE文の中に書き込んだほうがいいのだが、
学校教育では、まぁ文番号つきのFORMAT文でやっとけw
関数副プログラムを使ったが、今の場合FX(X)は文関数でも書ける。
質問があれば答えるから、まぁなんちゅーの、もう少し理解するようにしろwwww
394:デフォルトの名無しさん
06/06/05 23:48:56
>>389
行列の表示の仕方がわからない・・・
395:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/06/06 00:42:54
>>395
解決しました!ありがとうございます。
397:デフォルトの名無しさん
06/06/06 00:42:56
>>394
もっと具体的に質問すれば、華麗なるFORMATを教えて進ぜようゾナw
398:364
06/06/06 17:02:03
>>392
ありがとうございます。家のパソコンにはシグインないので学校行ったらチャレンジしてみます。
399:392
06/06/07 12:36:56
>>398
シグインってcygwinのことかな?w
念のため言っておくけどw 変数のAとBが積分範囲の下限と上限なので、
−1,1というのを−2,2にすれば当初の課題が達成されるw
400:デフォルトの名無しさん
06/06/07 13:10:18
シグインなんてDLすればいいジャンジャン
401:デフォルトの名無しさん
06/06/07 15:16:53
Evca(Ω,x)を求めるプログラムを作りたいのですが教えてください。
Evca(Ω,x)=Ei(Ω,x)+E0(Ω,x)+E1(Ω,x)+E2(Ω,x)
Ei(Ω,x)=-1.79186*Z**(5/3)/r
E0(Ω,x)=Z(2.21/r**2-0.916/r+Ecorr)
Ecorr=-(0.115-0.031logr)
E1(Ω,x)=2πZe**2((1-X)Z**Cs*(Rm**Cs)**2(1+2/3*u**Cs)+xZ**K(Rm**k)**2(1+2/3u**K))
E2(Ω,x)=1/2(4πe**2/ΩG**2)**-1(V(G))**2*1/(1-f(G))*(1/ε(G)-1)
狽ヘG/=0
Gは逆格子ベクトルG(n1,n2,n3)
V(q)=(1-x)V**Cs+xV**k(q)
Vi(q)=-4πZe**2/Ωq**2((1+u)cos(qRm**i)-usin(qRm**i)/qRm) (i=Cs,K)
u=qRmcos(qRm)/sin(qRm)-qRmcos(qRm)
わからない値は後から自分で入れるので教えてください
状態方程式の計算をするらしいです
402:デフォルトの名無しさん
06/06/07 15:24:39
E2(Ω,x)=1/2(4πε**2/ΩG**2)**-1(V(G))**2(1/(1-f(G)))(1/ε(G)-1)
狽ヘG/=0です
Gは逆格子ベクトルです。G(n1,n2,n3)
これを求めるプログラムはどうしたらいいか教えてください
わからない値は自分でいれます。お願いします。
403:デフォルトの名無しさん
06/06/07 17:42:42
>>401
質問が曖昧すぎるぞい!w
もう少しうまく質問しないと助けたくとも助けられないw
見た感じ結晶の電子相関込みの凝集エネルギーかなんかを計算しているようだが,
どの辺のなにがわからんのか,求めたいものは何なのか,もうちょっと他人が分かる
質問をしろwwww
これだけで答えられる奴はいねーよw
丸投げしたいなら持ってる情報を全部出せ!w
誰かが回答するかどうかは別としてw
404:デフォルトの名無しさん
06/06/07 17:50:46
>>401-402
セシウムとカリウムのアルカリ金属合金の凝集エネルギーを求めて
なにかしたいようであることは分かった.
まずは欲張らずに単体のアルカリ金属の凝集エネルギーは求めろよw
そしたら,x=1.0または0.0の時の極限にも対応するので
あとからチェックにも使える.
一体どの辺が,どのくらいわかんないのよw
405:401
06/06/08 11:05:05
すいません。あほなんで基本的には全然わかりません。
状態方程式のPを求めるためにやってると思うんですけど。
圧力Pは結晶エネルギーEvca(Ω,x)の体積Ωに関係する微係数で与えられるらしいのです。
a=5.225A A=10**-8
Ω=(a**3)/2 rs=(9π/4)**(1/3)/Kf
Ef=h**2*Kf**2/2m c=2(1+0.0155π/Kf)**-1
f(q)=q**2/2(Q**2+cKf**2)
ε(q)=1+(1-f(q))*(4πZe**2/Ωq**2)*(3/2Ef)*(1/2+((4Kf**2-q**2)/8Kfq)*log(2Kf+q/2Kf-q))
CsのH近似の場合Rmは4.610 uは-0.9605
KのH近似の場合Rmは3.019 uは-0.5682
せめて濡/=0 のGベクトルが0以外の時を全部足す方法が知りたいです。
お願いします。
406:401
06/06/08 13:57:06
k=5.225
a=k/(0.529177)
o=a**3/2
z=1
rs=(3*o/z*4*3.14)**(1/3)
Kf=(9*3.14/4)**(1/3)/rs
Ef=Kf**2
c=2(1+(0.0155*3.14)/Kf)**-1
Ei=(1.79186*z**(5/3))/3*o*rs
E0=z*(2.21/rs-0.916/rs+0.031/3*o)
Rmk=3.019
uk=-0.5682
E1=-2*3.14*z*2/o*(z*(Rmk)**2*(1+2/3*uk))
k=5.225
a=k/(0.529177)
o=a**3/2
z=1
rs=(3*o/z*4*3.14)**(1/3)
Kf=(9*3.14/4)**(1/3)/rs
Ef=Kf**2
c=2(1+(0.0155*3.14)/Kf)**-1
Ei=(1.79186*z**(5/3))/3*o*rs
E0=z*(2.21/rs-0.916/rs+0.031/3*o)
Rmk=3.019
uk=-0.5682
E1=-2*3.14*z*2/o*(z*(Rmk)**2*(1+2/3*uk))
407:401
06/06/08 13:58:08
あとはE2(Ω,x)=1/2(4πe**2/oG**2)**-1(V(G))**2*1/(1-f(G))*(1/ε(G)-1)
狽ヘG/=0 を数値微分して全部足すと出るんですけどここがわからないです。
G=2π/a(n1*n1+n2*n2+n3*n3) 収束すると思うのである程度までの結果を出していきたいです。
n1=n2=n3/=0の時以外を計算させる方法がわかりません。数値微分もわかりません。
V(G)=-4*Z*2/oG**2((1+uk)cos(G*Rmk)-uk*sin(G*Rm)/G*Rm)
ε(G)=1+(1-f(G))*(4*3.14*z*2/o*G**2)*(3/2*Ef)*(1/2+(4*Kf**2-G**2)/(8*Kf*G)*log((2*Kf+G)/2*Kf-G)
f(G)=G**2/4*(G**2+c*Kf**2)+G**2/4*c*Kf**2
です。
408:デフォルトの名無しさん
06/06/08 15:28:18
>>405
OK
エネルギーを体積で微分すれば圧力になるのは熱力学の帰結だ.
しかしこれはFORTRANというより物理の質問だなw
>せめて濡/=0 のGベクトルが0以外の時を全部足す方法が知りたいです。
FORTRANスレ的には,これは3次元逆格子ベクトルに関する和なので,
もっとも素朴には3重のDO LOOPを回せばよいとい答えになる.
DO n1 = -n, n
DO n2 = -n, n
DO n2 = -n, n
IF(n1==0 .and. n2==0 .and. n3==0) CYCLE
云々
END DO
END DO
END DO
実際は結晶の対象性があるので,このループの1/8〜1/24位回せばいいはず.
実際の計算には逆格子ベクトルを求める必要がある.これは結晶構造に依存する.
もし今アルカリ金属が対象ならbcc構造ということになるだろう.
その逆格子ベクトルはfccと同じものになる.
これは固体物理の教科書に載っているから,一般式をつくるか,
手で求めて表を配列に入れることになる.
DO LOOPの中にn1,n2,n3の組み合わせが逆格子ベクトルにふさわしいかどうかを
判別する式を,G=0を飛ばすのと同じように,いれてやればいい.
409:デフォルトの名無しさん
06/06/08 17:39:27
>>407
Gは逆格子ベクトルそのものではなくて、その長さだから(ルート忘れてるみたいだが)
たんに逆格子点に相当するn1,n2,n3が分かっていればいい。
後は式の通りに書いて、逆格子点について足せばいい。
FORTRANの疑問ではないので、ここで聞く前に周囲の人に聞いた方が早いと思う。
数値微分は単に、格子間距離aを、特定のaとa+daに取ったときに計算して
差分をdaでわればいい。daは小さい数だ。
410:デフォルトの名無しさん
06/06/09 00:56:50
fortran90で、数式が二行に渡るとエラーがでるのですが、
どうしたらいいですか?
411:デフォルトの名無しさん
06/06/09 01:58:42
>>410
一行目のしりに&をつけろ。
C言語やPASCALと違って、FORTRANは終端文字(;)が不要なかわり行センシティブ。
ゆえに継続行の記号を明示する必要がある。
漏れはFortran方式が好き。
412:デフォルトの名無しさん
06/06/09 02:43:29
Ruby や Haskell のような方式もあるぞい
413:401
06/06/09 13:33:05
>>408
>>409
わざわざありがとうございます。物理の質問でしたねw
CYCLEとはどういう意味ですか?
結果にNaNとでるのはどういうことですか?
お願いします。
414:デフォルトの名無しさん
06/06/09 14:08:18
>>413
CYCLEというのはFortran90で導入された命令で,DO文の中で使う.
それ以降の文を実行すると無くDO行へ戻る.
つまり,次のループ計算を実行する.
これと類するものにEXIT命令があって,これはEND DOの次の行に飛んで
DO LOOPを脱する.
NaNとは数値に非ず.Not A Numberの略号だ.配列がはみ出してとんでもない値を
書いているか,オーバーフロー等を起こしている.
SUBCHKなどのデバッグオプションをつけてみそ.
415:デフォルトの名無しさん
06/06/09 17:47:49
オーバーフローだと普通は ±inf じゃない?
NaN は実数での負値の平方根とか、未定義の演算結果かな。
416:414
06/06/09 21:27:34
>オーバーフローだと普通は ±inf じゃない?
おっしゃるとおり.漏れの間違いだ.
負の平方根とか関数の定義域外呼び出しでもでるね.
漏れが出会うNaNは,ゼロ割か,配列はみ出しでとんでもないメモリー領域の
アクセスしたときが多いかな.個人的にはゼロ割で実行停止しなくなったのでとても助かる.
NaNを厳密に追求したければ,IEEE745の浮動小数点の定義を調べればいいが気力那須ww
417:初心者
06/06/09 22:20:13
最近、大学でFortranの授業が始まりました。
今日で授業が三回目だったのですが次のような課題がだされました。
おそらく基礎中の基礎だと思うのですが、授業はプリントに書かれた
プログラムを説明もなくそのままうつして実行させるような授業ですので
この課題を読んだ時日本語かどうかすら疑いました。
いろいろと調べているのですがなかなかよくわかりません。よろしければ
どなたかこの課題について解答していただけませんか?
あと、本当に自分勝手で申し訳ないのですが、少しでいいので解説もして
いただけたらとても嬉しいです。よろしくお願いします。
(1)subroutineを呼ぶときの、変数の引き渡し方について説明せよ。
特に、配列変数を引き渡す方法についてプログラム名をあげて説明せよ。
(2)Fortranで文字列を取り扱うにはどうすればいいか調べて、プログ
ラム例をあげて説明せよ。
(3)READ文やWRITE文のI,E,F,A形式について調べて
解説せよ。またプログラム例と印字例を示せ。
418:初心者
06/06/09 22:24:14
すいません。(1)のなかのプログラム名は間違いでプログラム例でした。
419:デフォルトの名無しさん
06/06/09 23:56:51
調べてって書いてるんだから、調べれば?
プリントか教科書あるんじゃないの?
420:初心者
06/06/10 00:12:18
プリントは説明がなくて・・・教科書もないんです・・・やっぱりちょっと
調べればわかることみたいですね。
421:デフォルトの名無しさん
06/06/10 00:20:38
FORTRAN で検索したら色々出てくるよ。
422:初心者
06/06/10 00:23:04
ありがとうございます!いろいろ調べて自分なりの解答作ってまた書き込み
にくるんでよかったらみてください。
423:デフォルトの名無しさん
06/06/10 00:29:05
本物のプログラマって現存しますか?
424:デフォルトの名無しさん
06/06/10 00:34:05
あれは最初からジョークだからw
色々示唆には富んでるけどね。
425:デフォルトの名無しさん
06/06/10 00:44:15
>>419
教えてやれよw
(1)なんて、参照渡しと値渡しの説明を求められていたら初心者には大変だぜ!
しかし、配列の先頭要素のアドレスしか渡していないことを知らないと77では
実戦的なプログラムは書けない。
(2)はFORTRAN77以降ならCHARACTERがあるが、FORTRAN66だと整数型に
ENCODE/DECODE文で文字列突っ込んだりしてるし。
(3)FORMAT書式は初心者がつまづく、難所中の難所だろう。
と、>>417をびびらせることを書いてみたりしてw うふw
426:デフォルトの名無しさん
06/06/10 03:03:51
data init/'12345'X,'23456'X,'34567'X,'45678'X/
↑
'整数'X が何を意味するのか分かりません。
よろしくお願いいたします。
427:デフォルトの名無しさん
06/06/10 03:50:05
'整数'Xは16進数を表すものでした。
お手数をかけました。
428:デフォルトの名無しさん
06/06/10 10:51:20
>>417
大阪大学工学部応用理工学科二回生乙。
429:デフォルトの名無しさん
06/06/10 17:02:15
これが噂に聞いた「ソシャる」というやつか
430:デフォルトの名無しさん
06/06/10 17:30:31
>>422
臆せずに書き込むように。
みんなの勉強になる。
431:デフォルトの名無しさん
06/06/11 13:31:23
次の宿題もってこいや!!
432:364
06/06/11 16:21:12
>>392を使わせてもらったんですけど、実行できませんでした。
cygwinを起動してコンパイルするとこまでは行けたんですけど(g77 report.f)、
./a.exewoをしてもcommand not found になります。どこかエラーがあるのでしょうか?
433:364
06/06/11 16:22:43
./a.exewo→./a.exeの間違いです。
434:デフォルトの名無しさん
06/06/11 16:40:56
>>432
command not found
ということは、a,exeが見つからないということなので、コンパイルに失敗している。
それ以前に何かエラーメッセージが出ていないか見て味噌。
まずはlsしてa.exeができているか見て味噌。
435:ケロ
06/06/11 23:33:31
どなたか、教えてください;:il:il|;l|;il:i(-ω-`;)ll|l|il|;:il|!
マジでなやんでます…。
1/√(π)exp(-x^2) 中央値0 偏差1 の正規分布表をあたえる。
[−1.1]および[−2.2]の範囲に存在する確立はいくらか?
で台形法で解けと…。
プログラムがわかんないです…。
たすけてください…
436:デフォルトの名無しさん
06/06/11 23:40:51
>>435
>>364
437:ケロ
06/06/11 23:43:29
一緒だ…。
438:ケロ
06/06/12 00:02:52
なんとなく、わかりました。ありがとーございます<(_ _)>
439:364
06/06/12 00:09:02
>>434
ありがと。もっかいやってみます。Invalid first character at (^)とか出るんですよね・・・。
>>438
同じ授業を受けてる気がする・・・。特定はやめてね・・・
440:ケロ
06/06/12 00:12:48
>>439
それ、思った…。
441:364
06/06/12 00:28:30
>>440
ここでもその名前でお願い
スレリンク(campus板)
442:デフォルトの名無しさん
06/06/12 00:35:20
>>439
もしかしてプログラムを「1桁目から」書いてないか?
2chの表示の都合上、ここではプログラムが行の先頭から書かれているように見えるが
実際のFORTRAN77のソースは行の各桁に何を書くかも文法上で決まっている。
そこら辺は初歩の初歩でどんな入門書にも載っているようなことなので
少しは教科書なりWeb上の入門記事なりを読んで勉強してくれ。
443:364
06/06/12 00:46:43
>>442
Σ(゚Д゚)!すいません、そのままコピペしてました。
444:デフォルトの名無しさん
06/06/12 02:21:28
>>443
君は2ch専用ブラウザを使ってるかい?
使っているなら>>392の引用符を見れば一応ある程度インデントが効いて
本来の姿に近くなる。
>>392の中で自分を引用しているのは、そうやって見るためだ。
もうちょっと最小限のところは勉強しろwwwwww
他のスレならぶちキレられてるぞwwwwww
このスレはVIPレベルなのでOKだがな(^ω^;)
>>435のケロも遠慮せずに書き込めよw
445:401
06/06/12 13:09:42
>>414
わかりました。ありがとうございます。
一応作ってみたのですがエラーがでてコンパイルできません。
初めて作るのでめちゃくちゃかもしれませんがおかしいところを教えてください。
お願いします。
k=5.225
a=k/(0.529177)
o=a**3/2
z=1
rs=(3*o/z*4*3.14)**(1/3)
Kf=(9*3.14/4)**(1/3)/rs
Ef=Kf**2
c=2*(1+(0.0155*3.14)/Kf)**-1
Ei=(1.79186*z**(5/3))/3*o*rs
E0=z*(2.21/rs-0.916/rs+0.031/3*o)
Rmk=3.019
uk=-0.5682
E1=-2*3.14*z*2/o*(z*(Rmk)**2*(1+2/3*uk))
E2 = 0
E4 = 0
da = 0.001
446:401
06/06/12 13:12:03
WRITE(*,*)'(n4)'
READ(*,*) n4
DO 10 n1= -n4 , n4
DO 10 n2= -n4 , n4
DO 10 n3= -n4 , n4
IF(n1==0.and.n2==0.and.n3==0) CYCLE
G=2*3.14/a*(n1*n1+n2*n2+n3*n3)
f=G**2/4*(G**2+c*Kf**2)+G**2/4*c*Kf**2
e=1+(1-f)*(4*3.14*z*2/o*G**2)*(3/2*Ef)*(1/2+(4*Kf**2-G**2)/
&(8*Kf*G))*log(2*Kf+G/2*Kf-G)
V=(-4*Z*2/oG**2)*((1+uk)*cos(G*Rmk)-uk*sin(G*Rmk)/G*Rmk)
E3=(4*3.14*2/o*G**2)**-1*V**2*(1/(1-f))*(1/e-1)
E2 = E2 + E3
V1=(-4*Z*2/(o+da)G**2)*((1+uk)*cos(G*Rmk)-uk*sin(G*Rmk)/G*Rmk)
e1=1+(1-f)*(4*3.14*z*2/(o+da)*G**2)*(3/2*Ef)*(1/2+(4*Kf**2-G**2)/
&(8*Kf*G))*log(2*Kf+G/2*Kf-G)
E5 =(4*3.14*2/(o+da)*G**2)**-1*V1**2*(1/(1-f))*(1/e1-1)
E4 = E4 + E5
10 CONTINUE
E6 = E2/2
E7 = E4/2
E8 = (E7-E6)/da
P=Ei+E0+E1+E8
447:401
06/06/12 13:14:02
WRITE(6,601) P
601 FORMAT(1H , F15.8)
STOP
END
エラー
fortcom: Error: Illegal character in statement label field [|
fortcom: Error: Illegal character in statement label field [・
fortcom: Error: keita.f, line 55: Syntax error, found END-OF-FILE when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM TYPE COMPLEX BYTE CHARACTER ...
.
^
compilation aborted for keita.f (code 1)
あほすぎて迷惑かけます。
448:素人
06/06/12 14:38:08
-1以上1以下の値xを入力してe^xの近似式を出力するプログラム。e^xの近似式はe^x=1+x+x^2/2!+x^3/3!+..+x^n/n!を利用。
(最後の項に絶対値が0.00001より大きい間、項を増やして足し続ける)また、適正なxの値が入力される限り、何度もこの計算ができるようにすること。って課題が出されたんですけどまったく分かりません。誰か助けてください!
449:デフォルトの名無しさん
06/06/12 15:27:53
>>445
我慢して聞いてくれw
基礎が全くなっていないので,ちょっと見ただけでもまともに動くとは思われない.
周りに聞く人がいるなら聞いた方がいい.掲示板で説明出来る範囲を超えているwwww
1.まず変数の型がむちゃくちゃ.第一行目から,整数型のKに実数を入れている.
式の途中に(1/3)みたいなのがいっぱいあるが,整数の場合はこれは0になる.
ようするに型に関する認識が全くなってないw 整数と実数は違うものだと思った方がいい.
実数に整数を代入する方は,一応型の変換が自動でなされるが,明示的に実数にしておいた
ほうがいい.
2.有効桁に関する認識もなってない.円周率を3.14で入れているが,これでは有効桁が
小数点以下2桁になってしまう.そもそも常数は,PIとかちゃんとした名前の付いた変数
ないしパラメータ変数にすべきもの.
3.式も所々演算子が抜けているし,演算子の優先度に関して間違っているとしか
思えないところがある(割り算の分母).
4.微分を取りにゆくときのセンスも悪い.まず特定の格子間距離に対してエネルギーを
求めるサブルーチンをつくって,それを2回異なる格子間距離について呼ぶべき.
とにかく,なんというか,プログラミングの基本的センスがなっていないし,
問題自体に対する理解もなってないようなので,
今のままでは他者からのかなりの助けがないと完成はおぼつかない.
周りに聞く人がいれば,頭を下げて一から教えてもらえ.
とにかく道はティッペラリーより遙かかなただw
450:デフォルトの名無しさん
06/06/12 15:46:19
>>448
ほれ、77形式で昔のテキスト風に芋くさく書いておいたぞい。
PROGRAM VIPPER
1 WRITE(*, *) 'INPUT x (-1.0<= x <= 1.0)'
READ (*, *) x
IF (ABS(x) > 1.0) STOP
e = 1.0
f = x
i = 1
10 CONTINUE
e = e + f
IF (ABS(f) < 0.00001) GOTO 999
i = i + 1
f = f * x / REAL(i)
GOTO 10
999 CONTINUE
WRITE(*, '( 2(a, f8.5) )') 'EXP(', x, ')', e
WRITE(*, *) EXP(x)
GOTO 1
END
451:450
06/06/12 15:48:58
すまんw ついうっかりFortran90の癖を出してしまった。
77としては以下の部分を置き換えておいてくれw
IF (ABS(x) .GT. 1.0) STOP
IF (ABS(f) .LT. 0.00001) GOTO 999
452:デフォルトの名無しさん
06/06/12 16:38:20
大学はいってから、別にプログラム関係の学部でもないのに
fortranをやらされ、まったくわからない…
なんか時分秒の引き算のプログラムを作らなければいけない。
開始時刻と終了時刻を指定すると、経過時間
を計算し端末に表示するプログラムをつくりなさい。
時刻はhh:mm:ssの形式で指定されるものとする。
終了時刻が開始時刻より早い場合には、その旨を画面に
表示して、再入力させること。
だそうだ。
PRPGRAM TIME
REAL A,B,C,D,E,F,G,H,I
READ(*,*)A,B,C,D,E,F
X=A*60*60+B*60+C
Y=D*60*60+E*60+F
IF(X.GT.Y)THEN
Z=Y-X
G=Z/60/60
M=Z-G*60*60
H=M/60
I=M-H*60
WRITE(*,*)G,H,I
ELSE
WRITE(*,*)'ERROR'
END IF
STOP
END
453:452
06/06/12 16:39:06
こんなのが限界で、hh:mm:ssと入力できないし、出力もできない。
24時間以降もERRORにしなければならないが、どうやるかわからない。
;←を打つには書式を変えろって言われたけど習ってないし、
教えてもくれなかった_| ̄|○
助けてください。こんな簡単なことを聞いてすいません…
454:デフォルトの名無しさん
06/06/12 17:19:38
>>453
ほれ、出来るだけ藻舞のオリジナルを尊重しつつ77で作った。
変数は整数型にしないといかんべ。
MODは余りを求める関数だ。マニュアルみそ。
入力をhh:mm:ssの形式にしたければ、入力エラーは無いことを仮定すれば、
WRITE文のFORMATをちょっと直してREAD文の方にも書いてやればいい。
PROGRAM TIME
INTEGER IH0, IH2, IM0, IM1, IS0, IS1, IT0, IT1
INTEGER IH, IM, IS, IT
1 READ(*, *) IH0, IM0, IS0, IH1, IM1, IS1
IT0 = IH0 * 60 * 60 + IM0 * 60 + IS0
IT1 = IH1 * 60 * 60 + IM1 * 60 + IS1
IF(IT1 .GT. IT0)THEN
IT = IT1 - IT0
IH = IT / (60 * 60)
IT = MOD(IT, 60 * 60)
IM = IT / 60
IS = MOD(IT, 60)
WRITE(*, '( I2.2, A1, I2.2, A1, I2.2 )' ) IH, ':', IM, ':', IS
ELSE
WRITE(*,*)'ERROR'
GOTO 1
END IF
STOP
END
>>454
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4431日前に更新/404 KB
担当:undef