基本情報の擬似言語の読み方を短い例で解説

基本情報の擬似言語対策として学習机でアルゴリズムを勉強している様子

基本情報の擬似言語は、記号を短い日本語に置き換え、値が変わる順番を追って読みます。「x ← x + 1」なら、今のxに1を足して、その結果をxへ入れ直す処理です。数学の等式として読まないことが最初のポイントになります。

この記事では、IPAが定める記法をもとに、代入、整数除算と剰余、条件分岐、ループ、配列、関数を短い例で確認します。例は読み方を確かめるために作成したもので、IPAの試験問題の転載ではありません。コードのすぐ後に答えと理由を載せているので、自分で予想してから読み進めてください。

この記事のポイント
  • 代入と比較の記号を区別して読める
  • 割り算の商と余りを問題文の指定どおりに求められる
  • ループの回数と配列の参照位置を確認できる
  • 関数に渡す値と返される値を区別できる
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

基本情報の擬似言語の記法を読む

擬似言語の記法とフローチャートを学ぶ教材

公式の記述形式と問題文を確認する

擬似言語は、アルゴリズムを表現するための試験用の記法です。PythonやJavaの文法へ置き換えて覚えるより、IPAの記述形式と、その問題に付いている注記を基準に読みましょう。

基本となる資料は、IPAの「試験で使用する情報技術に関する用語・プログラム言語など」Ver.5.1別紙2です。PDFの6〜7ページに、基本情報技術者試験・応用情報技術者試験用の記法がまとまっています。ITパスポート試験用の別紙1と取り違えないでください。

問題文には、変数の型、配列の開始番号、関数の戻り値、クラスやメソッドの説明などが載っています。いきなりプログラム本文に飛び込むと迷いやすいので、まず問題文の仕様を読んで「入力」「処理」「出力」を分けるのがおすすめです。何を受け取り、何を計算し、何を返すプログラムなのかが見えると、空欄補充や戻り値の問題も解きやすくなります。

公式の記述形式は、問題文に特別な注記がない場合の基準です。添字の始まり、除算の扱い、独自の演算子や関数の働きは、その問題の説明を先に確認します。

宣言と代入と比較を区別する

「整数型: x」は、整数を入れる変数xの宣言です。「←」は代入を表し、右側の式を今の値で計算してから左側へ入れます。条件式の「=」は等しいかどうかの比較で、値を書き換える処理ではありません。

整数型: x ← 4
整数型: y ← x
x ← x + 3

答えはxが7、yが4です。2行目でyへ渡るのは、その時点のxの値である4です。3行目でxが7になっても、yへもう一度代入していないので、yは4のままです。

スクロールできます
記法この例での読み方
整数型: x ← 4変数xを宣言し、初期値4を入れる
y ← x現在のxの値をyへ入れる
x ← x + 3更新前のxに3を足し、xを上書きする
x = 7現在のxが7と等しいか比較する

初期値が書かれていない変数を、勝手に0として計算しないことも大切です。公式資料では、値が格納されていない状態を「未定義」としています。問題文で初期値や代入の順番を確かめてから、その値を使います。

整数除算と剰余は注記を読む

「÷」は除算、「mod」は剰余算を表します。剰余は割り算の余りです。ただし、公式別紙2には、整数同士の「÷」を常に切り捨てるという規則は示されていません。「整数型だから自動的に小数部分が落ちる」と決めつけず、問題文の指定を確認してください。

次の例では、nは0以上の整数とし、「÷」は商の小数部分を切り捨てた整数を返すものとします。これは、この例に付けた条件です。

青い玉を5個ずつ3つの器に分け、残り2個を外に置いた整数除算と剰余のイメージ
整数型: n ← 17
整数型: q ← n ÷ 5
整数型: r ← n mod 5

答えはqが3、rが2です。17個を5個ずつ分けると3組でき、2個余ります。3 × 5 + 2 = 17と元の数へ戻せることでも確認できます。qは商、rは余りなので、二つを取り違えないようにしましょう。

たとえば、n mod 2 = 0ならnは2で割り切れます。整数の偶数・奇数の判定では、このように余りを使います。一方、通常の割り算としての17 ÷ 5は3.4です。切捨ての指定がある例と、通常の除算を混ぜて読まないでください。

「div」など、別の記号の意味が問題文で定義される場合もあります。IPAの科目Aサンプル問題セットの問2では、divを商の整数部分として定義しています。別の問題の定義を、そのまま持ち込まないようにしましょう。

ifと論理演算で進む先を決める

分岐した道路の一方へ進む車で条件分岐を表したイメージ

if、elseif、elseがつながる処理では、上から条件を確かめ、最初に真になった枝だけを実行します。その後のelseifやelseの処理を続けて実行するわけではありません。

整数型: score ← 75
文字列型: result
if (score ≧ 80)
  result ← "A"
elseif (score ≧ 60)
  result ← "B"
else
  result ← "C"
endif

答えはresultが「B」です。75 ≧ 80は偽、75 ≧ 60は真なので、2番目の枝へ進みます。scoreが80なら最初の枝で「A」になり、2番目の条件は評価しません。「80以上」と「80より大きい」では、80の扱いが変わる点にも注意してください。

スクロールできます
記号意味具体例
and両方の条件が真なら真(score ≧ 60) and (score < 80)は、60以上80未満
or少なくとも一方が真なら真(score < 0) or (score > 100)は、0〜100の範囲外
not真と偽を反転するnot (score ≧ 60)は、60以上ではない

公式の優先順位では、andをorより先に扱います。ただし、条件のまとまりを読み違えそうなら、頭の中でかっこを補って確認すると整理しやすいです。たとえば「A or B and C」は「A or (B and C)」と読みます。

基本情報の擬似言語を短い例で確かめる

ノートにトレース表を書いて擬似言語を練習している様子

forは値の範囲と増減を確認する

forの制御記述には、どの変数を、どこからどこまで、いくつずつ変えるかが書かれています。回数を先に決めつけず、実際に使われる値を並べてみましょう。次は、1から3まで1ずつ増やす例です。

整数型: i
整数型: sum ← 0
for (i を 1 から 3 まで 1 ずつ増やす)
  sum ← sum + i
endfor

答えはsumが6です。中の処理はiが1、2、3の3回実行されます。sumは0から始まり、1を足して1、2を足して3、3を足して6になります。「3まで」を読み落として、iが2の時点で止めないようにしてください。

増分が2なら、使う値の並びも変わります。「iを1から5まで2ずつ増やす」なら1、3、5です。「5から1まで1ずつ減らす」なら5、4、3、2、1です。開始値・終値・増減をひとまとまりで読みます。

whileとdoの判定位置を比べる

whileは、処理の前に条件を調べる前判定の繰り返しです。最初から条件が偽なら、中の処理は一度も実行しません。

整数型: x ← 3
while (x < 3)
  x ← x + 1
endwhile

答えはxが3のままです。最初の判定で3 < 3が偽になるため、代入行を実行せずに抜けます。whileの条件は「終わる条件」ではなく、繰り返しを続ける条件として読んでください。

一方、doから始まる後判定の形では、処理をしてから条件を調べます。同じ初期値と条件でも結果が変わります。

整数型: x ← 3
do
  x ← x + 1
while (x < 3)

こちらの答えはxが4です。先に3へ1を足し、その後で4 < 3を調べるため、1回実行して終了します。IPAのdo〜whileも条件が真の間繰り返す形です。「条件が真になったら終了する」と逆に読まないようにしましょう。

スクロールできます
形条件を調べる位置上の例の実行回数
while〜endwhile処理の前0回
do〜while処理の後1回

配列の添字と値を分けて読む

配列は複数の値を番号で管理する仕組みです。「data[i]」のiが添字で、data[i]がその番号にある値です。添字の開始位置は問題文で確認します。次の例では、配列の要素番号は1から始まるものとします。

整数型の配列: data ← {4, 7, 2}
整数型: i ← 2
data[i] ← data[i] + 1

答えはdataが{4, 8, 2}です。iは2なので、使う場所はdata[2]です。そこにある7へ1を足して8へ更新します。i自体に1を足しているわけではなく、dataの3番目を書き換えているわけでもありません。

次に、配列とforを組み合わせてみます。ここでも要素番号は1から始まり、dataは{4, 7, 2}とします。

整数型: i
整数型: sum ← 0
for (i を 1 から dataの要素数 まで 1 ずつ増やす)
  sum ← sum + data[i]
endfor

答えはsumが13です。足すのは添字の1、2、3ではなく、それぞれの場所の値である4、7、2です。4 + 7 + 2 = 13になります。前の更新例を実行した後の配列ではなく、ここで指定し直した{4, 7, 2}を使うことにも注意してください。

二次元配列では、要素番号を行、列の順に指定します。次の例も行番号・列番号は1から始まるものとします。

二行三列に並んだ区画の左下を指して二次元配列の参照位置を示すイメージ
整数型の二次元配列: matrix ← {{2, 4, 6}, {8, 10, 12}}
スクロールできます
行と列1列目2列目3列目
1行目246
2行目81012

matrix[2, 1]は8、matrix[1, 2]は4です。どちらも添字に1と2を使いますが、順番が違うので別の場所を指します。内側の波かっこ一組が1行分だと読めば、表へ置き換えやすくなります。

関数は引数と戻り値を分ける

関数が出てくる問題では、「何を受け取って、何を返すか」を最初に確認します。引数は関数へ渡す入力、戻り値は呼出し元へ返す答えです。「○」から始まる宣言と、関数名に値を渡す呼出しを区別しましょう。

○整数型: addOne(整数型: n)
  return n + 1

この関数を次のように呼び出します。

整数型: a ← 4
整数型: b ← addOne(a)

答えはaが4、bが5です。addOneへ4を渡し、関数内のnを4として計算すると、returnで5が返ります。その5をbへ入れます。この例にはaを書き換える処理がないので、aは4のままです。配列やオブジェクトを扱う関数の変更範囲は、その問題の仕様で確認してください。

関数の中では、returnが出てきた時点でその関数の処理が終わります。途中でreturnする問題では、最後の行まで読まなくても処理が終わるケースがあります。条件分岐の中にreturnがある場合は、どの条件に入ったときにどの値が返るのかを表にすると整理しやすいです。

「obj.next」のようなドットは、公式別紙2ではメンバ変数やメソッドへのアクセスを表します。nextという名前だけで働きを決めず、問題文で示されるクラスやメソッドの説明を確認します。再帰や複雑なデータ構造へ進む前に、まず短い関数で入出力を区別できれば十分です。

基本情報の擬似言語を読めたか確認する

擬似言語の変数を追うトレース表のイメージ

読み終えたら、次の問いを答えを見ずに確かめてみてください。計算を速くするよりも、どの記法を根拠に答えを決めたか説明できることを目標にします。

スクロールできます
確認すること答えと根拠
xが4のとき、x ← x + 3の後のxは?7。更新前の4に3を足して代入する
整数の商を返す指定の17 ÷ 5と17 mod 5は?商は3、余りは2。3 × 5 + 2で17に戻る
xが3のとき、while (x < 3)の本体は何回動く?0回。処理の前に条件が偽になる
要素番号が1から始まる{4, 7, 2}のdata[2]は?7。添字2と、その場所の値7を分けて読む
addOne(4)の戻り値は?5。return n + 1をnが4として計算する

値の変化を紙へ整理する方法を詳しく知りたい場合は、基本情報のトレース表の書き方へ進んでください。記法を読めるようになった後、探索や整列などの問題へ広げる順番は、基本情報技術者試験のアルゴリズム対策で確認できます。

公式の出題形式へ進むなら、IPAの科目Bサンプル問題や、科目Bサンプル問題セットを使えます。自分で値を追った後に、公式の解答と照合しましょう。

演習教材を選ぶときは、答えだけでなく、途中の値や条件の判定理由まで確認できるかを見てください。比較の観点は、基本情報技術者試験の科目B参考書の選び方にまとめています。

※本記事には広告リンクが含まれます。

科目Bの演習教材を確認する

記法を読んだ後は、自分で値を追う演習へ進みましょう。リンク先は別タブのAmazonで開きます。購入前に版と科目Bの掲載範囲をご確認ください。

科目B対策本を見る →

アプリで演習を続けるなら、基本情報の過去問アプリも確認できます。まずは今回の短い例を読み直し、代入、条件、添字、戻り値のどこで迷ったかを一つずつ確かめてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

コメントする

目次