この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新リビジョン 両方とも次のリビジョン | ||
dncl [2018/08/13 05:47] klab |
dncl [2020/01/21 07:01] klab |
||
---|---|---|---|
ライン 4: | ライン 4: | ||
* アルゴリズムの記述に適しています。 | * アルゴリズムの記述に適しています。 | ||
* オンラインで利用できる他、ダウンロードしてローカルで利用できます。 | * オンラインで利用できる他、ダウンロードしてローカルで利用できます。 | ||
- | {{ :toy_yajirobee.png?200| | + | * 大阪電気通信大学 兼宗研究室(本多佑希、長瀧寛之、兼宗進)で開発を進めています。 |
- | }} | + | {{ :toy_yajirobee.png?200|}} |
## 使い方 | ## 使い方 | ||
* [[http://klab.eplang.jp/honda/dncl/|オンライン版]]はインストールなしでブラウザで動作します。 | * [[http://klab.eplang.jp/honda/dncl/|オンライン版]]はインストールなしでブラウザで動作します。 | ||
ライン 11: | ライン 11: | ||
* Google Chromeで動作を確認しています。 | * Google Chromeで動作を確認しています。 | ||
* インストール版は、ダウンロードしてファイルを展開してください。管理者権限は不要です。 | * インストール版は、ダウンロードしてファイルを展開してください。管理者権限は不要です。 | ||
- | * [[http://kanemune.eplang.jp/_media/dncl-windows180811.zip|Windows用]](約100MB) | + | * [[http://jsdolittle.eplang.jp/dist/dncl181010win64.zip|Windows用]](約100MB) |
- | * [[http://kanemune.eplang.jp/_media/dncl-mac180811.zip|Mac用]](約100MB) | + | * [[http://jsdolittle.eplang.jp/dist/dncl181010win32.zip|Windows用(32bit)]](約100MB) |
+ | * [[http://jsdolittle.eplang.jp/dist/dncl181010mac.zip|Mac用]](約100MB) | ||
## 履歴 | ## 履歴 | ||
- | * 2018/8/11 開発版を公開しました。 | + | * 2018/10/10 開発版V0.2を公開しました。 |
+ | * 2018/8/11 開発版V0.1を公開しました。([[http://klab.eplang.jp/honda/dncl180812/|オンライン版]]、[[http://jsdolittle.eplang.jp/dist/dncl-windows180812.zip|Windows用]](約100MB)、[[http://jsdolittle.eplang.jp/dist/dncl-mac180812.zip|Mac用]](約100MB)) | ||
# 言語と命令の説明 | # 言語と命令の説明 | ||
ライン 21: | ライン 23: | ||
* プログラムの中で、「数字、英字、記号、空白」は全角半角(日本語文字と英語文字)を区別せずに使えます。 | * プログラムの中で、「数字、英字、記号、空白」は全角半角(日本語文字と英語文字)を区別せずに使えます。 | ||
* 日本語の長音「ー」とマイナス「−」は区別されます。 | * 日本語の長音「ー」とマイナス「−」は区別されます。 | ||
- | * 掛け算は「*」「*」「×」を使います。 | + | * 掛け算は「\*」「*」「×」を使います。 |
* 割り算は「/」「/」を使います。(整数の割り算は「÷」、整数の余りは「%」「%」を使います) | * 割り算は「/」「/」を使います。(整数の割り算は「÷」、整数の余りは「%」「%」を使います) | ||
- | * 大小の比較は「>」「>」、「>=」「≧」、「<」「<」、「< =」「≦」、「=」「=」「!=」「≠」を使います。 | + | * 大小の比較は「>」「>」、「>=」「≧」、「<」「<」、「< =」「≦」、「=」「=」、「!=」「≠」を使います。 |
+ | * 論理演算は「かつ」「または」「でない」を使います。 | ||
+ | * 代入は「←」を使います。 | ||
+ | * プログラムの英語表示と編集が可能です。 | ||
+ | * 「DNCL」と「英語表示」を切り替えることで、日本語のDNCL表記とC言語風の表記が変換されます。 | ||
+ | * ※ インデントが自動調整されます。改行位置が変わったり、空白行が無くなったりする可能性があります。 | ||
+ | * 掛け算は「*」を使います。 | ||
+ | * 割り算は「/」を使います。(整数の割り算は「÷」、整数の余りは「%」を使います) | ||
+ | * 大小の比較は「>」、「>=」、「<」、「< =」、「==」、「!=」を使います。 | ||
+ | * 論理演算は「&&」「||」「!」を使います。 | ||
+ | * 代入は「=」を使います。 | ||
===変数=== | ===変数=== | ||
変数名は英字(a-z,A-Z)で始まり、その後に英字、数字、「_」が続きます。 | 変数名は英字(a-z,A-Z)で始まり、その後に英字、数字、「_」が続きます。 | ||
- | 変数には「←」で初期値を代入してから使います。 | + | 変数には「←」(英語表示では「=」)で初期値を代入してから使います。 |
- | 配列の場合は後述の「〜のすべての値を〜にする」で初期値を設定してから使うこともできます。 | + | 配列の場合は後述の「〜のすべての値を〜にする(allinit)」で初期値を設定してから使うこともできます。 |
複数の代入文を「,」で区切って並べられます。 | 複数の代入文を「,」で区切って並べられます。 | ||
<code> | <code> | ||
ライン 35: | ライン 48: | ||
moji_moji ← "文字" | moji_moji ← "文字" | ||
x ← 3, y ← 4 | x ← 3, y ← 4 | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | x = 3; | ||
+ | Arr = {1, 2, 3}; | ||
+ | moji_moji = "文字"; | ||
+ | x = 3, y = 4; | ||
</code> | </code> | ||
ライン 43: | ライン 64: | ||
xを1増やす | xを1増やす | ||
yを50減らす | yを50減らす | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | x += 1; | ||
+ | y -= 50; | ||
</code> | </code> | ||
ライン 53: | ライン 80: | ||
123+456と"aiueo"と改行を表示する | 123+456と"aiueo"と改行を表示する | ||
"こんにちは"を改行なしで表示する | "こんにちは"を改行なしで表示する | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | println(x); | ||
+ | println(123+456,"aiueo"); | ||
+ | print("こんにちは"); | ||
</code> | </code> | ||
ライン 65: | ライン 99: | ||
===四則演算=== | ===四則演算=== | ||
- | +, -, ×, ÷, % を使えます。 | + | +, -, ×, - は小数点を考慮した計算を行います。÷, % は整数の計算を行います(商と余り)。英語表示の乗算は\*を使います。 |
<code> | <code> | ||
1+2 | 1+2 | ||
ライン 72: | ライン 106: | ||
===比較演算=== | ===比較演算=== | ||
- | >, <, ≧, ≦, =, ≠ を使えます。 | + | >, <, ≧, ≦, =, ≠ を使えます。英語表示では >, <, >=, < =, ==, != を使います。 |
<code> | <code> | ||
1>2 | 1>2 | ||
ライン 79: | ライン 113: | ||
===論理演算=== | ===論理演算=== | ||
- | 「かつ」「または」「でない」を使えます。 | + | 「かつ」「または」「でない」を使えます。英語表示では &&, ||, ! を使います。 |
<code> | <code> | ||
1>2 または 2>1 | 1>2 または 2>1 | ||
1>0 かつ 5>3 でない | 1>0 かつ 5>3 でない | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | 1>2 || 2>1 | ||
+ | !(1>0 && 5>3) | ||
</code> | </code> | ||
ライン 102: | ライン 142: | ||
配列の要素は、配列名の後に[ ]で囲み添え字を書きます。 | 配列の要素は、配列名の後に[ ]で囲み添え字を書きます。 | ||
要素は1から始まります。 | 要素は1から始まります。 | ||
- | 多次元配列は、「,」で区切って要素を指定します。 | + | 多次元配列は、「,」で区切って要素を指定します。英語表示では[ ]を並べて指定します。 |
<code> | <code> | ||
x ← Arr[1] | x ← Arr[1] | ||
y ← Arr[1,2] | y ← Arr[1,2] | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | x = Arr[1]; | ||
+ | y = Arr[1][2]; | ||
</code> | </code> | ||
ライン 112: | ライン 158: | ||
<code> | <code> | ||
Arrのすべての値を0にする | Arrのすべての値を0にする | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | allinit(Arr, 0); | ||
</code> | </code> | ||
===関数呼び出し=== | ===関数呼び出し=== | ||
- | 関数名の後に引数を()で指定します。 | + | 関数名の後に引数を()で指定します。英語表示では組込関数は英語名になります。 |
<code> | <code> | ||
書く() | 書く() | ||
二倍(100) | 二倍(100) | ||
乗算(100,200) | 乗算(100,200) | ||
+ | 追加する(Arr,15) | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | 書く(); | ||
+ | 二倍(100); | ||
+ | 乗算(100,200); | ||
+ | add(Arr,15); | ||
</code> | </code> | ||
ライン 132: | ライン 192: | ||
iを表示する | iを表示する | ||
を繰り返す | を繰り返す | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | for( i=0 ; i<=10 ; i+=1 ){ | ||
+ | print(i); | ||
+ | } | ||
+ | for( i=10 ; i>=0 ; i-=1 ){ | ||
+ | print(i); | ||
+ | } | ||
</code> | </code> | ||
ライン 141: | ライン 211: | ||
i←i+1 | i←i+1 | ||
を繰り返す | を繰り返す | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | i=0; | ||
+ | while(i<10){ | ||
+ | print(i); | ||
+ | i+=1; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | 回数を指定した繰り返し文は、次のように記述します。 | ||
+ | <code> | ||
+ | i ← 0 | ||
+ | ここから5回、 | ||
+ | iを表示する | ||
+ | iを1増やす | ||
+ | を繰り返す | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | i=0; | ||
+ | repeat(5){ | ||
+ | print(i); | ||
+ | i+=1; | ||
+ | } | ||
</code> | </code> | ||
ライン 153: | ライン 250: | ||
3を表示する | 3を表示する | ||
を実行する | を実行する | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | if(1!=1){ | ||
+ | print(1); | ||
+ | }else if(2!=2){ | ||
+ | print(2); | ||
+ | }else{ | ||
+ | print(3); | ||
+ | } | ||
</code> | </code> | ||
ライン 160: | ライン 268: | ||
</code> | </code> | ||
+ | <code> | ||
+ | // 英語表示 | ||
+ | if(1==1) print("Hello"); | ||
+ | </code> | ||
ライン 175: | ライン 287: | ||
===配列の要素を入れ替える=== | ===配列の要素を入れ替える=== | ||
- | 「入れ替える」は、配列の要素を入れ替えます。 | + | 「入れ替える(swap)」は、配列の要素を入れ替えます。 |
<code> | <code> | ||
Arr ← {"a","b","c"} | Arr ← {"a","b","c"} | ||
ライン 182: | ライン 294: | ||
===配列の要素を削除する=== | ===配列の要素を削除する=== | ||
- | 「削除」関数は、番号を指定して配列の要素を削除します。 | + | 「削除(remove)」関数は、番号を指定して配列の要素を削除します。 |
<code> | <code> | ||
Arr ← {"a","b","c"} | Arr ← {"a","b","c"} | ||
ライン 189: | ライン 301: | ||
===配列に要素を挿入する=== | ===配列に要素を挿入する=== | ||
- | 「挿入」関数は、番号を指定して要素を挿入します。 | + | 「挿入(insert)」関数は、番号を指定して要素を挿入します。 |
<code> | <code> | ||
Arr←{"a","b","c"} | Arr←{"a","b","c"} | ||
ライン 196: | ライン 308: | ||
===配列の要素数を取得する=== | ===配列の要素数を取得する=== | ||
- | 「要素数」関数は、配列の要素数を取得します。 | + | 「要素数(length)」関数は、配列の要素数を取得します。 |
<code> | <code> | ||
Arr←{"a","b","c"} | Arr←{"a","b","c"} | ||
ライン 203: | ライン 315: | ||
===変数の確認=== | ===変数の確認=== | ||
- | プログラムの中で使われている変数の値を確認します。 | + | 「確認(dump)」関数は、プログラムの中で使われている変数の値を確認します。 |
<code> | <code> | ||
Arr ← {1,2,3,4,5} | Arr ← {1,2,3,4,5} | ||
ライン 227: | ライン 339: | ||
strを表示する | strを表示する | ||
を実行する | を実行する | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function hello(){ | ||
+ | print("hello!"); | ||
+ | } | ||
+ | function write(str){ | ||
+ | print(str); | ||
+ | } | ||
</code> | </code> | ||
ライン 236: | ライン 358: | ||
二倍(5)を表示する // 10が表示される | 二倍(5)を表示する // 10が表示される | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function twice(num){ | ||
+ | return num*2; | ||
+ | } | ||
+ | print(twice(5)); | ||
</code> | </code> | ||
ライン 242: | ライン 372: | ||
以下の内容を測定しています。 | 以下の内容を測定しています。 | ||
* 実行時間 | * 実行時間 | ||
- | * 各for文のループ回数 | + | * 各for文/while文のループ回数 |
* 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」 | * 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」 | ||
+ | * 各関数の呼出回数 | ||
次の例は、関数の性能を測定します。 | 次の例は、関数の性能を測定します。 | ||
ライン 258: | ライン 389: | ||
を実行する | を実行する | ||
倍数判定()の性能を確認する | 倍数判定()の性能を確認する | ||
+ | </code> | ||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function is_multiple(){ | ||
+ | for( x=1 ; x<=10 ; x+=1 ){ | ||
+ | print(x); | ||
+ | if(x%3==0){ | ||
+ | println("<-3の倍数!"); | ||
+ | }else{ | ||
+ | println(\n); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | profile(is_multiple()); | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
(出力例) | (出力例) | ||
1 | 1 | ||
ライン 270: | ライン 418: | ||
9<-3の倍数! | 9<-3の倍数! | ||
10 | 10 | ||
- | 性能テスト---------------- | + | 統計情報------------------ |
- | 実行時間 => 0.003秒 | + | (実行時間) |
- | for1 : 実行回数 => 10 | + | 0.007秒 |
- | if1 : 比較回数 => 10, 真の回数 => 3, 偽の回数 => 7 | + | (実行回数) |
+ | for1 : 10 | ||
+ | if1 : 比較 10, 真 3, 偽 7 | ||
+ | (呼び出し回数) | ||
+ | 倍数判定 : 1 | ||
-------------------------- | -------------------------- | ||
</code> | </code> | ||
ライン 292: | ライン 444: | ||
倍数判定() | 倍数判定() | ||
性能を確認する | 性能を確認する | ||
+ | </code> | ||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function is_multiple(){ | ||
+ | for( x=1 ; x<=10 ; x+=1 ){ | ||
+ | noNL_print(x); | ||
+ | if(x%3==0){ | ||
+ | print("<-3の倍数!"); | ||
+ | }else{ | ||
+ | print(\n); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | is_multiple(); | ||
+ | is_multiple(); | ||
+ | performance(); | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
(出力例) | (出力例) | ||
1 | 1 | ||
ライン 314: | ライン 485: | ||
9<-3の倍数! | 9<-3の倍数! | ||
10 | 10 | ||
- | 性能テスト---------------- | + | 統計情報------------------ |
- | 実行時間 => 0.011秒 | + | (実行時間) |
- | for1 : 実行回数 => 20 | + | 0.018秒 |
- | if1 : 比較回数 => 20, 真の回数 => 6, 偽の回数 => 14 | + | (実行回数) |
+ | for1 : 20 | ||
+ | if1 : 比較 20, 真 6, 偽 14 | ||
+ | (呼び出し回数) | ||
+ | 倍数判定 : 2 | ||
-------------------------- | -------------------------- | ||
</code> | </code> |