R7科目Bの問1について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
タンさん  
(No.1)
誰か教えてください。
R7問1:なんとなく4の倍数を求めているのは理解できました。(n=1,m=12)でトレースしてました。
ア~カの中でウとカが同じ値を返す計算になってしまうのですが、どこが間違えてしまっているか教えてほしいです。
ウの場合
function2(1,12)
 for(iを1から2まで1ずつ増やす)
  i=1,if((1mod4)=0)false
  tempN←1+1
 for(2≦2)
  i=2,if((2mod4)=0)false
 tempN←2+1
 endfor

 for(jを3から始めて12を超えない範囲で4ずつ増やす)
  j=3 count←0+1 j=7, count←1+1 j=11 count←2+1
j=14だと超えてしまうので終了。
return count←3
と書いてしまいました。
2025.11.13 23:08
匿名さん 
(No.2)
この考え方で合っているか分かりませんが答えます。
こういう時は他の数字を引数として与えてみて、答えを満たさないものを切るのが確実ですが、今回の場合はプログラムの目的を推測することで、どんな引数でも成立する選択肢を検討できます。
今回はmod4というのが登場すること、また、処理的にtempNの値は3以下になりそうということから、このプログラムの目的は「mを4で割った時の余りを返り値とする」と推測します。
そうすると、countは余りを指すことになります。
このとき、aの部分で繰り返しの回数が2回だと余り3の場合を表現できないので、ウは不適となります。
今回の場合は考え方やトレースが間違っているかと言うよりは、一般性を持つ選択肢を検討する前に考えを打ち切ったことが解けなかった原因だと思います。
2025.11.14 00:20
電タックさん 
FE ブロンズマイスター
(No.3)
うまく伝わるかわかりませんがコメントします。

試験の限られた時間の中で思いつく第一感としてはNo.2の方が言っているような感覚がすごく有効だと思います。

擬似言語だけではないですが処理を考える上で「最初と最後や同値を含む含まないの部分」が特に重要です。

ウとカの違いによるjの開始位置が異なるのは認識できているようなので、次に考えないといけないのは終了位置です。
> for(jを3から始めて12を超えない範囲で4ずつ増やす)
>  j=3 count←0+1 j=7, count←1+1 j=11 count←2+1
>j=15だと超えてしまうので終了。
ここまで検討できていればほぼ正解にたどり着いていそうですが、jが15の場合にループを「してしまうのかどうか」です。
jとmの値を比較してループの継続を判定しているので、引数mが15だった場合の検討が必要だったということだと思います。
※jとmが共に15はmを超えていないのでループしてしまいます。

ちなみにこれを言い始めてしまうとどこまでも検討しないと成らなそうですが今回の疑義は4の倍数内であればどこかを切り取って検討すればいいはずなので15みたいに「10以上超えている引数m」と問題の条件に従わなくても、mが7や11の時にループしていいのか?という問題の条件に従わない引数の値にして検討しても良かったのだと思います。
2025.11.14 07:47
boyonboyonさん 
FE シルバーマイスター
(No.4)
解説にも書いてありますが、function2の前半では、指定された範囲の中で最小の4の倍数をtempNに設定します。スレ主さんの例ではこれは4になると思いますが、ウの処理ですとtempN=3になってしまいこの時点で不適となります。
(アイウ共に不適にできるよい例だと思います。)
なので、後半のループは検討する必要はありません。
j=3,7,11と動いても何をカウントしているのかはっきりしません。しいて言えば4で割って3余る数のカウントかな。
j=4,8,12と動けば、4の倍数でカウントしていることが分かると思います。
2025.11.14 21:59
タンさん  
(No.5)
長文のご返信ありがとうございます!
おかげでスッキリしました!🙇🏻‍♂️
2025.11.15 13:29

返信投稿用フォーム

※CBT試験では出題内容の公開が禁止されているため、直接的・間接的を問わず、出題内容や難易度を尋ねる質問は厳禁です。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む記事の投稿はできません。

投稿記事削除用フォーム

投稿番号:
パスワード:

その他のスレッド


Pagetop