<景品表示法に基づく表記>本サイトのコンテンツには、商品プロモーションが含まれています。

ITパスポート/情報処理

ITパスポートの擬似言語⑦~令和4年問96 過去問解説

前回の記事(令和4年問78の解説)は以下となります。

ITパスポート令和4年問78過去問解説
ITパスポートの擬似言語~令和4年問78 過去問解説【ゼロから分かる擬似言語⑥】前回(擬似言語⑤)の記事はこちら https://shindan-model.com/it-pass-giji-gengo-005...

また、ITパスポートの擬似言語を初回から勉強したい方はこちら↓

擬似言語
ITパスポートの擬似言語 超入門~ゼロからわかる擬似言語① 変数・データ型・配列・関数・コメント【お知らせ】 令和6年度ITパスポート試験公開問題の解説を最速公開しています ※2024年4月以降受験する方で、生成AIに関する出題...

今回は擬似言語 第5回ということで、令和4年問96の過去問解説を行っていきます。この令和4年問96ですが、前回学習した令和4年問78に比べ、難易度は若干下がりますが、プログラム文が2つ出てきますし、短時間で確実に計算を行うことが求められます。

※なお、動画で解説を視聴したい方は、下記のYouTubeをご覧ください。

問題文の確認

関数calcXと関数calcYは,引数inDataを用いて計算を行い,その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと,関数calcXの変数numの値が,1→3→7→13と変化し,戻り値は13となった。関数calcYをcalcY(1)として呼び出すと,関数calcYの変数numの値が,1→5→13→25と変化し,戻り値は25となった。プログラム中のa,bに入れる字句の適切な組合せはどれか。

[プログラム1]
〇整数型:calcX(整数型:inData)
整数型:num,i
num←inData
for(iを1から3まで1ずつ増やす)
num←【a】
endfor
return num

[プログラム2]
〇整数型:calcY(整数型:inData)
整数型:num,i
num←inData
for(【b】)
num←【a】
endfor
return num

 

冒頭文の確認

この令和4年問96の問題構成ですが、まず冒頭文、そしてプログラムが2つ、そしてアからエまで解答選択肢ですね。このように一般的な問題構成になっています。

それではまずは冒頭文から確認していきましょう。

関数calcXと関数CakcYは引数inDataを用いて計算を行い、その結果を戻り値とする関数calcXをcalcX 引数1として呼び出すと、関数calcXの変数numの値が1→3→7→13と変化し、戻り値は13となった。関数calcYをcalcY 引数1として呼び出すと、関数calcYの変数numの値が1→5→13→25と変化し、戻り値は25となった。

以上を踏まえて、プログラム中のa, bに入れる字句の適切な組み合わせを選べ、という問題です。

プログラム1 宣言部

それではプログラム1から確認していきましょう。

まず1行目と2行目は宣言部です。こちら1行目、丸が付いているので関数の宣言ですね。整数型calcXの宣言。引数に整数型のinDataという変数を取ります。

2行目は整数型の変数numとiを宣言しています。

3行目は引数を変数numに代入初期化している、inDataをnumに入れて初期化しています。

プログラム1 処理部の確認

4行目から6行目は1から3までiを変えながら3回forループを回しています。

4から6行、for iを1から3まで一つずつ増やします。

そしてendforまでを繰り返します。要はnumに空欄aを代入することを3回繰り返すわけですね。そして、最終的に7行目でreturn numを戻り値として返しています。

冒頭文より関数calcXを引数1として呼び出すと、関数calcXの変数numの値が1→3→7→13と変化し、戻り値は13になります。

つまりこのようにnumが変化していくような空欄aを選べばよいということです。

プログラム1 解答選択肢の検証

空欄aですが、このように2つの選択肢があります

解答選択肢のアおよびイは2×num+i、ウおよびエはnum + 2×iでした。

それでは実際にこれらを空欄aに入れてみましょう。

① 2×num + i を入れた場合、numの初期値は1です。これは引数inDataが1だったため、forループを一回回した後numは2×num + i、numは一回目1だったので1を入れます。

そしてiも1回目は1から3まで増やすので、まずは1を代入。その結果、2×1+1は3です。

つづいて、forループ2回目を回します。こちらnumが3になりましたので、2×3プラス2回目なのでiは2、2×3+2は8でNGです。

今回、1→3→7→13と変化しなければいけないんですが、今の場合だと1→3→8になりましたので、NGです。

続きましてnum+2×iを入れた場合、numの初期値は1です。これは一緒ですね。

forループを一回回した後、numは1、iは1なので、1+2×1は3です。forループを2回回した後、今後numは3、iは2なので、3+2×2は7です。numが7になりました。

続いて、7+2×3は13ということで、numの値が1→3→7→13と変化しています。これは条件を満たします。よって、このnum + 2×iが空欄aが正しいです。よって、ここで正解がウかエに絞られる訳です。

プログラム2 宣言部

続きまして、プログラム2の確認です。

1行目から2行目は宣言部ということで、まず丸がついているので、これは関数の宣言ですね。整数型のcalcYという関数を宣言しています。引数に整数型の変数inDataをとっています。

2行目では整数型の変数numとiを宣言しています。

3行目は変数inData(引数ですね)の値をnumに入れてnumを初期化しています。

プログラム2 処理部

4行目から6行目はforループです。4から6を繰り返します。今回forループの条件が空欄bとなっています。そして、5行目には空欄aを入れます。

そして4行目のforの条件の選択肢ですが、以下の2つがあります。

ウ)iを1から7まで3ずつ増やす。
エ)iを2から6まで2ずつ増やす。

このどちらかが空欄bに入るわけですね。プログラム1の解より、numに num+2×iを代入し、7行目でnumを戻り値として返しています。

冒頭文より、関数calcYをcalcY引数1として呼び出すと、関数calcYの変数numの値が1→5→13→25と変化し、戻り値は25となります。これを満たす選択肢を選べばよいわけです。実際に空欄bに入れてみましょう。

プログラム2 空欄bの検討

1番目の選択肢「iを1から7まで3ずつ増やす」を入れた場合、numの初期値は1(inDataが1のため)。

forループを一回回した後、numは1プラス2、そしてiは1から7まで3つずつ増やすので、最初は1、つまり1プラス2かける1は3になり、これはNGです。1→5→13→25と変化しなければいけないので、この2回目が3になった段階でNGです。

続きまして、「iを2から6まで2ずつ増やす」を入れた場合、numの初期値は同じです。forループを一回回した後、numにnum + 2×iを入れます。numは1回目は1で、iを2から6まで2つずつ増やすので、1プラス2×2は5になり、これはOKです。1から5に変化しています。

forループの2回目で、numは5で、iは4になり、5プラス2かける4は13、これもOKです。

そしてforループを3回回した後、numは13プラス2かける6、つまり25になります。これは条件を満たすため、正解はエです。

まとめ

今回の問題は難しくはありませんが、プログラム文が2つあるので、短時間で正確に計算することが求められる問題ということがよく分かったと思います。

皆さんも、実際に手を動かして正確に短時間で計算できるようにしてください。はい、お疲れ様でした。