第6回 5/26

平成27年度
情報基礎演習Ⅰ
第6回 演習
担当 光武 雄一
授業のWebsite: http://web.me.saga-u.ac.jp/~mitutake/info1/info1.html
メールアドレス: [email protected]
第8回 演習内容


先週の課題解答と説明
合計値の計算(54ページ)
Report0519 解説

教科書 演習3.1 バーローの数表
x=1から10までの整数の数表
DO X = 1, 10
WRITE(*,’(1X, 3I4, 2F9.6)’) X, X**2, X**3, 1.0/REAL(X), SQRT(REAL(X))
END DO
Xの2乗と3乗は整数演算,逆数と平方根は実数演算となることに注意
Report0519(ボーナス課題)
教科書 演習3.2
x=0~1まで0.1間隔でf(x)=xxの数表
DO I = 0, 10
X = 0.1*REAL(I)
WRITE(*,’(1X,F4.1, F9.6)’) X, X**X
END DO

繰り返し処理による数表の作成
のポイント
問題で与えられた数表の独立変数の値の変化を繰り
返し処理中の制御変数(整数型)を使ってどのように与
えたらよいかを考えること.

等差数列(公差が実数)の場合
方法1) 独立変数を10n倍した整数を制御変数とし,独立変数は制御変数
を10-n倍して与える.(公差が整数の場合は,独立変数を制御変数とする)
方法2) 制御変数は,繰り返し回数のカウントに使い,独立変数は
増分×繰り返し回数 で与える.

等比数列の場合
方法1) 初期値を代入した独立変数に繰り返しの度に公比を掛ける.
方法2) 制御変数は,項番のカウントに使い,独立変数は
初項×公比**制御変数 の計算式で与える.
合計の計算法(教科書p.54)
N個のデータの合計値を求めるためのアルゴリズム
a1,a2,・・・・,aNまでのN個のデータの合計値の計算を行うにあたり,
データの入力方法として,以下の2つが考えられる.
1) 最初にN個のデータを全て入力した後,
合計値の計算を行う.
→ 4章で学ぶ配列変数を用いる
2) データを1つずつ入力しながら合計値を計算する.
→ 今日の演習では,この方式を用いる.
何故,合計値の計算を繰り返し処理で行う必要があるのか
→ 決まったデータの個数とデータの値に対して,直接数式による合計値の記述も可能
しかし,データ個数が多くなると数式による足し算の記述は殆ど不可能
また,任意の個数のデータの合計値を求める数式は記述不可能.
フローチャートの記号 p.92
端子
フローチャートの
始まり及び終わりを表す
処理
計算、代入などの処理を
表す
判断
条件によって分岐する
ループ
繰り返しの始まりと終わり
入力
キーボードからの入力
表示
ディスプレイへの表示
サブルーチン サブルーチン
(モジュール)
書類
印刷する
入出力
ファイルへの
入出力
結合子
ページ内の結合
結合子
ページ外の結合
アルゴリズム(解法手順)
の書き方


アルゴリズムは,基本制御構造 1)ブロック構造,2)条件判断,3)繰
り返し,4)サブルーチン を用いて記述する.
ブロック構造・・・・順番に実行される処理の系列を記述
()の中の番号は処理の実行順番を示す.上から順に番号を割り振る.
1つの処理内容は,1行のプログラムが1対1で対応する.
1) ブロック構造の記述
記述の一例
(1) 処理1
(1) 変数xの値をキーボードより入力する.
(2) 処理2
(2) 変数yにsin(x)を代入する
:
:
(3) 画面に変数yの値を出力する.
(n) 処理n
3) 繰り返し処理の記述
記述の一例
(i) 選択条件(or繰り返し条件)
(1) 以下の処理をn回繰り返す
(i-1) 処理1
(1-1) 変数aの値を読み込む
(i-2) 処理2
(1-2) 合計値変数Sにaを足し込む
:
:
(2) 画面に合計値変数Sの値を出力する
(i-n) 処理n
なお,2)~4)のアルゴリズム記述方法については,教科書第5章で説明する.
N個のデータの合計値を求める
ためのアルゴリズム
合計値を求める処理
のフローチャート
N個のデータa1,a2,a3,・・・,aN の合計 S=Σai
を求める
(1) 合計値の部分和を格納する変数Sに0.0を代入
(初期化)する.
ここが重要! Sに0.0以外の数値が入っている場合には,
合計値を正しく求めることができないので必須の処理.
(2) i=1~N番目まで以下の処理を繰り返す.
(2-1) i番目のデータaiを読み込む
(2-2) Sにaiを加える.
→ この処理に繰り返し計算を用いる
i番目の処理 S = S + ai
FORTRANでは右辺から左辺の変数への代入文
(3) 部分和の変数Sの値を出力する
全てのデータを加算し終えたときのSの値が,求め
る合計値となる.
注)処理内容が複雑になると,プログラムでの実行手順を詳しく書き下した
アルゴリズムが必要となる.アルゴリズム無しにプログラム作成し
ても正しいプログラムを書くことは困難.
合計変数に0.0を代入
制御変数iに始値を代入
制御変数i≦終値
No
Yes
i番目のデータaを読み込む
合計値にaを足す S=S+a
制御変数iに増分を加算
変数Sを出力
おわり
N個のデータの合計値を求める
プログラムのフローチャート(流れ図)
部分和変数 S = 0.0
S = 0.0(変数初期化必須の処理)
制御変数 I = 1 (始値)
I > N (終値)
DO I = 1, N
Yes
No
I番目のデータの入力
SにI番目のデータを加算
I=I+1
終了処理へ
合計値を格納する変数Sを準備して
合計の計算ごとに入力データをSに足し込む
これが繰り返し処理での合計値を求める基本
READ(*,*) A
S=S+A
END DO
WRITE(*,*) ‘SUM =‘,S
演習1. 合計値の計算

教科書p.55 例題3.3のプログラムをタイ
プし,reidai3_3.f95で保存し,実行プログ
ラムを作成せよ.
実行プログラムができたら教科書の入力
データを入力しなさい.
例題3.3 N個のデータの合計
PROGRAM REIDAI3_3
IMPLICIT NONE
INTEGER :: I, N
REAL :: A, S
WRITE(*,*) ‘N = ‘
READ(*,*) N
S = 0.0
DO I = 1, N
WRITE(*,*) ‘A(‘,I, ‘) = ‘
READ(*,*) A
S=S+A
END DO
WRITE(*,*) ‘S = ‘, S
STOP
END PROGRAM REIDAI3_3
! 整数変数 I,Nの宣言
! 実数変数 A,Sの宣言
!
!
!
!
!
!
!
合計を求めるデータ個数Nの入力
合計値を格納する変数Sの初期化(必須)
繰り返し計算の始まり(I = 1,2,3,・・・N)
入力のメッセージ出力
I 番目のデータAを入力
Sの値にAを加算して,Sに格納する
繰り返し計算の終端
! 合計値Sの表示
解説 例題3.3 合計値の計算

テキストP.55の例題3.3のプログラム.
(注目すべき点)
 DO~END DOで挟まれる処理内容
 合計値を格納する変数Sの初期化とその実行位置
 部分和を計算する式の位置.
 結果を表示するWRITE文の位置

プログラム処理の実行の順番が非常に重要.

プログラムの実行順番が不適切だと,所望した処理
結果は得られない
演習課題2

教科書p.54 例題3.3の変形問題
例題3.3のプログラムを参考にして,1からNまでの整数に対して
1) 合計値
N
S 1  k と
k 1
N
2) 二乗和 S 2  k 2
k 1
を同時に求めるプログラムを作れ.ただし,整数Nはプログラムの先
頭で入力させること.
プログラム名とソースファイル名は,reidai3_3a, reidai3_3a.f95を用
いよ.
ヒント
それぞれの合計値を格納するための部分和変数を2つ
用意する.繰り返しごとにデータを入力する必要はない.
DO文の制御変数を用いて与えよ.
演習課題3

教科書p.58 演習問題3.3のプログラムに
ついて,元利合計金額を求めるアルゴリズム
をスライドp.5の記述法を使って作成せよ.
ただし,年利と元金はそれぞれキーボードか
ら入力すること.
演習課題4
演習課題3で作成した元利合計計算のアル
ゴリズムに従って,年利1%,元金10万円に
対して,1年後,2年後,3年後の元利合計を
手計算で求めよ.
演習課題5

演習課題3で作成した元利合計計算のアル
ゴリズムをFORTRANプログラムで記述せよ.
ただし,プログラム名,ソースファイル名は,
それぞれproblem3_3,problem3_3.f95とする
こと.
今週の課題
〆切5月29日 19時
メール送付先:[email protected]
課題1(3点)
授業中の演習課題2のプログラムのプログラムを作成し,実行結果と伴
にソースプログラムをメールで提出せよ.ただし,プログラム名とソース
ファイル名は,課題の指示通りとし,実行結果はN=5とする.
課題2(3点x2)
授業中の演習課題3,5をメール本文に記述せよ.
ただし,手計算の結果は,1年後101,000円,2年後102,010円,3年
後103,030円となる.(積み立てでなく,10万円の預金の元利合計を計
算してください)