Fortran
は教科書には記載されていません。練習問題のサンプルプログラムとその解説が教科書代わりです。これらを熟読すれば提出課題はできます。必ずよく読んで実行し、理解するようにしなさい。また以下のサイトが参考になるので、必要に応じて参照しなさい。
今日の演習
i: 実数型,r: 実数型として、 1/2 = 1.0/2 = 1/2.0 = 1.0/2.0 = r=1/2 => r= r=1.0/2 => r= i=1.0/2 => i= r=-5.0/3 => r= r=-5/3 => r= i=-5/3 => i= 2**2 = 2.0**2 = 4**0.5 = 4.0**0.5 = 4.0**(1/2) = SQRT(4.0) =結果は自分で確かめて下さい。
123456789.... +-----+-------------------------------------- C calculation of integer and real number C IMPLICIT NONE INTEGER :: i=0 REAL :: r=0.0 C WRITE(*,*) 'integer :', i WRITE(*,*) 'real :', r C WRITE(*,*) '1/2 = ', 1/2 WRITE(*,*) '1.0/2 = ', 1.0/2 WRITE(*,*) '1/2.0 = ', 1/2.0 WRITE(*,*) '1.0/2.0 = ', 1.0/2.0 C r=1/2 WRITE(*,*) 'r=1/2 => ', r r=1.0/2 WRITE(*,*) 'r=1.0/2 => ', r i=1.0/2 WRITE(*,*) 'i=1.0/2 => ', i r=-5.0/3 WRITE(*,*) 'r=-5.0/3 =>', r r=-5/3 WRITE(*,*) 'r=-5/3 => ', r i=-5/3 WRITE(*,*) 'i=-5/3 => ', i C WRITE(*,*) '2**2 = ', 2**2 WRITE(*,*) '2.0**2 = ', 2.0**2 C WRITE(*,*) '4**0.5 = ', 4**0.5 WRITE(*,*) '4.0**0.5 = ', 4.0**0.5 WRITE(*,*) '4.0**(1/2) = ', 4.0**(1/2) WRITE(*,*) 'SQRT(4.0) = ', SQRT(4.0) C STOP END |
01から13までの行番号がついている行が入力するプログラム(ソースコード)である。 行番号および桁目盛は説明と見やすさを考慮してつけているので入力する必要はない。枠線で囲まれている部分の中だけを入力すること。
1: 1桁目が C で始まる行はコメント行であり、実行されない。 3: 暗黙の型宣言を無効にする。 4: 整数型 (INTEGER) である3つの変数 i, n, t を宣言する。 変数n(繰り返し数)については、初期値を代入する。 6: 合計 t の初期値を 0 にする(繰り返し処理の直前にするのが望ましい。)。 7: 今日のポイント:DO ループ (繰り返し処理) DO ループ処理の文法(約束ごと)は、 DO 制御変数=初期値, 終値, [増分] 実行文 (通常は制御変数を何らかの形で使う。) END DO 初期値、終値、増分は整数(型)を使う。 初期値、終値、増分は変数であってもよい。 増分=1 の時は省略することができる。 増分は負でもよいが、この場合 初期値 > 終値でなければ、実行されない。 # (次の行から)END DO 文までを、制御変数(i)の値を 1 から # (増分1ずつ増やして)終値(n)になるまで(を超えるまで)実行せよ。 という命令である。 8: t+i の 値を t に代入する(t が i だけ増えるから足していくことになる)。 = は代入であって等式でないことに注意。 9: DO ループの終わりを示す。 10: 結果の表示 (WRITE)。 12: 処理を終了する (STOP)。 13: プログラムの終わりを示す (END)。Fortran プログラムの入力と実行の仕方は先週の課題の説明を参照すること。
01から16までの行番号がついている行が入力するプログラム(ソースコード)である。 行番号および桁目盛は説明と見やすさを考慮してつけているので入力する必要はない。枠線で囲まれている部分の中だけを入力すること。
1: 1桁目が C で始まる行はコメント行であり、実行されない。 3: 暗黙の型宣言を無効にする。 4,5: 実数型変数 a, b, h, x, y 、整数型変数 i, n を宣言する。 変数a, b, n については、初期値を代入する。 7: 分点間の距離(きざみ幅)h を求める。 REAL(n) で、n を実数型に変換して使用。 9: 今日のポイント:DO ループ。 # (次の行から)END DO 文までを、変数 i の値を 0 から(1 ずつ増やして) # n になるまで実行せよ。 10: x の計算 ループを繰り返すたびに h ずつ大きくなる。 「参考:演算子の計算の順位」 かっこ( )でくくられていない場合、『累乗>積・商>和・差』の順に計算が進められる。 同順位のものは、累乗は右から、それ以外は左から計算が進められる。 11: y の計算。 12: 計算結果の出力 (WRITE)。 13: DO ループの終わりを示す。 15: 処理を終了する (STOP)。 16: プログラムの終わりを示す (END)。Fortran プログラムの入力と実行の仕方は 先週の課題の説明を参照すること。
\documentclass[a4j]{jarticle} % \setlength{\topmargin}{-2cm} \setlength{\textheight}{25cm} \setlength{\textwidth}{10.8cm} \setlength{\oddsidemargin}{4cm} \setlength{\evensidemargin}{4cm} \title{Report of Fortran programming on second class} \author{written by Class Staff} \date{\today} % \begin{document} \maketitle % 関数 \( f(x) \) の区間 \( (a, b) \) を$n$等分する各分点を \( x_0=a, x_1=a+h, x_2=a+2h, \cdots \cdots, x_n=a+nh=b \) とするとき,次の式を用いて近似的に積分値を求めることができる.\\ \[ S \approx h \sum_{i=0}^{n-1} f(x_i) \] ここで,$h$は分点間の距離(きざみ幅)である. \( f(x)=\sqrt{4-x^2} \) ,区間 \( (0,2) \) ,$n=2,4,8,16,32,64,128,256$として,積分値 \( \int_0^2 \sqrt{4-x^2}dx \) の近似値を求めるプログラムを作成し,実行させなさい. また,この積分値の真値は容易に求められるので,真値とのずれの変化を調べなさい. ただし,$n$はプログラム中の変数の値を手動で1回1回換えて計算するのではなく, プログラムで一気に計算させて表のような形式で出力するプログラムにすること. (もちろん,DO ループを使って下さい.) \end{document} |
プリンタ出力の提出をもって出席とします。したがって、途中までしかできていない場合でも、プリンタに出力して提出しなさい。出力できない者は口頭で申し出ること。その場合、来週の演習時間までに完成させて演習開始時に提出すること。
課題が終わってしまって時間に余裕がある人は、トライしよう。 提出する際は1行目に氏名、学生番号を書いて課題とは別紙にしなさい。
(問題)インターネットで電子メールを使っていると、「幸福の手紙」「不幸の手紙」「ネズミ講」のようなメールをもらうことがあります。よくある例としては、
さて、ある人が次のようなメールを出しました。 「このメールを受け取った人は、5人の友人にメールを転送して下さい。」 このメールを受け取った人は皆忠実に指示に従い、同じ人が2度メールを受け取らないとします。メールの転送を行うたびにメールの数がいくつに増えるか、転送の回数15回まで計算しなさい。 メールの数を整数で表した場合と、実数で表した場合の計算結果を比較しなさい。 メールを受け取った人の数が日本の人口(1億3千万人とする)、地球の人口(62億人とする)を越えるには、何段階の転送が行われる必要があるか? |
(問題) 以下の出力を得るプログラムを DO
ループを用いて作成せよ。出力結果が正しければ空白の有無の差異はとくに問わない。(Xは大文字のエックスでよい。)
1 X 1 = 1 1 X 2 = 2 1 X 3 = 3 1 X 4 = 4 1 X 5 = 5 1 X 6 = 6 1 X 7 = 7 1 X 8 = 8 1 X 9 = 9 2 X 2 = 4 2 X 3 = 6 2 X 4 = 8 2 X 5 = 10 2 X 6 = 12 2 X 7 = 14 2 X 8 = 16 2 X 9 = 18 3 X 3 = 9 3 X 4 = 12 3 X 5 = 15 3 X 6 = 18 3 X 7 = 21 3 X 8 = 24 3 X 9 = 27 4 X 4 = 16 4 X 5 = 20 4 X 6 = 24 4 X 7 = 28 4 X 8 = 32 4 X 9 = 36 5 X 5 = 25 5 X 6 = 30 5 X 7 = 35 5 X 8 = 40 5 X 9 = 45 6 X 6 = 36 6 X 7 = 42 6 X 8 = 48 6 X 9 = 54 7 X 7 = 49 7 X 8 = 56 7 X 9 = 63 8 X 8 = 64 8 X 9 = 72 9 X 9 = 81 |