擬似言語の代入(←)と比較の違いとは?演算子の読み方と優先順位を解説
矢印が何をしている記号なのか、実はよく分かっていない。
擬似言語のコードを開いたとき、左向きの矢印を読み飛ばしていませんか?
x ← x + 1 という一行を見て、数学の等式のつもりで読んでしまう。学習を始めたばかりの人が、いちばん最初につまずくのがこの記号です。
私はエンジニアとして10年以上、Webシステムの開発や運用に携わってきました。実務でも、代入と比較を書き間違えたコードが原因で、条件が常に成立してしまう不具合を追いかけたことがあります。
記号の意味を取り違えると、コード全体が別の意味に見えてしまう。逆に言えば、ここさえ固まれば読み違いは一気に減ります。
この記事では、擬似言語の代入と演算子について、試験で問われる形に沿って整理していきます。
擬似言語の代入は矢印で書く¶
はじめに、いちばん基本の形を確認しましょう。擬似言語では、変数に値を入れる操作を左向きの矢印で書きます。
x ← 5 と書いてあれば、変数 x に 5 を入れるという意味です。この操作を代入と呼びます。
矢印の向きが右から左になっているのは、値が流れる方向を表しているからです。右側で計算した結果が、左側の入れ物に流れ込むイメージで読んでください。
一般的なプログラミング言語では、この操作を等号で書くことが多いです。擬似言語があえて矢印を使うのは、数学の等式と混同させないためだと考えると納得しやすいでしょう。
右側を先に計算してから左に入れる¶
代入を読むときの手順は、実は一つだけです。右側をすべて計算し終えてから、その結果を左側の変数に入れます。
この順番を知らないと、次の一行で必ず混乱します。
○整数型: x
x ← 3
x ← x + 1
二行目を数学の式として読むと、x = x + 1 は成り立たない、と感じるはずです。ところが擬似言語では話が違います。
まず右側の x + 1 を計算します。このとき x はまだ 3 なので、結果は 4 です。
その 4 を、あらためて左側の x に入れます。だから二行目が終わった時点で、x の中身は 4 になっています。
同じ変数が矢印の両側にあっても慌てないでください。右は計算に使う古い値、左は新しく入れる場所。役割がまったく違います。
変数そのものの宣言や型の読み方に不安が残っている人は、先にこちらで土台を固めておくと読みやすくなります。
【関連記事】擬似言語の変数宣言とデータ型の読み方|整数型・実数型・文字列型・論理型の違いを解説
代入と比較は見た目が似ていても別物¶
もう一つ、はっきり分けておきたいものがあります。値を入れる代入と、値が同じかどうかを調べる比較です。
代入は矢印で書き、比較は等号で書きます。この使い分けは、試験のコードでは徹底されています。
違いを表にまとめます。読み方も一緒に押さえてしまいましょう。
| 書き方 | 名前 | 何をするか | 結果 |
|---|---|---|---|
| x ← 5 | 代入 | x に 5 を入れる | 変数の中身が変わる |
| x = 5 | 比較 | x が 5 かどうか調べる | true か false |
| x ≠ 5 | 比較 | x が 5 でないか調べる | true か false |
代入の結果は、変数の中身が書き換わることです。比較の結果は、成り立つかどうかの答えだけで、変数は何も変わりません。
だから比較は、if や while の条件のところに現れます。代入は、処理の本体に現れます。どこに書かれているかを見れば、どちらなのかは迷わず判断できます。
科目Bで見かける演算子を整理する¶
矢印の意味がつかめたら、次は右側に並ぶ記号です。演算子は数が限られているので、一度まとめて確認しておけば十分です。
よく出てくるものを、種類ごとに表にまとめます。
| 種類 | 記号 | 読み方 | 例と結果 |
|---|---|---|---|
| 算術 | + - | 足す 引く | 5 + 2 は 7 |
| 算術 | × ÷ | 掛ける 割る | 5 × 2 は 10 |
| 比較 | > < | より大きい より小さい | 5 > 2 は true |
| 比較 | ≧ ≦ | 以上 以下 | 2 ≧ 2 は true |
| 比較 | = ≠ | 等しい 等しくない | 5 ≠ 2 は true |
| 論理 | and or not | かつ または でない | 条件をつなぐ |
算術演算子の結果は数値です。比較演算子と論理演算子の結果は、true か false のどちらかになります。
ここを混ぜないでください。答えが数なのか真偽なのかを意識するだけで、コードの意味が見えやすくなります。
以上と超えるを取り違えない¶
比較でいちばん事故が起きるのは、境界の値です。≧ と > は、たった一つの値で結果が分かれます。
x が 60 のとき、x ≧ 60 は true です。ところが x > 60 は false になります。
合格点や上限の判定では、この一つの差がそのまま答えを変えます。選択肢に ≧ と > が混ぜて並べてあったら、出題者はここを狙っていると思ってください。
対策は単純です。境界にあたる値を一つ選んで、実際に当てはめてみることです。
条件を組み合わせたときの読み方については、こちらで詳しく扱っています。
【関連記事】擬似言語の論理演算(and・or・not)の読み方|複合条件で迷わないコツを解説
割り算は問題文の定義を先に読む¶
割り算はもう少し注意が必要です。整数どうしの割り算では、小数を切り捨てた商を使う場合と、余りを使う場合があります。
どちらを指しているかは、問題文の説明や関数の名前で示されます。自分の思い込みで決めず、必ず定義を確かめてください。
商と余りの扱いに不安がある人は、こちらの記事が参考になります。
【関連記事】擬似言語の余り(剰余)と割り算がわからない人へ|偶数判定と桁の取り出しを解説
計算の順番は優先順位で決まる¶
一行の中に記号が複数並んでいると、どこから計算するのか迷います。ここには決まった順番があります。
基本は算数と同じです。掛け算と割り算が先で、足し算と引き算が後になります。
括弧があれば、その中がいちばん先です。迷ったときは、括弧の内側から外側へ順に片づけていけば間違えません。
演算子の種類まで含めた順番を、上から早い順に並べます。
| 順番 | 演算子 | 例 |
|---|---|---|
| 1 | 括弧の中 | (2 + 3) × 4 |
| 2 | not | not (x = 5) |
| 3 | × ÷ | 2 + 3 × 4 |
| 4 | + - | 2 + 3 |
| 5 | > ≧ = ≠ など | x + 1 > 5 |
| 6 | and | a > 1 and b > 1 |
| 7 | or | a > 1 or b > 1 |
注目してほしいのは、比較よりも算術のほうが先だという点です。x + 1 > 5 は、まず x + 1 を計算してから 5 と比べます。
そして比較よりも and や or が後にきます。だから a > 1 and b > 1 は、二つの比較をそれぞれ済ませてから、その結果を and でつなぐという読み方になります。
とはいえ、試験のコードでは親切に括弧が付いていることが多いです。順番を丸暗記するより、括弧を見つけて内側から潰す習慣を持つほうが実戦的でしょう。
一つだけ、優先順位より強い決まりがあります。矢印の右側は、どんなに長くても全部計算し終えてから左に入るという点です。
x ← a + b × 2 なら、b × 2 を求め、a を足し、その結果がまとめて x に入ります。途中の値が先に x へ入ることはありません。
代入でつまずきやすい二つの場面¶
仕組みが分かっても、実際の問題で手が止まる場所は決まっています。私が学習の相談を受けてきた範囲では、次の二つが目立ちました。
どちらも理屈を知れば防げるものです。順に見ていきましょう。
変数どうしの代入は中身のコピー¶
a ← b と書かれていたとき、a と b がつながったと考えてしまう人がいます。実際には、そうではありません。
このとき起きているのは、b の中身を写し取って a に入れる操作だけです。写したあとの二つは、完全に無関係になります。
○整数型: a, b
b ← 10
a ← b
b ← 99
三行目で b を 99 に変えても、a は 10 のままです。写真を撮ったあとで被写体が動いても、写真は変わらないのと同じでしょうか。
この動きを表で確かめておきます。行ごとに、二つの変数がどうなるかを追ってみてください。
| 実行する行 | a の値 | b の値 |
|---|---|---|
| 開始時 | 未定義 | 未定義 |
| b ← 10 | 未定義 | 10 |
| a ← b | 10 | 10 |
| b ← 99 | 10 | 99 |
最後の行に注目してください。a と b が別々の値になっています。
代入は、線をつなぐ操作ではなく、値を写す操作。この違いを押さえておけば、トレースで値を追うときに迷いません。
トレース表そのものの書き方をまだ固めていない人は、こちらを先に読んでおくと効きます。
【関連記事】擬似言語のトレース表の書き方|科目Bで変数の値を追う手順を解説
値の交換には一時変数がいる¶
もう一つの典型が、二つの変数の中身を入れ替える処理です。整列の問題では必ずと言っていいほど出てきます。
素直に a ← b、b ← a と書きたくなりますが、これでは失敗します。一行目で a の値が b で上書きされてしまい、元の a が消えてしまうからです。
そこで、値を一時的に預けておく変数を用意します。
○整数型: a ← 3, b ← 7
○整数型: tmp
tmp ← a /* a の値を預ける */
a ← b /* a に b を入れる */
b ← tmp /* 預けた値を b に入れる */
三行で一往復する形になります。両手がふさがっているときに、片方を一度机に置くのと同じ動きです。
この三行の並びは、科目Bで空欄になりやすい場所でもあります。順番を入れ替えた選択肢が用意されていることも珍しくありません。
見分け方は簡単です。最初の行で預けている変数が、最後の行で使われているかどうかを確かめてください。
交換の処理が実際にどう使われるかは、整列の記事で具体的に扱っています。
【関連記事】擬似言語の整列(ソート)がわからない人へ|選択ソートと交換処理の読み方を解説
実際に動かして矢印の動きを見る¶
代入は、読むだけだと実感が持ちにくい分野です。値が書き換わる瞬間は、自分の目で見たときにいちばん納得できます。
まずは x ← 3、x ← x + 1 という二行だけを動かしてみてください。数十秒で終わりますが、右側を先に計算するという感覚がそのまま残ります。
Giji Academy の擬似言語シミュレーターなら、変数の中身が一行ごとに変わっていく様子を追いながら処理を確かめられます。交換の三行も、預けた値が戻ってくる動きをそのまま画面で見られます。
集計の処理は代入の繰返しでできています。動きを見たあとに読むと、理解が進みます。
【関連記事】擬似言語の合計・最大値・件数の求め方|科目Bで頻出の集計パターンを解説
まとめ¶
最後に、この記事で確認したことを振り返ります。
擬似言語の代入は左向きの矢印で書き、右側を計算し終えてから左の変数に入れます。x ← x + 1 は等式ではなく、古い値に 1 を足して入れ直す操作でした。
代入と比較はまったく別物です。矢印なら変数の中身が変わり、等号なら true か false が返ります。
演算子は算術、比較、論理の三種類に分けて覚えると整理しやすくなります。結果が数値なのか真偽なのかを意識してください。
計算の順番は、括弧の中、算術、比較、and、or という流れで進みます。迷ったら括弧の内側から潰していけば大丈夫です。
変数どうしの代入は中身のコピーで、写したあとの二つは無関係になります。値を交換したいときは、一時変数を挟んだ三行が必要でした。
なお、矢印と等号の読み違いは、書き写しの誤りとも重なりやすい場所です。見直しの手順は、こちらにまとめてあります。
【関連記事】擬似言語でケアレスミスが多い人へ|よくある間違いと確認方法
矢印の意味が体に入ると、擬似言語のコードは一行ずつ落ち着いて読めるようになります。今日の一問から、矢印を見つけたら右側を先に計算する癖をつけてみてください。