総視聴再生時間43万分以上(2017年5月13日現在)の動画で基本情報技術者試験の過去問&キーワード解説!スキマ時間に動画!〜これじょIT〜

PR広告

平成29年度秋 基本情報技術者試験午後 問8 データ構造及びアルゴリズム|合格率アップ!動画解説!

次のプログラムの説明及びプログラムを読んで、設問1~4に答えよ。

文字列の誤りを検出するために、N種類の文字に0, 1, ..., N-1の整数値を重複なく割り当て、検査文字を生成するプログラムと、元となる文字列の末尾に検査文字を追加した検査文字付文字列を検証するプログラムである。ここで扱う30種類の文字、及び文字に割り当てた数値を、表1に示す。空白文字は"␣"と表記する。

表1 文字、及び文字に割り当てた数値

文字 . , ? a b c d e f g h i j k
数値 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
文字 l m n o p q r s t u v w x y z
数値 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

〔プログラムの説明〕

 検査文字の生成と検査文字付文字列の検証の手順を示す。

(1) 検査文字の生成

① 文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって奇数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 偶数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

③ ①と②の結果を足し合わせる。

④ Nから、③で求めた総和をNで割った余りを引く。さらにその結果を、Nで割り、余りを求める。求めた数値に対応する文字を検査文字とする。

(2) 検査文字付文字列の検証

① 検査文字付文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって偶数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

③ ①と②の結果を足し合わせる。

④ ③で求めた総和がNで割り切れる場合は、検査文字付文字列に誤りがないと判定する。Nで割り切れない場合は、検査文字付文字列に誤りがあると判定する。

〔検査文字付文字列の生成例〕

表1及び検査文字の生成の手順を用いることによって、文字列 ipa␣␣ に対し、生成される検査文字は f である。

検査文字付文字列は、文字列の末尾に検査文字を追加し、ipa␣␣fとなる。

〔プログラムの仕様〕

各関数の仕様を(1)~(4)に示す。ここで、配列の添字は1から始まるものとする。

(1) 関数 calcCheckCharacter は、文字列及び文字列長を用いて生成した検査文字を返す。関数 calcCheckCharacter の引数及び返却値の仕様は、表2のとおりである。

表2 関数calcCheckCharacterの引数及び返却値の仕様

引数/返却値 データ型 入力/出力 説明
input[] 文字型 入力 文字列が格納されている1次元配列
len 整数型 入力 文字列の文字列長(1以上)
返却値 文字型 出力 生成した検査文字を返す。

関数 calcCheckCharacter は、関数 getValue、関数 getChar を使用する。

(2) 関数 validateCheckCharacter は、検査文字付文字列を検証し、検証結果を返す。関数 validateCheckCharacter の引数及び返却値の仕様は、表3のとおりである。

表3 関数validateCheckCharacterの引数及び返却値の仕様

引数/返却値 データ型 入力/出力 説明
input[] 文字型 入力 検査文字付文字列が格納されている1次元配列
len 整数型 入力 検査文字付文字列の文字列長(2以上)
返却値 文字型 出力 検査文字付文字列に誤りがないと判定した場合はtrue, 誤りがあると判断した場合はfalseを返す。

関数 validateCheckCharacter は、関数 getValue を使用する。

(3) 関数 getValue は、表1に従い、引数として与えられた文字に割り当てた数値を返す。

(4) 関数 getChar は、表1に従い、引数として与えられた数値に対応する文字を返す。

設問1

プログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、a1とa2に入れる答えは、aに関する解答群の中から組合せとして正しいものを選ぶものとする。

【プログラム】

◯文字型関数: calcCheckCharacter(文字型: input[], 整数型: len)
◯整数型: N, sum, i, value, check_value
◯論理型: is_even
・N ← 30
・sum ← 0
・is_even ← false
■ i: len, i > 0, -1
|・value ← getValue(input[i])
|▲ is_even = a1
||・sum ← sum + value
|ーー
||・sum ← sum + (value × 2) ÷ N + (value × 2) % N
|▼
|・ is_even ← not is_even
■
・check_value ← b
・return getChar(check_value)
◯論理型関数: validateCheckCharacter(文字型: input[], 整数型: len)
◯整数型: N, sum, i, value
◯論理型: is_odd, ret_value
・N ← 30
・sum ← 0
・is_odd ← true
・ret_value ← true
■ i: len, i > 0, -1
|・value ← getValue(input[i])
|▲ is_odd = a2
||・sum ← sum + value
|ーー
||・sum ← sum + (value × 2) ÷ N + (value × 2) % N
|▼
|・is_odd ← not is_odd
■
▲ c
|・ret_value ← false
▼
・return ret_value

a に関する解答群

a1 a2
false false
false true
true false
true true

b に関する解答群

  • ア:N - sum % N
  • イ:sum % N
  • ウ:(N - sum % N) % N
  • エ:(sum % N) % N

c に関する解答群

  • ア:sum ÷ N = 0
  • イ:sum ÷ N ≠ 0
  • ウ:sum % N = 0
  • エ:sum % N ≠ 0

設問1 解説

aの正解 a1 true, a2 true

a1は関数 calcCheckCharacter(文字列及び文字列長を用いて生成した検査文字を返す)の穴埋めです。

この関数が何をしているかは下記の通りです。

(1) 検査文字の生成

① 文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって奇数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 偶数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

③ ①と②の結果を足し合わせる。

④ Nから、③で求めた総和をNで割った余りを引く。さらにその結果を、Nで割り、余りを求める。求めた数値に対応する文字を検査文字とする。

a1の部分を見ると次のようになります(コメントに書きました)。

▲ is_even = a1

|・sum ← sum + value // そのまま全て足し合わせる。

|・sum ← sum + (value × 2) ÷ N + (value × 2) % N // 数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

is_evenの判定があって

① 文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって奇数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 偶数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

の処理をしています。

奇数番目は①で偶数番目は②です。従ってis_evenがtrueの場合、偶数となります!

※ 変数名がis_evenなので「偶数の時」という意味付けがされているので、推測できますね。

a2はvalidateCheckCharacter(検査文字付文字列を検証し、検証結果を返す)の穴埋めです。

(2) 検査文字付文字列の検証

① 検査文字付文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって偶数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

③ ①と②の結果を足し合わせる。

④ ③で求めた総和がNで割り切れる場合は、検査文字付文字列に誤りがないと判定する。Nで割り切れない場合は、検査文字付文字列に誤りがあると判定する。

a2の部分を見ると次のようになります(コメントに書きました)。

▲ is_odd = a2

|・sum ← sum + value // そのまま全て足し合わせる。

|・sum ← sum + (value × 2) ÷ N + (value × 2) % N // 偶数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

is_oddの判定があって

① 検査文字付文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって偶数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

の処理をしています。

奇数番目は②で偶数番目は①です。従ってis_oddがtrueの場合、奇数となります!

※ 変数名がis_oddなので「奇数の時」という意味付けがされているので、推測できますね。

bの正解 ウ:(N - sum % N) % N

b付近のコードを見ると

・check_value ← b

これは、(1) 検査文字の生成の④に該当します。

④ Nから、③で求めた総和をNで割った余りを引く。さらにその結果を、Nで割り、余りを求める。求めた数値に対応する文字を検査文字とする。

これを式にすると「ウ:(N - sum % N) % N」

cの正解 エ:sum % N ≠ 0

c付近のコードを見ると

▲ c

|・ret_value ← false

これは、(2) 検査文字付文字列の検証の④に該当します。

④ ③で求めた総和がNで割り切れる場合は、検査文字付文字列に誤りがないと判定する。Nで割り切れない場合は、検査文字付文字列に誤りがあると判定する。

「ret_value ← false」となっていることから、cは「割り切れない場合」が入ります。

これを式にすると「エ:sum % N ≠ 0」となります!

設問2

次の記述中の に入れる正しい答えを、解答群の中から選べ。

本プログラムでは、検査文字付文字列の誤りが1文字であれば、誤りを検出できる。しかし、複数の文字に誤りがある場合には、誤りがないと判定されることがある。例えば、関数 validateCheckCharacter で表4に示す検査文字付文字列を検証した場合、誤りがないと判定されるケースはd。ここで、文字列ipa␣␣に対し生成される検査文字は f である。

表4 検査文字付文字列

ケース 検査文字付文字列
1 ipb␣␣f
2 api␣␣f
3 pia␣␣f
4 ␣␣apif

d に関する解答群

  • ア:1と2と3と4である
  • イ:2である
  • ウ:2と3である
  • エ:2と3と4である
  • オ:2と4である
  • カ:ない

設問2 解説

表4の数値と順番を追加した表が下記です。これをもとに計算します。

平成29年度秋基本情報技術者試験午後過去問8

(2) 検査文字付文字列の検証

① 検査文字付文字列の末尾の文字を1番目の文字とし、文字列の先頭に向かって偶数番目の文字に割り当てた数値を2倍してNで割り、商と余りの和を求め、全て足し合わせる。

② 奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる。

③ ①と②の結果を足し合わせる。

④ ③で求めた総和がNで割り切れる場合は、検査文字付文字列に誤りがないと判定する。Nで割り切れない場合は、検査文字付文字列に誤りがあると判定する。

ケース1「ipa␣␣f」

後ろから1番目「f」。数値は「9」順番は「奇数」

そのまま足すので計算はなし「9」

後ろから2番目「␣」。数値は「0」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (0 × 2) ÷ 30 + (0 × 2) % 30

= 0 + 0

= 0

後ろから3番目「␣」。数値は「0」順番は「奇数」

そのまま足すので計算はなし「0」

後ろから4番目「b」。数値は「5」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (5 × 2) ÷ 30 + (5 × 2) % 30

= 0 + 10

= 10

後ろから5番目「p」。数値は「19」順番は「奇数」

そのまま足すので計算はなし「19」

後ろから6番目「i」。数値は「12」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (12 × 2) ÷ 30 + (12 × 2) % 30

= 0 + 24

= 24

合計すると9 + 0 + 0 + 19 + 10 + 24 = 62

N = 30で割り切れるかどうかを確認します。

62 % 30 = 2

割り切れないので「誤り」です。※正しい

ケース2「api␣␣f」

後ろから1番目「f」。数値は「9」順番は「奇数」

そのまま足すので計算はなし「9」

後ろから2番目「␣」。数値は「0」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (0 × 2) ÷ 30 + (0 × 2) % 30

= 0 + 0

= 0

後ろから3番目「␣」。数値は「0」順番は「奇数」

そのまま足すので計算はなし「0」

後ろから4番目「i」。数値は「12」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (12 × 2) ÷ 30 + (12 × 2) % 30

= 0 + 24

= 24

後ろから5番目「p」。数値は「19」順番は「奇数」

そのまま足すので計算はなし「19」

後ろから6番目「a」。数値は「4」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (4 × 2) ÷ 30 + (4 × 2) % 30

= 0 + 8

= 8

合計すると9 + 0 + 0 + 24 + 19 + 8 = 60

N = 30で割り切れるかどうかを確認します。

60 % 30 = 2

割り切れるので「誤りなし」と判定されてしまいます。※本来は「誤り」

ケース3「pia␣␣f」

後ろから1番目「f」。数値は「9」順番は「奇数」

そのまま足すので計算はなし「9」

後ろから2番目「␣」。数値は「0」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (0 × 2) ÷ 30 + (0 × 2) % 30

= 0 + 0

= 0

後ろから3番目「␣」。数値は「0」順番は「奇数」

そのまま足すので計算はなし「0」

後ろから4番目「a」。数値は「4」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (4 × 2) ÷ 30 + (4 × 2) % 30

= 0 + 8

= 8

後ろから5番目「i」。数値は「12」順番は「奇数」

そのまま足すので計算はなし「12」

後ろから6番目「p」。数値は「19」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (19 × 2) ÷ 30 + (19 × 2) % 30

= 1 + 8

= 9

合計すると9 + 0 + 0 + 8 + 12 + 9 = 38

N = 30で割り切れるかどうかを確認します。

38 % 30 = 8

割り切れないので「誤り」です。※正しい

ケース4「␣␣apif」

後ろから1番目「f」。数値は「9」順番は「奇数」

そのまま足すので計算はなし「9」

後ろから2番目「i」。数値は「12」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (12 × 2) ÷ 30 + (12 × 2) % 30

= 0 + 24

= 24

後ろから3番目「p」。数値は「19」順番は「奇数」

そのまま足すので計算はなし「19」

後ろから4番目「a」。数値は「4」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (4 × 2) ÷ 30 + (4 × 2) % 30

= 0 + 8

= 8

後ろから5番目「␣」。数値は「0」順番は「奇数」

そのまま足すので計算はなし「0」

後ろから6番目「␣」。数値は「0」順番は「偶数」

2倍してNで割り、商と余りの和なので...プログラムより

(value × 2) ÷ N + (value × 2) % N

= (0 × 2) ÷ 30 + (0 × 2) % 30

= 0 + 0

= 0

合計すると9 + 24 + 19 + 8 + 0 + 0 = 60

N = 30で割り切れるかどうかを確認します。

60 % 30 = 2

割り切れるので「誤りなし」と判定されてしまいます。※本来は「誤り」

ケース2と4が「誤りなし」と判定されるので、答えは「オ:2と4である」です!

設問3

次の記述中の に入れる正しい答えを、解答群の中から選べ。

本プログラムを文字列長が同じである複数の文字列に対して適用することを考える(図1参照)。

平成29年度秋基本情報技術者試験午後過去問8

図1 作成中の検査文字付表

〔考え方〕

文字列長がnであるm個の文字列について考える。文字列に対して、(m+1)行(n+1)列の表を用意する。以後、この表を検査文字付表という。

(1) 検査文字の生成

例えば、文字列長が5である4個の文字列ipa␣␣、tests、make␣、it.␣␣を、図1の太枠内のように、各文字列の先頭の位置を最左列に揃え、各文字列を上の行から順に格納して、表を作成する。この表の太枠内の各行各列をそれぞれ文字列とみなして検査文字を生成し、最右列と最下行に格納する。

この手順で作成した検査文字付表を図2に示す。作成した検査文字付表の5行5列目(網掛け部分)の検査文字はeである。

平成29年度秋基本情報技術者試験午後過去問8

図2 完成した検査文字付表

(2) 検査文字付表の検証

(1)で作成した検査文字付表の、最下行を除く各行と最右列を除く各列を文字列とみなし、それぞれ関数 validateCheckCharacter で検証した結果、全て誤りがないと判定された場合には、検査文字付表に誤りがないと判定する。一つでも誤りがあると判定された場合は、検査文字付表に誤りがあると判定する。

e に関する解答群

  • ア:j
  • イ:k
  • ウ:l
  • エ:m

設問3 解説

␣s」数値と順番を入れてものは下記の通りです。

平成29年度秋基本情報技術者試験午後過去問8

後ろから1番目「␣」。数値は「0」順番は「奇数」

(value × 2) ÷ N + (value × 2) % N

= (0 × 2) ÷ 30 + (0 × 2) % 30

= 0 + 0

= 0

後ろから2番目「␣」。数値は「0」順番は「偶数」

そのまま足すので計算はなし「0」

後ろから3番目「s」。数値は「22」順番は「奇数」

(value × 2) ÷ N + (value × 2) % N

= (22 × 2) ÷ 30 + (22 × 2) % 30

= 1 + 14

= 15

後ろから4番目

「␣」。数値は「0」順番は「偶数」

そのまま足すので計算はなし「0」

すべて足すと...0 + 0 + 15 + 0 = 15

数字が15の文字は「l」なので、正解は「ウ:l」です!

設問4

次の記述中の に入れる正しい答えを、解答群の中から選べ。

図2の1行目の検査文字付文字列を取り除いた、図3の検査文字付表について考える。表4のケース1~4の検査文字付文字列を順に、図3の1行目に格納して検証した場合、検査文字付表に誤りがないと判定されるケースはf

平成29年度秋基本情報技術者試験午後過去問8

図3 1行目を取り除いた検査文字付表

f に関する解答群

  • ア:1と2と3と4である
  • イ:2である
  • ウ:2と3である
  • エ:2と3と4である
  • オ:2と4である
  • カ:ない

設問4 解説

設問3 に新しい検査の方法が記載しています。

(2) 検査文字付表の検証

(1)で作成した検査文字付表の、最下行を除く各行と最右列を除く各列を文字列とみなし、それぞれ関数 validateCheckCharacter で検証した結果、全て誤りがないと判定された場合には、検査文字付表に誤りがないと判定する。一つでも誤りがあると判定された場合は、検査文字付表に誤りがあると判定する。

横だけではなく、縦も確認することで、誤りの精度をあげます。実際、設問2で解説した通り、ケース2, 4は「誤りであるにもかかわらず誤りなし」となっています。

また、ケース1, 3は横の確認で「誤りを検出」できることから、今回も横の確認で「誤り」を検出できます。

ケース2, 4をみましょう。

平成29年度秋基本情報技術者試験午後過去問8

ケース2 api␣␣f

(2) 検査文字付文字列の検証通りに計算します。

api␣␣f

文字「f」数値「9」順番「奇数」

sum = sum + value

sum = 0 + 9 = 9

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 9 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 9 + 0 + 0 = 9

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 9 + 0 = 9

文字「i」数値「12」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 9 + (12 × 2) ÷ 30 + (12 × 2) % 30 = 9 + 0 + 24 = 33

文字「p」数値「19」順番「奇数」

sum = sum + value

sum = 33 + 19 = 52

文字「a」数値「4」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 52 + (4 × 2) ÷ 30 + (4 × 2) % 30 = 52 + 0 + 8 = 60

この時のsum = 60なので、最後の計算「sum % N」が0かどうかを確かめます。

60 % 30 = 0

従って、誤りではないとなります。 ※正しくない

testsi

文字「i」数値「12」順番「奇数」

sum = sum + value

sum = 0 + 12 = 12

文字「s」数値「22」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 12 + (22 × 2) ÷ 30 + (22 × 2) % 30 = 12 + 1 + 14 = 27

文字「t」数値「23」順番「奇数」

sum = sum + value

sum = 27 + 23 = 50

文字「s」数値「22」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 50 + (22 × 2) ÷ 30 + (22 × 2) % 30 = 50 + 1 + 14 = 65

文字「e」数値「8」順番「奇数」

sum = sum + value

sum = 65 + 8 = 73

文字「t」数値「23」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 73 + (23 × 2) ÷ 30 + (23 × 2) % 30 = 73 + 1 + 16 = 90

この時のsum = 90なので、最後の計算「sum % N」が0かどうかを確かめます。

90 % 30 = 0

従って、誤りではないとなります。※正しい

make␣n

文字「n」数値「17」順番「奇数」

sum = sum + value

sum = 0 + 17 = 17

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 17 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 17 + 0 + 0 = 17

文字「e」数値「8」順番「奇数」

sum = sum + value

sum = 17 + 8 = 25

文字「k」数値「14」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 25 + (14 × 2) ÷ 30 + (14 × 2) % 30 = 25 + 0 + 28 = 53

文字「a」数値「4」順番「奇数」

sum = sum + value

sum = 53 + 4 = 57

文字「m」数値「16」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 57 + (16 × 2) ÷ 30 + (16 × 2) % 30 = 57 + 1 + 2 = 60

この時のsum = 60なので、最後の計算「sum % N」が0かどうかを確かめます。

60 % 30 = 0

従って、誤りではないとなります。※正しい

it.␣␣h

文字「h」数値「11」順番「奇数」

sum = sum + value

sum = 0 + 11 = 11

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 11 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 11 + 0 + 0 = 11

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 11 + 0 = 11

文字「.」数値「1」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 11 + (1 × 2) ÷ 30 + (1 × 2) % 30 = 11 + 0 + 2 = 13

文字「t」数値「23」順番「奇数」

sum = sum + value

sum = 13 + 23 = 36

文字「i」数値「12」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 36 + (12 × 2) ÷ 30 + (12 × 2) % 30 = 36 + 0 + 24 = 60

この時のsum = 60なので、最後の計算「sum % N」が0かどうかを確かめます。

60 % 30 = 0

従って、誤りではないとなります。※正しい

続いて縦

atmir

文字「r」数値「21」順番「奇数」

sum = sum + value

sum = 0 + 21 = 21

文字「i」数値「12」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 21 + (12 × 2) ÷ 30 + (12 × 2) % 30 = 21 + 0 + 24 = 45

文字「m」数値「16」順番「奇数」

sum = sum + value

sum = 45 + 16 = 61

文字「t」数値「23」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 61 + (23 × 2) ÷ 30 + (23 × 2) % 30 = 61 + 1 + 16 = 78

文字「a」数値「4」順番「奇数」

sum = sum + value

sum = 78 + 4 = 82

この時のsum = 82なので、最後の計算「sum % N」が0かどうかを確かめます。

82 % 30 = 22

従って、誤りです。※正しい

ここで、誤りを検出できるので、終わりで良いのですが、次もみてみましょう(計算が増えますが...)

peata

文字「a」数値「4」順番「奇数」

sum = sum + value

sum = 0 + 4 = 4

文字「t」数値「23」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 4 + (23 × 2) ÷ 30 + (23 × 2) % 30 = 4 + 1 + 16 = 21

文字「1」数値「4」順番「奇数」

sum = sum + value

sum = 21 + 4 = 25

文字「e」数値「8」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 25 + (8 × 2) ÷ 30 + (8 × 2) % 30 = 25 + 0 + 16 = 41

文字「p」数値「19」順番「奇数」

sum = sum + value

sum = 41 + 19 = 60

この時のsum = 60なので、最後の計算「sum % N」が0かどうかを確かめます。

60 % 30 = 0

従って、誤りではありません。※正しい(ipa␣␣fの時と同じ場所にpがあるため)

isk.v

文字「v」数値「25」順番「奇数」

sum = sum + value

sum = 0 + 25 = 25

文字「.」数値「1」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 25 + (1 × 2) ÷ 30 + (1 × 2) % 30 = 25 + 0 + 2 = 27

文字「k」数値「14」順番「奇数」

sum = sum + value

sum = 27 + 14 = 41

文字「s」数値「22」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 41 + (22 × 2) ÷ 30 + (22 × 2) % 30 = 41 + 1 + 14 = 56

文字「i」数値「12」順番「奇数」

sum = sum + value

sum = 56 + 12 = 68

この時のsum = 68なので、最後の計算「sum % N」が0かどうかを確かめます。

68 % 30 = 8

従って、誤りです。※正しい

␣te␣b

文字「b」数値「5」順番「奇数」

sum = sum + value

sum = 0 + 5 = 5

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 5 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 5 + 0 + 0 = 5

文字「e」数値「8」順番「奇数」

sum = sum + value

sum = 5 + 8 = 13

文字「t」数値「23」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 13 + (23 × 2) ÷ 30 + (23 × 2) % 30 = 13 + 1 + 16 = 30

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 30 + 0 = 30

この時のsum = 30なので、最後の計算「sum % N」が0かどうかを確かめます。

30 % 30 = 0

従って、誤りではありません。※正しい(ipa␣␣fの時と同じ場所に␣があるため)

␣s␣␣l

文字「l」数値「15」順番「奇数」

sum = sum + value

sum = 0 + 15 = 15

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 15 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 15 + 0 + 0 = 15

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 15 + 0 = 15

文字「s」数値「22」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 15 + (22 × 2) ÷ 30 + (22 × 2) % 30 = 15 + 1 + 14 = 30

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 30 + 0 = 30

この時のsum = 30なので、最後の計算「sum % N」が0かどうかを確かめます。

30 % 30 = 0

従って、誤りではありません。※正しい(ipa␣␣fの時と同じ場所に␣があるため)

上記より、ケース2は誤りを検出できます!

ケース4 ␣␣apif

␣␣apif

文字「f」数値「9」順番「奇数」

sum = sum + value

sum = 0 + 9 = 9

文字「i」数値「12」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 9 + (12 × 2) ÷ 30 + (12 × 2) % 30 = 9 + 0 + 24 = 33

文字「p」数値「19」順番「奇数」

sum = sum + value

sum = 33 + 19 = 52

文字「a」数値「4」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 52 + (4 × 2) ÷ 30 + (4 × 2) % 30 = 52 + 0 + 8 = 60

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 60 + 0 = 60

文字「␣」数値「0」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 60 + (0 × 2) ÷ 30 + (0 × 2) % 30 = 60 + 0 + 0 = 60

この時のsum = 60なので、最後の計算「sum % N」が0かどうかを確かめます。

60 % 30 = 0

従って、誤りではないとなります。 ※正しくない

testsi

make␣n

it.␣␣h

はすでに結果が出ています。すべて誤りではありません。縦を見ます。

␣tmir

文字「r」数値「21」順番「奇数」

sum = sum + value

sum = 0 + 21 = 21

文字「i」数値「12」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 21 + (12 × 2) ÷ 30 + (12 × 2) % 30 = 21 + 0 + 24 = 45

文字「m」数値「16」順番「奇数」

sum = sum + value

sum = 45 + 16 = 61

文字「t」数値「23」順番「偶数」

sum = sum + (value × 2) ÷ N + (value × 2) % N

sum = 61 + (23 × 2) ÷ 30 + (23 × 2) % 30 = 61 + 1 + 16 = 78

文字「␣」数値「0」順番「奇数」

sum = sum + value

sum = 78 + 0 = 78

この時のsum = 78なので、最後の計算「sum % N」が0かどうかを確かめます。

78 % 30 = 18

従って、誤りです。※正しい

他の結果も同様になるはずです。計算してみてください。

ケース2, 4も誤りを検出できます!すべて誤りがないと判定されるケースは「カ:ない」となります!

PR広告

フェイスブックコメント

平成28年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成28年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成28年度春 基本情報技術者試験 午後 テキスト・動画解説

平成28年度春 基本情報技術者試験 午前 テキスト・動画解説

平成27年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午前 テキスト・動画解説

平成26年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成26年度春 基本情報技術者試験 午前 テキスト・動画解説