平成7年度 秋期 第二種 午後 問11
[更新日]2010.01.06
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 次の問11から問14までの4問については、この中から2問を選択し、答案用紙の┃ ┃選択欄の[選]を黒くマークして解答してください。 ┃ ┃ なお、2問以上選択した場合には、はじめの1問について採点します。 ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 問11 次のCのプログラムの説明を読んで、設問1〜4に答えよ。 [プログラムの説明] チェーン店舗数が19で、各店舗の営業時間が午前10時から午後7時までのスーパー マーケットのおけるPOSデータ集計プログラムである。集計対象年と商品コードを 指定して、商品の時間帯別の売上げ状況を集計し印字する。 各店舗のPOSデータは、図1に示したレコード様式によるPOSデータファイル (pos.f)に格納されている。POSデータレコードは図1の七つの項目からなり、各 項目間は1個の空白文字で区切られている。レコードの終端には改行文字 "\n" が 付いている。 各項目はすべて固定長であり、販売年月日と販売時刻とその他以外の項目は、10 進数字列で構成されている。 販売年月日は西暦年(YYYY)、月(MM)、日(DD)による "YYYY-MM-DD" の10けたであり、販売時刻は時(HH)、分(MM)による "HH:MM" の5けたで ある。 なお、図1に示したけた数には、項目間の区切り文字を含んでいない。 ┌─────────┬───┬─────┬────┬───┬──────────┐ │商品コード│単 価│販 売│販売年月日│販売時刻│ 店 │その他(顧客コード,│ │ │ │個 数│ │ │コード│レジ担当コードなど)│ │ │ │ │ │ │ │ │ │ 8けた │6けた│4けた│ 10けた│ 5けた│4けた│ 14けた │ └─────┴───┴───┴─────┴────┴───┴──────────┘ 図1 POSデータレコード様式 例えば、1995年1月10日の午後2時に、店コードが "0011" の店舗で商品コー ドが "01010101" のコーラ(1本250円)が6本売れた場合は、POSデータレコー ドは図2のようになる。 商品 販売 販売 販売 店 コード 単価 個数 年月日 時刻 コード その他 ┌───────────────────────────────────────────────────────────┐ │01010101 000250 0006 1995−01−10 14:00 0011 0003−0013−0000\n│ └───────────────────────────────────────────────────────────┘ 図2 POSデータレコードの例 POSデータ集計結果の印字例は、図3のようになる。 ┌───────────────────────────────────┐ │*** 商品の時間帯別売上状況 *** │ │商品コード=10011111 集計対象年=1995 │ │時間帯 売上額 1000 2000 3000…9000 │ │−−−−:−−−−−−:−−−−+−−−−+−−−−+−−…−+ │ │ : │ │ │ │ 店コード = 0011 │ │10時台:000000: │ │11時台:000000: │ │12時台:001000:***** │ │13時台:000400:** │ │14時台:000200:* │ │15時台:000200:* │ │ : │ │ │ │ 店コード = 0012 │ │ : │ └───────────────────────────────────┘ [プログラム] #include <stdio.h> #include <string.h> #define TMAX 19 ………………………… 1. #define HMAX 20 ………………………… 2. #define OP_TM 10 ………………………… 3. #define CL_TM 19 ………………………… 4. main() { char shina[8],scode[9],dummy[16]; int kosu, yyyy, mm, dd, ii, fun, static long gaku,kstack [TMAX] [HMAX]; FILE *fp; int wi,wj,wk; printf( "*** POSデータ 売上状況集計プログラム ***\n\n" ); printf( " 商品コードと対象年を入力して下さい。\n\n"); printf( "商品コード(8けた) =" ); scanf( "%8c",scode ); scode[8] = '\0'; printf ( "年 (4けた) =" ); scanf( "%04d",&nen ); for (wi = 0; wi < TMAX; wi++ ) for (wj = 0; wi < HMAX;wj++ ) kstack[wi][wj] = 0; fp = fopen( "pos.f","r" ); while( fscanf( fp, "%8c %061d %04d %04d-%02d-%02d %02d:%02d %04d %15c" , shina, &gaku, &kosu, &yyyy, &mm, &dd, &ji, &fun, &stcd, dummy ) ! = EOF){ if (( nen == yyyy) && (strncmp( shina,scode,8 ) == 0)) kstack[stcd][ji] == gaku * kosu; } fclose( fp ); printf( "*** 商品の時間帯別売上状況 ***\n" ); printf( "商品コード =%s 集計対象年 = %4d\n" , scode , nen ); printf( "------:-------:----+----+----+----+----+----+----+----+----+\n" ); for ( wi = 0; wi < TMAX; wi++ ){ printf( "\n 店コード = %04d\n" , wi ); for ( wj = OP_TM; wj < CL_TM; wj++ ){ printf( "%02d時台: %061d:", wj, kstack[wi][wj]/1000 ); for ( wk = (int)(kstack[wi][wj]/200000L); wk > 0; wk-- ) printf( "*" ); ………………………… 5. printf( "\n" ); } } } 設問1 このプログラムで扱っている店コードに関して、正しい答えを解答群の中か ら選べ。
答
ウ
解答群 ア このプログラムだけでは店コード具体的な値を断定することはできない。 イ 将来のための予備コード0019を含めて、0000から0019までの20種類である。 ウ 店コードは0000から0018までの19種類である。 エ 店コードは0001から0019までの19種類である。 設問2 プログラムの中の5.の行では、売上げ額の推移を視覚的に示すために文字 "*"による横棒グラフ表示を行なっている。 ある時間帯の売上げ額が1,248,500円の場合、棒グラフとして印字される文 字の個数として適切な値を解答群の中から選べ。
答
イ
解答群 ア 5 イ 6 ウ 7 エ 11 オ 12 設問3 このプログラムでは、処理上で幾つかの前提条件を設けている。条件又は制 約として適切でないものを、解答群の中から選べ。
答
イ
解答群 ア POSデータレコードの各項目は、論理的に正しい値が入っているとする。 イ 指定された年及び商品コードに合致するPOSデータレコードが、少なくと も1個以上存在する。 ウ 販売時刻が営業終了時刻のPOSデータは集計印字の対象外とする。 エ 売上額の表示単位は千円に固定し、金額の千円未満は切り捨てる。 設問4 営業終了時刻が午後10時に延長されることになった。集計表示時間帯を拡 張するために、1.から4.のいずれの#define行を変更すればよいか。正しい 答を解答群の中から選べ。
答
ケ
解答群 ア 1. イ 2. ウ 3. エ 4. オ 1.と2. カ 1.と3. キ 1.と4. ク 2.と3. ケ 2.と4. コ 3.と4.
戻る
次頁:問12