HOME»基本情報技術者試験掲示板»H29秋期 午後 問8について
投稿する

H29秋期 午後 問8について [1459]

 みのむしさん(No.1) 
表題の(a1)について質問です。

論理型変数:is_evenの初期値がfalseになっています。
このとき、分岐処理で、
①sum ← sum + value
②sum ← sum + (value*2・・・
Falseで②ではなく①が処理されるのでしょうか?

解答では、a1 = true となっていますが・・・

よろしくお願いいたします。
2018.10.08 17:55
名無しさん(No.2) 
等号を代入と勘違いしていませんか?
is_even = trueは偶数を真とする、と言う意味です
初期値がfalseなので最初は偽(②)が実行されます
2018.10.08 23:21
 みのむしさん(No.3) 
名無しさん返信ありがとうございます。

念のため、本サイトの解説の確認です。

以下、解説を抜粋。。
1文字目に②の処理を適用するにはa1がtrueになっている必要があります。a1にfalseが指定されていると、奇数番目の文字に対して①の処理が適用されてしまうため指示通りの処理となりません。

この解説だと、
true で②の処理、falseで①の処理がされるとしか解釈出来ません…

どういうことでしょうか?
2018.10.09 14:56
名無しさん(No.4) 
不正解である is_even = false は is_even = falseを真とする、と言う意味です
初期値がfalseで真(①)が実行されるため誤りとなります

解説の疑問についてはよく分かりませんので他の方にお任せします、すみません
2018.10.09 19:34
阿南市長さん(No.5) 
  a1に関しては、関数calcCheckCharacterの処理に関しての記載の中に含まれますので
プログラムの仕様「(1)関数 calcCheckCharacter は,文字列及び文字列長を用いて生成した検査文字を返す。」により、プログラムの説明「(1)検査文字の生成」の処理を行うと解釈ができます。
  そこからプログラムの説明を読み進めていくと、検査文字列の末尾を1文字目として、文字列の先頭に向かって順番に数字を割り当てていき、さらに奇数番目と偶数番目とで異なる処理を行うと書かれています(具体的なことは省きます)。
  そして、条件分岐を見てみると真と偽ごとにそれぞれ計算式が割り当てられていて、条件判定に用いられている論理型変数is_evenに初期値としてfalseが入っています。

  ここで重要になるのが、「どちらが奇数あるいは偶数の時の計算式なのか」と「is_evenが何ならば目的の計算式に分岐できるのか」の二つです。
  これらを踏まえてもう一度問題を読んでみてください。
2018.10.11 08:57
 みのむしさん(No.6) 
名無しさん、阿南市長さん返信ありがとうございます。

阿南市長さん。
念のため確認です。

sum ← sum + value …①←これが偶数時の処理
sum ← sum + (value × 2) ÷ N + (value × 2) % N …②←これが奇数時の処理
と言うのは自明ですね。

次に、通常であればis_even=Trueの処理は上段・下段と分けた場合、真の上段になりますね。

ここで、曲者が初期値がFalseというこんです。
「is_evenが何ならば目的の計算式に分岐できるのか」
ということに対して・・・
Falseなら①、Trueなら②なのかな?
2018.10.11 20:03
阿南市長さん(No.7) 
  解答・解説を前提とするならば分岐の仕方はそのようになります。

 条件分岐の行が含まれている繰り返しの流れも確認してみましょう。
 7行目の「■ i : len, i > 0, i - 1」で始まる繰り返しは i の初期値を len(文字列の長さ)として、!(i > 0)となるまで(文字列すべて確認するまで)繰り返し、先頭に戻るたびに i をデクリメント(1ずつ減らす)という繰り返し構造になっています。

 そして、8 ~ 10行目の条件判定を抜けたら、ループの最後で「is_even  ← not is_even」という命令で is_even を反転させています。(ここまでの処理が「検査文字の生成」①~③になります)

↑is_even = [ a1 ]  ----------------------------条件判定式
|・sum ← sum + value  --------------------------------①
|-------------
|・sum ← sum + (value x 2) ÷ N + (value x 2) % N  ---②


  なので, is_even の初期値がfalseで、1文字目を②の処理をさせるためには条件判定式で下の式、
つまり判定が偽になる(条件判定式が成立しない)ように解答すればいいという流れになります。
  is_even は論理型変数なので持ち得る答えはtrueかfalseのみですので、
[ a1 ]の解答は true ということになります。
2018.10.12 09:15
 みのむしさん(No.8) 
阿南市長さん、名無しさん。

等号・=と代入・←の違いがようやく分かりました…

丁寧なご説明ありがとうございました。
2018.10.12 12:39
返信投稿用フォームスパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop