[itbase2020]Fortran 実習 変数・配列・演算 練習問題

練習問題 1

下は, x=0.1 のときに, f(x) = x^2 (x^n は x の n 乗を表すとする) を計算する プログラムである. このプログラムを変更し, f(x) = x^5 + 6×x^4 + 2×x^3 - x^2 + 4 の値を計算するプログラム を作り, f(0.23) の値を求めなさい

program calceq

  implicit none

  real:: x
  real:: fx

  x = 0.1

  fx = x**2

  print *, x, fx

end program calceq

答え

練習問題 2

下は, 半径 2 m の円の円周を計算するプログラムである. これを変更して, 底面の円の半径 5.5 m, 高さ 11 cm の円筒の体積を計算するプログラムを作り, 体積を計算しなさい.

program calccircle

  implicit none

  real, parameter :: pi = 3.141592            ! 円周率
  real            :: radius = 2.0             ! 半径
  real            :: circle                   ! 円周

  circle = 2.0 * pi * radius

  print *, circle

end program calccircle

ヒントと答え

  • 順番に少しずつ作ってみましょう.
  • 高さのための変数を用意する (値を与える)
  • 体積のための変数を用意する
  • 単位に注意すること
  • 体積を計算する
  • 答えは, 10.45... m^3.
  • プログラム例

練習問題 3

数学者のラマヌジャンは円周率 (3.14159265358979323...) の近似式として下のものを見つけた.

これらを計算し, もっとも円周率の真値に近い式を見つけなさい.

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_pi_Ramanujan1.png>

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_pi_Ramanujan2.png>

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_pi_Ramanujan3.png>

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_pi_Ramanujan4.png>

ヒントと答え

  • 倍精度で計算すると良いでしょう.
  • プログラムでは, 整数同士の演算の答えは整数になることに注意しましょう.
    • 例えば, 2/3 の答えはいくつになるか注意しましょう.
  • それぞれの式の計算結果は下のようになるだろう.
    • 3.1415926525826463
    • 3.1416407864998739
    • 3.1415926538056880
    • 3.1418296818892015
  • したがって, 真値に最も近いのは 3 番目の式.

練習問題 4

温度 6000 K, 波長 0.5 μm のプランク関数の値を計算するプログラムを 作り, その値を計算しなさい. なお, プランク関数は下に示す関数である.

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_planckfunc.png>

ここで, λは波長 (m), T は温度 (K), h = 6.626070040e-34 J s はプランク定数, c = 299792458 m/s は光速度, k = 1.38064852e-23 J/K はボルツマン定数である.

ヒントと答え

  • 倍精度で計算すると良いでしょう / 計算しなければいけないでしょう.
  • 順番に少しずつ作ってみましょう.
  • プランク定数や光速度などの変数(定数)を用意する
  • 波長と温度の変数を用意する
  • プランク関数の値を計算する
  • 単位に注意すること
  • 答えは 105929.4... (W/(m**2 sr m)).
    • sr は立体角の単位で, ステラジアンと呼ぶ

練習問題 5

10811995 秒が何日, 何時間, 何分, 何秒に対応するかを計算するプログラムを作り, 答えを求めなさい.

ヒントと答え

  • 順番に少しずつ作ってみましょう.
  • まず, 何日に対応するかを計算する
  • 次に, 残りから何時間に対応するかを計算する
  • 次に, 残りから...
  • 答えは, 125 日 3 時間 19 分 55 秒.
  • プログラム例

練習問題 6

神戸 (東経 135.2 度, 北緯 34.7 度) と 英国オックスフォード (西経 1.3 度, 北緯 51.8 度) の間の距離を 求めるプログラムを作り, その距離を計算しなさい. ただし, 地球の半径は 6371 km とし, 計算には下の関係を用いてよい.

<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/eq_distance.png>

ヒントと答え

  • 順番に少しずつ作ってみましょう.
  • 神戸の経度, 緯度のための変数を用意する.
  • オックスフォードの経度, 緯度のための変数を用意する.
  • 地球の半径のための変数を用意する
  • 二地点間の距離を計算する
  • 単位に注意すること
  • 答えは, 約 9506 km.