「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

出典:令和8年度 ITパスポート試験(IP) 問85

difficulty難易度設定
スポンサーリンク

予備知識


用語意味
関数処理のまとまり。何かを入れると何かを計算して何かを返してくれるやつ
引数関数に入れる値
戻り値関数から出てくる値
true2つの状態「オン(on)/オフ(off)」のうち「オン(on)」を意図する表現
false2つの状態「オン(on)/オフ(off)」のうち「オフ(off)」を意図する表現
変数プログラミング言語における「値を入れておく箱」
論理型変数の種類のひとつで「その箱には(true)(false)のどちらかの値が入りますよ」な決まり
整数型変数の種類のひとつで「その箱には(桁数の大きくない)整数を入れていいよ」な決まり
if文プログラミングで使う構文のひとつで「もし○○だったら××してね~」な条件分岐を書くときに使う構文
while文プログラミングで使う構文のひとつであり「条件を満たしている間は同じ処理を繰り返してね~」な繰り返し処理を書くときに使う構文

問題


問題文
関数isPrimeは,引数として与えられた正の整数が,素数であればtrueを,素数でなければfalse戻り値とする。例えば,関数 isPrime を isPrime(2) として呼び出したときの戻り値はtrueである。プログラム中のa,bに入れる字句の適切な組合せはどれか。

[プログラム]
論理型: isPrime(整数型: num)
 整数型: div ← 2
 if(numが2【a】)
  return false
 else
  while(numがdiv【b】)
   if(num÷divの余りが0と等しい)
    return false
   else
    div ← div+1
   endif
  endwhile
  return true
 endif
ピヨ意訳:以下の処理は素数かどうかを判定するプログラムだよ。素数だったらtrueを、素数じゃなかったらfalseを返すよ。【a】【b】に入る正しい組み合わせは、どれ?

[プログラム]
〇論理型: isPrime(整数型: num)
 整数型: div ← 2
 if(numが2【a】)
  return false
 else
  while(numがdiv【b】)
   if(num÷divの余りが0と等しい)
    return false
   else
    div ← div+1
   endif
  endwhile
  return true
 endif

解答選択肢
【a】以下 【b】と等しい
ピヨ意訳:-
【a】以下 【b】より大きい
ピヨ意訳:-
【a】より小さい 【b】と等しい
ピヨ意訳:-
【a】より小さい 【b】より大きい
ピヨ意訳:-


正解までのつなぎ

正解


正解
【a】より小さい 【b】より大きい
ピヨ意訳:-

ピヨピヨ解説


ふむ、なるほど。
横着して解いてみましょうか。

【a】に入る候補は

1.以下
2.より小さい


です。

【b】に入る候補は

1.と等しい
2.より大きい


です。

それを踏まえて

 if(numが2【a】)
  return false
 else


に注目してください。

戻り値は「false(素数では ない)」です。
「2」は素数です。
ということは、このif文の条件に「2」が当てはまってはダメです。
条件に「2」が当てはまると「false(素数では ない)」になっちゃいますからね。

よって【a】に入るのは「より小さい」になります。
「以下」だと「2」が含まれちゃいますからね。

次に

 while(numがdiv【b】)

に注目してください。

【b】に入るのが「と等しい」であれば、普通はif文を使います。
わざわざwhile文を使っているということは、ループする可能性があるということです。
【b】に入るのは「より大きい」になります。

ということで「エ:【a】より小さい 【b】より大きい」が正解です。

……のように私だったら解いちゃいますけどね。
もうちょっと真っ当に解くのであれば【b】は「num」と「div」の関係性を見ます。

  while(numがdiv【b】)
   if(num÷divの余りが0と等しい)
    return false
   else
    div ← div+1
   endif
  endwhile


となっていますよね。
ザックリ「num」と「div」に注目すると

num→ループしても変わらない
div→ループするごとに1ずつ増える


です。

このことから、ループする条件は

divが〇〇より小さい(もしくは、以下の)

だと推測できます。
「divが〇〇より大きい間」とかにしちゃうと、ループが終わらなくなるからです。

仮にループの条件が「divが〇〇より大きい間」だった場合、最初の時点で「divが〇〇以下」の状態であれば条件に合致しないのでループに入りませんよね。
逆に最初の時点で「divが〇〇より大きい」の状態であればループに入りますが、一生ループから抜けません。
divの値はループするごとに増えていくからです。
「divが〇〇以下」になることが ありません。
ずっと「divが〇〇より大きい間」を満たし続けます。

ループする条件を「divが〇〇より大きい間」とかにすると、プログラムの動きとして おかしなことになります。
そんなわけで、ループする条件は「divが〇〇より小さい(もしくは、以下の)間」です。

「divが〇〇より小さい(もしくは、以下の)間」は言い方を変えると「〇〇がdivより大きい(もしくは、以上の)間」です。
「〇〇」を「num」に置き換えると「numがdivより大きい(もしくは、以上の)間」となります。

ということで【b】に入るのは「より大きい」だと判断できます。

ちなみに、このような考え方は【b】の選択肢に「より小さい」があったときの対策です。
「と等しい」と「より大きい」しか選択肢がないのであれば

「と等しい」だったらif文を使うでしょ

と考えて「と等しい」は候補から外しちゃいます。


スポンサーリンク
書籍画像054
書籍画像063

書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
インフルエンサー六法 活動開始から情報発信、収益化までに潜むトラブル対策50
ソフトウェア受託現場の「失敗」集めてみた。 42の失敗事例で学ぶ受託開発のうまい進めかた