コンテンツにスキップ

疑似コードとDNCLの読み方

指導者向けの公開補足

学習本文に加えて、指導の視点・背景・授業での確かめ方を示します。どなたでも読めます。

指導の焦点

擬似コードの規則を最初に読む。添字の開始、代入記号、反復の範囲が、普段使う言語と同じとは限らない。表記の違いと、手順の意味の違いを分ける。

一歩踏み込んだ背景

DNCL等の表記は出題や資料の仕様に依存する。特定の試験年度の規則を扱うときは、公開された最新の定義に照らして説明する。

授業での確かめ方

短い処理を値の追跡表にしてから、JavaScriptへ書き換える。記号の置換だけでなく、範囲の端を含むかと添字の違いを説明させる。

制度・規格等は本文末尾の参考資料も確認してください。

JSFiddleでコードを試す

JSFiddleは、ブラウザーでHTML・CSS・JavaScriptを入力して実行できるサービスです。短い動作確認から始められます。

  1. 新しい編集画面を開きます。JavaScriptは通常のJavaScriptを選び、外部ライブラリは追加しません。
  2. HTML欄にはページの本文、CSS欄には見た目、JavaScript欄には処理を書きます。HTML欄に<html>や<body>は不要です。JavaScript欄に<script>は付けません。
  3. DOMを使う例では、JavaScriptの実行タイミングを「On Load」「On DOM Ready」または「No wrap - bottom of body」にします。
  4. 「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の両方を載せた実習例は、この表示用コードで囲まず、それぞれの欄へ分けて貼り付けます。保存・共有時は公開範囲を確認し、個人情報やパスワードを入力しないでください。コードは手元にも残しましょう。

NAS・GitHub・CodePenなど、作業環境の選び方

この単元でできるようになること

Section titled “この単元でできるようになること”
  • 疑似コードを、表記上の約束を確認しながら読める。
  • 代入と等価比較、添字と位置の違いを説明できる。
  • 同じ手順を疑似コードとJavaScriptで対応させられる。

疑似コードは、手順を伝える表現

Section titled “疑似コードは、手順を伝える表現”

疑似コードは、特定の実行環境の細かい文法に縛られず、アルゴリズムを伝えるための記述である。自然な文章より処理のまとまりが明確で、実際のプログラムより考え方へ集中しやすい。流れ図が矢印と図形で表すのに対し、疑似コードは文章や式、字下げを使って順序を表すことが多い。

DNCLは、情報分野の試験資料などでも用いられてきた手順記述の例である。ただし、疑似コード全体に共通する唯一の文法があるわけではない。資料や問題によって配列の添字、反復、表示、除算の約束が異なることがある。その問題で定められた規則を優先して読む必要がある。

このページでは、特定年度の試験用仕様を完全に再現するのではなく、表現に依存せず処理を読む練習をする。以下の疑似コードは自作の教材表記であり、JavaScriptのようにそのまま実行するコードではない。

表記や規則 このページでの意味 確認する理由
左向き矢印 右辺を計算して左辺へ代入 数学の等式と区別する
「が等しい」 二つの値の一致を比較 代入と取り違えない
配列の最初の添字 1 JavaScriptの零始まりと異なる
「1から4まで」 両端を含めて一つずつ増加 終了値を含むかで回数が変わる
字下げ 反復や分岐に含まれる範囲 表示回数や更新順を決める

架空の読み聞かせ会で、四回の参加人数を記録した。各回の人数の合計と、八人以上だった回の数を求める。「八人を超えた回」ではなく「八人以上の回」であることに注意しよう。

人数の合計と条件を満たす回数
人数 ← [6, 8, 5, 9]
合計 ← 0
多い回数 ← 0
iを1から4まで一つずつ増やして繰り返す:
合計 ← 合計 + 人数[i]
もし 人数[i] が 8 以上 なら:
多い回数 ← 多い回数 + 1
合計と多い回数を表示する

最初は添字1の六人を加え、八人以上ではないので件数は増やさない。添字2では八人を加え、件数を一増やす。四回を終えると、合計は二十八人、条件を満たす回数は二回となる。「合計」は人数の累積、「多い回数」は条件を満たした要素の個数で、単位が異なる。

処理後の添字 取り出した人数 合計 多い回数
1 6 6 0
2 8 14 1
3 5 19 1
4 9 28 2
疑似コードと同じ手順を実行する
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 情報分野で用いられる手順記述の一例
代入 右辺の結果を左辺の変数などへ設定すること
字下げ 処理のまとまりを見やすく示す配置
トレース 実行順に値の変化を追って記録すること
  1. 条件を「八人を超える」に変えると、多い回数はいくつになるか。
  2. JavaScriptの反復を添字1から始めるだけの変更にすると、どの記録を読み飛ばすか。
  3. 二つの表記が同じ手順だと確かめるため、添字の数字そのもの以外に何を比較すべきか。
問1の解答例を見る

1回。条件を8以上から8を超えるにすると、[6,8,5,9]のうち9だけが数えられる。

問2の解答例を見る

添字0の最初の記録6を読み飛ばす。JavaScriptの配列は添字0から始まるため、単に1へ変えると一件目を処理できない。

問3の解答例を見る

各回で読む値、その順序、条件判定、変数の更新、最終的な合計や件数を比べる。表記によって添字の始まりが違っても、同じ記録を同じ手順で処理していれば対応を確かめられる。