平成8年度 春期 第二種 午後 問12

                        [更新日]1996.06.04
問12 次のCOBOLプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 作業項目ファイルを読み,本日から1か月分の作業項目を印字する。 (1) 作業項目ファイルのレコード様式は,次のとおりである。 ┌─────┬─────┬────┬─────┬─────┬─────┬─────┐ │作業コード│作業項目名│担当者名│開始予定日│開始実績日│終了予定日│終了実績日│ ├─────┼─────┼────┼─────┼─────┼─────┼─────┤ │ 6けた │ l4けた │ l0けた │ 6けた │ 6けた │ 6けた │ 6けた │ └─────┴─────┴────┴─────┴─────┴─────┴─────┘ それぞれの日付には,年月日がYYMMDD(YY:西暦下2けた, MM:月,DD:日)の形式で 入っている。ただし,開始実績日又は終了実績日が未登録の場合は,その日付のすべて のけたに“0”が入っている。 (2) 本日から,次の月の同じ日までを“1か月”とする。 (3) 下図のように,作業期間が“1か月”に含まれる作業項目(太線)を印字対象とする。 記号 ○:開始予定日,×:終了予定日 本日 1か月 1か月後 ─────────┬────────┬──────── ○─────× │ │ │ │ ○─────┼━━━× │ │ │ ○───┼━━━━━━━━┿──× │ │ │ ○━━━━× │ │ │ │ ○━━━━┿────× │ │ │ │○─────× │ │ (4) 作業項目の印字は,次のように行う。 1.印字様式は,次のとおりである。 ┌────────────────────────────────────┐ │ 1か月分の作業項目一覧 │ │作業コード 作業項目名 担当者名 開始予定日/実績日 終了予定日/実施日│ │XXXXXX XXXXXX…X XXXX…X YY-MM-DD YY-MM-DD YY-MM-DD YY-MM-DD│ │XXXXXX XXXXXX…X XXXX…X YY-MM-DD YY-MM-DD YY-MM-DD YY-MM-DD│ │ : : : : : : : │ │XXXXXX XXXXXX…X XXXX…X YY-MM-DD YY-MM-DD YY-MM-DD YY-MM-DD│ └────────────────────────────────────┘ 2.終了予定日の早い順に印字する。 3.開始実績日又は終了実績日が未登録の場合は,空白を印字する。 4.表題(2行)は,既に印刷されているものとする。 (5) 副プログラム“editdate”は,第1引数の日付(YYMMDD)を第2引数(YY-MM-DD) の形式に編集する。 〔プログラム〕 1 data division. 2 file section. 3 fd sagyo-komoku-file. 4 01 sagyo-rec pic x(54). 5 fd print-file. 6 01 print-rec pic x(80). 7 sd sort-file. 8 01 sort-rec. 9 05 s-code pic x(6). 10 05 s-komoku-mei pic x(14). 11 05 s-tantosya-mei pic x(10). 12 05 s-kai-yo-bi pic x(6). 13 05 s-kai-zi-bi pic x(6). 14 05 s-syu-yo-bi pic x(6). 15 05 s-syu-zi-bi pic x(6). 16 working-storage section. 17 01 detail-rec. 18 05 pic x(2) value space. 19 05 p-code pic x(6). 20 05 pic x(6) value space. 21 05 p-komoku-mei pic x(14). 22 05 pic x(2) value space. 23 05 p-tantosya-mei pic x(10). 24 05 pic x(2) value space. 25 05 p-kai-yo-bi pic x(8). 26 05 pic x(2) value space. 27 05 p-kai-zi-bi pic x(8). 28 05 pic x(2) value space. 29 05 p-syu-yo-bi pic x(8). 30 05 pic x(2) value space. 31 05 p-syu-zi-bi pic x(8). 32 01 honzitu. 33 05 h-yy pic 9(2). 34 05 h-mm pic 9(2). 35 05 h-dd pic 9(2). 36 01 raigetu. 37 05 r-yy pic 9(2). 38 05 r-mm pic 9(2). 39 05 r-dd pic 9(2). 40 procedure division. 41 main section. 42 ml. accept honzitu from date 43 move honzitu to raigetu 44 if h-mm = 12 45 compute r-yy = r-yy + 1 46 move 1 to r-mm 47 else 48 compute r-mm = r-mm + 1 49 end-if 50 sort sort-file descending key s-syu-yo-bi 51 input procedure s-in output procedure s-out 52 stop run. 53 s-in section. 54 i1. open input sagyo-komoku-file. 55 i2. read sagyo-komoku-file into sort-rec 56 at end go to i3. 57 if (s-syu-yo-bi >= honzitu and s-kai-yo-bi <= raigetu) 58 release sort-rec 59 end-if 60 go to i2. 61 i3. close sagyo-komoku-file. 62 s-out section. 63 o1. open output print-file. 64 o2. return sort-fiie at end 90 to o3. 65 move s-code to p-code 66 move s-komoku-mei to p-komoku-mei 67 move s-tantosya-mei to p-tantosya-mei 68 call "editdate" using s-kai-yo-bi p-kai-yo-bi 69 if s-kai-zi-bi = zero 70 move space to p-kai-zi-bi 71 else 72 call "editdate" using s-kai-zi-bi p-kai-zi-bi 73 end-if 74 call "editdate" using s-syu-yo-bi p-syu-yo-bi 75 if s-syu-zi-bi = zero 76 move space to p-syu-zi-bi 77 else 78 call "editdate" using s-syu-zi-bi p-syu-zi-bi 79 end-if 80 write print-rec from detail-rec after 1 81 go to o2. 82 o3. close print-file. 設問 次の記述中の [ ] に入れる正しい答えを,解答群の中から選ベ。 (1) このプログラム中には1行誤りがある。その行を [ a ] に変更する。 (2) このプログラムでは,日付中の年が2けたで表現されている。西暦2000年以降 になると,このままでは困るので,年を4けたに変更したい。 �� 1. 作業項目ファイルとソートファイル(sort,file)のレコード様式中の日 付(4か所)を,6けたから8けたに変更する。4行目と6行目の長さを, それぞれ [ b ] けたと88けたに変える。l2,l3,14及びl5行目の データ項目の長さを [ c ] けたに変える。 2. 印字様式中のYYをYYYYに変更する。25,27,29及び31行目のデータ項目の 長さを [ d ] けたに変える。 �� 3. 33行目と37行目の年を格納する作業領域の長さを,4けたに変更する。 �� 4. 42行目のaccept from date文では2けたの年しか取得できない。この行を, 西暦4けたの年,2けたの月,2けたの日を取得する副プログラム“getdate” を呼ぶように変える。 m1.call "getdate" using honzitu �� 5. 副プログラム"editdate"の第1引数と第2引数の長さをそれぞれ2けたずつ 増やし,YYYYMMDDからYYYY-MM-DDの形式に編集するように,変更する。 (3) "終了予定日が本日より前で,終了実績日が未登録"と"開始予定日が1か月 後より後で,開始実績日が登録済みで,終了実績日が未登録"の作業項目も 印字対象作業項目とすることになった。そのためには,57行目と58行目の間 に次の字句を追加すればよい。 or(s-syu-yo-bi [ e ] honzitu and s-syu-z-bi = zero) or(s-kai-yo-bi > raigetu and s-kai-zi-bi not = zero and s-syu-zi-bi [ f ] zero) aに関する解答群 ア 43 move 0 to r-mm イ 50 sort sort-file ascending key s-syu-yo-bi ウ 57 if(s-syu-yo-bi >= honzitu or s-kai-yo-bi <= raigetu) エ 80 write print-rec after 1 b〜dに関する解答群 ア 2 イ 4 ウ 6 エ 8 オ 10 カ 56 キ 58 ク 60 ケ 62 コ 64 e,fに関する解答群 ア > イ < ウ = エ not = オ or カ and