「みちともデジタル」は、ITパスポート試験の合格を目指す方を応援する無料学習サイトです。

【擬似言語問題の解き方】ITパスポート過去問 令和8年問85解説

ITパスポート擬似言語(疑似言語)問題解説(令和8年問85) 特集
スポンサーリンク

問題(令和8年 問85)

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

[プログラム]説明
論理型:isPrime(整数型: num)
整数型:div ← 2変数として minlndex, j, kを使う
if ( num が 2  a 
return false
else繰り返し処理で行う処理の説明
while ( num が div  b jの値をminlndexに代入する
if ( num÷div の余りが 0 と等しい)
return false kの値をminlndexに代入する
else判別処理の終了
div ← div + 1繰返し処理の終了
end if
endwhile
return true途中経過確認の処理を説明
end if繰返し処理の段階を示している
ab
以下と等しい
以下より大きい
より小さいと等しい
より小さいより大きい

解き方(令和8年 問85)

問題の要点を読み取る

はじめに、問題文から関数isPrirneをイメージしましょう。

問題文の中で、「引数」「戻り値」と書かれている部分をを手がかりに、ポイントを押さえます。

問題文読み取れること
関数isPrirneは,引数として与えられた(引数)正の整数が,(選択)(戻り値)素数であればtrueを,素数でなければ falseを戻り値とする。例えば,関数 isPrime を isPrirne(2)として呼び出したときの戻り値はtrueである。令和8年問85 関数 isPrirnetイメージ図

素数とは?

素数とは「2以上の自然数で、1と自分自身以外に約数がない数」です。
このままでは、プログラムについて考えにくいので、条件を分けて整理します。

素数
次の3つの条件を満たす数
 条件1:正の整数(自然数)である
 条件2:2以上である
 条件3:1とその数自身以外に約数を持たない

プログラム処理のおおよそをつかむ

(手順1)
プログラム中のif~end if、while~end whileなどの用語を手がかりにして色分けします。
色分けすることで、プログラムの構成がはっきりして、それぞれの部分で何をしているのか考えやすくなります。

(手順2)
上で整理した素数の条件について、プログラム中のどの部分で確認しているか調べます。

{プログラム}説明
論理型:isPrime(整数型: num)numは、引数
整数型:div ← 2
if ( num が 2  a  )  a には、
”以下” or ”より小さい” が入る
2以上であるかの確認
(上の条件2にあたる)
return false戻り値 false(素数でない)
else
while ( num が div  b  ) (num が div  b  )が”真”の間、処理を実行する

には、
”と等しい” 
or ”より大きい” が入る
if ( num÷div の余りが 0 と等しい)割り切れるか調べている
return false
else約数についての確認
(上の条件3にあたる)
div ← div + 1
end if
endwhileここまで、前判定繰返し処理
return true戻り値 true (素数である)
end if

なお、問題文に、プログラムの引数が”正の整数”とあり、条件1を満たした整数が入力されるので、プログラム中での確認はありません。

a について考える

a に ”以下” を入れて考えてみます。

プログラムは、下のようになります。

{プログラム}説明
論理型:isPrime(整数型: num)
整数型:div ← 2
if ( num が 2  以下  )  isPrirne(2)のとき、
num≦2が成り立つので、return false 
return false戻り値 が false なので、2は素数でないことになる
else問題文と矛盾!
以下省略

プログラムの動作によると、isPrirne(2)の戻り値 は false となります。これは、問題文の「isPrirne(2)として呼び出したときの戻り値は true である。」に矛盾します。

a には、 ”以下” ではなく、 ”より小さい” が適切です。

b について考える

bに ”と等しい” を入れて考えてみます。

前の結果より、aには ”より小さい” を入れます。
プログラムは、下のようになります。

{プログラム}説明
論理型:isPrime(整数型: num)
整数型:div ← 2
if ( num が 2  ”より小さい”  )  num<2が成り立たないので、while へ
return false戻り値 false(素数でない)
else
while ( num が div  ”と等しい”  ) (num が div  ”と等しい”  )間、処理を実行する
言い換えると、等しくなければ、すべて、return true へ
if ( num÷div の余りが 0 と等しい)約数の確認ができない!
return false
else約数についての確認
div ← div + 1
end if
endwhileここまで、前判定繰返し処理
return true戻り値 true (素数である)
end if

この場合、whileは、「num が divと等しい間、処理を実行する」となり、num と div が等しくない場合は、約数の確認をする処理を飛ばして、return true に進みます。これでは、約数の確認ができません。

b には、 ”と等しい” ではなく、 ”より大きい” が適切です。

a と b の結果から

a には  ”より小さい”b には  ”より大きい” が適切なので、正解は  です。

コメント

タイトルとURLをコピーしました