平成29年 秋期 基本情報技術者 午後 問08
問08 必須問題次のプログラムの説明及びプログラムを読んで,設問1〜4に答えよ。 文字列の誤りを検出するために,N 種類の文字に 0,1,…,N-1 の整数値を重複なく割り当て, 検査文字を生成するプログラムと,元となる文字列の末尾に検査文字を 追加した検査文字付文字列を検証するプログラムである。 ここで扱う 30 種類の文字,及び文字に割り当てた数値を,表1に示す。 空白文字は“␣”と表記する。
〔プログラムの説明〕 検査文字の生成と検査文字付文字列の検証の手順を示す。 (1) 検査文字の生成 A 偶数番目の文字に割り当てた数値は,そのまま全て足し合わせる。 B @とAの結果を足し合わせる。 C N から,Bで求めた総和を N で割った余りを引く。さらにその結果を,N で割り, 余りを求める。求めた数値に対応する文字を検査文字とする。 A 奇数番目の文字に割り当てた数値は,そのまま全て足し合わせる。 B @とAの結果を足し合わせる。 C Bで求めた総和が N で割り切れる場合は,検査文字付文字列に誤りがないと判定する。 N で割り切れない場合は,検査文字付文字列に誤りがあると判定する。 〔検査文字付文字列の生成例〕 表1及び検査文字の生成の手順を用いることによって,文字列 ipa␣␣ に対し, 生成される検査文字は f である。 検査文字付文字列は,文字列の末尾に検査文字を追加し,ipa␣␣f となる。 〔プログラムの仕様〕 各関数の仕様を (1)〜(4) に示す。ここで,配列の添字は 1 から始まるものとする。 (1) 関数 calcCheckCharacter は,文字列及び文字列長を用いて生成した検査文字を返す。 関数 calcCheckCharacter の引数及び返却値の仕様は,表2のとおりである。
関数 calcCheckCharacter は,関数 getValue,関数 getChar を使用する。 (2) 関数 validateCheckCharacter は,検査文字付文字列を検証し,検証結果を返す。 関数 validateCheckCharacter の引数及び返却値の仕様は,表3のとおりである。
関数 validateCheckCharacter は,関数 getValue を使用する。 (3) 関数 getValue は,表1に従い,引数として与えられた文字に割り当てた数値を返す。 (4) 関数 getChar は,表1に従い,引数として与えられた数値に対応する文字を返す。
〔プログラム〕 a に関する解答群
b に関する解答群 ウ (N − sum % N ) % N エ (sum − N) % N c に関する解答群 ウ sum % N = Ø エ sum % N ≠ Ø
本プログラムでは,検査文字付文字列の誤りが1文字であれば,誤りを検出できる。 しかし,複数の文字に誤りがある場合には,誤りがないと判定されることがある。 例えば,関数 validateCheckCharacter で表4に示す検査文字付文字列を検証した場合, 誤りがないと判定されるケースは d 。 ここで,文字列 ipa␣␣ に対し生成される検査文字は f である。
d に関する解答群 エ 2 と 3 と 4 である オ 2 と 4 である カ ない
本プログラムを文字列長が同じである複数の文字列に対して適用することを考える(図1参照)。
図1 作成中の検査文字付表 〔考え方〕 文字列長が n である m 個の文字列について考える。文字列に対して, ( m + 1 )行( n + 1 )列の表を用意する。以後,この表を検査文字付表という。 (1) 検査文字の生成 例えば,文字列長が 5 である 4 個の文字列 ipa␣␣,tests,make␣,it.␣␣ を, 図1の大枠内のように,各文字列の先頭の位置を最左列に揃え,各文字列を 上の行から順に格納して,表を作成する。この表の太枠内の各行各列を それぞれ文字列とみなして検査文字を生成し,最右列と最下行に格納する。 この手順で作成した検査文字付表を図2に示す。作成した検査文字付表の 5 行 5 列目(網掛け部分)の検査文字は e である。
図2 完成した検査文字付表 (2) 検査文字付表の検証 (1)で作成した検査文字付表の,最下行を除く各行と最右列を除く各列を 文字列とみなし,それぞれ関数 validateCheckCharacter で検証した結果, 全て誤りがないと判定された場合には,検査文字付表に誤りがないと判定する。 一つでも誤りがあると判定された場合は,検査文字付表に誤りがあると判定する。 e に関する解答群
図2の1行目の検査文字付文字列を取り除いた,図3の検査文字付表について考える。 表4のケース1〜4の検査文字付文字列を順に,図3の1行目に格納して検証した場合, 検査文字付表に誤りがないと判定されるケースは f 。
図3 1行目を取り除いた検査文字付表 f に関する解答群 エ 2 と 3 と 4 である オ 2 と 4 である カ ない
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||