疑似言語の問題は必ず出題されます。
問題のバリエーションも少ないので、解き方さえ覚えると確実に点を取れます。
今回は、ITパスポート令和4年度公開問題 問78を例にして解説しました。
かなり丁寧に手順を踏んで解説したため、記事が長くなっています。
まずは、問題を解く流れを掴んで、2回目以降、詳細を確認していくような読み方をお勧めします。
また、問題に慣れてしまえば、この解説のとおり手順を踏まなくても、問題を解けるようになります。
まずは、疑似言語の解き方をトレースすることから始めてみましょう。
疑似言語の問題を解くポイント
次の、2つのポイントを押さえると、疑似言語の問題はそれほど難しくありません。
文章で書かれた説明、条件、手順を理解してから、プログラムを考える。
文章で書かれた説明、条件、手順だけで、プログラムの機能(動作)がわかるように、問題は作られています。
アルファベットで書かれて、わかりにくいプログラムを見て、プログラムの機能(動作)を考える必要ありません。
選択肢の式に具体的な値を代入して、矛盾が生じないものを選ぶ。
正解を得るのに、選択肢の内容を理解する必要はありません。
選択肢にある4つの式に値を代入して、結果に矛盾が生じないものを選ぶだけで正解できます。
式に代入すべき値は、文章で書かれた条件や手順から決めることが出来ます。
問題を解く手順(概要)
問題を解く手順をおおまかな図にしました。
Step1~Step3までは、文章で書かれた説明、条件、手順を確認します。
関数や条件についてよく理解してから、Step4以降、プログラムで確認するのがポイントです。
- Step 1問題文の全体の構成を確認する。
- Step 2関数の働き(目的)を説明(条件)で確認する。
- Step 3関数の動作、[手順]で具体的な値を使って確認する。
- Step 4プログラムの構成を、[手順]と対応させて確認する。
- Step 5選択肢の変数が、[手順]の具体的な値のどれに当たるか調べる。
- Step 6各選択肢に具体的な値を代入して正誤を調べる。
問題を解く手順(詳細)
先に示した大まかな流れに従って、詳細を説明します。
1 問題文の構成を確認する。
正解するには、問題文を正しく読み取ることが大切です。
そのために、最初に、問題文の構成を確認します。
問題文の構成を覚えると、他の問題を解く時にも役立ちます。
説明(条件)

関数の説明が書かれています。
ここでは、”配列を使う関数の問題なんだな”程度の理解で、次に進みましょう。
設問

最初は、プログラムの中で、aの場所を確認するだけでいいです。
手順

プログラムの流れを、言葉で説明しています。
ここの理解が、問題を解く上で重要なポイントです。
プログラム

手順を理解してから、考えましょう。
手順を理解しないで、プログラムの詳細を考え始めると、大抵わからなくなります。
選択肢

4つの中から1つ選ぶのに、一つ一つの選択肢の内容を理解する必要はありません。
”jとkを代入するんだな”程度の理解で、次に進みましょう。
ここでは、jとkが何を意味するか考える必要ありません。
2 関数の働き(目的)を確認する。
関数checkDigit
関数の働き(目的)を確認しましょう。
”配列orijinalDigit”の中身が気になるでしょうが、ここでは、”配列orijinalDigit”という塊としてとらえて置きます。
”配列orijinalDigit”については、次で確認します。
では、説明の太字の部分に着目します。

関数の働き(目的)を理解するときは、”関数名”、”引数”、”戻り値”が大切です。
これらの関係を図にすると、次のようなイメージになります。

なお、この問題では、”チェックデジット”そのものが何を指すか知らなくても問題は解けます。
問題を解いてからでも、確認しておきましょう。
配列originalDigit
配列originalDigitについて、確認します。
問題文には、次のようにあります。

説明の太字の部分から、次のことがわかります。
問題文 | → | わかること |
---|---|---|
”10進9桁の整数” | → | 例えば, 000000777 |
”上位の桁から順に格納された整数型の配列” | → | 9個の要素(箱)がある |
”要素番号は1から始まる” | → | 箱には、1から9まで番号がついている。 |
図に示すと、配列originalDigitは、次のようになります。

3 関数の動作を、[手順]で具体的な値を使って確認する。
では、[手順]の内容を、一つ一つ具体的な数値で確認しましょう。
手順(1)

図に示すと、次のようになります。

手順(2)

図に示すと、次のようになります。

手順(3)

図に示すと、次のようになります。

4 プログラムの構成を、[手順]と対応させて確認する。
はじめに結論を示します。
プログラムの構成を手順と対応させると、図のようになります。

次からは、理由を説明します。
プログラムの構成考える時の目の付けどころ、プログラムの構成の分け方を参考にしてください。
○整数型~originalDigit)の部分←説明
関数を宣言しているので、問題文の説明にあたります。
for ~ endfor の部分
配列originalDigitの各要素を足しているので、手順1にあたります。
while ~ endwhile の部分
jを10で割った商を求めて、10の位の数を求めているの、手順2にあたります。
return j の部分
戻り値を記述しているので、手順3にあたります。
5 選択肢の変数が、[手順]の具体的な値のどれに当たるか調べる。
例えば、選択肢 アにある式 j ← j – 10 × k のjやkが何を示す変数なのかわからないと、値を代入して調べることができません。
そこで、次のように調べます。
選択肢の入る a の前後で、jやkが使われている部分を調べる。
いくら選択肢の式そのものだけを見ても、jやkを理解できません。
選択肢の入る a の前後で、jやkを調べることが大切です。
調べる変数は3つあります。
○式右側のj(例:j ← j – 10 × k)
式の右側にあるので、計算に使う値です。
プログラムでは、式が入る a より上(前)を探します。

目印の部分にjがあります。
手順1に当たる部分です。
式右側のjは、配列originalDigitの各要素の数字を足した合計です。
○式右側のk(例:j ← j – 10 × k)
式の右側にあるので、計算に使う値です。
プログラムでは、式が入る a より上(前)を探します。

目印の部分にkがあります。
手順2に当たる部分です
jを10で割った商を求めているので、式の右側のkは10の位の数です。
○式左側のj(例:j ← j – 10 × k)
式の左側にあるのでjは、計算の結果です。
プログラムでは、式が入る aより下(後) を探します。

目印の部分にjがあります。
手順3に当たる部分にあります。
return j とあるので,左側のjの値は最終的に戻り値になります。
変数についてまとめると、次のようになります。
- 式右側のjは、配列originalDigitの各要素の数字の合計
- 式右側のkは、10の位の数
- 式左側のjの値は、最終的に戻り値
手順2と照らし合わせて、変数に具体的な値を対応させる。
上のまとめに従って、jやkに具体的な値を対応させると次のようになります。

これで、式右側のj、式右側のk、式左側のjが決まりました。
なお、この値は、あくまで”000000777”の場合の値であって、10進9桁の整数が変わるとjやkの値も変わります。
6 各選択肢に具体的な値を代入して正誤を調べる。
次のように、各選択肢のj、kに具体的な値を代入して計算します。
ア j ← j – 10 × k
式右側を計算します。
21-10×2=1
式左側のj=1となり、手順(2)で求めた値 3と一致しません。
よって、アは正しくありません。
イ j ← k + ( j – 10 × k )
式右側を計算します。
2+(21-10×2)=3
式左側のj=3となり、手順(2)で求めた値 3と一致します。
よって、イは正しいです。
ウ j ← k + ( j – 10 )× k
2+(21-10)=13
式左側のj=13となり、手順(2)で求めた値 3と一致しません。
よって、ウは正しくありません。
エ j ← k +j
2+21=23
式左側のj=23となり、手順(2)で求めた値 3と一致しません。
よって、エは正しくありません。
したがって、正解は、 イ です。
まとめ
ITパスポート令和4年度 問78を解きながら,疑似言語問題の解き方を解説しました。
最初に、疑似言語の問題を解くポイントを説明しました。
文章で書かれた説明、条件、手順を理解してから、プログラムを考える。
選択肢の式に具体的な値を代入して、矛盾が生じないものを選ぶ。
次に、問題を解く手順を説明しました。
- Step 1問題文の全体の構成を確認する。
- Step 2関数の働き(目的)を説明(条件)で確認する。
- Step 3関数の動作を、[手順]で具体的な値を使って確認する。
- Step 4プログラムの構成を、[手順]と対応させて確認する。
- Step 5選択肢の変数が、[手順]の具体的な値のどれに当たるか調べる。
- Step 6各選択肢に具体的な値を代入して正誤を調べる。
疑似言語の問題は必ず出題されます。
問題のバリエーションも少ないので、解き方さえマスターすると確実に点を取れます。
まずは、解き方を丁寧にトレースすることから始めたらいかがでしょうか。
以上、疑似言語問題の解き方を解説しました。
コメント