平成27年 春期 基本情報技術者 午後 問09
問09 C言語次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 [プログラムの説明] 平文(ひらぶん)の文字列を暗号化する手法として,平文の文字を換字(かえじ)表に 従って別の文字に置き換える方法がある。関数 enc_str は,与えられた平文を, 換字表を用いて暗号文に変換するプログラムである。 (1) 平文は,JIS X 0201(7ビット及び8ビットの情報交換用符号化文字集合)の 文字で構成されている。 (2) 置換の対象となる文字(以下,置換対象文字という)は,英字( A 〜 Z,a 〜 z ), 数字( 0 〜 9 ),空白文字,“.”及び“,”の 65 種類の文字であり, 換字表に格納されている。 (3) 換字表は 5 行 13 列の2次元文字型配列であり,全ての要素に異なる文字が 格納されている。 (4) 換字表による置換の方法について,図1に示す平文と暗号文の対応の例を 用いて説明する。平文の文字列の先頭から置換対象文字を2文字ずつ選び出して行い, 置換されたそれぞれの文字を暗号文の文字として,暗号文中で平文と同じ位置に入れる。 ここで,置換対象文字の組合せによって,置換後の文字の組合せが決まる。 置換対象文字数が奇数の場合,最後の置換対象文字については1文字で置換を行う。 置換対象文字以外の文字については,平文中の文字をそのまま暗号文中で平文と 同じ位置に入れる。
図1 平文と暗号文の対応の例 (5) 関数 enc_str の仕様は次のとおりである。ここで,引数の値に誤りはないものとする。 引数: str 文字列 xchg_t 換字表 〔プログラム〕 #define RSIZ 5 /* 換字表の行数 */ #define CSIZ 13 /* 換字表の列数 */ void enc_str(char[], char[RSIZ][CSIZ]); void enc_str(char str[], char xchg_t[RSIZ][CSIZ]) { int cp[2], /* 置換対象文字の換字表中の列位置 */ rp[2], /* 置換対象文字の換字表中の行位置 */ pos[2], /* 置換対象文字の文字列中の位置 */ flg, i = Ø, col, row, p = Ø; while (str[p] != '\Ø') { flg = Ø; for (row = Ø; row < RSIZ; row++) { for (col = Ø; col < CSIZ; col++) { if (str[p] == xchg_t[row][col]) { flg = 1; break; } } if (flg != Ø) break; } if (flg != Ø) { cp[i] = col; rp[i] = row; pos[i++] = p; if (i == 2) { if (str[pos[Ø]] == str[pos[1]]) { str[pos[Ø]] = str[pos[1]] = xchg_t[(rp[Ø] + 1) % RSIZ] [(cp[Ø] + 1) % CSIZ]; } else { if (rp[Ø] == rp[1]) { str[pos[Ø]] = xchg_t[rp[1]][cp[1]]; str[pos[1]] = xchg_t[rp[Ø]][cp[Ø]]; } else if (cp[Ø] == cp[1]) { str[pos[Ø]] = xchg_t[rp[Ø]] [(cp[Ø] + 1) % CSIZ]; str[pos[1]] = xchg_t[rp[1]] [(cp[1] + 1) % CSIZ]; } else { str[pos[Ø]] = xchg_t[rp[1]][cp[Ø]]; str[pos[1]] = xchg_t[rp[Ø]][cp[1]]; } } i = Ø; } } p++; } if (i != Ø) { str[pos[Ø]] = xchg_t[RSIZ - 1 - rp[Ø]][CSIZ - 1 - cp[Ø]]; } }設問1 図2の平文と換字表を引数として関数 enc_str を実行したとき, プログラムの動作に関する次の記述中の に入れる正しい答えを, 解答群の中から選べ。
図2 平文と換字表の例 (1) プログラムのαの行が最初に実行されるとき,変数 flg の値は 1,i の 値は 0,col の値は , row の値は になっている。 (2) プログラムのβの行が最初に実行されるとき,引数 str,配列 cp, rp, pos に格納されている値は,図3に示すとおりである。
図3 引数 str,配列 cp,rp,pos に格納されている値 (3) プログラムのβの行が5回目に実行されるとき,pos[1] の値は 9, 引数 str[9] の値は になっている。 (4) プログラムのβの行が 6 回目に実行されるとき,pos[1] の値は になっている。 a,b に関する解答群 カ 6 キ 7 ク 8 ケ 9 コ 10 c に関する解答群 ア 'F' イ 'S' ウ 't' エ 'v' オ '7' d に関する解答群 エ 'Z' オ 空白文字 e に関する解答群
設問2 図2に示す換字表を使って平文“IPA”を暗号文に変換した結果として正しい 答えを,解答群の中から選べ。 解答群 エ iNC オ PIa カ VCa
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
|