IT pass HikiWiki - [itbase2023]Fortran 実習 変数・配列・演算 練習問題 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc_here}}

= 練習問題 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

== 答え

* 答えは, 3.988... .
* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/calceq_mod.f90>))


= 練習問題 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.
* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/calccylinder.f90>))


= 練習問題 3

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

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

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

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

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

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

== ヒントと答え

* 倍精度で計算すると良いでしょう.
* プログラムでは, 整数同士の演算の答えは整数になることに注意しましょう.
  * 例えば, 2/3 の答えはいくつになるか注意しましょう.
* それぞれの式の計算結果は下のようになるだろう.
   * 3.1415926525826463    
   * 3.1416407864998739    
   * 3.1415926538056880    
   * 3.1418296818892015    
* したがって, 真値に最も近いのは 3 番目の式.
#* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/ramanujan.f90>))


= 練習問題 4

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

((<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/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 は立体角の単位で, ステラジアンと呼ぶ
#* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/planck.f90>))


= 練習問題 5

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

== ヒントと答え

* 順番に少しずつ作ってみましょう.
* まず, 何日に対応するかを計算する
* 次に, 残りから何時間に対応するかを計算する
* 次に, 残りから...
* 答えは, 125 日 3 時間 19 分 55 秒.
* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/seconds.f90>))


= 練習問題 6

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

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


== ヒントと答え

* 順番に少しずつ作ってみましょう.
* 神戸の経度, 緯度のための変数を用意する.
* オックスフォードの経度, 緯度のための変数を用意する.
* 地球の半径のための変数を用意する
* 二地点間の距離を計算する
* 単位に注意すること
* 答えは, 約 9506 km.
#* ((<プログラム例|URL:http://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2023/fortran_program/distance.f90>))


#= 練習問題 6
#
#2015 年 12 月 7 日 (金星探査機「あかつき」の金星周回軌道投入日) の
#金星と地球の間の距離を計算するプログラムを作り, その距離を計算しなさい.
#さらに, その時に通信にかかる時間 (地球と金星の間を通信電波が往復する
#時間) を求めなさい.
#
#なお, 2015 年 12 月 7 日には, 地球と金星は下の図の位置にあり,
#地球と金星の宇宙における座標が
#それぞれ (x,y) = (0.269,0.948), (x,y) = (-0.580,0.422) にあった.
#ただし, 数値の単位は AU (天文単位) である.
#また, 光速度は 299792458 m/s であり, 1 AU = 149597870700 m である.
#
#((<URL:https://itpass.scitec.kobe-u.ac.jp/~itbase/exp/fy2020/images/solar_system_2015-12-07.png>))
#
#図中の実線は, 内側から水星, 金星, 地球, 火星の軌道を表しており,
#線上にある "M", "V", "E", "M" の位置が 2015 年 12 月 7 日における
#それぞれの惑星の位置である.
#
#== ヒントと答え
#
#* 順番に少しずつ作ってみましょう.
#* 地球の座標のための変数を用意する
#* 金星の座標のための変数を用意する
#* 太陽と地球の間の距離(*1)を計算する
#* 太陽と金星の間の距離(*2)を計算する
#* 太陽-地球を結ぶ直線と, 太陽-金星を結ぶ直線のなす角(*3)を求める
#  * 太陽から地球への位置ベクトルと, 太陽から金星への位置ベクトルの
#    内積を用いると, 太陽-地球を結ぶ直線と, 太陽-金星を結ぶ直線のなす角を
#    求められる
#* 地球と金星の間の距離を求める
#  * *1, *2, *3 で求めた数値を用いて余弦定理により求められる
#* 答えは下の通り.
#  * 距離は約 1 AU.
#  * 通信時間は約 16 分半.