[itbase2021]Fortran 実習 サブルーチンと関数 練習問題
練習問題 1
キーボードから温度を入力し, 飽和水蒸気圧を計算するプログラムを作りなさい. ただし, 飽和水蒸気圧を計算する部分はサブルーチンまたは関数の形にすること. また, そのプログラムを用いて, 0 ℃, 50 ℃, 100 ℃における飽和水蒸気圧を計算しなさい. さらに, 富士山の山頂 (標高 3776 m, 気圧約 650 hPa) において水が沸騰する温度を求めなさい.
なお, 飽和水蒸気圧は下のように表されることを用いてよい.
ここで, T は温度 [℃], a = 7.5, b = 237.3 である.
この式は, Tetens (1930) による水の表面での飽和水蒸気圧の式である. (飽和水蒸気圧は, 液体の H2O の表面上と固体の H2O (氷) の表面上では異なる.)
ヒント
- 順番に少しずつ作ってみましょう.
- 画面に "Input a temperature (degrees Celsius): " と表示して入力を促します.
- キーボードから入力した温度を変数に読み込みます.
- 関数 (例えば calcsatvappress; calculate saturation vapor pressure) を定義します.
- 引数は温度です.
- 関数内で飽和蒸気圧を計算します.
- 戻り値に計算結果を代入します.
- 主プログラムから関数を呼び出します.
- 結果を画面に出力します.
- プログラムの計算は正しいか考えてみましょう.
- 日常生活の中で良く知っている条件で飽和蒸気圧を計算して確認しましょう.
- 富士山の山頂での沸騰する温度を求めるには, 使った関数に様々な温度を代入してそれらしい値を探してみます.
- もちろん, 飽和蒸気圧の式を温度を求める式に書き直すことで求めることもできます.
- プログラム例
練習問題 3
キーボードから整数 n を入力し, 1! + 2! + 3! + ... + n! (! は階乗を表す) を計算するプログラムを作りなさい. ただし, それぞれの整数の階乗を計算する部分はサブルーチンまたは関数の形にすること.
ヒント
- 順番に少しずつ作ってみましょう.
- 画面に "Input a number: " と表示して入力を促します.
- キーボードから入力した整数を変数 n に読み込みます.
- サブルーチン calcfact を定義します.
- 引数は整数 n と n! の計算結果です.
- サブルーチン内で n の階乗を計算します.
- 主プログラムから関数 calcfact を繰り返し呼び出し, 戻り値の和を計算します.
練習問題 4
<このデータファイル>は, 世界の国の首都の経度と緯度のリストです.
このリストを使って, 神戸 (東経 135.2 度, 北緯 34.7 度) から近い順に 国の名前を出力するプログラムを作りなさい. ただし, 神戸市からそれぞれの国の首都までの距離を計算する部分はサブルーチンまたは関数の形にすること.
注意
ファイルの冒頭 2 行は, ファイルの内容の説明文です. ただし, Fortran ではヘッダーの文字が邪魔になるかもしれません. 下のような方法で回避することができる.
ファイルを読み込む部分の最初に,
read( <装置番号>, * )
をヘッダーの行の回数だけ繰り返せばヘッダー部分を読み飛ばすことができる.
- あるいは, Fortran プログラムでファイルの数値を読む前に, エディタを使ってファイルの中のヘッダーを削除してしまうと簡単です.
- 国の名前は数字ではありませんので, 整数型や実数型の変数に読み込むことはできません. 文字型の変数を使いましょう.
ヒント
- 順番に少しずつ作ってみましょう.
- 国の名前と各国の首都の経度, 緯度をそれぞれ別々の配列に読み込みます.
- 神戸市からある経度, 緯度の地点までの距離を計算するサブルーチンまたは関数を定義します.
- サブルーチンまたは関数の中の計算内容は, 「変数・配列・演算 練習問題」が参考になるでしょう.
- 各国の首都の神戸からの距離を納める配列を用意し, 上で作成したサブルーチンまたは関数を繰り返し使うことによってすべての首都の神戸からの距離を計算します.
- 各国の首都の神戸からの距離を基にして, 順番を入れ替えましょう.
- 順番の入れ替える作業もサブルーチンにできると良いでしょう.
- 順番を入れ替える処理内容は, 「入出力・条件分岐・繰り返し 練習問題」が参考になるでしょう.
- 結果を画面に出力します.
Keyword(s):
References:[[itbase2021]惑星学実験実習の基礎II]