試験にプログラムが出るって聞いて焦っています。プログラミングなんてやったことないです…。
大丈夫。試験で出るのは擬似言語という、日本語まじりの読みやすい書き方なんだ。書く必要はなくて、上から1行ずつ読んで、変数の値を追いかけることができれば解けるよ。
擬似言語とは
擬似言語 は、特定のプログラミング言語に依存せず、処理の手順(アルゴリズム)を表すための書き方です。IPAが記述形式を定めていて、試験問題ではその形式で書かれたプログラムが出題されます。
覚えるべき書き方はそれほど多くありません。主なものを表にまとめます。
| 記述形式 | 意味 |
|---|---|
○手続名又は関数名 | 手続・関数を宣言する |
型名: 変数名 | 変数を宣言する(例:整数型: x) |
/* 注釈 */ | 注釈(説明のメモ。処理には関係しない) |
変数名 ← 式 | 右の式の値を、左の変数に代入する |
if (条件式) 〜 elseif 〜 else 〜 endif | 条件によって処理を選ぶ(選択処理) |
while (条件式) 〜 endwhile | 条件を満たす間くり返す(前判定繰返し) |
do 〜 while (条件式) | 1回実行してから条件を調べ、満たす間くり返す(後判定繰返し) |
for (制御記述) 〜 endfor | 制御記述に従ってくり返す |
return 式 | 関数の結果として値を返す |
演算子は、算数と同じ + − × ÷ のほか、%(割り算の余り)、比較の = ≠ < ≦ > ≧、論理演算の and・or・not が使われます。
変数と代入:名前付きの箱に入れる
変数 は、値を入れておく 名前付きの箱 です。整数型: x は「整数を入れる x という箱を用意する」という意味です。
← は 代入 で、「右側を計算して、その結果を左の箱に入れる」という意味です。
代入すると 前の値は上書きされて消える。2つの変数の値を入れかえる問題では、途中で値が消えないよう、別の変数に一時的に避難させる(または足し引きを工夫する)書き方が出てくる。
選択処理(if)
if (点数 ≧ 80)
評価 ← "A"
elseif (点数 ≧ 60)
評価 ← "B"
else
評価 ← "C"
endif
上の条件から順に 調べ、最初に当てはまったところだけを実行して endif へ抜けます。点数が85なら最初の条件で “A” に決まり、2つ目の条件は調べません。
繰返し処理(while・do〜while・for)
while:前判定
while (条件式) は、先に条件を調べ、満たしている間だけ中の処理をくり返します。最初から条件を満たさなければ、1回も実行されません。
do 〜 while:後判定
do で始まる書き方は、先に1回処理してから 条件を調べます。そのため、最低1回は必ず実行 されます。
for:回数を決めてくり返す
for (i を 1 から 5 まで 1 ずつ増やす)
合計 ← 合計 + i
endfor
i を 1、2、3、4、5 と変えながら中の処理を5回くり返します。「2 ずつ増やす」なら 1、3、5 の3回です。
| 書き方 | 条件を調べるタイミング | 最低の実行回数 | 向いている場面 |
|---|---|---|---|
| while | 処理の前(前判定) | 0回 | 終わる条件はわかるが、回数がわからない |
| do 〜 while | 処理の後(後判定) | 1回 | 少なくとも1回は実行したい |
| for | 毎回、変数の値で判断 | 0回 | くり返す回数が決まっている |
配列:番号付きの箱の列
配列 は、同じ型の箱をまとめて番号を付けたものです。整数型の配列: a ← {7, 2, 9} なら、a[1]=7、a[2]=2、a[3]=9 です。
要素番号が 0から始まるか1から始まるか は、問題文に書かれる。「配列の要素番号は1から始まる」とあれば、先頭は a[1]。必ず確認しよう。
関数:処理をまとめて名前を付ける
よく使う処理は、関数 としてまとめて名前を付けられます。return で結果を呼び出し元に返します。
○整数型: 合計(整数型の配列: data)
整数型: total ← 0
整数型: i
for (i を 1 から dataの要素数 まで 1 ずつ増やす)
total ← total + data[i]
endfor
return total
合計({3, 5, 2}) と呼び出すと、data に {3, 5, 2} が渡され、3 + 5 + 2 = 10 が返ってきます。
トレース:表を書きながら読む
擬似言語の問題は、変数ごとに列を作った表(トレース表) を書きながら1行ずつ追うのが確実です。
整数型: n ← 13
整数型: k ← 0
while (n ≧ 4)
n ← n − 4
k ← k + 1
endwhile
| 判断時の n | n ≧ 4 ? | 処理後の n | 処理後の k |
|---|---|---|---|
| 13 | 満たす | 9 | 1 |
| 9 | 満たす | 5 | 2 |
| 5 | 満たす | 1 | 3 |
| 1 | 満たさない → 終了 |
結果は n = 1、k = 3。13 ÷ 4 の 商が k、余りが n になる処理です。
何をするプログラムなのか、最初からわかるようになりますか?
最初は無理にわからなくていいんだ。具体的な数字でトレースしてみると、あとから「あ、割り算をしているのか」と気づくことが多いよ。慣れるまでは表を書くのが一番の近道。
試験に出るポイント
←は代入。右辺を計算してから左の変数に入れる。前の値は上書きされるif 〜 elseif 〜 else 〜 endifは上から順に調べ、当てはまった1つだけ実行whileは前判定(0回もありうる)、do 〜 whileは後判定(最低1回実行)forは変数の最後の値まで実行するか(「まで」は含む)を確認- 配列の要素番号が 0始まりか1始まりか は問題文で確認
- 迷ったら トレース表 を書いて1行ずつ追う