1日目「初めの一歩」:準備
能書き
プログラミングの基本を、実際に使いながら学んでいきましょう。今日はまず、ファイルを編集し、コンパイルして実行するまでの流れをおぼえてください。
ファイルを作る
1.エディタを開き、文書を新規作成2.下の"program... ...end program"をコピー&ペーストする
program day1 !------------------------ ! Fortran template !------------------------ !--- begin main --- !--- end main --- end program3.自分の"Fortran"フォルダに、"day1.f90"という名前で保存
4.ターミナル(アプリケーション>ターミナル.app)を起動
5."Fortran"フォルダに移動
$ cd /Users/riron/Desktop/Fortran/
赤字の部分(パス)は自分で変えること。"cd "(シー、ディー、スペース)を打った後、"Fortran"フォルダのアイコンをターミナルへドラッグすれば良い6.コンパイル
$ ifort day1.f907.実行
$ ./a.out
書き換える
上のテンプレートでは、皆さんがプログラムを書く場所は!--- begin main --- ここ !--- end main ---です。以後、「ここ」を書き換え、そのたびに
保存>コンパイル>実行
して下さい。
「ここ」の2文字は書かないでください。念のため。
基本的に、プログラムの中では日本語(全角文字)は使えません。
Lesson 1. 画面表示
定義:print文
print *, 値1 [, 値2] [, 値3] [...]指定された「値」(数や文字列)を画面に表示する >>記号の意味
コンマで区切ることで、値をいくつも続けて表示できる
最初の『*』は、「画面に表示」という意味。
実践
print *, "Hello, world!"この1行を、 day1.f90 のmain部分に打ち込んで下さい。
コンパイルして実行してみましょう。
Hello, world!と表示されましたか?
"文字列"はダブルクォーテーションで囲みます。
万が一コンパイルできずエラーが出た場合も、とりあえず次に進んでください。
コンパイルエラー(打ち間違い)
もしこの段階のコンパイルでエラーが出たとしたら、おそらく打ち間違いです。 一文字ずつ見直してみてください。もしすんなりできてしまった場合は、わざと打ち間違えてみましょう。 そしてコンパイルしてみて、
打ち間違えたときの反応をおぼえてください
たとえば"ifort"の場合
fortcom: Error: day1.f90, line 6: Syntax error, found CHARACTER_CONSTANT 'Hell o, world!' when expecting one of: , <END-OF-STATEMENT> ; print *. "Hello, world!" -----------^ compilation aborted for lesson.f90 (code 1)というメッセージが出ます。 これは「day1.f90の6行目に文法(syntax)エラー。"Hello, world!"という文字定数があるが、ここにはコンマ・改行・セミコロンのどれかが来るべきだ」という意味です。
ただし、この場合"Hello, world!"を見ていても間違いは見つかりません。 実際に間違っているのはその一つ前、「コンマがドットになっている」ところです。 どうやら、
エラーと言われたところの前後があやしいらしい
ということがわかります。このように失敗から学び取ることが、上達への近道です。
Lesson 2. 四則演算
定義: 四則演算
足し算は『+』、引き算は『-』、掛け算は『*』、割り算は『/』
ほとんどのプログラミング言語や、Excelなどでも同様。コンピュータの世界で標準的な表記です。
べき乗は『**』、
たとえば「2の3乗」は『2**3』と書きます。一般的には『2^3』なので、少し特殊です。
実践
とりあえず計算ができないと始まりません。 下の囲みの中を打ち込んで、実行してみましょう。print *, "1+2 =", 1+2 print *, "1-2 =", 1-2 print *, "2*2 =", 2*2 print *, "2**2 =", 2**2 print *, "2/2 =", 2/2この結果は
1+2 = 3 1-2 = -1 2*2 = 4 2**2 = 4 2/2 = 1となります。数字を変えて、何回かやってみましょう。
さて、例えば
print *, "1/2 =", 1/2
1/2 = 0となることに気がつきましたか?
この原因を理解するために、次のLessonではコンピュータが扱う「型」という概念を勉強します。 少し難しいですが、とても大事な部分なので読み飛ばさないように。
Lesson 3. 実数型と整数型
定義:型に関する決まり事
Fortranが扱う「値」は全て「型」を持つ 整数型 integer: 0, 1, -2, ... 実数型(倍精度) real: 0.0d0, 0.5d0, 10.0d0, ...
Fortranは「型」を厳密に区別し、挙動を変える 「整数型」と「整数型」の演算結果=「整数型」 「実数型」と「実数型」の演算結果=「実数型」 「整数型」と「実数型」の演算結果=「実数型」
ちなみに、クォーテーションで囲った『"1"』は「文字列型(character)」です。
学習
例えば、『1』と書くと「整数型(integer)」、『1.0d0』だと「実数型(real)」になります。今おぼえておきたいポイントは、
整数型同士の割り算の結果は整数型
ということです。『1/2』は、『1』も『2』も整数型なので、結果も整数型です。
つまり、小数点以下が切り捨てられた整数『0』が答えになります。
実数を扱う式は、基本的に全て実数で書くのが原則
です。実数型の答え『0.5d0』がほしいのであれば、式は『1.0d0/2.0d0』と書く必要があります。整数しかあり得ない時以外は『d0』を付けておく癖をつけましょう。
また、この『d0』の『0』の部分は指数です。『3.0d2』は3.0x10^2という意味で、『300.0d0』と同じです。
また、この『d0』の『0』の部分は指数です。『3.0d2』は3.0x10^2という意味で、『300.0d0』と同じです。
実践
実数型を使って、四則演算の練習をしてみましょう。下のような出力を得るにはどうすれば良いですか?実際にやってみて下さい。
one = 1.00000000000000 one over two = 0.500000000000000 one over ten = 0.100000000000000
実際には整数型と実数型を混ぜて使わなければならない場面に出くわすことがあります。 そのような時は、「先に整数型に実数型を演算しておく」ことでもトラブルを回避できます。
次の4つの場合で確かめて、頭の片隅に置いておいて下さい。
print *, "case 1. ", 1/2*2.0d0 print *, "case 2. ", 2.0d0*1/2 print *, "case 3. ", 2.0d0*(1/2) print *, "case 4. ", 2.0d0*(1/(2*1.0d0))
普通の算数と同じく、(かっこ)の中は先に計算されて、次に乗除算、そして左から右、という順番です。
人間にとっては大した違いはなくても、Fortranは厳密に区別し、結果が全く違うものになります。最初は戸惑うかもしれませんが、何度か失敗して慣れましょう。
Lesson 4. 初等関数(組み込み関数)
定義
sqrt(x), exp(x), log(x), log10(x), sin(x), cos(x), ...
他にも双曲線関数(cosh)や逆三角関数(atan)などがあります。
実践
かっこの中に値を入れると、それに応じた値が出てきます。次のことに挑戦してみましょう。
・2の平方根を、「sqrt関数」と「1/2乗」の2つのやり方で計算する
「実数を扱う式は、基本的に全て実数で書く」という原則はここでも重要です。
・逆三角関数(asin,acos,atan)を使って円周率を出す三角関数の角度は、度(degree)ではなくラジアン(rad)です。
逆三角関数は主値を返します。円周率がそのまま出ない場合は・・・知恵と工夫で乗り切りましょう。