dncl
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| dncl [2019/02/06 17:02] – 以前のリビジョンを復元 (2019/02/06 16:59) klab | dncl [2023/07/11 17:54] (現在) – klab | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ~~CLOSETOC~~ | ||
| + | # DNCL学習環境「どんくり」 | ||
| + | * どんくりは大学入試センター試験のプログラミングの出題に使われているDNCLの学習環境です。 | ||
| + | * アルゴリズムの記述に適しています。 | ||
| + | * オンラインで利用できる他、ダウンロードしてローカルで利用できます。 | ||
| + | * 大阪電気通信大学 兼宗研究室(本多佑希、長瀧寛之、兼宗進)で開発を進めています。 | ||
| + | {{ : | ||
| + | ## 使い方 | ||
| + | * [[http:// | ||
| + | * サンプルプログラムが用意されています。 | ||
| + | * Google Chromeで動作を確認しています。 | ||
| + | * インストール版は、ダウンロードしてファイルを展開してください。管理者権限は不要です。 | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | ## 履歴 | ||
| + | * 2018/10/10 開発版V0.2を公開しました。 | ||
| + | * 2018/8/11 開発版V0.1を公開しました。([[http:// | ||
| + | |||
| + | # 言語と命令の説明 | ||
| + | * 以下は言語の説明と使用できる命令です。[[http:// | ||
| + | * プログラムの中で、「数字、英字、記号、空白」は全角半角(日本語文字と英語文字)を区別せずに使えます。 | ||
| + | * 日本語の長音「ー」とマイナス「−」は区別されます。 | ||
| + | * 掛け算は「\*」「*」「×」を使います。 | ||
| + | * 割り算は「/ | ||
| + | * 大小の比較は「> | ||
| + | * 論理演算は「かつ」「または」「でない」を使います。 | ||
| + | * 代入は「←」を使います。 | ||
| + | * プログラムの英語表示と編集が可能です。 | ||
| + | * 「DNCL」と「英語表示」を切り替えることで、日本語のDNCL表記とC言語風の表記が変換されます。 | ||
| + | * ※ インデントが自動調整されます。改行位置が変わったり、空白行が無くなったりする可能性があります。 | ||
| + | * 掛け算は「*」を使います。 | ||
| + | * 割り算は「/ | ||
| + | * 大小の比較は「> | ||
| + | * 論理演算は「&& | ||
| + | * 代入は「=」を使います。 | ||
| + | |||
| + | |||
| + | ===変数=== | ||
| + | 変数名は英字(a-z, | ||
| + | 変数には「←」(英語表示では「=」)で初期値を代入してから使います。 | ||
| + | 配列の場合は後述の「〜のすべての値を〜にする(allinit)」で初期値を設定してから使うこともできます。 | ||
| + | 複数の代入文を「, | ||
| + | < | ||
| + | x ← 3 | ||
| + | Arr ← {1, 2, 3} | ||
| + | moji_moji ← " | ||
| + | x ← 3, y ← 4 | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | x = 3; | ||
| + | Arr = {1, 2, 3}; | ||
| + | moji_moji = " | ||
| + | x = 3, y = 4; | ||
| + | </ | ||
| + | |||
| + | ===増やす/ | ||
| + | 変数の値を指定した数だけ増減します。 | ||
| + | 未定義の変数を対象に実行した場合には、0が代入されてから実行されます。 | ||
| + | < | ||
| + | xを1増やす | ||
| + | yを50減らす | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | x += 1; | ||
| + | y -= 50; | ||
| + | </ | ||
| + | |||
| + | ===表示文=== | ||
| + | 式や変数の値を表示します。 | ||
| + | 複数の値を「と」で区切って指定できます。 | ||
| + | 改行の有無を指定できます。 | ||
| + | < | ||
| + | xを表示する | ||
| + | 123+456と" | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | println(x); | ||
| + | println(123+456," | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | ===数値=== | ||
| + | 小数点付きの数値を使えます。 | ||
| + | 先頭にマイナス(-)符号を付けられます。 | ||
| + | < | ||
| + | 123 | ||
| + | 123.456 | ||
| + | -123 | ||
| + | </ | ||
| + | |||
| + | ===四則演算=== | ||
| + | +, -, ×, - は小数点を考慮した計算を行います。÷, | ||
| + | < | ||
| + | 1+2 | ||
| + | 1-x*50%4 | ||
| + | </ | ||
| + | |||
| + | ===比較演算=== | ||
| + | >, <, ≧, ≦, =, ≠ を使えます。英語表示では >, <, >=, < =, ==, != を使います。 | ||
| + | < | ||
| + | 1>2 | ||
| + | 2≠1 | ||
| + | </ | ||
| + | |||
| + | ===論理演算=== | ||
| + | 「かつ」「または」「でない」を使えます。英語表示では &&, ||, ! を使います。 | ||
| + | < | ||
| + | 1>2 または 2>1 | ||
| + | 1>0 かつ 5>3 でない | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | 1>2 || 2>1 | ||
| + | !(1>0 && 5>3) | ||
| + | </ | ||
| + | |||
| + | ===文字列=== | ||
| + | " | ||
| + | < | ||
| + | " | ||
| + | 「こんばんは」 | ||
| + | </ | ||
| + | |||
| + | 両辺のどちらかが文字列の場合は、「+」は「数の足し算」ではなく「文字の連結」の意味になります。 | ||
| + | < | ||
| + | 3+" | ||
| + | 「こんばんは」+3 // 結果は" | ||
| + | 3+" | ||
| + | </ | ||
| + | |||
| + | ===配列参照=== | ||
| + | 配列の要素は、配列名の後に[ ]で囲み添え字を書きます。 | ||
| + | 要素は1から始まります。 | ||
| + | 多次元配列は、「, | ||
| + | < | ||
| + | x ← Arr[1] | ||
| + | y ← Arr[1,2] | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | x = Arr[1]; | ||
| + | y = Arr[1][2]; | ||
| + | </ | ||
| + | |||
| + | ===配列の初期値設定=== | ||
| + | 配列の要素の初期値を設定します。 | ||
| + | < | ||
| + | Arrのすべての値を0にする | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | allinit(Arr, | ||
| + | </ | ||
| + | |||
| + | ===関数呼び出し=== | ||
| + | 関数名の後に引数を()で指定します。英語表示では組込関数は英語名になります。 | ||
| + | < | ||
| + | 書く() | ||
| + | 二倍(100) | ||
| + | 乗算(100, | ||
| + | 追加する(Arr, | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | 書く(); | ||
| + | 二倍(100); | ||
| + | 乗算(100, | ||
| + | add(Arr, | ||
| + | </ | ||
| + | |||
| + | ===繰り返し=== | ||
| + | for文に相当する反復は次のように記述します。 | ||
| + | < | ||
| + | iを0から10まで1ずつ増やしながら、 | ||
| + | iを表示する | ||
| + | を繰り返す | ||
| + | |||
| + | iを10から0まで1ずつ減らしながら、 | ||
| + | iを表示する | ||
| + | を繰り返す | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | for( i=0 ; i<=10 ; i+=1 ){ | ||
| + | print(i); | ||
| + | } | ||
| + | for( i=10 ; i>=0 ; i-=1 ){ | ||
| + | print(i); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | while文に相当する反復は次のように記述します。 | ||
| + | < | ||
| + | i←0 | ||
| + | i< | ||
| + | iを表示する | ||
| + | i←i+1 | ||
| + | を繰り返す | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | i=0; | ||
| + | while(i< | ||
| + | print(i); | ||
| + | i+=1; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 回数を指定した繰り返し文は、次のように記述します。 | ||
| + | < | ||
| + | i ← 0 | ||
| + | ここから5回、 | ||
| + | iを表示する | ||
| + | iを1増やす | ||
| + | を繰り返す | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | i=0; | ||
| + | repeat(5){ | ||
| + | print(i); | ||
| + | i+=1; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===条件分岐=== | ||
| + | if文に相当する分岐は次のように記述します。 | ||
| + | < | ||
| + | もし1≠1ならば | ||
| + | 1を表示する | ||
| + | を実行し、そうでなくもし2≠2ならば | ||
| + | 2を表示する | ||
| + | を実行し、そうでなければ | ||
| + | 3を表示する | ||
| + | を実行する | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | if(1!=1){ | ||
| + | print(1); | ||
| + | }else if(2!=2){ | ||
| + | print(2); | ||
| + | }else{ | ||
| + | print(3); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 実行したい文が1文の場合に限り、次のように書くこともできます。 | ||
| + | < | ||
| + | もし1=1ならば" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | if(1==1) print(" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | 以下は独自拡張の機能です。 | ||
| + | |||
| + | |||
| + | ===配列の初期値=== | ||
| + | 値は全体を { } で囲み、「, | ||
| + | < | ||
| + | {1,2,3} | ||
| + | {1, | ||
| + | </ | ||
| + | |||
| + | ===配列の要素を入れ替える=== | ||
| + | 「入れ替える(swap)」は、配列の要素を入れ替えます。 | ||
| + | < | ||
| + | Arr ← {" | ||
| + | 入れ替える(Arr, | ||
| + | </ | ||
| + | |||
| + | ===配列の要素を削除する=== | ||
| + | 「削除(remove)」関数は、番号を指定して配列の要素を削除します。 | ||
| + | < | ||
| + | Arr ← {" | ||
| + | 削除(Arr, | ||
| + | </ | ||
| + | |||
| + | ===配列に要素を挿入する=== | ||
| + | 「挿入(insert)」関数は、番号を指定して要素を挿入します。 | ||
| + | < | ||
| + | Arr←{" | ||
| + | 挿入(Arr," | ||
| + | </ | ||
| + | |||
| + | ===配列の要素数を取得する=== | ||
| + | 「要素数(length)」関数は、配列の要素数を取得します。 | ||
| + | < | ||
| + | Arr←{" | ||
| + | 要素数(Arr) // 結果は3が返される | ||
| + | </ | ||
| + | |||
| + | ===変数の確認=== | ||
| + | 「確認(dump)」関数は、プログラムの中で使われている変数の値を確認します。 | ||
| + | < | ||
| + | Arr ← {1, | ||
| + | x ← 「あいうえお」 | ||
| + | 確認() | ||
| + | |||
| + | (出力例) | ||
| + | 確認------------------- | ||
| + | Arr => { 1, 2, 3, 4, 5 } | ||
| + | x => あいうえお | ||
| + | ----------------------- | ||
| + | </ | ||
| + | |||
| + | ===関数の定義=== | ||
| + | 関数は次のように定義します。 | ||
| + | ()の中に引数を記述できます。 | ||
| + | < | ||
| + | あいさつ()は | ||
| + | 「こんにちは」を表示する | ||
| + | を実行する | ||
| + | |||
| + | 書く(str)は | ||
| + | strを表示する | ||
| + | を実行する | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | function hello(){ | ||
| + | print(" | ||
| + | } | ||
| + | function write(str){ | ||
| + | print(str); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 次の例は、関数に戻り値を設定します。 | ||
| + | < | ||
| + | 二倍(num)は | ||
| + | num×2を返す | ||
| + | を実行する | ||
| + | |||
| + | 二倍(5)を表示する // 10が表示される | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | function twice(num){ | ||
| + | return num*2; | ||
| + | } | ||
| + | print(twice(5)); | ||
| + | </ | ||
| + | |||
| + | ===性能の確認=== | ||
| + | 関数またはプログラムの性能を測定します。 | ||
| + | 以下の内容を測定しています。 | ||
| + | * 実行時間 | ||
| + | * 各for文/ | ||
| + | * 各if文の「条件判定を行った回数」「真が評価された回数」「偽が評価された回数」 | ||
| + | * 各関数の呼出回数 | ||
| + | |||
| + | 次の例は、関数の性能を測定します。 | ||
| + | < | ||
| + | 倍数判定()は | ||
| + | xを1から10まで1ずつ増やしながら、 | ||
| + | xを改行なしで表示する | ||
| + | もしx%3=0ならば | ||
| + | 「< | ||
| + | を実行し、そうでなければ | ||
| + | 改行を表示する | ||
| + | を実行する | ||
| + | を繰り返す | ||
| + | を実行する | ||
| + | 倍数判定()の性能を確認する | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | function is_multiple(){ | ||
| + | for( x=1 ; x<=10 ; x+=1 ){ | ||
| + | print(x); | ||
| + | if(x%3==0){ | ||
| + | println("< | ||
| + | }else{ | ||
| + | println(\n); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | profile(is_multiple()); | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | (出力例) | ||
| + | 1 | ||
| + | 2 | ||
| + | 3< | ||
| + | 4 | ||
| + | 5 | ||
| + | 6< | ||
| + | 7 | ||
| + | 8 | ||
| + | 9< | ||
| + | 10 | ||
| + | 統計情報------------------ | ||
| + | (実行時間) | ||
| + | 0.007秒 | ||
| + | (実行回数) | ||
| + | for1 : 10 | ||
| + | if1 : 比較 10, 真 3, 偽 7 | ||
| + | (呼び出し回数) | ||
| + | 倍数判定 : 1 | ||
| + | -------------------------- | ||
| + | </ | ||
| + | |||
| + | 次の例は、プログラム全体の性能を確認します。 | ||
| + | < | ||
| + | 倍数判定()は | ||
| + | xを1から10まで1ずつ増やしながら、 | ||
| + | xを改行なしで表示する | ||
| + | もしx%3=0ならば | ||
| + | 「< | ||
| + | を実行し、そうでなければ | ||
| + | 改行を表示する | ||
| + | を実行する | ||
| + | を繰り返す | ||
| + | を実行する | ||
| + | 倍数判定() | ||
| + | 倍数判定() | ||
| + | 性能を確認する | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // 英語表示 | ||
| + | function is_multiple(){ | ||
| + | for( x=1 ; x<=10 ; x+=1 ){ | ||
| + | noNL_print(x); | ||
| + | if(x%3==0){ | ||
| + | print("< | ||
| + | }else{ | ||
| + | print(\n); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | is_multiple(); | ||
| + | is_multiple(); | ||
| + | performance(); | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | (出力例) | ||
| + | 1 | ||
| + | 2 | ||
| + | 3< | ||
| + | 4 | ||
| + | 5 | ||
| + | 6< | ||
| + | 7 | ||
| + | 8 | ||
| + | 9< | ||
| + | 10 | ||
| + | 1 | ||
| + | 2 | ||
| + | 3< | ||
| + | 4 | ||
| + | 5 | ||
| + | 6< | ||
| + | 7 | ||
| + | 8 | ||
| + | 9< | ||
| + | 10 | ||
| + | 統計情報------------------ | ||
| + | (実行時間) | ||
| + | 0.018秒 | ||
| + | (実行回数) | ||
| + | for1 : 20 | ||
| + | if1 : 比較 20, 真 6, 偽 14 | ||
| + | (呼び出し回数) | ||
| + | 倍数判定 : 2 | ||
| + | -------------------------- | ||
| + | </ | ||
