擬似言語の余り(剰余)と割り算がわからない人へ|偶数判定と桁の取り出しを解説
余りを求める計算が出てきた瞬間、何をしているのか分からなくなる。
割り算の記号を見ただけで身構えてしまっていませんか?
小学校で習ったはずの割り算なのに、擬似言語の中に置かれると急に意味が読めなくなる。その感覚は、科目Bを学ぶ人がよく通る場所です。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。実務でも剰余の計算は驚くほど頻繁に使いますし、商と余りを取り違えたせいで金額の集計がずれる不具合を直したこともあります。
つまり、ここは試験だけの知識ではありません。この記事では、割り算と余りの読み方を、試験で問われる形に沿って一つずつ整理していきます。
割り算には商と余りの二つの答えがある¶
まず、言葉の整理から始めましょう。7個のあめを3人で分けると、一人2個ずつ配れて1個あまります。
このとき、2にあたるものが商、1にあたるものが余りです。余りは剰余とも呼ばれ、擬似言語の問題ではこちらの言い方をよく見かけます。
普段の計算では 7 ÷ 3 = 2.33… と小数で考えることが多いはずです。ところが整数どうしの割り算では、小数点以下を切り捨てた商と、割り切れずに残った余りに分けて考えます。
この二つは、まったく別の値を返す別の計算だと思ってください。混ざったままだと、コードを読むたびに迷子になります。
具体的な数字で並べたほうが早いので、表にまとめます。
| 計算 | 商(整数の割り算) | 余り(剰余) |
|---|---|---|
| 7 と 3 | 2 | 1 |
| 10 と 5 | 2 | 0 |
| 3 と 5 | 0 | 3 |
| 100 と 10 | 10 | 0 |
| 25 と 4 | 6 | 1 |
三段目に注目してください。3 を 5 で割ると商は 0 で、余りは 3 そのものになります。
割る数のほうが大きいときは、一回も配れないので全部が余りとして残る。ここは意外とつまずく人が多い場所です。
余りは必ず 0 以上、割る数より小さい¶
もう一つ、覚えておくと得をする性質があります。正の整数どうしの計算なら、余りは 0 から、割る数より 1 小さい値までの範囲に必ず収まります。
3 で割った余りなら 0、1、2 のどれかです。5 で割った余りなら 0 から 4 までのどれかにしかなりません。
この性質は、選択肢を絞るときにそのまま使えます。5 で割った余りが 7 になるような選択肢が並んでいたら、計算するまでもなく外せます。
繰返しの中で余りを使う問題では、値が同じ範囲をぐるぐる回ることになります。この循環する動きが、後で出てくる処理の土台になります。
問題文での書かれ方は一つではない¶
ここで少し実務的な話をします。擬似言語の問題を読むと、余りの求め方が問題によって違う形で書かれていることに気づくはずです。
慌てる必要はありません。表記が違うだけで、やっていることは同じです。
見かける形をまとめておきます。
| 書かれ方の例 | 意味 |
|---|---|
| x ÷ y の余り | x を y で割った余り |
| x mod y | 同上 |
| x % y | 同上 |
| x を y で割った商 | 小数点以下を切り捨てた整数 |
大事なのは、記号を暗記することではありません。問題文の冒頭に必ず説明が置かれるので、そこを読んで確認する習慣をつけることです。
記号や記述形式そのものに不安が残っている人は、こちらの記事もあわせてご覧ください。
【関連記事】擬似言語でケアレスミスが多い人へ|よくある間違いと確認方法
余りが使われる代表的な場面¶
では、余りが実際にどんな場面で登場するのかを見ていきましょう。科目Bで出てくる使い方は、だいたい三つに整理できます。
どれも仕組みは単純です。一度知ってしまえば、次からは条件式を見た瞬間に意図が読めるようになります。
偶数か奇数かを判定する¶
いちばんよく出るのが、この使い方です。ある数を 2 で割った余りが 0 なら偶数、1 なら奇数と判定できます。
擬似言語で書くと、次のような形になります。
○整数型: n
if (n ÷ 2 の余り が 0 と等しい)
"偶数です" を表示する
else
"奇数です" を表示する
endif
条件式の中に余りの計算が入っているだけで、構造自体は普通の条件分岐です。落ち着いて見れば、難しいことは何もしていません。
つまずきやすいのは、余りが 0 という条件を、値が 0 という条件と読み違えてしまうときです。判定しているのは n そのものではなく、割った後の余りだという点を意識してください。
条件式の読み方に自信がないときは、こちらで基礎を固めておくと安心です。
【関連記事】擬似言語の論理演算(and・or・not)の読み方|複合条件で迷わないコツを解説
倍数の判定と、決まった個数ごとの処理¶
偶数判定を一般化すると、倍数の判定になります。3 で割った余りが 0 なら 3 の倍数、というわけです。
この考え方は、繰返しの中で決まった間隔ごとに何かをしたいときにも使われます。5 回ごとに区切りを入れる、といった処理です。
具体的には、繰返しの回数を数えている変数を使って判定します。カウンタを 5 で割った余りが 0 になるのは、5 回目、10 回目、15 回目のときだけだからです。
身近な例でいえば、時刻の計算がまさにこれです。時間を 24 で割った余りを見れば、日付をまたいでも時刻の範囲に収まります。
実務でも、曜日の計算や当番の割り振りでこの形をよく書きます。値を一定の範囲に押し込めたいときは、余りの出番だと考えて差し支えありません。
繰返しと組み合わせた形は、実際の問題でも頻出です。while と for の使い分けに不安がある場合は、先にそちらを押さえておきましょう。
【関連記事】擬似言語のwhileとforってどう違う?繰返し処理で迷子にならない方法を詳しく解説
数値から桁を一つずつ取り出す¶
三つ目が、少し応用の効く使い方です。整数の割り算と余りを組み合わせると、数値から桁を一つずつ取り出せます。
たとえば 1234 という数を考えてみましょう。10 で割った余りは 4 で、これは一の位の数字そのものです。
そして 1234 を 10 で割った商は 123 になります。一の位が削り取られて、数が一桁短くなりました。
この二つを繰り返せば、下の桁から順に数字を取り出していけます。桁の合計を求める問題や、回文になっているかを調べる問題で必ず出てくる考え方です。
桁を取り出す処理をトレースしてみる¶
言葉だけでは腑に落ちにくいので、実際のコードを追ってみましょう。各桁の数字を合計する処理を例にします。
まずはコード全体を見てください。行数は多くありません。
○整数型: n, sum, digit
n ← 1234
sum ← 0
while (n が 0 より大きい)
digit ← n ÷ 10 の余り /* 一の位を取り出す */
sum ← sum + digit /* 合計に足す */
n ← n ÷ 10 の商 /* 一の位を削る */
endwhile
sum を表示する
処理の中心は、while の中の三行です。取り出して、足して、削る。この順番を繰り返しているだけです。
繰返しの終了条件にも注目してください。n が 0 より大きい間だけ回るので、桁を削り切って 0 になったところで自然に止まります。
では、値がどう変わっていくかを表に書き出してみます。
| 回数 | 開始時の n | digit(余り) | sum | 終了時の n(商) |
|---|---|---|---|---|
| 1回目 | 1234 | 4 | 4 | 123 |
| 2回目 | 123 | 3 | 7 | 12 |
| 3回目 | 12 | 2 | 9 | 1 |
| 4回目 | 1 | 1 | 10 | 0 |
| 5回目 | 0 | ― | ― | 条件が偽で終了 |
四回目で n が 0 になり、五回目に入ろうとしたところで繰返しが終わりました。合計は 1 + 2 + 3 + 4 で 10 です。
四回目の行をもう一度見てください。n が 1 のとき、10 で割った余りは 1 で、商は 0 になります。
ここが一番の山場です。1 ÷ 10 は 0.1 だから商も 0.1 だと考えてしまうと、繰返しが終わらないように見えてしまいます。
このように一行ずつ値を書き出す方法は、余りの問題ととても相性がいいです。手順そのものを身につけたい人は、次の記事を読んでみてください。
【関連記事】擬似言語のトレース表の書き方|科目Bで変数の値を追う手順を解説
科目Bでつまずきやすい場所¶
ここまでの内容が分かっていても、本番で失点しやすい箇所はある程度決まっています。私が学習の相談を受けてきた範囲では、次の三つに集中していました。
型を先に知っておけば、同じ落とし穴を避けられます。表で確認しましょう。
| つまずく場所 | 何が起きるか | 対処 |
|---|---|---|
| 商を小数で考える | 繰返しが終わらないように見える | 整数の割り算は切り捨てだと確認する |
| 商と余りを取り違える | 答えの数字がまるごと変わる | どちらを求める式か指差しで確かめる |
| 割る数より小さい値 | 商が 0 になる形を見落とす | 3 ÷ 5 の商は 0 と覚えておく |
どれも、知識としては簡単なことばかりです。それでも本番の緊張の中では、こういう当たり前のところで足をすくわれます。
だからこそ、手を動かして体に入れておく価値があります。
配列の添字と組み合わせる形に慣れる¶
もう一歩踏み込んだ話をします。余りは、配列の添字と組み合わせて使われることがよくあります。
配列の要素を先頭から順に使い、末尾まで行ったらまた先頭に戻る。そんな輪のような動きを、余りを使うと短く書けるからです。
添字を割る数として要素数を使えば、添字は必ず要素の範囲に収まります。範囲を越えないので、判定用の条件分岐を書かずに済むわけです。
この形が出てきたときは、添字が今いくつなのかを表に書き出すのが確実です。配列の数え方そのものが怪しい場合は、先にこちらを確認しておきましょう。
【関連記事】擬似言語の配列と添字がわからない人へ|要素数・二次元配列の読み方を解説
空欄補充では、商か余りかで選択肢が分かれる¶
科目Bでは、コードの一部が空欄になっている出題形式がよくあります。余りが絡む問題では、選択肢が商と余りで対になって並ぶことが多いです。
このとき、コード全体を理解しようとすると時間が足りません。空欄の前後の一行だけを見て、そこで何が欲しいのかを考えてください。
一の位が欲しいなら余り、桁を削りたいなら商。求めているものがはっきりすれば、選択肢は半分に減ります。
迷ったら、具体的な数字を一つ入れて確かめるのが確実です。1234 のような分かりやすい値を使えば、数十秒で判断できます。
このとき選ぶ数字にも、ちょっとしたコツがあります。桁がすべて違う値を使うと、どの桁が取り出されたのか一目で分かります。
1111 のような値では、正しく動いていなくても答えが合ってしまうことがあります。確かめ算に使う数は、あえてばらばらの桁にしてください。
手を動かして確かめるのが一番の近道¶
余りの計算は、読むだけではなかなか身につきません。値が変わっていく様子は、実際に追ってはじめて納得できるものです。
紙に表を書いて、桁が一つずつ削られていくのを目で見てください。それだけで、繰返しが必ず終わる理由が腑に落ちます。
そのうえで、コードを一行ずつ動かして確かめられると理解が速くなります。Giji Academy の擬似言語シミュレーターなら、変数の変化を見ながら処理を追えます。
使い方から知りたい人は、次の記事に手順をまとめてあります。
【関連記事】擬似言語 シミュレーターとは?試験対策に役立つ使い方と学習法を解説
まとめ¶
最後に、この記事で確認したことを振り返ります。
整数の割り算には、商と余りという二つの答えがありました。商は小数点以下を切り捨てた値で、余りは割り切れずに残った値です。
余りは 0 以上、割る数より小さい範囲に必ず収まります。この性質だけで、外せる選択肢が見つかることもあります。
使われる場面は、偶数や倍数の判定、決まった間隔ごとの処理、そして桁の取り出しの三つが中心でした。特に、10 で割った余りが一の位、商が桁を削った数という組み合わせは覚えておく価値があります。
そして、商を小数で考えてしまう勘違いが、最大のつまずきどころでした。整数の割り算は切り捨て。この一言を思い出せれば、繰返しの動きは素直に追えます。
余りの計算でつまずくのは、あなたの理解力の問題ではありません。具体的な数字で一度追いかければ、必ず見えるようになります。