2016年12月18日日曜日

[平成27年度春] 午後 問9 解説

[問題文・解答]


平成27年度4月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(C)で、問題の題材は換字式暗号です。
与えられた平文を換字表を用いて暗号文に変換するC言語プログラムについて問われます。C言語の配列・ポインタの知識は必須です。

[設問1]


a,b) 図2の平文及び換字表が引数として与えられたときのαの行が最初に実行されるまでの処理の流れは以下の通りです。
①i=0, p=0, fig=0に設定する。
②str[p]つまり1文字目'F'の換字表中の位置を探す。4行7列に'F'があるため、fig=1に設定し、forループを抜ける。この時、col=7, row=4
③α実行。fig!=0なのでif文内の処理へ進む
従って、α実行時のcolの値は7、rowの値は4になっています。

c) 上記③以降からβの行が実行されるまでの処理の流れは以下の通りです。
④cp[0]=col=7, rp[0]=row=4, pos[0]=p=0, i=i+1=1に設定する。
⑤i!=2なのでif文内の処理をスルーして、p=p+1=1とする。
⑥str[p]つまり2文字目'u'の換字表中の位置を探し、1行7列に'u'があるため、fig=1に設定し、forループを抜ける。この時、col=7, row=1
⑦fig!=0なのでif文内の処理へ進む
⑧cp[1]=col=7, rp[1]=row=1, pos[1]=p=1, i=i+1=2に設定する。
⑨i==2であり、cp[0]=cp[1]=7なので置換対象部分を以下のように設定する。
str[0]=xchg_t[4][8]='E'
str[1]=xchg_t[1][8]='v'
⑩β実行。i=0に設定する。
従って、cには'v'が入るため「エ」が正解です。

d) βの行が5回目に実行されるのは平文の先頭から置換対象文字以外の文字を除いて、9文字目及び10文字目の置換を行った直後です。つまり、図2の平文ではFunctionの後の空白文字2つの部分です。
換字表より空白文字は2行12列の位置にあるので、cp[0]=cp[1]=12, rp[0]=rp[1]=2となっています。プログラムより置換後の文字は
str[8]=str[9]=xchg_t[3%5][13%13]=xchg_t[3][0]='Z'
となるため「エ」が正解です。

e) βの行が6回目に実行されるのは平文の先頭から置換対象文字以外の文字を除いて、11文字目及び12文字目の置換を行った直後です。つまり、"f(x"の部分の'f'と'x'を置換した後なので、pos[0]=10、pos[1]=12となっています('('は置換対象文字ではないので平文のまま処理される)。よって「イ」が正解です。

[答] a) キ b) エ c) エ d) エ e) イ

[設問2]


平文"IPA"の最初の二文字'I'と'P'はそれぞれ換字表の4行4列、3行10列の位置にあるため、置換直前の各パラメータは以下の通りです。
co[0]=4, cp[1]=10, rp[0]=4, rp[1]=3, p=1, i=2, pos[0]=0, pos[1]=1
よって、最初の二文字の置換後の文字は以下のようになります。
str[0] = xchg_t[rp[1]][cp[0]] = xchg_t[3][4] = 'V'
str[1] = xchg_t[rp[0]][cp[1]] = xchg_t[4][10] = 'C'
以上より、暗号文は"VC"で始まるため「カ」が適切です。

[答] カ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。

0 件のコメント:

コメントを投稿