共通テスト用の手順記述標準言語(DNCL)~擬似プログラミング言語~について動画解説
2025年からの情報Ⅰ共通テストのDNCLについては、以下のブログ記事をご覧ください(この記事は、旧DNCLの内容になります)
旧DNCL
※訂正:一部変数「goukei」と「gokei」が混在していますが「gokei」と読み替えてください。(ダウンロード資料は訂正済)
情報Ⅰ共通テスト対策 書籍出版します!
◆資料ダウンロード(旧DNCL)◆
https://toppakou.com/info1/download/98_大学入学共通テスト/DNCL/令和3年版_共通テスト手順記述標準言語DNCL.pptx
情報教育の底上げが目的なので、資料を修正して、学校・塾(営利目的含む)の授業等で利用して頂いて問題ありません。
私への連絡不要ですが、利用する際には、YouTubeチャンネル・情報Ⅰ動画教科書・IT用語動画辞典を紹介してもらえると嬉しいです。
文字おこし(旧DNCL)
今回は、情報 大学入学共通テスト対策として
共通テスト用の手順記述標準言語(DNCL)いわゆる擬似プログラミング言語の説明をしていきます。
2022年度高校入学生から情報Ⅰの科目が必修化され、プログラミング、データ活用、ネットワーク・セキュリティなど幅広い分野を学びます。
また、2025年の大学入学共通テストに情報の教科が加わります。
各高校で習うプログラミング言語は各高校で選択され、Python、JavaScript、VBAなどバラバラです。
大学入学共通テストでもプログラミングの問題が出題されます。
ただ、高等学校におけるアルゴリズムやプログラムに関する教育では,今話したように採用されるプログラミング言語は多様で,プログラミングの実習時間も異なります。
このような事情を配慮し、共通テスト用の手順記述標準言語(DNCL)いわゆる擬似プログラミング言語が使われます。
今回は、大学入試センターが出している、2021年1月版の共通テスト手順記述標準言語(DNCL) の説明 資料をパワーポイント動画にして説明していきます。
Pythonなど具体的なプログラミング言語の学習を一通り終了し、変数、配列などプログラミングの基礎は習得している前提で説明していきます。
現行の情報関係基礎についての説明資料なので、2025年の情報Ⅰ用の資料が発表され差分がある場合は改めて補足動画を作成します。
また、問題文の記述を簡潔にするなどの理由で,この説明文書の記述内容に従わない形式で出題されることもあります。問題文の中の説明や指示に注意し,それらに沿って解答してください。 と資料内では注意書きがあります。
―――
まず、変数と値について説明していきます。
変数名は,英字で始まる英数字と『_ 』の並びです。
特に指示がない限り、
・小文字で始まる変数は通常の変数を表します。
たとえばkosu などの変数名が該当します。
※この変数が使われているのは宝探しゲームなので、読みとしては、宝の「個数(コスウ)」が妥当ですが、今回はローマ字読みそのままで「コス」と読ませてもらいます。
アンダースコアを文字の途中に入れて、kosu_gokei という名前を付けることも可能です。
・大文字で始まる変数は配列を表します。
たとえばはじめが大文字のTokuten などの変数名が該当します。
・すべて大文字の変数は実行中に変化しない値を表します。一般的には定数と読んだりします。
配列についてもう少し詳しく見ていきます。配列の要素は、要素番号を添字で指定します。
添字の値は0以上の整数になります。
問題によっては1以上つまり1から始まる場合もあるので、問題文をよく読んで添字が何番から始まるかを確認してください。
一次元配列Tokutenの要素番号が0から始まる場合、Tokuten[2]を指定すると、3番目の43の値が取得できます。
仮に要素番号が1から始まる場合、Tokuten[2]を指定すると2番目の56の値がとれます。
2次元配列の場合は、添字をカンマで区切り、行と列の添字を指定します。
例えば、添字が0から始まる場合でGyoretu[3,2] の場合
4行、3列目の23の文字が取得できます。
つぎは数値の表し方で、数値は特に断らない限り, 10 進法で表します。
例えば100 や 99.999 は10進法になります。
文字列に関しては,文字の並びを『「』と『」』,または,『" 』
と『" 』でくくって表します。
例えば: 「見つかりました」
"It was found."のように表現します。
―――
つぎは数値や文字列や変数の値を表示する表示文について説明します。
表示文では,複数の値を表示する場合は『と』で区切って並べ,最後に『を表示する』と書きます。
例えば
「整いました」と表示する というプログラムは実行すると「整いました」と表示されます。
変数 kosuと「個見つかった」を表示する というプログラムで変数kosuに3が代入されているとすると。実行すると「3個見つかった」と表示されます。
"(" とx と"," とy と")" を表示する というプログラムで
x が5,y が−1 の時
「(5,-1)」と表示されます。
――
つぎは変数に値を設定する代入文について説明します。
『←』の左辺に変数または添字付きの配列を,右辺に代入する値を書きま
す。また,配列の各要素に同じ値をまとめて代入することや,他の配列の内容に置き換えることもできます。
例えば変数 kosuに3を代入する場合は
例: kosu ← 3
Tokuten配列の添字4に100を代入する場合は
例: Tokuten[4] ← 100
配列のすべての要素に纏めて同じ値を代入する場合は
例: Tokuten のすべての要素に0 を代入する のように表現することもできます。
Tokuten配列の1番目に87、2番目に45、3番目に72、4番目に100を代入する場合はこのよう波括弧の中に、代入したい値をカンマで区切って記述することもできます。
例: Tokuten ← {87, 45, 72, 100}
複数の代入文を,『, 』で区切りながら,横に並べることができます。
この場合は,代入文は左から順に実行されます。
例: kosu_gokei ← kosu,tokuten ← kosu× (kosu+ 1)
同じ変数に対する加算や減算を伴う代入(インクリメントやデクリメント)は,『~を~増やす』や『~を~減らす』によって表すこともできます。
例えば:『kosu を1 増やす』は『kosu ← kosu+ 1』と同じです。
例:『saihu をsyuppi 減らす』は『saihu ← saihu- syuppi』と同じです。
外部から入力された値を代入する表現方法として
例: x ←【外部からの入力】
のようにあらわすことができます。
――
つぎは算術演算について説明します。
加減乗除の四則演算は,『+』,『-』,『×』,『/ 』で指定します。
整数の除算では,商を『÷』で,余りを『%』で計算することができます。
例えば
atai ← 7 / 2 (atai には3.5 が代入されます。)
syo ← 7÷ 2 (syo には3 が代入されます。)
amari ← 10% 3 (amari には10を3で割った余りの1 が代入されます。)
複数の演算子を使った式の計算では,基本的に左側の演算子が先に計算されますが,『×』,『/ 』,『÷』,『%』は, 『+』,『-』より先に計算されます。
また,丸括弧『(』と『)』で式をくくって,演算の順序を明示することができます。
例: kosu ← 1+ kazu÷ 3 は, kazu÷3が先に計算され、1が加算されます。
kosu ← 1+ (kazu÷ 3) と同じです。
もし、1+kazuを先に計算したい場合は(1+kazu)÷3とします。
例: heikin ← (hidari+ migi)÷ 2 は, hidari+migiが先に計算されます。
heikin ← hidari+ migi÷ 2 はmigi÷2が先に計算されます。
平均を求める場合は前者の計算が正となります。
―――
つぎは比較演算について説明していきます。
数値の比較演算は,『=』,『≠』(あるいは『≠』),『>』,『≧』,『≦』,『<』で指定します。演算結果は,真か偽の値となります。
例: kosu > 3 (kosu が3 より大きければ真となります。)
例: ninzu× 2 ≦ 8 (ninzu の2 倍が8 以下であれば真となります。)
例: kaisu ≠ 0 (kaisu が0 でなければ真となります。)
文字列の比較演算は,『=』,『≠』)を利用することができます。
『=』は,左辺と右辺が同じ文字列の場合に真となり,
それ以外の場合は偽となります。『≠』(あるいは『≠』)は,左辺と右辺が異なる文字
列の場合に真となり,それ以外の場合(同じ文字列の場合)は偽となります。
例: 「あいうえお」=「あいうえお」(真となります。)
例: 「あいうえお」=「あいう」(偽となります。)
例: "ABC"="ABC" (真となります。)
例: "ABC"="abc" (偽となります。)
例: 「あいうえお」≠「あいうえお」(ノットイコールはイコールではないという意味で、この場合はあいうえおとあいうえおはイコールなので「偽」となります。)
例: 「あいうえお」≠「あいう」(あいうえおと、あいうはイコールではないので真となります。)
例: "ABC"≠"ABC" (偽となります。)
例: "ABC"≠"abc" (真となります。)
――――
つぎに論理演算について説明します。
論理演算は,真か偽を返す式に対する演算で,『かつ』,『または』,『でない』の演算子で指定します。
『〈式1〉かつ〈式2〉』は, 〈式1〉と〈式2〉の結果がいずれも真である場合に真となり,それ以外の場合は偽となります。
例: kosu ≧ 12 かつkosu ≦ 27 (kosu が12 以上27 以下なら真となります。)
『〈式1〉または〈式2〉』は, 〈式1〉と〈式2〉の結果のどちらかが真である場合に真となり,それ以外の場合は偽となります。
例: kosu% 2 = 0 またはkosu < 0 (kosuを2で割った余りが0となる数は偶数なのでkosu が偶数か負の値なら真となります。)
『〈式〉でない』は, 〈式〉の結果が真である場合に偽となり,偽の場合は真となります。
例: kosu > 75 でない(kosu が75 より大きくなければ真となります。)
論理演算子に優先順位はなく,左側の論理演算が先に実行されますが,丸括弧『(』と『)』で,演算の順序を指定することができます。
例: kosu > 12 かつkosu < 27 でないは,
左側の論理演算子が先に実行されます。
kosu > 12 かつ(kosu < 27 でない) は右側のカッコ内の論理演算子が先に実行されます。
――
つぎは制御文について説明していきます。
今から説明する、条件分岐文や条件繰返し文,順次繰返し文をまとめて制御文と呼びます。
まず条件分岐文について説明します。
条件分岐文は, 〈条件〉が成り立つかどうかによって,実行する処理を切り替えます。
〈条件〉が成り立つときにある処理を実行し,〈条件〉が成り立たないときに実行する処理がない場合は,『ならば』で指定します。
例えばこの処理をxが2、yが3の場合で追っていきます。
もし x < 3 ならば
x ← x+ 1
y ← y- 1
を実行する
条件は2<3が真となるので、字下げしている処理の中に入ります。
xは2なので 2+1で3がxに代入されます
次の処理でyは3なので3―1で2がyに代入されます。
〈処理〉が1 行しかない場合は,
もし〈条件〉ならば〈処理〉を実行する
と1行で書くこともできます。
例えば
もしx < 3 ならばx ← x+ 1 を実行する
のように表現します。
―――
〈条件〉が成り立つときにある処理を実行し,〈条件〉が成り立たないときに別の処理を実行する場合は,次のように『ならば』と『そうでなければ』を組み合わせて指定します。
もし〈条件〉ならば
〈処理1〉
を実行し,そうでなければ
〈処理2〉
を実行する
具体的な例を見ていきましょう
もし x < 3 ならば
x ← x+ 1
を実行し,そうでなければ
x ← x- 1
を実行する
たとえばxが1の場合x<3の条件が真となり 1+1で2がxに代入されます。
たとえばxが4の場合はx<3の条件は偽となり 4-1で3がxに代入されます。
改行位置によって実行結果が変わらないため,各処理が1 行で書ける場合には,このように書くこともあります。
例えば
もしx < 3 ならばx ← x+ 1 を実行し,
そうでなければx ← x- 1 を実行する
のように表現します。
条件分岐の中で複数の条件で実行する処理を切り替えたい場合は,次のように『ならば』と『そうでなければ』の間に『そうでなくもし』を使って条件を追加します。
もし〈条件 1〉ならば
〈処理1〉
を実行し,そうでなくもし〈条件 2〉ならば
〈処理2〉
を実行し,そうでなければ
〈処理3〉
を実行する
xが4、yが3の場合の例でみていきましょう。
はじめの条件は偽となるので次の判定で3>2に当てはまり
3+1でyに4が代入されます。
もし x = 3 ならば
x ← x+ 1
を実行し,そうでなくもし y > 2 ならば
y ← y+ 1
を実行し,そうでなければ
y ← y- 1
を実行する
改行位置によって実行結果が変わらないため,各処理が1 行で書ける場合には,次のように書くこともあります。
もし〈条件1〉ならば〈処理1〉を実行し,
そうでなくもし〈条件2〉ならば〈処理2〉を実行し,
そうでなければ〈処理3〉を実行する
例として
もしx = 3 ならばx ← x+ 1 を実行し,
そうでなくもしy > 2 ならばy ← y+ 1 を実行し,
そうでなければy ← y- 1 を実行する
のように表現することができます。
――
つぎは、条件繰返し文について説明します。
条件繰返し文には,「前判定」と「後判定」の2 種類があります。
まずは、前判定について説明します。
〈条件〉が成り立つ間, 〈処理〉を繰り返し実行します。
〈処理〉を実行する前に〈条件〉が成り立つかどうか判定されるため,〈処理〉が1 回も実行されないことがあります。
〈条件〉の間,
〈処理〉
を繰り返す
x < 10 の間,
gokei ← gokei+ x
x ← x+ 1
を繰り返す
こちらの例で実際に数値を当てはめてみていきます。
xの初期値は8とします、gokei変数の初期値は0とします
はじめは、8 <10 の条件を満たすので繰り返し処理に入ります。
gokei変数の0とxの8をプラスした8をxに代入します。
x+1した9をxに代入します。
はじめの条件判定に戻り 9<10は真となるので繰り返し処理に入ります。
gokei変数の8とxの9をプラスした17をxに代入します。
x+1した10をxに代入します。
はじめの条件判定に戻り、10<10は偽となるので、ループの処理を抜けます。
――
次に後判定の説明をしていきます。
後判定は、〈処理〉を実行した後に〈条件〉が成り立つかどうか判定されるため,条件に当てはまらない場合も、〈処理〉は少なくとも1 回は実行されます。
――
繰り返し,
gokei ← gokei+ x
x ← x+ 1
を,x ≧ 10 になるまで実行する
初期値として、変数gokeiを0 xを8とします。
条件に関係なく処理に入ります。
0+8で 8をgokeiに代入します。
xに1を足して9をxに代入します。
xが10以上ではないので、ループを繰り返します。
8+9で 17をgokeiに代入します。
xに1を足して10をxに代入します。
xが10以上になるのでループの処理を抜けます。
終了条件に当てはまるxが11の場合でも見ていきましょう。
0+11で 11をgokeiに代入します。
xに1を足して12をxに代入します。
xが10以上になるのでループの処理を抜けます。
このように、処理は少なくとも1回は実行されます。
―――
次に順次繰返し文について説明していきます。
順次繰返し文は, 〈変数〉の値を増やしながら, 〈処理〉を繰返し実行します。
手順1は〈変数〉に〈初期値〉が代入されます。
手順2は変数と終了値を比較し〈変数〉の値が〈終了値〉よりも大きければ,繰り返しを終了します。
手順3は 〈処理〉を実行し, 〈変数〉の値に〈差分〉を加え,手順2 に戻ります。
実際に値を当てはめて説明していきます。
――
x を 1 から 10 まで 1 ずつ増やしながら,
gokei ← gokei+ x
を繰り返す
gokeiの初期値は0とします。
まずxを1からとあるので、xに1代入します。10に達していないので
0+1で gokeiに1を代入します。
ループの初めに戻り、xを1増やして、2にします。
gokeiの1+2で3をgokeiに代入します。
これをxが10になるまで繰り返します。
いまは、差分ずつ増やしながらの処理でしたが
差分ずつ減らしながら繰り返すことも可能です。
例を見ていきましょう
gokeiの初期値は0とします。
x を 10 から 1 まで 1 ずつ減らしながら,
gokei ← gokei+ x
を繰り返す
まずxを10からとあるので、xに10を代入します。1に達していないので、ループの処理に入り
0+10でgokeiに10を代入します。
2ループ目はxを1減らして9を代入します。1に達していないので、ループの処理に入り
10+9でgokeiに19を代入します。
これをxが1になるまで繰り返します。
―――
最後に関数について説明します。
関数には値を返すものと値を返さないものがあります。関数の動作は,問題文の中で定義されます。
値を返す関数の問題文の例としては
• 指定された値の二乗の値を返す関数「二乗」を用意する
とあった場合
y←二乗(x) はxを2乗した値がyに代入されます。
関数名の丸カッコ内に関数に受け渡す値であるパラメータ(引数)を書きます。
値m のn 乗の値を返す関数「べき乗(m,n)」を用意する とあった場合
z←べき乗(x,y)は
xをy乗した値がzに代入されます。このように複数パラメータある場合はカンマで区切ります。
• 値m 以上 値n 以下の整数をランダムに一つ返す関数「乱数(m,n)」を用意する
とあった場合、
r ← 乱数(1,6) は(r に1 から6 までの整数のうちいずれかが代入されます。)
• 値n が奇数のとき真を返し,そうでないとき偽を返す関数「奇数(n)」を用意する
の様なものがあります。
奇数(3)は真(True)となり、奇数(4)は偽(False)を返却します。
――
値を返さない関数は問題文の中で
指定された値を2 進数で表示する関数「二進数で表示する」を用意する
とあった場合
二進数で表示する(3) とした場合、関数の処理内で11が表示されます。
共通テスト用手順記述標準言語(DNCL) の基本の解説は以上になります。
今後は、このDNCLを使ったオリジナルの練習問題を基礎から応用までたくさん作成していく予定なので、チャンネル登録してもらえると嬉しいです。
最後までご視聴ありがとうございました。