フローチャート、型宣言、入出力、四則演算

マテリアルシミュレーション I 後半 第 2 回 (6/12)
- フローチャート、型宣言、入出力、四則演算 今日の目標
フローチャートの書き方、変数の宣言、入出力の方法と性質、四則演算の使い
方を理解する。
5. フローチャート(流れ図)
フローチャートは、プログラムを設計・分析する際に必須である。他の人にも一見
して理解できるように書くのが望ましい。記号が異なると意味も異なってくるので注
意する(自分勝手に記号の形を変えないこと!)。一つの文章にまとめられるものは、な
るべく一つの箱に入れて、図を見やすくした方がよい。
図 2-1
フローチャートに用いる主な記号.
13
記述方法の例 1
端子
処理
記述方法の例 2
NSUM に
0 を代入
データ
判断
繰り返すかどう
かの条件
初期値
繰り返し処理
繰り返し処理
戻ってきたとき
に変更する条件
繰り返し処理の
書き方が異なる
図 2-2 フローチャートの例・その 1 およびその 2:「1+2+3+・・・+N」を計算するプロ
グラム. 左右では繰り返し処理の部分の書き方が異なる.
14
[主プログラム]
[副プログラム]
定義済み処理
定義の中身を別
に分けて書く
図 2-3 フローチャートの例・その 3: 配列の数値の加算と乗算を行うプログラム(詳
細は第 5 回). 主プログラムの一部を抜き出し副プログラム(サブルーチン)化.
6. 変数名
「6 字以内の英数字」で、「最初」の文字が「英字」であるもの。
例 NUMBER、 NUM1、 NUM2
7. 型宣言
「変数の宣言」は「プログラムの最初」で行う。以下のような「型」がある。
(1) 「文字型」変数の宣言
CHARACTER NAME1*10, NAME2*10
CHARACTER*10 NAME1, NAME2
「*10」は文字列の長さを 10 個に指定
「書かないと 1 個」に指定される
例:ABC ‘ABC DEF’
(2) 「整数型」変数の宣言
INTEGER I, J, K, L, M
10 進数で小数点のないもの: -2147483648 ~ 2147483647 の範囲
例:5
-1
123
(3) 「実数型 (単精度浮動小数)」変数の宣言
REAL O, P, Q, R
あるいは、REAL*4
有効数字 7 桁以内の実数
15
O, P, Q, R
指数部:IBM[大型機]:10-78 ~ 1075
IEEE[パソコン・ワークステーション]:10-38 ~ 1038
例:5.0
17.
-.003
5.0E3
5E+3
5.0×103
5.0E-7
5×103
5E-7
5.0×10-7
5×10-7
(4) 「倍精度型 (有効数字 16 桁)」変数の宣言
DOUBLE PRECISION X, Z
あるいは、REAL*8 X, Z
有効数字 16 桁以内の実数
指数部:IBM[大型機]:10-78 ~ 1075
IEEE[パソコン・ワークステーション]:10-308 ~ 10308
例:3.1415926535897D+0 18.9D05 88D-3
×100
(5) 「複素数型」変数の宣言
COMPLEX X, Z
例:(5.9, 3.76)
×105
×10-3
(3.0E8, 12.5)
5.9 + i 3.76
暗黙の型宣言
一般には型宣言文により変数の数値の型を宣言するが、次のような「暗黙の約
束」に従う場合には型宣言文は用いる必要はない。
変数名の頭文字が
I、J、K、L、M、N であるときは整変数
それ以外の英文字であるときには実変数: A ~ H、O ~ Z
8. 入出力文と FORMAT 文
入力には「READ」、出力には「PRINT」あるいは「WRITE」を用いる。
(1) 一般的な記述方法
READ ○, NUMBER
「○」の形式で変数 NUMBER に読み込み
「*」ならば、デフォルトの書式
PRINT ○, NUMBER
「○」の形式で変数 NUMBER を書き出し
16
READ (*,○)
NUMBER
キーボードから「○」の形式で変数 NUMBER に
読み込み
入力元の指定:「*」あるいは「5」ならばキーボード
WRITE (*,○) NUMBER
ディスプレイへ「○」の形式で変数 NUMBER を
書き出し
出力先の指定:「*」あるいは「6」ならばディスプレイ
・○:書式識別子
「○」には、「*」か「数値 (文番号)」が入る。
「*」の場合: 処理系自身で入出力の編集を行う。
「文番号」の場合: 次の「FORMAT 文」と組み合わせて使用する。
(2) デフォルト「*」の書式を用いた入出力文
処理系自身で入出力の編集を行う。
自分が思っているように変数に文字・数値が入出力できるかはチェックが必要。
(3)の FORMAT 文で確実に指定するほうがよい場合も多い。[演習課題参照]
例 (デフォルトの書式:「*」の利用)
READ *, I
デフォルトの書式で変数 I に読み込み
PRINT *, I
デフォルトの書式で変数 I の中身を書き出し
READ (*, *) I
キーボードからデフォルトの書式で変数 I に読み込み
WRITE (*, *) I
ディスプレイへデフォルトの書式で変数 I の中身を書き
出し
READ *, I, J
デフォルトの書式で変数 I, J に読み込み
キーボードから 2 変数 I, J への数値入力方法: 123 45↵
または 123,45↵
または 123↵45↵
(3) FORMAT 文
「文番号」の行に記述した「FORMAT 文」の書式で入出力を行う。
例
100
READ 100, I
FORMAT (I3)
文番号 100 の形式で変数 I に読み込み
形式「I3」
300
PRINT 300, I
FORMAT (I5)
文番号 300 の形式で変数 I を出力
形式「I5」
文番号
編集記述子:「I5」は「5 桁の整数」を意味する。
17
(4) 編集記述子
変数の型や桁数によって表現が異なる。
4-1) 整数型データに対する編集記述子:Iw [w は桁数]
「I3」ならば「3 桁の整数」。
ただし、「桁数」に「符号(+や-)が含まれる」ので注意する。
・入力例:キーボードからの入力
与えるデータ 編集記述子 内部での値
I5
+1234
■1234
I5
0
■■■■0
-1234
I5
-1234
I5
1234■
注意
スペース
計算機・コンパイラによっては
+12340 となる場合有り
・出力例:モニター上への出力
内部での値 編集記述子 表示
+1234
I5
■1234
0
I5
■■■■0
-1234
I5
-1234
-1234
I4
表示できない 「****」のようになる。
2 個以上の変数を入出力する場合の FORMAT 文[演習 3 参照]
300
PRINT 300, I, J
FORMAT (I5, ’■’, I5)
「I」の中身が「5382」、J の中身が「23054」とすると、「■5382■23504」と出力
される。FORMAT 文の「I5」間にあるアポストロフィ「’」でくくったスペース
「■」はそのまま出力される。文字やスペースをそのまま出力したい場合はアポ
ストロフィでくくる。
「’■’」がないと・・・
PRINT 300, I, J
300
FORMAT (I5, I5)
[FORMAT (2I5)と書くこともできる]
「■538223504」のように I と J の値がつながって出力されてしまう。
J の中身が「230」であれば、「■5382■■230」となり、I と J を区別できる。
18
H 編集記述子[演習 4 および 5 参照]
「’■’」を以下のように書いても同様な機能となる。
300
PRINT 300, I, J
FORMAT (I5, 1H■, I5)
[’■’と 1H■は等価]
nH と書くと(n は数字)、H 以降に書いた n 文字をそのまま出力できる。
例:「’ABCDE’」と「5HABCDE」は等価で、ともに文字列「ABCDE」を出力。
4-2) 実数型データに対する編集記述子
(a) F 編集記述子:Fw.d
[w は全桁数: 符号・小数点を含む、d は小数点以下の桁数]
「F7.2」ならば「全 7 桁で小数点以下が 2 桁の実数」。
・入力例
与えるデータ 編集記述子 内部での値
F7.2
■123.45
+0.12345×103
-123.45
F7.2
-0.12345×103
・出力例
内部での値
+0.12345×103
-0.12345×103
-0.12345×103
編集記述子
F6.1
F6.1
F6.2
表示
■123.4
-123.4
表示できない
-123.45
(全 7 桁)
(b) E 編集記述子:Ew.d
[w は全桁数:符号・小数点・E を含む、d は小数点以下の桁数]
有効数字の桁数で浮動小数点形式で表現
「E7.2」ならば「全桁が 7 桁で小数点以下が 2 桁の単精度浮動小数」。
・入力例
与えるデータ
■123.45
0.1234E+03
-0.123E-10
■0.12E+1■
編集記述子
E7.2
E10.4
E10.3
E9.2
内部での値
+0.12345×103
+0.1234×103
-0.123×10-10
注意
19
計算機・コンパイラによっては
0.12×1010 となる場合有り
・出力例
内部での値
+0.12345×103
-0.12345×10-3
-0.12345×10-3
-0.12345×10-3
編集記述子
E12.5
E12.5
E12.6
E12.7
表示
■0.12345E+03
-0.12345E-03
-.123450E-03
表示できない
-.1234500E-03
(13 桁)
(c) D 編集記述子:Dw.d
[w は全桁数:符号・小数点・E を含む、d は小数点以下の桁数]
倍精度浮動小数の場合に用いる。
「D7.2」ならば「全桁が 7 桁で小数点以下が 2 桁の倍精度浮動小数」。
9. 演算子と演算の優先順位
演算子
演算
優先順位
**
/
*
+
ベキ乗
除算
乗算
減算
加算
1 (最優先)
2
2
3
3
( 3**5 = 35 )
(1) FORTRAN プログラム中での記述方法
例: 変数 A を変数 B と変数 C の和にしたい場合
A=B+C
「=」は右辺の結果を左辺の変数に「代入」することを意味する。
(2) 演算の優先順位
以下のルールがある。
(a) 乗算・除算では、左から右に評価される。
例 A=B*C/D*E は、 A=((B*C)/D)*E に等しい。
(b) 加算と減算は、左から右に評価される.
(c) ベキ乗が連続する場合は、右から左に評価される。
例 L=I**J**K は、L=I**(J**K) と同じ。
20
K
J
I
コンパイル追加事項
コンパイルにより作成される実行ファイル名を指定するコマンド
g95 FORTRAN ファイル名 -o 実行ファイル名
例
g95
prog8.f
-o
prog8.out
演習 2-1:整数の入出力
整数の入出力を行う以下のプログラム prog2.f を作成せよ。
「1234」、
「-1234」を入力した場合、デフォルト「*」、
「I5」、
「I4」の書式の違いが
出力にどのように影響するかを確認せよ。
基本的に大文字と小文字の区別はない。
図 2-4
整数の入出力を行うプログラム prog2.f.
演習 2-2:実数の入出力 1
実数の入出力を行うプログラム prog3.f を作成し、入出力を確認せよ[123.45 や
-123.45 など]。
図 2-5
実数の入出力を行うプログラム prog3.f.
21
演習 2-3:実数の入出力 2
π=3.1415926535897932 を d24.16 と d24.12 で出力するプログラム prog4.f を作成し、
d24.16 と d24.12 で出力した結果の違いを確認せよ。
変数 a に 3.1415926535897932d0 を代入
スペースキーを押し、一文字分だけ空ける。
図 2-6
π=3.1415926535897932 を d24.16 と d24.12 で出力するプログラム prog4.f.
演習 2-4:実数の入出力 3
次のプログラム prog5.f を作成し、出力結果を確認せよ。[倍精度実数の指数部の
「出力」結果において、指数部の表現は「E」となることも確認せよ。]
H 編集記述子
‘■’ = 1H■
他の例:‘ABCDE’ = 5HABCDE
nH と書くと(n は数字)、H 以降に書
いた n 文字をそのまま出力できる。
図 2-7
A, B, C の値を出力するプログラム prog5.f.
*演習 2-5(レポート課題):実数の入出力 4
次のプログラム prog6.f を作成し、出力結果を確認せよ。型宣言を行っていない変
数 A がどのように取り扱われているかについて簡潔に述べよ。また、単精度実数で宣
言した変数 D に関して、指数部を「D」で表現した数値を代入した結果がどのように
22
取り扱われているかについても簡潔に述べよ。
図 2-8
A, B, C, D の値を異なる書式で出力するプログラム prog6.f.
*演習 2-6(レポート課題):四則演算 1
実数型の変数を 3 つ入力し、その平均値を計算・出力するプログラムのフローチ
ャートを書け。なお、プログラム prog7.f は以下のように書ける。動作を確認せよ。
図 2-9
実数型の変数を 3 つ入力し、平均値を計算・出力するプログラム prog7.f.
23
*演習 2-7(レポート課題):四則演算 2
2 個の整数 M, N を入力し、和・差・積・商・余りを出力するプログラム prog8.f
を作成せよ。入出力の形式はデフォルト「*」でよい。プログラムだけでなくフロー
チャートも書くこと。
第 2 回レポート
演習 2-5、演習 2-6(フローチャートのみ)、演習 2-7 を提出すること
提出方法:
PDF あ る い は Word フ ァ イ ル を 電 子 メ ー ル に 添 付 し て
「[email protected]」まで送付する。
件名:マテリアルシミュレーション I 後半第 2 回レポート
******(学籍番号) ****(名前)
ファイル名:xxxxxx-2.pdf あるいは xxxxxx-2.doc
xxxxxx: 学籍番号、-2: 第 2 回目の演習
メールアドレスを間違えないこと。
添付ファイルの 1 ページ目にタイトル「マテリアルシミュレー
ション I 後半第 2 回レポート」、
「学籍番号」、
「氏名」を必ず記載
すること。
ファイルがきちんと添付できるか、自分のアドレス宛にメール
を送るなどして、テストを行った後に上記アドレスに送ること。
添付ファイルは一つにまとめ、レポートとしての体裁を整える
こと。なお、複数のファイルを添付した場合は未提出扱いとす
る。フローチャートだけを紙で別途提出しないこと。
24