擬似言語でケアレスミスが多い人へ|よくある間違いと確認方法
擬似言語の考え方は合っていたのに、最後の計算や配列の番号を間違える。
解説を読むと分かるのに、同じミスを繰り返していませんか?
擬似言語のケアレスミスは、単なる不注意で片付けられがちです。
しかし実際には、確認する順番が決まっていないことや、頭の中だけで処理を追っていることが原因になっているケースが多いです。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。実務でも、条件式や配列の位置を一つ間違えただけで不具合が発生します。
経験者はミスをしないのではなく、確認すべき場所を知っています。擬似言語でも、同じ確認手順を身につければ間違いを減らせます。
この記事では、基本情報技術者試験の科目Bなどで起こりやすい擬似言語の間違いと、問題を解くときの確認方法を初心者向けに解説します。
擬似言語のケアレスミスは知識不足とは限らない¶
解説を読んだ瞬間に理解できるなら、知識よりも解き方に問題があるかもしれません。
例えば、次のような間違いです。
| 間違いの種類 | よくある状態 | 主な原因 |
|---|---|---|
| 配列の添字 | 1番目と0番目を取り違える | 最初の要素番号を確認していない |
| ループ回数 | 1回多い、または1回少ない | 開始値と終了値を曖昧に読む |
| 条件式 | 真と偽を逆に考える | 条件成立後の処理を確認していない |
| 初期値 | 0や1の設定を見落とす | ループ部分から読み始めている |
| 更新順序 | 更新前後の値を混同する | 1行ずつ追っていない |
| 計算 | 足し算や比較を間違える | 複数の値を頭の中だけで管理する |
| 選択肢 | 似た選択肢を選ぶ | 自分の答えを作る前に選択肢を見る |
合計や最大値といった基本問題でも、確認を飛ばせばミスは起こります。まず、自分がどの種類の間違いを繰り返しているのかを整理しましょう。
基本情報科目B全体の失敗パターンを確認したい方は、次の記事も参考になります。
【関連記事】基本情報技術者試験 科目Bで落ちる人の特徴とは?|よくある失敗と対策方法を解説します
よくある間違い1:代入前と代入後の値を混同する¶
擬似言語では、変数の値が何度も更新されます。
初心者が間違えやすいのは、現在の値と、更新後の値を同時に頭の中へ置こうとすることです。
次の短い処理を見てみましょう。
整数型: x, y
x ← 3
y ← x + 2
x ← y + 1
yは5になり、最後にxは6へ更新されます。処理が長くなると、以前の値を使ってしまうミスが増えます。
代入されたら古い値を消す¶
紙に変数を書く場合は、新しい値を横へ追加するか、古い値へ取り消し線を引きます。
x: 3 → 6のように履歴を残すと、いつ値が変わったのか確認しやすくなります。
代入は算数の等式ではなく、右側の計算結果を左側の箱へ入れる処理として読みましょう。
よくある間違い2:ループの開始と終了を一つずらす¶
科目Bの擬似言語では、繰返し処理が頻繁に登場します。
ここで起こりやすいのが、ループを1回多く実行したり、最後の1回を飛ばしたりするミスです。
例えば、次の処理は何回実行されるでしょうか。
for (i を 2 から 5 まで 1 ずつ増やす)
count ← count + 1
endfor
iは2、3、4、5と変化するため、処理回数は4回です。
最初の値を含めて数える¶
開始値と終了値の両方を含む繰返しでは、回数を感覚で計算しないほうが安全です。
問題用紙の余白に2 → 3 → 4 → 5と書けば、4回だとすぐに分かります。
値が大きい場合も、最初の2回と最後の値を書けば、境界のミスを減らせます。
よくある間違い3:配列の添字と中身を混同する¶
配列問題では、要素番号と格納されている値を分けて考える必要があります。
しかし、数字が並んでいると、今見ているのが位置なのか値なのか分からなくなることがあります。
次の配列を考えてみましょう。
data ← {8, 3, 12, 5}
仮に最初の要素番号が1なら、data[1]は8、data[3]は12です。
最初の番号が0なら、data[1]は3です。問題ごとの定義で答えが変わります。
配列は箱の図にする¶
配列を見たら、次のように要素番号と値を上下に分けます。
| 要素番号 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 値 | 8 | 3 | 12 | 5 |
ループの中でdata[i]が出てきたら、現在のiへ丸を付けます。
data[i + 1]やdata[i - 1]では、添字を先に計算してから値を確認しましょう。
よくある間違い4:初期値を見落とす¶
長い擬似言語問題では、ループや条件分岐へ目が向きやすくなります。
その結果、処理の前に設定された初期値を見落としてしまうことがあります。
次の処理を見てください。
整数型: i, count
count ← 1
for (i を 1 から 3 まで 1 ずつ増やす)
count ← count + 1
endfor
ループは3回ですが、最初から1が入っているため、countの最終値は4です。
変数の宣言だけでなく最初の代入を見る¶
問題を読むときは、ループへ入る前の値を表へまとめましょう。
| 変数 | 初期値 | 役割 |
|---|---|---|
| i | ループで設定 | 現在の繰返し位置 |
| count | 1 | 件数または処理回数 |
初期値が0か1かで答えが一つずれるため、ループ前の代入を必ず確認します。
よくある間違い5:条件式の意味を逆に読む¶
if文は読めているつもりでも、不等号や否定が入ると判断を逆にしやすくなります。
特に≠、not、複数の条件を組み合わせたandやorには注意が必要です。
次の条件を考えてみましょう。
if ((score >= 60) and (absence <= 3))
result ← true
else
result ← false
endif
点数が60以上で、なおかつ欠席が3以下の場合だけtrueになります。
条件式を短い日本語へ変換する¶
式を見たら、そのまま頭の中で処理せず、短い日本語へ直します。
score >= 60なら60点以上、absence <= 3なら欠席3回以下です。andは両方必要、orはどちらか一方でよい、と横に書きます。
否定が含まれる場合は具体例を作ります。value ≠ 0なら1では成立し、0では成立しません。
よくある間違い6:更新する順番を入れ替えて考える¶
擬似言語は、上から順番に1行ずつ実行されます。
似た変数が続けて更新されると、同時に値が変わったように読んでしまうことがあります。
次のコードは、二つの値を入れ替える処理です。
work ← a
a ← b
b ← work
最初にaをworkへ保存し、その後でaへbを代入します。最初の行を飛ばすと、元のaの値が失われます。
1行ごとに表を更新する¶
値の入れ替えや複数変数の更新では、1行ごとに状態を書きます。
| 実行後 | a | b | work |
|---|---|---|---|
| 初期状態 | 3 | 7 | 未定義 |
work ← a |
3 | 7 | 3 |
a ← b |
7 | 7 | 3 |
b ← work |
7 | 3 | 3 |
途中状態まで追うことで、更新順の間違いを防げます。
よくある間違い7:関数の引数と戻り値を取り違える¶
関数が登場すると、メイン処理と関数内部を行き来する必要があります。
どの値を渡し、どの値が戻ってきたのかを整理せずに読むと、別の変数を使ってしまいます。
○doubleValue(整数型: value)
return value × 2
整数型: x, result
x ← 4
result ← doubleValue(x)
関数へ4が渡され、戻り値の8がresultへ入ります。
関数ごとに入口と出口を書く¶
関数を読んだら、余白へ次のように書きます。
入力: value
出力: value × 2
何を受け取り、何を返す処理なのかを先に整理すれば、複数の関数があっても迷いにくくなります。
実例で確認する|どこでケアレスミスが起きるのか¶
ここまでの間違いが組み合わさった例を見てみましょう。
次の処理は、配列の中から5以上の値を数えます。
整数型の配列: numbers ← {2, 7, 5, 9}
整数型: i, count
count ← 0
for (i を 1 から 4 まで 1 ずつ増やす)
if (numbers[i] >= 5)
count ← count + 1
endif
endfor
return count
最終的なcountは3です。
7、5、9の三つが条件を満たします。
ところが、この短い問題にも間違いやすい場所がいくつもあります。
| 確認する場所 | 間違えた場合に起こること |
|---|---|
| countの初期値 | 1から始めて4と答える |
| iの開始値 | 0番目から見ると思い込む |
| ループの終了値 | 4番目を確認せず2と答える |
>= 5 |
5を含めず2と答える |
| countの更新 | 条件を満たさない2も数える |
アルゴリズムを理解していても、確認を一つ飛ばすだけで答えは変わります。
ケアレスミスを減らすための確認方法¶
ここからは、問題を解くときの確認順序を整理します。
毎回同じ順番で確認し、何となく読む状態から抜け出しましょう。
最初に処理の目的を一文で書く¶
コードへ入る前に、何を求める処理なのかを確認します。
最大値を求める、条件に合う件数を数える、配列を並び替えるなど、一文で書ける形にしましょう。
目的が分からないまま値を追うと迷います。長い問題ほど、最初に目的を短くまとめましょう。
重要な変数へ役割を書く¶
変数名の横に、合計、件数、現在位置、仮の最大値などとメモします。
答えに関係する変数を先に見つけ、初期化、更新、最後に使われる場所を確認します。
境界へ印を付ける¶
ループの最初と最後、配列の先頭と末尾、不等号に含まれる等号へ印を付けます。
i < 5とi <= 5では実行回数が変わります。小さな等号も、答えを変える重要な情報です。
頭の中で追える問題でも表を書く¶
簡単な問題ほど、表を書かずに解きたくなります。
しかし、練習中に省略する癖がつくと、本番の長い問題でも同じように頭の中だけで処理してしまいます。
値が変わる変数と、条件判定の結果だけを表にすれば十分です。
トレースを含めた擬似言語の学習方法は、次の記事でも詳しく解説しています。
【関連記事】擬似言語の勉強方法とは?IT初心者でも無理なく身につく学習ステップを解説
選択肢を見る前に自分の答えを作る¶
選択式の問題では、最初に選択肢を見ると、似た答えに引っ張られることがあります。
できる限り、先に処理結果や空欄へ入る内容を予想しましょう。
答えが作れない場合も、増やす、比較する、ループを終了させるなど、処理の方向性を考えてから選択肢を見ます。
不等号だけが違う場合は、境界値を一つ代入すると違いが見えます。
間違いノートは原因別に作る¶
問題文や解説を丸ごと書き写す必要はありません。
記録したいのは、次回の自分が同じミスを防ぐための情報です。
| 記録項目 | 記入例 |
|---|---|
| ミスの種類 | 配列の添字 |
| 間違えた内容 | 最初の要素を0番目だと思った |
| 原因 | 問題文の定義を読まずに解き始めた |
| 次回の確認 | 配列を見たら先頭番号へ丸を付ける |
| 解き直す日 | 翌日、3日後、1週間後 |
間違いを、うっかりしたで終わらせず、次に行う動作へ変えましょう。
同じミスが続くなら、ループを見たら開始値と終了値を書くなど、確認動作を固定します。
Giji Academyでケアレスミスを減らす練習方法¶
紙でトレースすることは重要ですが、自分の追い方が合っているかを確認する環境も必要です。
擬似言語学習サイトのGiji Academyでは、教材を読みながらブラウザ上で擬似言語を動かせます。
予想してから実行する¶
最初に紙で変数の変化と出力結果を予想します。
その後でコードを実行し、予想と実際の結果を比較してください。
自分で考える時間を作り、答え合わせとしてシミュレーターを使いましょう。
一か所だけ変更して再実行する¶
正解できたコードも、数値や条件を一つ変えて試します。
配列の値を変える、ループの開始値を変える、>を>=へ変えるといった小さな変更がおすすめです。
変更後の結果を予想すると、どの記述が処理へ影響しているのか見えてきます。
シミュレーターを使った具体的な学習方法は、次の記事も参考にしてください。
【関連記事】擬似言語 シミュレーターとは?試験対策に役立つ使い方と学習法を解説
7日間で確認手順を習慣にする練習法¶
ケアレスミスは、一度対策を読んだだけでは減りません。
毎日短い問題を使い、同じ確認手順を繰り返すことが必要です。
| 日 | 練習内容 | 意識するポイント |
|---|---|---|
| 1日目 | 代入と計算 | 更新前後の値を書く |
| 2日目 | forとwhile | 開始値と終了条件を書く |
| 3日目 | 配列 | 添字と値を分けて図にする |
| 4日目 | if文 | 条件式を日本語へ直す |
| 5日目 | 関数 | 引数と戻り値を書く |
| 6日目 | 複合問題 | 変数表を使ってトレースする |
| 7日目 | 解き直し | ミスの種類を分類する |
1日20分から30分でも、間違えた問題を翌日に解き直すと確認手順が定着します。
解き直しでは、答えより確認順序を守れたかを見ましょう。
エンジニア歴10年の私が確認していること¶
実務でコードを読むときも、まず入力と出力を確認し、重要な変数がどこで変化するのかを追います。
不具合調査では、変数が5のはずと思い込まず、ログやデバッグ機能で実際の値を確かめます。
擬似言語でも、たぶん3回と感覚で進めず、紙に値を書いて確認します。
確認を省くと解き直す時間が増えます。正確な手順を身につけたほうが、結果的に解答速度も上がります。
試験本番で使える最終チェック¶
問題を解き終えたら、すべてを最初から読み直す必要はありません。
自分が間違えやすい場所を中心に、短時間で確認します。
確認する順番は、次のように固定すると使いやすいです。
- 初期値を正しく使ったか
- ループの最初と最後を含めたか
- 配列の添字は問題の定義どおりか
- 不等号と等号を読み違えていないか
- 更新後の値を次の行で使っているか
- 関数の戻り値を正しい変数へ入れたか
問題の種類に合わせて、危険な場所を二つか三つ確認しましょう。
時間が足りなくなりやすい方は、速く読む方法だけでなく、どこで立ち止まるかを決めることも大切です。
【関連記事】基本情報技術者試験の科目Bで時間が足りない人へ|擬似言語問題を速く読むコツ
まとめ¶
擬似言語のケアレスミスは、注意力が足りないから起こるとは限りません。
初期値、ループ範囲、配列の添字、条件式、更新順序など、確認すべき場所が決まっていないことが主な原因です。
処理の目的と変数の役割を書き、境界へ印を付け、値が変わる部分を表で追いましょう。
間違えたら、配列の先頭番号へ丸を付けるなど、次回の確認動作まで決めてください。
Giji Academyでコードを動かすときも、最初に結果を予想しましょう。
紙で追い、実行し、条件を変えて再確認する流れが、正確に読む力につながります。
ケアレスミスは、才能や向き不向きの問題ではありません。
確認手順を毎回実践すれば、ミスは減らせます。まずは今日の1問で、初期値とループ範囲へ印を付けてみてください。
ここまでお読みいただきありがとうございました。