擬似言語の練習問題が足りない人へ|自分で作って力を付ける方法
擬似言語の練習問題を解き切ってしまって、次に何をやればいいか分からない。
同じ問題を3周して、答えを覚えてしまった状態になっていませんか?
科目Bの対策を進めていくと、多くの人がこの壁に当たります。擬似言語の問題は、市販の教材でも数がそう多くないからです。
でも大丈夫です。練習問題は、自分で作れます。しかも作る作業そのものが、いちばん力の付く演習になります。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。実務で新しい書き方を覚えるときは、サンプルコードを写すのではなく、値や条件を少しずつ変えて動かしてみるのが結局いちばん早い、というのが実感です。
これは試験勉強でもそのまま当てはまります。人が作った問題を待つより、手元の1問を10問に増やすほうが速いのです。
この記事では、擬似言語の練習問題を自分で作る方法を、具体的な手順としてお伝えします。科目B全体の姿から確かめたい人は、先に親記事に目を通しておくと位置づけが分かりやすくなります。
【関連記事】基本情報技術者試験の科目Bとは?擬似言語・アルゴリズム対策を初心者向けに解説
擬似言語の練習問題が足りなくなる理由¶
まず、なぜ問題が足りなくなるのかを整理しておきましょう。原因が分かると、埋め方も見えてきます。
科目Bは20問を100分で解く試験です。分量としては多くありませんが、1問ごとに初見のコードを読ませてくるので、演習量がそのまま得点に出ます。
ところが供給される問題の側には、次のような事情があります。
| 問題の入手先 | 量の事情 | 演習としての限界 |
|---|---|---|
| IPAの公開問題・サンプル問題 | 公開されている本数が限られる | すぐ解き終わる |
| 市販の問題集 | 科目A向けの分量に比べて少ない | 掲載パターンが偏りやすい |
| 過去問演習サイト | 科目Aは豊富だが科目Bは手薄 | 答えを覚えてしまう |
表のとおり、どの入手先も科目Bだけは薄いのです。ここは教材の質の問題ではなく、試験制度がまだ新しいことによる量の問題です。
公開問題の使い方そのものを確かめておきたい人は、専用の記事があります。
【関連記事】基本情報 科目Bの公開問題を解説|問題タイプ別の考え方と解き方
3周目からは答えを覚えているだけになる¶
同じ問題を繰り返すこと自体は悪くありません。1周目で読み方を覚え、2周目で手順を固めるまでは効果があります。
問題は3周目からです。コードを読む前に答えの選択肢が浮かんでしまい、追う練習になりません。
これは記憶力のせいではなく、問題が減ったサインです。次の段階に進む合図だと考えてください。
科目Bは初見のコードを読ませる試験¶
科目Bで問われるのは、知っているアルゴリズムかどうかではなく、目の前のコードを追えるかどうかです。だから初見であることに意味があります。
言い換えると、練習では初見の状態を自分で作り出す必要があります。答えを知っている問題をいくら回しても、その力は伸びません。
初見の問題に対する構え方は、こちらの記事で詳しく扱っています。
【関連記事】科目Bの初見問題が解けない人へ|知らないアルゴリズムが出たときの読み方
手持ちの1問を10問に増やす3つの作り方¶
ここからが本題です。新しい問題を探すのではなく、いま持っている問題を材料にします。
作り方は3つあります。難易度の低い順に並べておきました。
| 作り方 | やること | 鍛えられる力 |
|---|---|---|
| 改題 | 数値・要素数・条件の向きを変える | トレースの正確さ |
| 穴あけ | 完成コードの1行を隠す | 処理の意味を読む力 |
| 書き起こし | 日常の手順を擬似言語で書く | アルゴリズムを組む力 |
上から順に試すのがおすすめです。改題は5分でできますし、それだけでも十分な演習になります。
作り方1:数値と条件の向きを変える¶
いちばん手軽なのが改題です。元のコードはそのまま使い、配列の中身や不等号の向きだけを差し替えます。
たとえば配列が {5, 3, 8, 1} だった問題なら、{2, 9, 9, 4, 1} に変えてみてください。要素数が変わるとループの回数も変わるので、追い直す必要が出てきます。
同じ値が2つ入っている配列は特に効きます。不等号が > か >= かで結果が変わる場面に出会えるからです。
変える場所を決めておくと、迷わず量産できます。
| 変える場所 | 具体例 | 出てくる気づき |
|---|---|---|
| 配列の中身 | 昇順・降順・同じ値を混ぜる | 条件の境目で挙動が変わる |
| 要素数 | 4個から5個、1個だけ | ループの上限式の意味 |
| 不等号 | > を >= に |
等しいときの扱い |
| 初期値 | 0 から 1、または最初の要素 | 初期値が答えを左右する |
この4行を順に当てはめれば、1問から4問以上が作れます。答えは自分でトレースして出しましょう。
作り方2:完成したコードの1行を隠す¶
次の段階が穴あけです。答え合わせが済んだコードを1行だけ紙で隠し、そこに何が書かれていたかを考えます。
科目Bの空欄補充問題と同じ形なので、そのまま本番の練習になります。隠す行は、代入の行かループの上限式を選ぶと難しくなります。
コツは、隠す前に一度きちんとトレースしておくことです。処理の流れが頭に入っていれば、隠された1行の役割から逆算できます。
空欄補充の型に慣れたい人は、こちらの記事もあわせて読んでみてください。
【関連記事】基本情報技術者試験の科目Bの空欄補充問題の解き方を解説|擬似言語で見る判断ポイント
作り方3:身の回りの手順を擬似言語で書く¶
3つ目がいちばん力の付く方法です。日常の手順を、擬似言語のコードとして書き起こします。
題材は身近なもので構いません。レシートの合計を出す、名簿から同姓同名を探す、じゃんけんの勝敗を数える。どれも配列とループで書けます。
自分で書くと、初期値の置き方やループの終わり方で必ず迷います。その迷いこそが、問題文を読むときに見るべき場所そのものです。
作った問題を難しくしようとしない¶
自作するときに陥りやすいのが、凝った問題を作ろうとして手が止まることです。二重ループや再帰を入れたくなりますが、最初は必要ありません。
配列を1回なめるだけの処理でも、初期値と終わり方を自分で決めるという体験は同じように得られます。難しさより本数を優先してください。
慣れてきたら、ループを1つ増やすくらいの拡張で十分です。本番で出る問題も、極端に複雑なコードではありません。
実際に1問作ってみる¶
言葉だけでは分かりにくいので、作り方3を1回やってみましょう。題材は、テストの点数から合格者の人数を数える処理にします。
まず日本語で手順を書きます。ここを飛ばすといきなり詰まります。
先頭から順に点数を見て、60点以上だったら数を1つ増やす。最後まで見たらその数を返す。これだけです。
これを擬似言語にすると、次のようになります。試験の書き方に合わせた自作のコードです。
○整数型: 合格者数(整数型の配列: tensuu)
整数型: i
整数型: count ← 0
for (i を 1 から tensuu の要素数 まで 1 ずつ増やす)
if (tensuu[i] ≧ 60)
count ← count + 1
endif
endfor
return count
書けたら、自分の手でトレースします。tensuu が {58, 60, 91, 42} のときを追ってみましょう。
| i | tensuu[i] | 60以上か | countの値 |
|---|---|---|---|
| 1 | 58 | いいえ | 0 |
| 2 | 60 | はい | 1 |
| 3 | 91 | はい | 2 |
| 4 | 42 | いいえ | 2 |
答えは2です。ここで大事なのは、正解したかどうかではありません。60点ちょうどが数に入るかどうかを、自分で決めて書いた点です。
≧ を > にすれば答えは1になります。この差を自分で作った経験があると、本番で不等号を読み飛ばさなくなります。
トレース表の書き方そのものが不安な場合は、先にこちらを固めておくと楽になります。
【関連記事】擬似言語のトレース表の書き方|科目Bで変数の値を追う手順を解説
作った問題は必ず答え合わせをする¶
自作問題の弱点は、答えを保証してくれる人がいないことです。ここを放置すると、間違った理解が固まってしまいます。
そこで使えるのが Giji Academy の擬似言語シミュレーターです。書いたコードを1行ずつ実行して、変数の値が変わる様子を画面で確かめられます。
無料で使えるので、紙に書いた表と画面の値を並べて見比べてください。ずれた行が、そのまま自分の弱点になります。
題材に困ったらアルゴリズムの型から選ぶ¶
何を書くか思いつかないときは、科目Bで出る型の一覧から借りるのが早道です。合計、最大値、探索、整列、といった型ごとに1問ずつ作っていきます。
型を一覧で確認したい人は、こちらの記事にまとめてあります。
【関連記事】擬似言語で押さえるアルゴリズム一覧|科目Bで出る型を整理して解説
1週間で回す練習メニュー¶
作り方が分かっても、続けなければ意味がありません。1週間を1単位にした回し方を用意しました。
無理のない分量にしてあるので、仕事や学校の合間でも回せます。
| 曜日 | やること | 目安時間 |
|---|---|---|
| 月 | 手持ちの問題を1問、普通に解く | 20分 |
| 火 | その問題を改題して2問作り、解く | 20分 |
| 水 | 同じコードを穴あけにして解く | 15分 |
| 木 | 日常の手順を1つ、擬似言語で書く | 30分 |
| 金 | 木の自作コードをシミュレーターで確認 | 20分 |
| 土 | 週の4問をもう一度トレースし直す | 30分 |
| 日 | 休む、または間違えた1問だけ見直す | 10分 |
1週間で新しいコードに4回は触れる形になります。これを4週続ければ、初見のコードへの抵抗感が変わってきます。
大事なのは木曜と金曜です。自分で書いて、動かして確かめる。この往復が、読むだけの勉強との差になります。
作った問題はノートに残しておく¶
自作した問題は、コードと答えをセットでノートに書き留めておきましょう。1か月後に見返すと、答えを忘れていて良い演習材料に戻っています。
自分が作った問題は、自分の弱点の記録でもあります。どの型で迷ったかが後から見えるので、直前期の復習リストとしても使えます。
書き留めるときは、答えの数字だけでなく、途中で迷った箇所も一言添えておくのがおすすめです。実務でも、あとから見返す前提のメモには判断の理由を残すようにしています。
理由が残っていれば、同じ場所でつまずいたときにすぐ気づけます。ノートが厚くなるほど、初見の問題が減っていきます。
過去問演習と組み合わせる¶
自作問題は過去問の代わりではなく、過去問を増やすための道具です。土台となる演習は、公開されている問題で進めてください。
過去問の周回のしかたと組み合わせ方は、こちらの記事が参考になります。
【関連記事】基本情報 科目Bの過去問はどこで解ける?公開問題の使い方と勉強法
まとめ¶
擬似言語の練習問題が足りないのは、あなたの探し方が悪いからではありません。科目Bという試験がまだ新しく、量が追いついていないだけです。
だから作る側に回ります。今日お伝えした内容を振り返っておきましょう。
| やること | ポイント |
|---|---|
| 改題する | 配列の中身・要素数・不等号・初期値を変える |
| 穴あけにする | 代入の行やループの上限式を隠す |
| 書き起こす | 日常の手順を配列とループで表す |
| 答え合わせする | シミュレーターで1行ずつ確かめる |
| 記録する | コードと答えをノートに残す |
問題を作る作業は、解く作業より一段深く考えることになります。だから遠回りに見えて、実はいちばん近い道です。
最初の1問は、うまく書けなくて構いません。動かして直すところまでが練習だと考えてください。
自分で書いたコードが思ったとおりに動いた瞬間は、素直に楽しいものです。その感覚が、初見の問題に向かう自信になります。
まずは今日、手持ちの1問の数字を変えることから始めてみてください。