Fortran プログラミング (その1)


今日の内容

これから3回にわたって Fortran によるプログラミングの演習を行います。
これらの演習では Fortran の初歩、すなわち、プログラムファイル(ソースコード)の記述方法、コンパイルの仕方(実行ファイルの作成)、プログラムの実行方法についての基本的な事項を学びます。
Fortran はプログラミング言語としては古い言語ですが、科学数値計算を中心に今でも広く使われています。

【基礎1】
Fortran プログラムを実行させるには、
1.プログラムファイル(ソースコード)の記述
2.コンパイル(実行ファイルの作成)
3.実行ファイルを指定して実行
の順に進める必要があることを理解する。

【基礎2】
プログラム(ソースコード)は基本的に、
@利用する変数の定義
A必要なデータや結果の入出力
B与えられたデータの演算処理
C処理の流れの制御(繰り返し、条件分岐)
などの部分から成り立っていることを理解する。

なお、今日は、@変数の定義、A入出力、B演算処理について練習問題を用いて演習し、理解する。


Fortran は教科書には記載されていません。練習問題のサンプルプログラムとその解説が教科書代わりです。これらを熟読すれば提出課題はできます。必ずよく読んで実行し、理解するようにしなさい。また以下のサイトが参考になるので、必要に応じて参照しなさい。


今日の演習

Fortran にはいくつかのバージョンがありますが、本演習ではFortran90 のコンパイラー(プログラムを計算機の理解できるコードに変換するソフトウエア)を用います。後期に開講される「情報処理及び演習」はFortran90 を利用する予定になっています。
では、さっそく練習問題に進みましょう。

練習問題

以下のサンプルプログラムを入力し、コンパイルして、実行させなさい。

01から12までの行番号がついている行が入力するプログラム(ソースコード)である。 行番号および桁目盛は説明と見やすさを考慮してつけているので入力する必要はない。枠線で囲まれている部分の中だけを入力すること。

【Fortran の決まりごと】プログラムは大文字、小文字を区別しない。(サンプルプログラムでは予約語(大文字)と変数(小文字)等を区別するためにあえて混ぜて記載してある。)

【Fortran の決まりごと】プログラムの実行文は7桁目から書き、1行は72桁以内である。また、1行には1つの文しか書けない。(固定形式)

プログラムの説明

   1: 1桁目が C で始まる行はコメント行であり、実行されない(LaTeX の% と同じ)。
   3: 暗黙の型宣言を無効にする。
   i,j,k,l,m,n で始まる変数は型宣言しない場合,整数型として扱われる(暗黙の型宣言)。
   しかし,宣言無しで変数を多用することはつまらないプログラムミスの原因となる上、
   Fortran90の処理系によっては暗黙の型宣言を無効にすることを義務付けていることもある。

   4: 実数型 (REAL) である3つの変数 teihen,takasa,menseki を宣言する。
      teihen,takasa,menseki で表される数値が実数であるということ。

      他に例えば、整数型は INTEGER、倍精度実数型は DOUBLE PRECISION で定義する。

       整数 INTEGER                  1, 6543, -156
       実数 REAL                     1.0, -23.88, 0.576E+02
                                                      (×10の2乗を表す)
       文字型 CHARACTER              'Happy Birthday' 

       整数型の変数に実数を代入すると小数点以下が切り捨てられて整数になる。

  【Fortran の決まりごと】変数の名前は自由に決められる。ただし、1文字目は必ず英文字の
    必要があり、31文字以内とする。また、Fortranであらかじめ決められている命令文(予
    約語という。たとえば WRITE や READ など。)は使用しない方がよい。

   6: teihen,takasa の入力要求の Input teihen & takasa ! を出力する。
      
   7: teihen,takasa の変数の値を READ文 を用いて標準入力((*,*) で表されている。
   通常は端末)から読み込む。
      
   8: 演算処理 右辺の演算結果(三角形の面積)を左辺の変数 menseki に代入する。

       =    代入  (等式記号ではないことに注意する。)
       +    加算
       -    減算
       *    乗算
       /    除算
       **   べき乗

   9: teihen,takasa,menseki の3つの変数の値を WRITE文 を用いて標準出力((*,*) で
   表されている。通常は端末)に書く。
  11: 処理を終了する (STOP)。
  12: プログラムの終わり (END) を示す。
簡単ですが、これも立派なプログラムです。

@Fortran プログラムファイルの作成(ソースコードの記述)

  1. GNOME 端末から emacs をバックグラウンドで起動する。(ファイル名の最後(拡張子)は必ず .f としておくこと)

    -bash- 3.00 $ emacs fortran101.f &

  2. プログラムを入力する(ソースコードを記述する)。

  3. ファイルを保存する。emacs は終了せずにそのままにしておくと後でプログラムを修正する時に便利。

AFortran プログラムファイルのコンパイルの仕方

    プログラム(ソースコード)を翻訳してコンピュータが実行できる形式のファイルを作成することをコンパイルという。

  1. GNOME 端末上でコマンドgfortran を用いてプログラムファイルをコンパイルする。
    すなわち、
    gfortran [-o 作成する実行形式のファイル名] ソースコードのファイル名
     である。したがって、
    -bash- 3.00 $ gfortran -o fortran101 fortran101.f
    と入力し、コンパイルに成功すると、新しく fortran101 という名前の実行形式のファイルができる。
    -bash- 3.00 $ ls -lF
    と入力して、fortran101* というファイルがあるか確認する。(後ろに* がついているのが実行ファイル。)

    (実行形式ファイルの名前を指定しなければ([ ] 内を省略すれば),a.out という名前のファイルができる。このファイル名を指定すればプログラムが実行される。ただし,新たに別のプログラムをコンパイルすると上書きされるので,演習では実行形式ファイル名を指定しておくことにする。)

    エラーが出た場合は、絶対にプログラムが間違っているので、emacs に戻ってプログラムを修正・保存して、GNOME 端末上でコンパイルをやり直す。

    実行ファイルは絶対にプリントアウトしない!

BFortran プログラムの実行の仕方

  1. GNOME 端末上でコンパイルで作成された実行形式ファイルを指定するとプログラムが実行される。
    -bash- 3.00 $ ./fortran101  (上で実行形式のファイル名を fortran101 としたので、その名前で実行する。)
    なお、./ はカレントディレクトリ(自分の今いるディレクトリ)を意味する。 つけないと
    fortran101: Command not found.
    とエラーが返されるので,以後自分で作成したプログラムを実行するときには必ずつけること。

  2. プログラムが実行されると、Input teihen & takasa ! と出力されるので,変数 teihen,takasa の値を入力する(7行目参照)。データの区切りは空白文字(もしくはコンマ)である。例えば,

           Input teihen & takasa ! 
           25.0 30.0
           
    とすると、その下に結果(変数teihen, takasa, menseki の値)が表示される(9行目の WRITE文)。

今日の提出課題

練習問題を踏まえて以下のプログラムを作成せよ。プログラム、コンパイルのコマンドとシステムからのメッセージおよび実行結果を印刷して提出せよ。

(問題) 球の半径を読み込んで表面積と体積を計算し、読み込んだ半径、計算した表面積と体積をこの順に一行で出力するプログラムを作成しなさい。円周率は 3.1416 とせよ。そのプログラムを用いて、半径が 6378 km と1738 km の球の表面積と体積とを計算せよ。

提出物の作り方

  1. まず、プログラムを作成、実行する。
    1. emacs でプログラム(ソースコード)を作成し、保存する(例えば fortran102.f)。
    2. GNOME 端末上でコンパイルし(gfortran -o fortran102 fortran102.f)、実行する(./fortran102)。
    3. プログラムが正常に動作すれば、実行した結果が GNOME 端末上に残る。

  2. emacs で提出物を作成する。
    1. 1行目に、名前と学生番号を入力する。
    2. [C-x i ] でソースコードのファイル名(例えば fortran102.f)を指定して、内容を文書中の名前の下に挿入する。(教科書76ページ参照)
    3. つぎに、実行結果を文書中に挿入する。
                    -bash- 3.00 $ ./fortran102
                    ? 
                    6378.0
                    6378.00000      0.?????????E+??   ?????????.    
                    

      GNOME 端末に残っている記録からマウスの操作でコピーして文書中に挿入する。

      1. GNOME 端末上のコピーしたい箇所の先頭でマウスの左ボタンをクリックし、指を離さずにコピーしたい箇所の末尾まで動かして離す。
      2. カーソルを emacs 上の挿入したい場所に持って行き、中ボタンを押す。

    4. 必要に応じて見出しや説明、単位などを加えて、適当にレポート形式に整形しなさい。 (LaTeX を使うとなおgood! ただし、LaTeX を使う場合は下記の注意を読んでから行って下さい。)
    5. ファイルを保存する。

  3. 印刷して提出しなさい(できるだけA4用紙1ページにおさめること)。

LaTeX でプログラムのソースコードを整形する際の注意:LaTeX は文書を自動で整形してしまいます。ソースコードなどを改行を含めてそのまま出力したい場合は、verbatim 環境を用います。(教科書121ページも参照のこと)
すなわち、\begin{verbatim} と\end{verbatim} の間に記述された内容はそのまま出力されます。

プリンタ出力の提出をもって出席とします。したがって、途中までしかできていない場合でも、プリンタに出力して提出して下さい。出力できない者は口頭で申し出ること。その場合、来週の演習時間までに完成させて演習開始時に提出すること。

 おまけ

課題が終わった人は、トライしよう。 提出する際は氏名、学生番号を書いて「今日の提出課題」とは別紙にしなさい(1つだけでも、両方でもよい)。期限は次回の演習時限が終わるまでとする。必ずプログラム(ソースコード)と実行結果の出力が含まれること。なお、演習時の質問は、「今日の提出課題」についての質問を優先する。

Fortran では、四則演算の他、数学で使う初等的な関数は標準で用意されています。
たとえば、sin 関数は、sin(r) とすればプログラム中で利用することができます。ただし、使用にはいくつかの注意点があります。引数r は、実数型(次回の演習で詳述します)である必要があるとか、ラジアンで指定する必要があります。
FORTRANプログラミング初級編の「初歩の文法→算術演算」などを参照して下さい。

(問題) 元金、年利率(複利)、預金年数を読み込んで元利合計を計算して出力するプログラムを作成し、そのプログラムを用いて、元金 100万円を年利率1分2厘5毛と年利率5分7厘5毛で預金した場合の10年後の元利合計はいくらになるか計算しなさい。
(問題) 半径1の円に内接する正n角形の周長(辺の長さの総和)と面積を計算するプログラムを作成し,正6角形と正60角形の周長と面積を求めなさい。


戻る(演習のトップページ)