この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新リビジョン 両方とも次のリビジョン | ||
dncl [2018/08/12 16:34] 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> | ||
x ← 3 | x ← 3 | ||
ライン 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> | ||
ライン 52: | ライン 79: | ||
xを表示する | xを表示する | ||
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> | ||
ライン 111: | ライン 157: | ||
配列の要素の初期値を設定します。 | 配列の要素の初期値を設定します。 | ||
<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> | ||
ライン 125: | ライン 185: | ||
for文に相当する反復は次のように記述します。 | for文に相当する反復は次のように記述します。 | ||
<code> | <code> | ||
- | iを0から10まで1ずつ増やしながら、 | + | iを0から10まで1ずつ増やしながら、 |
- | iを表示する | + | iを表示する |
- | を繰り返す | + | を繰り返す |
- | iを10から0まで1ずつ減らしながら、 | + | |
- | iを表示する | + | iを10から0まで1ずつ減らしながら、 |
- | を繰り返す | + | iを表示する |
+ | を繰り返す | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | for( i=0 ; i<=10 ; i+=1 ){ | ||
+ | print(i); | ||
+ | } | ||
+ | for( i=10 ; i>=0 ; i-=1 ){ | ||
+ | print(i); | ||
+ | } | ||
</code> | </code> | ||
while文に相当する反復は次のように記述します。 | while文に相当する反復は次のように記述します。 | ||
<code> | <code> | ||
- | i←0 | + | i←0 |
- | i<10の間、 | + | i<10の間、 |
- | iを表示する | + | iを表示する |
- | 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> | ||
ライン 145: | ライン 243: | ||
if文に相当する分岐は次のように記述します。 | if文に相当する分岐は次のように記述します。 | ||
<code> | <code> | ||
- | もし1≠1ならば | + | もし1≠1ならば |
- | 1を表示する | + | 1を表示する |
- | を実行し、そうでなくもし2≠2ならば | + | を実行し、そうでなくもし2≠2ならば |
- | 2を表示する | + | 2を表示する |
- | を実行し、そうでなければ | + | を実行し、そうでなければ |
- | 3を表示する | + | 3を表示する |
- | を実行する | + | を実行する |
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | if(1!=1){ | ||
+ | print(1); | ||
+ | }else if(2!=2){ | ||
+ | print(2); | ||
+ | }else{ | ||
+ | print(3); | ||
+ | } | ||
</code> | </code> | ||
ライン 159: | ライン 268: | ||
</code> | </code> | ||
+ | <code> | ||
+ | // 英語表示 | ||
+ | if(1==1) print("Hello"); | ||
+ | </code> | ||
ライン 174: | ライン 287: | ||
===配列の要素を入れ替える=== | ===配列の要素を入れ替える=== | ||
- | 「入れ替える」は、配列の要素を入れ替えます。 | + | 「入れ替える(swap)」は、配列の要素を入れ替えます。 |
<code> | <code> | ||
- | Arr ← {"a","b","c"} | + | Arr ← {"a","b","c"} |
- | 入れ替える(Arr,1,3) // 配列の値は{"c","b","a"}になる | + | 入れ替える(Arr,1,3) // 配列の値は{"c","b","a"}になる |
</code> | </code> | ||
===配列の要素を削除する=== | ===配列の要素を削除する=== | ||
- | 「削除」関数は、番号を指定して配列の要素を削除します。 | + | 「削除(remove)」関数は、番号を指定して配列の要素を削除します。 |
<code> | <code> | ||
- | Arr ← {"a","b","c"} | + | Arr ← {"a","b","c"} |
- | 削除(Arr,2) // 配列の値は{"a","c"}になる | + | 削除(Arr,2) // 配列の値は{"a","c"}になる |
</code> | </code> | ||
===配列に要素を挿入する=== | ===配列に要素を挿入する=== | ||
- | 「挿入」関数は、番号を指定して要素を挿入します。 | + | 「挿入(insert)」関数は、番号を指定して要素を挿入します。 |
<code> | <code> | ||
- | Arr←{"a","b","c"} | + | Arr←{"a","b","c"} |
- | 挿入(Arr,"d",2) // 配列の値は{"a","d","b","c"}になる | + | 挿入(Arr,"d",2) // 配列の値は{"a","d","b","c"}になる |
</code> | </code> | ||
===配列の要素数を取得する=== | ===配列の要素数を取得する=== | ||
- | 「要素数」関数は、配列の要素数を取得します。 | + | 「要素数(length)」関数は、配列の要素数を取得します。 |
<code> | <code> | ||
- | Arr←{"a","b","c"} | + | Arr←{"a","b","c"} |
- | 要素数(Arr) // 結果は3が返される | + | 要素数(Arr) // 結果は3が返される |
</code> | </code> | ||
===変数の確認=== | ===変数の確認=== | ||
- | プログラムの中で使われている変数の値を確認します。 | + | 「確認(dump)」関数は、プログラムの中で使われている変数の値を確認します。 |
<code> | <code> | ||
- | Arr ← {1,2,3,4,5} | + | Arr ← {1,2,3,4,5} |
- | x ← 「あいうえお」 | + | x ← 「あいうえお」 |
- | 確認() | + | 確認() |
(出力例) | (出力例) | ||
- | 確認------------------- | + | 確認------------------- |
- | Arr => { 1, 2, 3, 4, 5 } | + | Arr => { 1, 2, 3, 4, 5 } |
- | x => あいうえお | + | x => あいうえお |
- | ----------------------- | + | ----------------------- |
</code> | </code> | ||
ライン 218: | ライン 332: | ||
()の中に引数を記述できます。 | ()の中に引数を記述できます。 | ||
<code> | <code> | ||
- | あいさつ()は | + | あいさつ()は |
- | 「こんにちは」を表示する | + | 「こんにちは」を表示する |
- | を実行する | + | を実行する |
- | + | ||
- | 書く(str)は | + | 書く(str)は |
- | strを表示する | + | strを表示する |
- | を実行する | + | を実行する |
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function hello(){ | ||
+ | print("hello!"); | ||
+ | } | ||
+ | function write(str){ | ||
+ | print(str); | ||
+ | } | ||
</code> | </code> | ||
次の例は、関数に戻り値を設定します。 | 次の例は、関数に戻り値を設定します。 | ||
<code> | <code> | ||
- | 二倍(num)は | + | 二倍(num)は |
- | num×2を返す | + | num×2を返す |
- | を実行する | + | を実行する |
- | 二倍(5)を表示する // 10が表示される | + | |
+ | 二倍(5)を表示する // 10が表示される | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | // 英語表示 | ||
+ | function twice(num){ | ||
+ | return num*2; | ||
+ | } | ||
+ | print(twice(5)); | ||
</code> | </code> | ||
ライン 239: | ライン 372: | ||
以下の内容を測定しています。 | 以下の内容を測定しています。 | ||
* 実行時間 | * 実行時間 | ||
- | * 各for文のループ回数 | + | * 各for文/while文のループ回数 |
* 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」 | * 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」 | ||
+ | * 各関数の呼出回数 | ||
次の例は、関数の性能を測定します。 | 次の例は、関数の性能を測定します。 | ||
<code> | <code> | ||
- | 倍数判定()は | + | 倍数判定()は |
- | xを1から10まで1ずつ増やしながら、 | + | xを1から10まで1ずつ増やしながら、 |
- | xを改行なしで表示する | + | xを改行なしで表示する |
- | もしx%3=0ならば | + | もしx%3=0ならば |
- | 「<-3の倍数!」を表示する | + | 「<-3の倍数!」を表示する |
- | を実行し、そうでなければ | + | を実行し、そうでなければ |
- | 改行を表示する | + | 改行を表示する |
- | を実行する | + | を実行する |
- | を繰り返す | + | を繰り返す |
- | を実行する | + | を実行する |
- | 倍数判定()の性能を確認する | + | 倍数判定()の性能を確認する |
+ | </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 |
- | 2 | + | 2 |
- | 3<-3の倍数! | + | 3<-3の倍数! |
- | 4 | + | 4 |
- | 5 | + | 5 |
- | 6<-3の倍数! | + | 6<-3の倍数! |
- | 7 | + | 7 |
- | 8 | + | 8 |
- | 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> | ||
次の例は、プログラム全体の性能を確認します。 | 次の例は、プログラム全体の性能を確認します。 | ||
<code> | <code> | ||
- | 倍数判定()は | + | 倍数判定()は |
- | xを1から10まで1ずつ増やしながら、 | + | xを1から10まで1ずつ増やしながら、 |
- | xを改行なしで表示する | + | xを改行なしで表示する |
- | もしx%3=0ならば | + | もしx%3=0ならば |
- | 「<-3の倍数!」を表示する | + | 「<-3の倍数!」を表示する |
- | を実行し、そうでなければ | + | を実行し、そうでなければ |
- | 改行を表示する | + | 改行を表示する |
- | を実行する | + | を実行する |
- | を繰り返す | + | を繰り返す |
- | を実行する | + | を実行する |
- | 倍数判定() | + | 倍数判定() |
- | 倍数判定() | + | 倍数判定() |
- | 性能を確認する | + | 性能を確認する |
+ | </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 |
- | 2 | + | 2 |
- | 3<-3の倍数! | + | 3<-3の倍数! |
- | 4 | + | 4 |
- | 5 | + | 5 |
- | 6<-3の倍数! | + | 6<-3の倍数! |
- | 7 | + | 7 |
- | 8 | + | 8 |
- | 9<-3の倍数! | + | 9<-3の倍数! |
- | 10 | + | 10 |
- | 1 | + | 1 |
- | 2 | + | 2 |
- | 3<-3の倍数! | + | 3<-3の倍数! |
- | 4 | + | 4 |
- | 5 | + | 5 |
- | 6<-3の倍数! | + | 6<-3の倍数! |
- | 7 | + | 7 |
- | 8 | + | 8 |
- | 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> |