Transcript 実習2

実 習 2
最大値・最小値
1
最大値と最小値
実習2
第3図のようなクラブコード、予算額、支出額を記録したファイルを読み、
処理条件にしたがい第4図のように印字するプログラムを完成させなさい。
入力形式
処理条件
入力ファイル名: YOSAN-F
入力レコード名: YOSAN-R
クラブコード
(CCODE)
X(4)
予算額
(YOSAN)
9(6)
(1)執行率は次の計算式で求める。
執行額 = 支出額 × 100 ÷ 予算
支出額
(SYUTU)
9(6)
(第3図)
出力形式
出力ファイル名: LIST-F
出力レコード名: LIST-R
クラブ
XXXX
~
XXXX
予算額
ZZZ,ZZ9
~
ZZZ,ZZ9
支出額
ZZZ,ZZ9
~
ZZZ,ZZ9
執行率
ZZ9
~
ZZ9
(2)データが終わりになったら、執行率が
最大のクラブコードとその執行率、執行
率が最小のクラブコードとその執行率を
印字する。
(3)最大・最小の執行率のクラブが複数あ
る時は、後に入力されたクラブコードを
印字する。
最大クラブコード XXXX 最大執行率 ZZ9
最小クラブコード XXXX 最小執行率 ZZ9
(第4図)
2
入力データ
CCODE
YOSAN
SYUTU
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
100000
120000
109000
150000
101000
130000
165000
085000
063000
115000
064000
055000
142000
045000
076000
160000
032000
065000
165000
085000
080500
093000
083010
128900
068200
104400
131200
053810
046100
087260
040570
033400
093700
038900
055420
094250
018260
044820
126100
061230
ファイル名:
実習2data.txt
3
入力形式・出力形式・処理条件
から記憶領域を定義する
4
記憶領域の定義
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
XXXX
999999 999999
01:MEISAI-R
M-CCODE
XXXX
01:MIDASI
作
業
領
域
クラブ
TU
XX
M-YOSAN
ZZZ,ZZ9
M-SYUTU
ZZZ,ZZ9
M-RITU
ZZ9
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
XXXX
最大執行率
M-MINCODE
XXXX
最小執行率
M-MAX
ZZ9
01:MIN-R
最小クラブコード
M-MIN
ZZ9
01:RITU
999
01:MAX
999
01:MIN
999
01:MAXCCODE
XXXX
01:MINCCODE
XXXX
01:E-FLG
XXX
出
力
領
域
FD:LIST-F 01:LIST-R
X(72)
5
記憶領域の定義から
データ部の記述をする
6
データ部の記述①
DATA
DIVISION.
FILE
SECTION.
FD YOSAN-F.
01 YOSAN-R.
02 CCODE PIC X(4).
02 YOSAN PIC 9(6).
02 SYUTU PIC 9(6).
02
PIC X(2).
FD LIST-F.
01 LIST-R
PIC X(72).
入
力
領
域
出力
領域
7
データ部の記述②
WORKING-STORAGE
01 E-FLG
01 MAX
01 MIN
01 RITU
01 MAXCCODE
01 MINCCODE
01 GOKEI
01 HEIKIN
01 KENSU
SECTION.
PIC X(3).
PIC 9(3).
PIC 9(3).
PIC 9(3).
PIC X(4).
PIC X(4).
PIC 9(8).
PIC 9(7).
PIC 9(2).
独
立
項
目
の
記
述
作
業
領
域
8
データ部の記述③
01 MIDASI.
02 PIC X(4)
02 PIC X(6)
02 PIC X(6)
02 PIC X(6)
02 PIC X(7)
02 PIC X(6)
02 PIC X(6)
02 PIC X(6)
01 MEISAI-R.
02
02 M-CCODE
02
02 M-YOSAN
02
02 M-SYUTU
02
02 M-RITU
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
SPACE.
"クラブ".
SPACE.
"予算額".
SPACE.
"支出額".
SPACE.
"執行率".
X(5) VALUE
X(4).
X(7) VALUE
ZZZ,ZZ9.
X(5) VALUE
ZZZ,ZZ9.
X(7) VALUE
ZZ9.
見
出
行
の
記
述
SPACE.
SPACE.
SPACE.
明
細
行
の
記
述
作
業
領
域
SPACE.
9
データ部の記述④
01 MAX-R.
02
PIC X(20) VALUE
02 M-MAXCCODE PIC X(4).
02
PIC X(5) VALUE
02
PIC X(13) VALUE
02 M-MAX PIC ZZ9.
01 MIN-R.
02
PIC X(20) VALUE
02 M-MINCCODE PIC X(4).
02
PIC X(5) VALUE
02
PIC X(13) VALUE
02 M-MIN PIC ZZ9.
" 最大クラブコード ".
SPACE.
"最大執行率
".
" 最小クラブコード ".
SPACE.
"最小執行率
".
最
大
値
行
の
記
述
最
小
値
行
の
記
述
作
業
領
域
10
処理手順を考える
11
入力ファイル・出力ファイルを開く
• COBOLのプログラムでは、最初の処理は
入力用、出力用のファイルを開くことである。
• ファイルを開くとは、ファイルを使用できる状
態にすることである。
12
① 初期値を設定する
入力装置
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
01:MEISAI-R
M-CCODE
SYUTU
TU
01:RITU
M-YOSAN
M-SYUTU
M-RITU
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
初期値 999
最大執行率
M-MAX
01:MINCCODE
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
初期値 0
01:MAXCCODE
M-MAXCODE
01:MIN-R
最小クラブコード
01:MAX
000
01:MIN
999
初期値”OFF”
FD:LIST-F 01:LIST-R
13
② 見出行を印字する
入力装置
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
TU
01:RITU
M-YOSAN
M-SYUTU
M-RITU
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
01:MAXCCODE
M-MAXCODE
最大執行率
M-MAX
01:MINCCODE
01:MIN-R
最小クラブコード
01:MAX
000
01:MIN
999
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
14
繰り返し処理
入力データを読み終えるまで(E-FLG = “ON”となるま
で)以下の手続きを繰り返す。
③入力データを読む。
④執行率を求める。
⑤執行率は最大値以上か比較する。
YESの場合は、執行率とクラブコードを保存する。
⑥執行率は最小値以下か比較する。
YESの場合は、執行率とクラブコードを保存する。
⑦各項目を明細行に転記する。
⑧明細行を印字する。
15
入力装置
③ 入力データを読む
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
TU
01:RITU
M-YOSAN
M-SYUTU
M-RITU
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
01:MAXCCODE
M-MAXCODE
最大執行率
M-MAX
01:MINCCODE
01:MIN-R
最小クラブコード
01:MAX
000
01:MIN
999
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
16
入力装置
④ 執行率を求める
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
TU
SYUTU * 100 / YOSAN
080500
M-YOSAN
M-SYUTU
M-RITU
予算額
支出額
執行率
01:MIDASI
作
業
領
域
クラブ
01:MAX-R
最大クラブコード
01:RITU
080
01:MAX
000
01:MIN
999
01:MAXCCODE
M-MAXCODE
最大執行率
M-MAX
01:MINCCODE
01:MIN-R
最小クラブコード
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
17
入力装置
⑤ 執行率と最大値を比較する
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
TU
SYUTU * 100 / YOSAN
080500
M-YOSAN
M-SYUTU
M-RITU
予算額
支出額
執行率
01:MIDASI
作
業
領
域
クラブ
01:MAX-R
最大クラブコード
RITU >= MAX ?
080
000
YES
01:MAXCCODE
M-MAXCODE
最大執行率
M-MAX
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
18
入力装置
入力データ
⑤ YESなら執行率とクラブコードを保存する
NOなら何もしない
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
TU
SYUTU * 100 / YOSAN
080500
M-YOSAN
M-SYUTU
M-RITU
予算額
支出額
執行率
01:MIDASI
作
業
領
域
クラブ
01:MAX-R
最大クラブコード
M-MAXCODE
最大執行率
M-MAX
RITU >= MAX ?
080
000
YES
01:MAXCCODE
0101
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
080
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
19
入力装置
⑥ 執行率と最小値を比較する
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
M-YOSAN
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
M-RITU
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
最大執行率
M-MAX
RITU >= MAX ?
080
000
RITU <= MIN ?
080
YES
NO
999
01:MAXCCODE
0101
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
080
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
20
入力装置
入力データ
⑥ YESなら執行率とクラブコードを保存する
NOなら何もない
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
M-YOSAN
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
M-RITU
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
最大執行率
M-MAX
RITU >= MAX ?
080
000
RITU <= MIN ?
080
999
YES
NO
01:MAXCCODE
0101
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
080
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
21
入力装置
入力データ
⑦ 各項目を明細行に転記する
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
最大執行率
M-MAX
RITU >= MAX ?
080
000
RITU <= MIN ?
080
999
YES
NO
01:MAXCCODE
0101
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
080
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
支出額
執行率
22
入力装置
入力データ
⑧ 明細行を印字する
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
最大執行率
M-MAX
RITU >= MAX ?
080
000
RITU <= MIN ?
080
999
YES
NO
01:MAXXCODE
0101
01:MINCCODE
01:MIN-R
最小クラブコード
01:RITU
080
01:MAX
080
000
01:MIN
999
100000
M-MINCODE
最小執行率
M-MIN
01:E-FLG
OFF
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
0101
予算額
100,000
支出額
80,500
執行率
80
23
入力データ終了後の処理
以下の手続きがある。
⑨最大値と最大となったクラブコードを
最大値行に転記する。
⑩最大値行を印字する。
⑪最小値と最小となったクラブコードを
最小値行に転記する。
⑫最小値行を印字する。
24
入力装置
⑨ 最大値と保存されていたクラブコードを
最大値行に転記する。
演算装置
入力データ
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
0114
最大執行率
M-MAX
86
01:MIN-R
最小クラブコード
M-MINCODE
最小執行率
M-MIN
01:RITU
072
01:MAX
086
000
01:MIN
057
100000
RITU >= MAX ?
072
086
RITU <= MIN ?
072
NO
NO
057
01:MAXCCODE
0114
01:MINCCODE
0117
01:E-FLG
ON
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
0101
予算額
100,000
支出額
80,500
執行率
80
25
入力装置
⑩ 最大値行を印字する。
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
0114
最大執行率
M-MAX
86
01:MIN-R
最小クラブコード
M-MINCODE
最小執行率
M-MIN
01:RITU
072
01:MAX
086
000
01:MIN
057
100000
RITU >= MAX ?
072
086
RITU <= MIN ?
072
NO
NO
057
01:MAXCCODE
0114
01:MINCCODE
0117
01:E-FLG
ON
出
力
領
域
FD:LIST-F 01:LIST-R
クラブ
予算額
0101
100,000
最大クラブコード 0114
支出額
執行率
80,500
80
86
最大執行率
26
入力装置
⑪ 最小値と保存されていたクラブコードを
最小値行に転記する。
演算装置
入力データ
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
0114
最大執行率
M-MAX
86
01:MIN-R
最小クラブコード
出
力
領
域
M-MINCODE
0117
最小執行率
M-MIN
57
01:RITU
072
01:MAX
086
000
01:MIN
057
100000
RITU >= MAX ?
072
086
RITU <= MIN ?
072
NO
NO
057
01:MAXCCODE
0114
01:MINCCODE
0117
01:E-FLG
ON
FD:LIST-F 01:LIST-R
クラブ
予算額
0101
100,000
最大クラブコード 0114
支出額
執行率
80,500
80
86
最大執行率
27
入力装置
⑫ 最小値行を印字する。
入力データ
演算装置
記憶装置
入
力
領
域
FD:YOSAN-F 01:YOSAN-R
CCODE
YOSAN
SYUTU
0101
100000 080500
01:MEISAI-R
M-CCODE
0101
M-YOSAN
100,000
TU
SYUTU * 100 / YOSAN
080500
M-SYUTU
80,500
M-RITU
80
01:MIDASI
作
業
領
域
クラブ
予算額
支出額
執行率
01:MAX-R
最大クラブコード
M-MAXCODE
0114
最大執行率
M-MAX
86
01:MIN-R
最小クラブコード
出
力
領
域
M-MINCODE
0117
最小執行率
M-MIN
57
01:RITU
072
01:MAX
086
000
01:MIN
057
100000
RITU >= MAX ?
072
086
RITU <= MIN ?
072
NO
NO
057
01:MAXCCODE
0114
01:MINCCODE
0117
01:E-FLG
ON
FD:LIST-F 01:LIST-R
クラブ
予算額
0101
100,000
最大クラブコード 0114
最小クラブコード 0117
支出額
執行率
80,500
80
86
最大執行率
57
最小執行率
28
入力ファイル・出力ファイルを閉じる
• COBOLのプログラムでは、最後の処理は入
力用、出力用のファイルを閉じることである。
29