Post on 09-Jan-2016
description
1
実 習 2実 習 2
最大値・最小値
2
最大値と最小値最大値と最小値 第3図のようなクラブコード、予算額、支出額を記録したファイルを読み、処理条件にしたがい第4図のように印字するプログラムを完成させなさい。
入力形式
出力形式
クラブコード( CCODE)
X(4)
予算額( YOSAN)
9(6)
入力ファイル名: YOSAN - F 入力レコード名: YOSAN - R
クラブ 予算額 支出額 執行率 XXXX ZZZ , ZZ9 ZZZ , ZZ9 ZZ9
XXXX ZZZ , ZZ9 ZZZ , ZZ9 ZZ9
最大クラブコード XXXX 最大執行率 ZZ9 最小クラブコード XXXX 最小執行率 ZZ9
クラブ 予算額 支出額 執行率 XXXX ZZZ , ZZ9 ZZZ , ZZ9 ZZ9
XXXX ZZZ , ZZ9 ZZZ , ZZ9 ZZ9
最大クラブコード XXXX 最大執行率 ZZ9 最小クラブコード XXXX 最小執行率 ZZ9
(第3図)
出力ファイル名: LIST - F 出力レコード名: LIST - R
~~~ ~
(第4図)
処理条件
(1)執行率は次の計算式で求める。 執行額 = 支出額 × 100 ÷ 予算
(2)データが終わりになったら、執行率が 最大のクラブコードとその執行率、執行 率が最小のクラブコードとその執行率を 印字する。
(3)最大・最小の執行率のクラブが複数あ る時は、後に入力されたクラブコードを 印字する。
実習2実習2
支出額( SYUTU)
9(6)
3
入力データ
CCODE YOSAN SYUTU
01010102010301040105010601070108010901100111011201130114011501160117011801190120
100000120000109000150000101000130000165000085000063000115000064000055000142000045000076000160000032000065000165000085000
080500093000083010128900068200104400131200053810046100087260040570033400093700038900055420094250018260044820126100061230
ファイル名: 実習2 data.txtファイル名: 実習2 data.txt
4
入力形式・出力形式・処理条件から記憶領域を定義する
5
記憶領域の定義入力領域
作業領域
出力領域
記憶装置記憶装置
CCODEXXXX
YOSAN999999
SYUTU999999
999
999
999
FD:YOSAN- F 01:YOSAN-R
01:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
FD:LIST-F 01:LIST-R
M-YOSANZZZ,ZZ9
M-SYUTUZZZ,ZZ9
M-RITUZZ9
M-CCODEXXXX
クラブ 予算額 支出額 執行率
X(72)
XXXX
XXX
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG
最大クラブコードM- MAXCODE
XXXX 最大執行率M- MAXZZ9
最小クラブコードM- MINCODE
XXXX 最小執行率M- MINZZ9
XXXX01:MAXCCODE
TUXX
6
記憶領域の定義からデータ部の記述をする
7
データ部の記述①
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).
入
力
領
域
出力領域出力領域
8
データ部の記述②
WORKING-STORAGE SECTION.01 E-FLG PIC X(3).01 MAX PIC 9(3).01 MIN PIC 9(3).01 RITU PIC 9(3).01 MAXCCODE PIC X(4).01 MINCCODE PIC X(4).01 GOKEI PIC 9(8).01 HEIKIN PIC 9(7).01 KENSU PIC 9(2).
作
業
領
域
独立項目の記述
9
データ部の記述③01 MIDASI. 02 PIC X(4) VALUE SPACE. 02 PIC X(6) VALUE "クラブ ". 02 PIC X(6) VALUE SPACE. 02 PIC X(6) VALUE "予算額 ". 02 PIC X(7) VALUE SPACE. 02 PIC X(6) VALUE "支出額 ". 02 PIC X(6) VALUE SPACE. 02 PIC X(6) VALUE "執行率 ".01 MEISAI-R. 02 PIC X(5) VALUE SPACE. 02 M-CCODE PIC X(4). 02 PIC X(7) VALUE SPACE. 02 M-YOSAN PIC ZZZ,ZZ9. 02 PIC X(5) VALUE SPACE. 02 M-SYUTU PIC ZZZ,ZZ9. 02 PIC X(7) VALUE SPACE. 02 M-RITU PIC ZZ9.
作
業
領
域
見出行の記
述
明細行の記
述
10
データ部の記述④
01 MAX-R. 02 PIC X(20) VALUE " 最大クラブコード ". 02 M-MAXCCODE PIC X(4). 02 PIC X(5) VALUE SPACE. 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 SPACE. 02 PIC X(13) VALUE "最小執行率 ". 02 M-MIN PIC ZZ9.
作
業
領
域
最大値行の記
述
最小値行の記
述
11
処理手順を考える
12
入力ファイル・出力ファイルを開く
• COBOL のプログラムでは、最初の処理は入力用、出力用のファイルを開くことである。
• ファイルを開くとは、ファイルを使用できる状態にすることである。
13
① 初期値を設定する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE YOSAN SYUTU
000
999
FD:YOSAN- F 01:YOSAN-R
01:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
FD:LIST-F 01:LIST-R
M-YOSAN M-SYUTU M-RITUM-CCODE
クラブ 予算額 支出額 執行率
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコードM- MINCODE
最小執行率M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
初期値” OFF”初期値” OFF”
初期値 999初期値 999
初期値 0初期値 0
14
② 見出行を印字する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
FD:YOSAN- F 01:YOSAN-R
01:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
15
繰り返し処理
③ 入力データを読む。④ 執行率を求める。⑤ 執行率は最大値以上か比較する。 YES の場合は、執行率とクラブコードを保存する。⑥ 執行率は最小値以下か比較する。 YES の場合は、執行率とクラブコードを保存す
る。⑦ 各項目を明細行に転記する。⑧ 明細行を印字する。
入力データを読み終えるまで( E-FLG = “ ON” となるまで ) 以下の手続きを繰り返す。
16
③ 入力データを読む
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
FD:YOSAN- F 01:YOSAN-R
01:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
17
④ 執行率を求める
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
18
⑤ 執行率と最大値を比較する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
19
⑤ YES なら執行率とクラブコードを保存する NO なら何もしない
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
080
0101
20
⑥ 執行率と最小値を比較する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
080
0101
RITU <= MIN ?080 999
NO
21
⑥ YES なら執行率とクラブコードを保存する NO なら何もない
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
080
0101
RITU <= MIN ?080 999
NO
22
⑦ 各項目を明細行に転記する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG M- MINCODE最小執行率
M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
080
0101
RITU <= MIN ?080 999
NO
0101 100,000 80,500 80
23
⑧ 明細行を印字する
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
999
08001:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
OFF
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG 最小執行率M- MIN
01:MAXXCODE
TU
演算装置演算装置
入力装置入力装置
クラブ 予算額 支出額 執行率
入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?080 000
YES
080
0101
RITU <= MIN ?080 999
NO
0101 100,000 80,500 80
0101 100,000 80,500 80
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
M- MINCODE最小クラブコード
FD:LIST-F 01:LIST-R
24
入力データ終了後の処理
⑨ 最大値と最大となったクラブコードを 最大値行に転記する。⑩ 最大値行を印字する。⑪ 最小値と最小となったクラブコードを 最小値行に転記する。⑫ 最小値行を印字する。
以下の手続きがある。
25
⑨ 最大値と保存されていたクラブコードを 最大値行に転記する。
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
057
07201:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
0117
ON
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG 最小執行率M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置 入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?072 086
NO
086
0114
RITU <= MIN ?072 057
NO
0101 100,000 80,500 80
0101 100,000 80,500 80
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
M- MINCODE最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
0114 86
26
⑩ 最大値行を印字する。
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
057
07201:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
0117
ON
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG 最小執行率M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置 入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?072 086
NO
086
0114
RITU <= MIN ?072 057
NO
0101 100,000 80,500 80
0101 100,000 80,500 80
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
クラブ 予算額 支出額 執行率
86
M- MINCODE
最大クラブコード 0114 86最大執行率
0114
27
⑪ 最小値と保存されていたクラブコードを 最小値行に転記する。
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
057
07201:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
0117
ON
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG 最小執行率M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置 入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?072 086
NO
086
0114
RITU <= MIN ?072 057
NO
0101 100,000 80,500 80
0101 80,500 80
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
0114 86
M- MINCODE
最大クラブコード 0114 86最大執行率100,000
クラブ 予算額 支出額 執行率
570117
28
⑫ 最小値行を印字する。
入力領域
作業領域
出力領域
記憶装置記憶装置
CCODE0101
YOSAN100000
SYUTU080500
000
057
07201:MEISAI-R
01:MIDASI
01:MAX-R
01:MIN-R
M-YOSAN M-SYUTU M-RITUM-CCODE
0117
ON
01:MAX
01:MIN
01:RITU
01:MINCCODE
01:E-FLG 最小執行率M- MIN
01:MAXCCODE
TU
演算装置演算装置
入力装置入力装置 入力データ入力データ
FD:YOSAN- F 01:YOSAN-R
SYUTU * 100 / YOSAN080500 100000
RITU >= MAX ?072 086
NO
086
0114
RITU <= MIN ?072 057
NO
0101 100,000 80,500 80
0101 80,500 80
クラブ 予算額 支出額 執行率
最大クラブコードM- MAXCODE
最大執行率M- MAX
最小クラブコード
FD:LIST-F 01:LIST-R
0114 86
M- MINCODE
最大クラブコード 0114 86最大執行率100,000
クラブ 予算額 支出額 執行率
570117
最小クラブコード 0117 57最小執行率
29
入力ファイル・出力ファイルを閉じる
• COBOL のプログラムでは、最後の処理は入力用、出力用のファイルを閉じることである。