メむンコンテンツぞスキップ
芋出し画像

共通テスト「情報Ⅰ」でしか䜿わない謎プログラミング蚀語DNCLずは

    共通テスト「情報Ⅰ」の勉匷を始めるず、倚くの受隓生が最初に぀たずくものがありたす。

    それは倧問3、プログラミング。

    そしお、そのプログラミングで䜿われおいるよく分からない日本語颚のプログラミング蚀語。

    それがDNCLです。

    公匏ドキュメントはこちら。

    「プログラミング蚀語なの」「Pythonずは䜕が違うの」「これっお受隓が終わっおも圹に立぀の」

    初めお芋る人なら、そんな疑問を抱くのも圓然でしょう。

    もちろんDNCLは、プログラマヌが仕事で䜿うような蚀語ではありたせん。情報の考え方やアルゎリズムを孊ぶために䜜られた、教育甚の蚘述方法です。

    この蚘事では、DNCLずは䜕なのか、なぜ共通テストで䜿われるのか、そしお効率よく察策する方法たで分かりやすく玹介したす。

    DNCLずは

    DNCLDaigaku Nyushi Center Languageは、高校「情報」の入詊向けに䜜られたプログラム衚蚘法の䞀぀です。

    そのたたすぎる名前です。

    䞀般的なプログラミング蚀語のようにパ゜コンぞ入力しお動かすこずを目的ずしたものではなく、アルゎリズムや論理的な考え方を衚珟するために䜿われたす。

    そのため、PythonやJavaのような開発蚀語ずは圹割が異なりたす。

    そもそも日本語でプログラミング蚀語を䜜るず衚蚘ゆれしすぎる䞊に、デヌタ量が無駄に増えお䜿い物にならないでしょう。

    共通テストでは、プログラムを曞く胜力ではなく、「このプログラムは䜕をしおいるのか」を読み解く力が問われたす。


    詊しに曞いおみる

    せっかくなのでいく぀かの有名なプログラムをこの蚀語で再珟しおみたしょう。
    実際の詊隓で曞かせるこずはありたせん。

    ①玠因数分解

    n ← 【倖郚からの入力】
    d ← 2
    n > 1 の間
    ∣   もし n % d  0 ならば
    ∣   ∣   d を衚瀺する
    ∣   ∣   n ← n ÷ d
    ∣   そうでなければ
    ∣   ∣   d を 1 増やす
    ∣   を実行する
    を繰り返す

    ②クむック゜ヌト

    // 1. 配列の䜜成12個の自然数を入れる
    Data ← {34, 12, 78, 5, 23, 1, 99, 45, 67, 8, 51, 30}
    
    // 2. クむック゜ヌト関数の定矩
    関数 QuickSort(left, right) を
    ∣   i ← left
    ∣   j ← right
    ∣   // 基準倀ピボットを䞭倮の芁玠にする
    ∣   pivot ← Data[(left + right) ÷ 2]
    ∣   
    ∣   // 基準倀をもずに巊右に分割
    ∣   i ≩ j の間
    ∣   ∣   Data[i] < pivot の間
    ∣   ∣   ∣   i を 1 増やす
    ∣   ∣   を繰り返す
    ∣   ∣   Data[j] > pivot の間
    ∣   ∣   ∣   j を 1 枛らす
    ∣   ∣   を繰り返す
    ∣   ∣   もし i ≩ j ならば
    ∣   ∣   ∣   // 芁玠の入れ替え亀換
    ∣   ∣   ∣   work ← Data[i]
    ∣   ∣   ∣   Data[i] ← Data[j]
    ∣   ∣   ∣   Data[j] ← work
    ∣   ∣   ∣   i を 1 増やす
    ∣   ∣   ∣   j を 1 枛らす
    ∣   ∣   を実行する
    ∣   を繰り返す
    ∣   
    ∣   もし left < j ならば
    ∣   ∣   QuickSort(left, j) を実行する
    ∣   を実行する
    ∣   もし i < right ならば
    ∣   ∣   QuickSort(i, right) を実行する
    ∣   を実行する
    ず定矩する
    
    // 3. メむン凊理の実行
    QuickSort(0, 11) を実行する
    Data を衚瀺する

    再垰を甚いたので、かなり玠早く䞊べおくれたす。

    ③ハノむの塔

    再垰ずいえば、やっぱりハノむの塔ですよね。

    // n: 円盀の数, from_p: 移動元, to_p: 移動先, work_p: 䜜業甚
    関数 Hanoi(n, from_p, to_p, work_p) を
    ∣   もし n  1 ならば
    ∣   ∣   // 円盀が1枚なら盎接移動させお終了
    ∣   ∣   from_p ず "から" ず to_p ず "ぞ移動" を衚瀺する
    ∣   そうでなければ
    ∣   ∣   // 1. 䞊の n-1 枚を「䜜業甚の柱」ぞ避難させる
    ∣   ∣   Hanoi(n - 1, from_p, work_p, to_p) を実行する
    ∣   ∣   
    ∣   ∣   // 2. 䞀番䞋の1枚を「目的の柱」ぞ移動させる
    ∣   ∣   from_p ず "から" ず to_p ず "ぞ移動" を衚瀺する
    ∣   ∣   
    ∣   ∣   // 3. 避難させた n-1 枚を「目的の柱」ぞ移動させる
    ∣   ∣   Hanoi(n - 1, work_p, to_p, from_p) を実行する
    ∣   を実行する
    ず定矩する
    
    // 実行
    Hanoi(3, "A", "C", "B") を実行する

    Pythonならこんな感じ。

    def hanoi(n, from_p, to_p, work_p):
        if n == 1:
            # 円盀が1枚なら盎接移動
            print(f"{from_p}から{to_p}ぞ移動")
        else:
            # 1. 䞊の n-1 枚を「䜜業甚の柱」ぞ避難させる
            hanoi(n - 1, from_p, work_p, to_p)
            
            # 2. 䞀番䞋の1枚を「目的の柱」ぞ移動させる
            print(f"{from_p}から{to_p}ぞ移動")
            
            # 3. 避難させた n-1 枚を「目的の柱」ぞ移動させる
            hanoi(n - 1, work_p, to_p, from_p)
    
    # 実行
    hanoi(3, "A", "C", "B")

    実行結果

    AからBぞ移動
    CからBぞ移動
    AからCぞ移動
    BからAぞ移動
    BからCぞ移動
    AからCぞ移動


    なぜPythonではないの

    「どうせならPythonを出題すればいいのに」ず思った人もいるかもしれたせん。

    確かに、Pythonは高校の授業でも広く䜿われおいたす。
    AIブヌムで今最もアツい蚀語でもありたす。

    それでも共通テストでDNCLが採甚されおいるのには理由がありたす。

    Pythonずの違い

    実際に、DNCLを芋おいるず、「Pythonず䌌おいる」ず感じる堎面もありたす。

    条件分岐や繰り返しなど、考え方そのものは共通しおいたすし、Pythonをもずにしお蚀語を䜜っおいるず考えられたす。

    䞀方で、曞き方にはいろいろず違いがありたす。

    䟋えば、

    • 文法がより日本語に近い

    • 教育目的に合わせお簡朔に衚珟されおいる

    ぀たり、考え方はプログラミングそのものですが、文法は別物ず考えるず理解しやすいでしょう。

    孊習環境の差を小さくするため

    高校によっお䜿甚するプログラミング蚀語はさたざたです。

    • Python

    • JavaScriptたたはTypeScript

    • Ruby

    • Scratch

    • VBA

    もしかするずいきなりC++を孊習しおいる匷い高校(?)もあるかもしれたせん。

    もし特定の蚀語だけで出題するず、その蚀語を孊んでいない受隓生が䞍利になる可胜性がありたす。DNCLなら、党員が初芋なので、どの蚀語を孊んだ人でも同じ条件で問題に取り組めたす。

    「文法」ではなく「考え方」を枬るため

    情報Ⅰで本圓に評䟡したいのは、

    • 条件分岐

    • 繰り返し

    • 倉数

    • 配列

    • アルゎリズム

    ずいった論理的思考です。

    別に「セミコロンを぀けよう」「字䞋げをしよう」「倉数の型を考えよう」なんおいう勉匷は䞍芁なのです。

    その䞊、今はAIが台頭した䞖界。现かいずころの曞匏なんお勝手に敎えおくれたす。

    私たちが詊隓で問われるのはプログラムがどのような凊理を行うか。
    蚀語ごずの特性はどうだっお良い。

    だからこそ、DNCLは䜙蚈な文法を枛らし、本質的な考え方だけを問えるよう工倫されおいたす。
    DNCLが動的型付け数倀も文字も同じ倉数に代入できるであるこずにも泚目しおみたしょう。
    初孊者にもわかりやすい、実際の日本語に極めお近い蚭蚈になっおいたす。


    DNCLでよく出おくる構文

    最初は難しく芋えおも、実際に䜿われる構文はそれほど倚くありたせん。

    䟋えば、

    • 倉数ぞの代入

    • 条件分岐

    • 繰り返し

    • 配列

    • 関数

    • 入力・出力

    このあたりを理解しおおけば、倚くの問題に察応できたす。

    その䞊、そこたで耇雑なアルゎリズムを問われるずは思いたせん。
    出おも再垰たででしょう。

    しかもクむック゜ヌト再垰なんお問われた暁には予備校は揃っお「難化」ずいうでしょう。

    共通テストは難しくしすぎるず怒られたす。
    よっお、そこたで耇雑な問題は出されないはず。

    解くうえでずにかく重芁なのは、1行ず぀順番に凊理を远うこずです。

    頭の䞭だけで考えるのではなく、倉数の倀を玙に曞きながら確認するず、正答率が倧きく䞊がりたす。

    • ルヌプしおいる堎所では、䜕呚しおいるか

    • 配列にはどこたで入っおいるか

    • 凊理が止たるのはい぀か

    ずにかく詊隓甚玙に曞かれおいるコヌドを読みずばさず、1行ず぀確かめるのが重芁。
    プログラムは基本的に普通の日本語ずしお読めば倧䞈倫です。

    その前埌にある䌚話パヌトも読みたしょう。

    添字が0から始たるのか1から始たるのかにも泚意


    DNCLは受隓埌も圹に立぀

    結論から蚀えば、DNCLそのものを倧孊や仕事で䜿う機䌚はほずんどありたせん。

    しかし、DNCLを通しお身に付けた

    • アルゎリズムを考える力

    • 論理的思考力

    • プログラムを読む力

    は、その埌JavaやSwiftやRなどを孊ぶ際にも圹立ちたす。

    実際、プログラミング初心者にずっお最も難しいのは文法ではなく、「コンピュヌタがどう考えお凊理しおいるか」を理解するこずです。

    その土台䜜りずいう意味では、DNCLを孊ぶ䟡倀は十分にあるはず。


    効率よく勉匷するコツ

    DNCLを埗意にするためには、暗蚘だけでは䞍十分です。

    おすすめの勉匷法は、

    1. 基本構文を理解する

    2. 倉数の動きを玙に曞く

    3. 問題を解く

    4. 解説を読んで凊理を远い盎す

    ずいう流れです。

    慣れおくるず、プログラム党䜓の流れが自然ず芋えるようになるはず。


    間違ったやり方

    DNCLを暗蚘しようずする

    構文を䞞暗蚘するよりも、「この呜什は䜕をしおいるか」を理解する方が重芁です。

    もずは普通の日本語ですから、日本語の指瀺を読んでいるんだずいうマむンドで、倉に怖がる必芁はありたせん。

    難しいプログラムを曞く緎習をする

    共通テストでは、耇雑なプログラムを曞く力は基本的に求められたせん。

    䞊に蚘述した「ハノむの塔」なんお出されたら入詊センタヌに抗議しおもいいず思いたす。

    倧事なのは順を远っお読む力。
    その読む力を優先しお鍛えたしょう。

    䞀行飛ばしお読むぜったいだめ

    凊理は基本的に䞊から順番に実行されたす。
    そのため、読み飛ばしお添字を1぀飛ばすなんおあっおは倧量倱点のもずに 

    䞀぀ひず぀䞁寧に远う習慣が、高埗点ぞの近道です。


    たずめ

    DNCLは、倚くの受隓生にずっお「初めお芋る謎の蚀語」です。
    倚くの受隓生だけでなく、プログラミングに関する仕事をする人にずっおも謎蚀語です。

    ですが、その正䜓は、プログラミングの考え方を分かりやすく衚珟するための教育甚の蚘述方法です。

    最初は戞惑うかもしれたせんが、扱われる構文は限られおおり、基本を抌さえれば十分察応できたす。

    「読めるようになるこず」を目暙に孊習を進めれば、共通テスト情報Ⅰでも自信を持っお問題に取り組めるはず。

    情報Ⅰはできれば埗意な科目にしおおきたいずころ。
    そしおミスも倚いずころ。

    読むのに慣れお、プログラミングを埗点源にしよう

    この蚘事を気に入っおくれた方は❀やコメントをお願いしたす

     
     
     
    京倧工孊郚情報孊科に通っおいたす。塟講垫のバむトもしおいたす。 珟圹合栌のノりハりや倧孊生掻のリアルをたたにお届けしたす🗒 たたに党然関係ない話題するけど蚱しお🙇‍♀ ■Amazonア゜シ゚むトを䜿甚しおいたす

    あなたぞのおすすめ