疑似コードとDNCLの読み方
指導者向けの公開補足
学習本文に加えて、指導の視点・背景・授業での確かめ方を示します。どなたでも読めます。
指導の焦点
擬似コードの規則を最初に読む。添字の開始、代入記号、反復の範囲が、普段使う言語と同じとは限らない。表記の違いと、手順の意味の違いを分ける。
一歩踏み込んだ背景
DNCL等の表記は出題や資料の仕様に依存する。特定の試験年度の規則を扱うときは、公開された最新の定義に照らして説明する。
授業での確かめ方
短い処理を値の追跡表にしてから、JavaScriptへ書き換える。記号の置換だけでなく、範囲の端を含むかと添字の違いを説明させる。
制度・規格等は本文末尾の参考資料も確認してください。
JSFiddleでコードを試す
JSFiddleは、ブラウザーでHTML・CSS・JavaScriptを入力して実行できるサービスです。短い動作確認から始められます。
- 新しい編集画面を開きます。JavaScriptは通常のJavaScriptを選び、外部ライブラリは追加しません。
- HTML欄にはページの本文、CSS欄には見た目、JavaScript欄には処理を書きます。HTML欄に
<html>や<body>は不要です。JavaScript欄に<script>は付けません。 - DOMを使う例では、JavaScriptの実行タイミングを「On Load」「On DOM Ready」または「No wrap - bottom of body」にします。
- 「Run」を押してResult欄を確認します。書き換えたら再びRunを押します。
console.logの結果は通常、ページではなく開発者ツールのコンソールに出ます。このサイトの計算例をResult欄で読みたいときは、HTML欄に次を入れます。
<pre id="output"></pre>JavaScript欄には次を入れ、console.log(2 + 3);の行を、試したいコード一つに置き換えます。独立した例を複数まとめて貼らないでください。
{
const output = document.getElementById("output");
const console = {
log(...values) {
output.textContent += values.join(" ") + "\n";
}
};
console.log(2 + 3);
}Runを押すと「5」と表示されます。外側の波括弧の中だけで表示用のconsoleを用意しているため、ブラウザー本来のコンソールは変更しません。
HTMLとJavaScriptの両方を載せた実習例は、この表示用コードで囲まず、それぞれの欄へ分けて貼り付けます。保存・共有時は公開範囲を確認し、個人情報やパスワードを入力しないでください。コードは手元にも残しましょう。
この単元でできるようになること
Section titled “この単元でできるようになること”- 疑似コードを、表記上の約束を確認しながら読める。
- 代入と等価比較、添字と位置の違いを説明できる。
- 同じ手順を疑似コードとJavaScriptで対応させられる。
疑似コードは、手順を伝える表現
Section titled “疑似コードは、手順を伝える表現”疑似コードは、特定の実行環境の細かい文法に縛られず、アルゴリズムを伝えるための記述である。自然な文章より処理のまとまりが明確で、実際のプログラムより考え方へ集中しやすい。流れ図が矢印と図形で表すのに対し、疑似コードは文章や式、字下げを使って順序を表すことが多い。
DNCLは、情報分野の試験資料などでも用いられてきた手順記述の例である。ただし、疑似コード全体に共通する唯一の文法があるわけではない。資料や問題によって配列の添字、反復、表示、除算の約束が異なることがある。その問題で定められた規則を優先して読む必要がある。
このページでは、特定年度の試験用仕様を完全に再現するのではなく、表現に依存せず処理を読む練習をする。以下の疑似コードは自作の教材表記であり、JavaScriptのようにそのまま実行するコードではない。
この教材で使う約束
Section titled “この教材で使う約束”| 表記や規則 | このページでの意味 | 確認する理由 |
|---|---|---|
| 左向き矢印 | 右辺を計算して左辺へ代入 | 数学の等式と区別する |
| 「が等しい」 | 二つの値の一致を比較 | 代入と取り違えない |
| 配列の最初の添字 | 1 | JavaScriptの零始まりと異なる |
| 「1から4まで」 | 両端を含めて一つずつ増加 | 終了値を含むかで回数が変わる |
| 字下げ | 反復や分岐に含まれる範囲 | 表示回数や更新順を決める |
合計と件数を同時に求める
Section titled “合計と件数を同時に求める”架空の読み聞かせ会で、四回の参加人数を記録した。各回の人数の合計と、八人以上だった回の数を求める。「八人を超えた回」ではなく「八人以上の回」であることに注意しよう。
人数 ← [6, 8, 5, 9]合計 ← 0多い回数 ← 0iを1から4まで一つずつ増やして繰り返す: 合計 ← 合計 + 人数[i] もし 人数[i] が 8 以上 なら: 多い回数 ← 多い回数 + 1合計と多い回数を表示する最初は添字1の六人を加え、八人以上ではないので件数は増やさない。添字2では八人を加え、件数を一増やす。四回を終えると、合計は二十八人、条件を満たす回数は二回となる。「合計」は人数の累積、「多い回数」は条件を満たした要素の個数で、単位が異なる。
| 処理後の添字 | 取り出した人数 | 合計 | 多い回数 |
|---|---|---|---|
| 1 | 6 | 6 | 0 |
| 2 | 8 | 14 | 1 |
| 3 | 5 | 19 | 1 |
| 4 | 9 | 28 | 2 |
JavaScriptへ移すとき
Section titled “JavaScriptへ移すとき”const attendance = [6, 8, 5, 9];let total = 0;let busyCount = 0;for (let i = 0; i < attendance.length; i++) { total = total + attendance[i]; if (attendance[i] >= 8) { busyCount = busyCount + 1; }}console.log(total, busyCount);出力は 28 2。添字を零から始めるため、疑似コードの1~4はJavaScriptでは0~3になる。配列の内容を同じ順序で一回ずつ読むという対応を保っており、文字を一つずつ置き換えただけではない。疑似コードの添字のまま1~4を使うと、最初を飛ばし、最後に存在しない要素を読んでしまう。
字下げは人が範囲を読み取る手掛かりになるが、JavaScriptでは波括弧も範囲を表す。表示を反復の中へ移すと、四回分の途中結果が出る。最終結果を一回だけ表示するという目的まで含めて、範囲を対応させよう。
読解は、名前の推測より状態の追跡
Section titled “読解は、名前の推測より状態の追跡”空欄を埋める問題でも、変数名の印象だけで判断しない。初期値、更新される場所、利用される場所の順に調べれば、値の役割が分かる。たとえば零で始まり、条件が真のときだけ一ずつ増える変数は、合計金額ではなく件数を数えている可能性が高い。最後は具体的な入力で確認する。
除算や余りも表記の確認が必要だ。整数同士を割ったときに小数を残すのか、商だけを使うのかで、箱数や中央位置の計算が変わる。また負の数が含まれると、切り捨ての方向の違いも結果へ影響する。この教材では、そのような処理は明記せずに推測しない。
注意: 疑似コードは「曖昧でもよいコード」ではない。目的に必要な範囲、更新順、終了条件は正確に伝える。試験や別資料を読むときは、このページの一始まりの約束を勝手に持ち込まず、その資料の定義を確認しよう。
| 用語 | 意味 |
|---|---|
| 疑似コード | 手順を伝えるための、特定言語に強く依存しない記述 |
| DNCL | 情報分野で用いられる手順記述の一例 |
| 代入 | 右辺の結果を左辺の変数などへ設定すること |
| 字下げ | 処理のまとまりを見やすく示す配置 |
| トレース | 実行順に値の変化を追って記録すること |
- 条件を「八人を超える」に変えると、多い回数はいくつになるか。
- JavaScriptの反復を添字1から始めるだけの変更にすると、どの記録を読み飛ばすか。
- 二つの表記が同じ手順だと確かめるため、添字の数字そのもの以外に何を比較すべきか。
問1の解答例を見る
1回。条件を8以上から8を超えるにすると、[6,8,5,9]のうち9だけが数えられる。
問2の解答例を見る
添字0の最初の記録6を読み飛ばす。JavaScriptの配列は添字0から始まるため、単に1へ変えると一件目を処理できない。
問3の解答例を見る
各回で読む値、その順序、条件判定、変数の更新、最終的な合計や件数を比べる。表記によって添字の始まりが違っても、同じ記録を同じ手順で処理していれば対応を確かめられる。