情報処理学会第 81 回全国大会

5ZF-08DNCL のオンラインプログラミング学習環境「どんくり」の開発
本多佑希 ††

兼宗進 †

大阪電気通信大学

はじめに

11234567891011

小学校でのプログラミング必修化をはじめ，プログ
ラミング教育の重要性が高まっている．大学入試センターが実施する大学入試共通テストでもプログラミン
グに関する問題の出題も検討されている．
本研究では，大学入試センター試験の情報関係基礎で 20 年近く問題の題材となるアルゴリズムの記述に用いられてきた仮想言語「DNCL」（大学入試センターラ// Values[30] は要素が代入された配列である
i を 1 から length-1 まで 1 ずつ増やしながら，
j を length から i+1 まで 1 ずつ減らしながら，もし Values[j]<Values[j-1] ならば
tmp ← Values[j]Values[j] ← Values[j-1]Values[j-1] ← tmpを実行するを繰り返すを繰り返す
Valeus を表示するンゲージ）に着目し，オンラインで動作する言語処理
図 1: バブルソートの記述例

系「どんくり」を開発した．

2

DNCL

2.1

概要

2.2

DNCL の関連研究

DNCL の処理系としては PEN [2] が知られている．

DNCL はセンター試験の問題で出題されるアルゴリズムを記述するために考案された仮想言語である．仕様や構文がシンプルであり，C 言語などを理解している生徒はプログラムを読めるように設計されている [1]．

DNCL は動的型付け言語であり，変数には型がない．
文字列や数値の他，複数の値を扱う型として配列も存在し，これらの型の値は同一の変数に代入することが可能である．配列のインデックスが 1 から始まることや，要素の初期値を指定する構文が用意されていることは特徴である．配列や関数は問題の本文などで定義される．また，C 言語の printf のような表示用の関数やインクリメントやデクリメントの演算も言語の構文として提供されている．
制御構造としては，while，for，if に相当する構文が用意されている．変数の有効範囲（スコープ）の規定はなく，過去の問題では制御構文中の変数を外部からPEN では変数の型宣言や，グラフィックス等の関数を提供する言語の拡張 (xDNCL) を行っている．学習を補助するために，構文の定型的な入力を補助するボタンや，プログラムのステップ実行などが提供されている．

WaPEN [3] は Web ブラウザで動作する．テキストでのプログラミングに加え，フローチャートでプログラムを記述することが可能である．

3

どんくりの概要

3.1

Web ブラウザ上での動作の実現

どんくりは Web ブラウザで DNCL を学習するために，DNCL を JavaScript に変換（トランスパイル）して実行する．トランスパイラも JavaScript で実現しているため，サーバとの通信をせず，ローカルの Web ブ
ラウザ内のみでプログラムの変換や実行が可能である．

3.2

参照していた例がある．

統合開発環境 (IDE)

どんくりでは，統合開発環境 (IDE) を提供している．

プログラムの例として，バブルソートの記述例を図1 に示す．

この IDE は，Web ブラウザでアクセスすることで使用することができる．図 2 に IDE の画面を示す．

3.3
Donculi : A online programming environment ofDNCL
Yuki HONDA† , Susumu KANEMUNE†† Osaka Electro-Communication University432-8011, Neyagawa, Japan

汎用的なライブラリの整備

どんくりでは，「sin」や「cos」，「切り捨て」や「四捨五入」などの数学関数の他，「入れる」や「取り出す」，「入れ替える」などの配列操作用関数をライブラリとして提供している．

4-583

Copyright 2019 Information Processing Society of Japan.
All Rights Reserved.

情報処理学会第 81 回全国大会

12345678910function bubble_sort(Values,n){for( i=1 ; i<=n-1 ; i+=1 ){for( j=n ; j>=i+1 ; j-=1 ){if(Values[j]<Values[j-1]){
swap(Values,j,j-1);}}}
return Values;}

図 3: 英語表示に変換したバブルソートのプログラム

か，データの件数が増えたら比較回数の増える幅がど

図 2: どんくりで提供している IDE

う変わるのかなどを観察することによって，計算量の44.1

アルゴリズム記述用の拡張概念の理解に繋げられるのではないかと考えている．

配列操作用関数

4.4

英語表示

3.3 章で述べたように，どんくりでは配列操作用関数

独自の拡張として，今回開発した IDE では，DNCLを独自のライブラリとして提供している．これにより，と英語表示を相互に変換する機能を実装した．英語表

バブルソートの値を変数の値を入れ替える操作や，挿示では，画面に表示されている DNCL のプログラムを，入ソートの配列に要素を挿入する操作など，重要ではC 言語系の構文で表現する．英語表示されたプログラない部分での躓きを軽減できることを期待している．

ムも編集や実行が可能であり，編集したプログラムを

4.2

再度 DNCL に変換することも可能である．図 3 に，英実行中の変数の状態を確認「確認 (英語名では dump)」は，定義されている変語表示に変換した線形探索プログラムの例を示す．

数を一覧で見ることができる関数である．この関数により，クイックソートのピボットを基準に大小のデー

5

おわりにタで分けられていく様子や，二分探索で探索する対象

DNCL の実行環境「どんくり」の開発を行った．どがどう変化するかなど，イメージが難しいアルゴリズ

んくりでは DNCL を JavaScript に変換して実行する

ム中のデータの変化を可視化することができる．

ことで，Web ブラウザ上で動作させることが可能である．公式の仕様に準拠している他，アルゴリズムの学

4.3

プロファイル関数

習を目的として配列操作用関数や実行中の変数を一覧

アルゴリズムの学習などに使うために，実行時の統する機能，統計情報を確認する機能を提供している．

計情報（プロファイル情報）を表示する機能を用意した．プログラム中で「性能を確認する」を記述することにより，プログラム全体での統計情報を確認するこ参考文献とができる．また，「クイックソート（Values）の性能を確認する」のように記述することで，関数内の統計情報を確認することもできる．この機能では，次の情報を確認することができる．

[1] 独立行政法人大学入試センター, センター試験用
手順記述標準言語 (DNCL) の説明.

https://www.dnc.ac.jp/albums/abm.php?f=abm00004841.pdf&n=H23_dncl.pdf (2019/1/11参照).

• 実行時間（msec）• 繰り返しの実行回数• 条件分岐の比較回数/真の回数/偽の回数• 各関数の呼び出し回数[2] 西田知博, 原田章, 中村亮太, 宮本友介, 松浦敏雄.
初学者用プログラミング学習環境 PEN の実装と評価. 情報処理学会論文誌, Vol.48, No.8, pp.2736-2747, 2007.

この機能を用いて，選択ソートとクイックソートでデータの比較回数がどう変わるのかや，クイックソートでランダムな値が入ったデータや整列された値が入ったデータを対象にした場合にどう比較回数が変わるの

4-584[3] 中西渉. WaPEN. . . DNCL の Web ブラウザ上の実行環境におけるフローチャートなどの実装. 情報処理学会, 情報教育シンポジウム (2018), pp.210-214, 2018.

Copyright 2019 Information Processing Society of Japan.
All Rights Reserved.