導入
2022年4月から「情報Ⅰ」が必修となり、2025年からは大学入学共通テスト(共テ)で出題されます。
大学入学共通テストでは、「DNCL2(DNCL)」という大学入学共通テスト専用の擬似プログラミング言語が使われますが、これは情報Ⅰの教科書で使われている一般的な言語とは異なります。
そこで、今回の記事では、DNCL2と教科書で使われている言語(Python・VBA・JavaScript)の比較・対応をまとめました。
勉強するうえで、わからなくなった時にぜひ使ってください。
注意
この記事でのDNCL2の記述方法については、令和7年度試作問題の概要「情報」の18ページから24ページの表記例を参考にしています。
記述方法についてはまだ確定していないので、最新の記述方法に関する情報は大学入試センターのサイトをご確認ください。
スポンサードリンク
DNCL2とは
DNCL2とは、共通テスト用プログラム表記の通称で、大学入学共通テストの情報Ⅰの問題に使われる擬似プログラミング言語です。
受験生が使用していた言語によって有利不利が生まれないように、大学入学共通テスト専用に作られた擬似言語です。
書き方は、Pythonに非常に近いです。
ですが、プログラミング言語は書き方が違うだけで、基本的に同じ考え方なので、他の言語がわかっていればそこまで苦労しないと思います。
コードの例
コードは以下のように書きます。
以下の例は、1から10の数字をすべて足した合計の数を求めるプログラムです。
gokei = 0
i を 1 から 10 まで 1 ずつ増やしながら繰り返す: gokei = gokei + i
表示する(gokei)
おそらくプログラミングをやったことがあるのであれば、上記のどの表現が、自分の使っているプログラミング言語のどの表現に当たるのか、大まかに推測できるのではないでしょうか。
例えば、以下の部分はfor文に当たります。
i を 1 から 10 まで 1 ずつ増やしながら繰り返す: gokei = gokei + i
また、プログラミングをやったことがない方でも、どこで何をやっているか大まかに予想がつくのがポイントです。
実行環境
DNCL2は公式の実行環境は用意されていませんが、有名なのはなでしこのサイトのエディタです。
このサイトはプログラムの最初の行に!DNCL2
と入れると、DNCL2をブラウザ上で簡単に実行できます。
https://nadesi.com/v3/doc/index.php?%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFv2
例えば、先ほど紹介したプログラムだと以下のように書きます。
!DNCL2
gokei = 0
i を 1 から 10 まで 1 ずつ増やしながら繰り返す: gokei = gokei + i
表示する(gokei)
また、DNCL2はPythonに非常に似ているので、今後のことを考えてPythonを学ぶのもありです。
Pythonの実行環境として、Googleアカウントでログインするだけで使えるGoogle Colaboratoryというものがあるので、これを使ってPythonを動かすと理解の助けになるかもしれません。
スポンサードリンク
DNCL2とPython・VBA・JavaScriptの比較・対応
それでは本題のDNCL2と教科書で使われている言語(Python・VBA・JavaScript)の比較・対応を順に紹介していきます。
目次を作り、リンクで飛べるようにしたので、必要な部分だけ確認してみてください。
- コメント
- 変数と代入
- 表示文
- 四則演算(足し算・引き算・掛け算・割り算・商・余り)
- 比較演算(=, ≠, >, <)
- 論理演算(かつ、または、でない )
- 条件分岐(if文)
- 繰り返し(for文)
- 繰り返し(while文)
- 外部入力
- 関数の定義と呼び出し
言語別の特徴としては、VBAは教科書で使われている言語の3つの中では比較的古い書き方なので、記述量が多くなるのが特徴です。
ただ、プログラミングをする上での考え方は同じなので、そこまで困らないと思います。
コメント
まずコメントについてですが、DNCL2はPythonと同じく「#」を使ってコメントをつけることができます。
コメントとはプログラムで実行されない、メモ書きの部分です。
DNCL2
# この部分はコメントです
Python
# この部分はコメントです
VBA
' この部分はコメントです
JavaScript
// この部分はコメントです
変数と代入
変数と代入については、DNCL2の場合、変数名は日本語のローマ字を使うのが大きな違いです。
また、「(配列の変数名)のすべての値を~にする」と書くことで、配列のすべての値を同じ値に初期化できます。
DNCL2
hensu = 3 # 数字moji = "ABC" # 文字Hairetsu = [1, 2, 3, 4, 5] # 配列 (配列の変数の先頭は大文字)Hairetsu のすべての値を 0 にする # 配列をすべて同じ値で初期化する場合Hairetsu[2] = 3 # 配列の一部要素のみを変更する場合
Python
x = 3 # 数字s = "ABC" # 文字arr = [1, 2, 3, 4, 5] # 配列(リスト)arr = [0] * 5 # 配列(リスト)をすべて同じ値で初期化する場合arr[2] = 3 # 配列(リスト)の一部要素のみを変更する場合
VBA
Dim x As Integerx = 3 ' 数字
Dim s As Strings = "ABC" ' 文字
Dim arr(5) As Variantarr = Array(1, 2, 3, 4, 5) ' 配列
ReDim arr(5) As Variantarr = Array(0, 0, 0, 0, 0) ' 配列をすべて同じ値(0)で初期化する場合
arr(2) = 3 ' 配列の一部要素のみを変更する場合
JavaScript
const x = 3; // 数字const s = "ABC"; // 文字const arr = [1, 2, 3, 4, 5]; // 配列arr.fill(0); // 配列をすべて同じ値で初期化する場合arr[2] = 3; // 配列の一部要素のみを変更する場合
表示文
DNCL2で、値を表示する場合は「表示する(表示したい値)」」、文字列の連結をする場合はカンマ区切りで書きます。
他の言語は、一般的にprint
やconsole.log
などを使います。
ちなみに大学入試センターが公開した記述例では、VBAはDebug.Print
の代わりにMsgBox
、JavaScriptはconsole.log
の代わりにdocument.write
を使っています。
ですが、MsgBox
はメッセージボックスなのでPythonのprint
とは役割が厳密には異なります。
また、document.write
は強く非推奨とされており、実際のプログラミングではほとんど使いません。
ただ、教科書にはこのように書かれている場合が多いので、その場合はそちらを使ってください。
DNCL2
表示する("終了しました") # 「終了しました」と表示される表示する("合計は",hensu,"です") # hensuが3の時「合計は3です」と表示される表示する("sum=",hensu,", i=",i) # hensuが3、iが1の時、「sum=3, i=1」と表示される
Python
print("終了しました") # 「終了しました」と表示されるprint("合計は",x,"です") # xが3の時「合計は3です」と表示されるprint("sum=",x,", i=",i) # xが3、iが1の時、「sum=3, i=1」と表示される
VBA
・Debug.Printを使う場合(一般的)
Debug.Print "終了しました" ' 「終了しました」と表示されるDebug.Print "合計は" & x & "です" ' xが3の時「合計は3です」と表示されるDebug.Print "sum=" & x & ", i=" & i ' xが3、iが1の時、「sum=3, i=1」と表示される
・MsgBoxを使う場合(教科書)
MsgBox "終了しました" ' 「終了しました」と表示されるMsgBox "合計は" & x & "です" ' xが3の時「合計は3です」と表示されるMsgBox "sum=" & x & ", i=" & i ' xが3、iが1の時、「sum=3, i=1」と表示される
JavaScript
・console.logを使う場合(一般的)
console.log("終了しました"); // 「終了しました」と表示されるconsole.log("合計は",x,"です"); // xが3の時「合計は3です」と表示されるconsole.log("sum=",x,", i=",i); // xが3、iが1の時、「sum=3, i=1」と表示される
・document.writeを使う場合(教科書)
document.write("終了しました"); // 「終了しました」と表示されるdocument.write("合計は",x,"です"); // xが3の時「合計は3です」と表示されるdocument.write("sum=",x,", i=",i); // xが3、iが1の時、「sum=3, i=1」と表示される
四則演算(足し算・引き算・掛け算・割り算・商・余り)
四則演算は、DNCL2では割り算の商に「÷」を使うのが大きな違いです。
後は基本的に、他の言語と同じです。
DNCL2
tasu = 3 + 2 # 足し算hiku = 3 - 2 # 引き算kakeru = 3 * 2 # 掛け算waru = 3 / 2 # 割り算、この場合waruは1.5になるsyo = 3 ÷ 2 # 割り算の商、この場合syoは1になるamari = 3 % 2 # 割り算の余り、この場合amariは1になるbeki = 3 ** 2 # べき乗(累乗)heikin = (a + b + c) / 3 # カッコがある場合、カッコ内を優先する
Python
add = 3 + 2 # 足し算subt = 3 - 2 # 引き算mul = 3 * 2 # 掛け算div = 3 / 2 # 割り算quo = 3 // 2 # 割り算の商rema = 3 % 2 # 割り算の余りexpo = 3 ** 2 # べき乗(累乗)ave = (a + b + c) / 3 # カッコがある場合、カッコ内を優先する
VBA
Dim add As Integeradd = 3 + 2 ' 足し算
Dim subt As Integersubt = 3 - 2 ' 引き算
Dim mul As Integermul = 3 * 2 ' 掛け算
Dim div As Doublediv = 3 / 2 ' 割り算
Dim quo As Integerquo = 3 \ 2 ' 割り算の商
Dim rema As Integerrema = 3 Mod 2 ' 割り算の余り
Dim expo As Integerexpo = 3 ^ 2 ' べき乗(累乗)
Dim ave As Doubleave = (a + b + c) / 3 ' カッコがある場合、カッコ内を優先する
JavaScript
const add = 3 + 2; // 足し算const subt = 3 - 2; // 引き算const mul = 3 * 2; // 掛け算const div = 3 / 2; // 割り算const quo = Math.floor(3 / 2); // 割り算の商const rema = 3 % 2; // 割り算の余りconst expo = 3 ** 2 // べき乗(累乗)const ave = (a + b + c) / 3; // カッコがある場合、カッコ内を優先する
比較演算(=, ≠, >, <)
比較演算については、他の言語と大きな違いはありません。
DNCL2
x > 3y * 2 <= 8 # y × 2 ≦ 8という意味"あいうえお" == "あいうえお" # 等しい(=)"ABC" != "abc" # 等しくない(≠)
Python
x > 3y * 2 <= 8"あいうえお" == "あいうえお""ABC" != "abc"
VBA
x > 3y * 2 <= 8"あいうえお" = "あいうえお""ABC" <> "abc"
JavaScript
x > 3y * 2 <= 8"あいうえお" === "あいうえお""ABC" !== "abc"
論理演算(かつ、または、で ない)
論理演算については、DNCL2はPythonと同じく「and」「or」「not」を使います。
DNCL2
x >= 3 and x <= 8y % 2 == 0 or y < 1not z > 12not (z > 5 and z < 12)z > 5 and (not z < 12)
Python
x >= 3 and x <= 8y % 2 == 0 or y < 1not z > 12not (z > 5 and z < 12)z > 5 and (not z < 12)
VBA
x >= 3 And x <= 8y Mod 2 = 0 Or y < 1Not z > 12Not (z > 5 And z < 12)z > 5 And (Not z < 12)
JavaScript
x >= 3 && x <= 8y % 2 === 0 || y < 1!(z > 12)!(z > 5 && z < 12)z > 5 && !(z < 12)
条件分岐(if文)
DNCL2では、if文は決まった形の日本語で記述します。
DNCL2
もし x < 3 ならば: x = x - 3そうでなくもし y > 2 ならば: y = y + 2そうでなければ: x = x / y y = y + 1
Python
if x < 3: x -= 3elif y > 2: y += 2else: x /= y y += 1
VBA
If x < 3 Then x = x - 3ElseIf y > 2 Then y = y + 2Else x = x / y y = y + 1End If
JavaScript
if (x < 3) { x -= 3;} else if (y > 2) { y += 2;} else { x /= y; y++;}
繰り返し(for文)
for文もDNCL2は決まった日本語で記述します。
DNCL2
i を 1 から 10 まで 1 ずつ増やしながら繰り返す: gokei = gokei + i
Python
for i in range(1, 11): sum += i
VBA
For i = 1 To 10 sum = sum + iNext i
JavaScript
for (let i=1; i<=10; i++) { sum += i;}
繰り返し(while文)
while文もDNCL2は同様に決まった日本語で記述します。
DNCL2
n <= 3 の間繰り返す: gokei = gokei + n n = n + 1
Python
while n <= 3: sum += n n += 1
VBA
While n <= 3 sum = sum + n n = n + 1Wend
JavaScript
while(n <= 3) { sum += n; n++;}
外部入力
DNCL2では、外部入力は「【外部からの入力】」と表します。
DNCL2
表示する("好きな言葉を入力してください")nyuryoku = 【外部からの入力】
Python
message = input("好きな言葉を入力してください")
VBA
Dim message As Stringmessage = InputBox("好きな言葉を入力してください")
JavaScript
const message = prompt("好きな言葉を入力してください");
関数の定義と呼び出し
DNCL2では、関数の定義は問題文中にあるのが大きな違いです。
きちんと例もあるようなので、それを確認すれば意味がわかると思います。
DNCL2
# 問題文中に関数の記述がある和を返す(始めの数, 終わりの数)・・・引数として「始めの数」と「終わりの数」が与えられ, 「始めの数」以上「終わりの数」以下の値の和を返す関数。例:「始めの数」が1, 「終わりの数」が5の場合, 1+2+3+4+5となるので, 和を返す(1, 5) の値は15となる。
z = 和を返す(1, 10)
Python
def returnSum (s, e): sum = (s+e) * (e-s+1) / 2 return sum
z = returnSum(1, 10)
VBA
Function ReturnSum (s As Integer, e As Integer) sum = (s+e) * (e-s+1) / 2 ReturnSum = sumEnd Function
z = ReturnSum(1, 10)
JavaScript
function returnSum (s, e) { const sum = (s+e) * (e-s+1) / 2; return sum;}
const z = returnSum(1, 10);
スポンサードリンク