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