見出し画像

新DNCL文法解説~情報Ⅰ共通テスト対策(共通テスト用プログラム表記)

動画制作時点では未決定でしたが、情報ⅠではDNCLではなく「共通テスト用プログラム表記」という名称が正です。(2023/11/4の情報処理学会シンポジウム 入試センター水野調査官のコメントより) 情報関係基礎で用いられてきた「DNCL」と情報Ⅰの「共通テスト用プログラム表記」の違いは以下を参照お願いします。


動画解説

書籍出版します!

はじめに

2025年からの情報Ⅰ共通テストで使われる 共通テスト用プログラム表記の新文法の解説をしていきます。
※動画制作時点では「共通テスト用プログラム表記」という名称が未決定だったため、新DNCLという名称で説明させて頂いています。

2025年からの情報Ⅰ共通テストのプログラミングの問題では
特定言語に依存しない共通テスト手順記述標準言語 DNCLが使われます。
DNCLは、Daigaku Nyushi Center Language の略と言われています。
情報関係基礎でもDNCL(共通テスト手順記述標準言語)が使われています。
以前の動画で情報関係基礎のDNCLの文法を説明しましたが、
2025年からの情報ⅠのDNCLと異なる部分があるため、2022/11/9に大学入試センターが発表した、試作問題の資料をベースに文法解説を行います。
ここでは、違いを分かりやすくするため
情報関係基礎のDNCLを「旧DNCL

https://www.dnc.ac.jp/albums/abm.php?f=abm00040701.pdf&n=令和3年度試験共通テスト手順記述標準言語(DNCL)の説明.pdf

情報ⅠのDNCLを「新DNCL」と呼ばせて頂きます。


Pythonなど具体的なプログラミング言語の学習を一通り終了し、変数、配列などプログラミングの基礎は習得している前提で説明していきます。

また、問題文の記述を簡潔にするなどの理由で,この説明文書の記述内容に従わない形式で出題されることもあります。問題文の中の説明や指示に注意し,それらに沿って解答してください。 と注意書きがあります。

解説資料ダウンロード

文法解説 文字おこし

まず、変数と値について説明していきます。
変数名は,英字で始まる英数字と『_ 』の並びです。

特に指示がない限り、
・小文字で始まる変数は通常の変数を表します。
 たとえばkosu などの変数名が該当します。
ローマ字読みで、コスとも呼びますが、この問題では宝の個数の変数だったので個数と呼ばせてもらいます。

 アンダースコアを文字の途中に入れて、kosu_gokei という名前を付けることも可能です。
・大文字で始まる変数は配列を表します。
 たとえばはじめが大文字のTokuten などの変数名が該当します。
・すべて大文字の変数は実行中に変化しない値を表します。一般的には定数と読んだりします。


配列についてもう少し詳しく見ていきます。配列の要素は、要素番号を添字で指定します。
添字の値は0以上の整数になります。
過去の情報関係基礎では問題によっては1以上つまり1から始まる場合もあったので、
問題文をよく読んで添字が何番から始まるかを確認してください。
一次元配列Tokutenの要素番号が0から始まる場合、Tokuten[2]を指定すると、3番目の43の値が取得できます。

仮に要素番号が1から始まる場合、Tokuten[2]を指定すると2番目の56の値がとれます。

2次元配列の場合は、添字をカンマで区切り、行と列の添字を指定します。
例えば、添字が0から始まる場合でGyoretu[3,2] の場合
4行、3列目の23の文字が取得できます。


つぎは数値の表し方で、数値は特に断らない限り, 10 進法で表します。
例えば100 や 99.999 は10進法になります。

文字列に関しては,文字の並びを『" 』と『" 』でくくって表します。
例えば: "It was found."のように表現します。

文字列はプラス記号で連結することができ。
“吾輩は” + “猫である“は、「吾輩は猫である」となります。

―――

つぎは数値や文字列や変数の値を表示する表示文について説明します。
表示文では,表示関数を使い、表示するの丸カッコ内に表示する値を記述します。

例えば
 こんにちは という文字列を表示する場合は 表示する("こんにちは") と記述します。

値は、カンマで連結することも可能。
 変数 kosuと「個見つかった」を表示する プログラムでは、
変数kosuに3が代入されているとすると。実行すると「3個見つかった」と表示されます。

――

つぎは変数に値を設定する代入文について説明します。
『=』の左辺に変数または添字付きの配列を,右辺に代入する値を書きます。
旧DNCLでは← だったのが = に変わりました。

例えば変数 kosuに3を代入する場合は 
例: kosu =3
Tokuten配列の添字4に100を代入する場合は
例: Tokuten[4] = 100
 
Tokuten配列の1番目に87、2番目に45、3番目に72、4番目に100を代入する場合はこのよう角括弧の中に、代入したい値をカンマで区切って記述することもできます。
例: Tokuten = [87, 45, 72, 100]


複数の代入文を,『, 』で区切りながら,横に並べることができます。
この場合は,代入文は左から順に実行されます。

Tokuten配列の全ての要素に0を設定する場合
  Tokutenの全ての値を0にする と記述します。

外部から入力された値を代入する表現方法として スミカッコを使います。
例: x =【外部からの入力】
のようにあらわすことができます。

――

つぎは算術演算について説明します。

加減乗除の四則演算は,『+』,『-』,『*』,『/ 』で指定します。
整数の除算では,商を『÷』で,余りを『%』で計算することができます。
べき乗は『**』で表します。
例えば
atai = 7 / 2  (atai には3.5 が代入されます。)
syo =7÷ 2  (syo には3 が代入されます。)
amari = 10% 3 (amari には10を3で割った余りの1 が代入されます。)
beki = 2**3  変数bekiに2を3乗した8が代入されます。


複数の演算子を使った式の計算では,基本的に左側の演算子が先に計算されますが,『*』,『/ 』,『÷』,『%』は, 『+』,『-』より先に計算されます。
また,丸括弧『(』と『)』で式をくくって,演算の順序を明示することができます。

例: kosu= 1+ kazu÷ 3 は, kazu÷3が先に計算され、1が加算されます。
kosu = 1+ (kazu÷ 3) と同じです。
もし、1+kazuを先に計算したい場合は(1+kazu)÷3とします。

―――

つぎは比較演算について説明していきます。
数値の比較演算は,『==』,『!=』,『>』,『>=』,『<=』,『<』で指定します。演算結果は,真か偽の値となります。
例: kosu > 3 (kosu が3 より大きければ真となります。)
例: ninzu* 2 <= 8 (ninzu の2 倍が8 以下であれば真となります。)
例: kaisu != 0 (kaisu が0 でなければ真となります。)
kaisu == 0    kaisu が0 ならば真となる。


文字列の比較演算は,『==』,『!=』を利用することができます。
『==』は,左辺と右辺が同じ文字列の場合に真となり,
それ以外の場合は偽となります。『!=』は,左辺と右辺が異なる文字
列の場合に真となり,それ以外の場合(同じ文字列の場合)は偽となります。

例: 「あいうえお」==「あいうえお」(真となります。)
例: 「あいうえお」==「あいう」(偽となります。)
例: "ABC"=="ABC" (真となります。)
例: "ABC"=="abc" (偽となります。)
例: 「あいうえお」!=「あいうえお」(ノットイコールはイコールではないという意味で、この場合はあいうえおとあいうえおはイコールなので「偽」となります。)

例: 「あいうえお」!=「あいう」(あいうえおと、あいうはイコールではないので真となります。)
例: "ABC"!="ABC" (偽となります。)
例: "ABC"!="abc" (真となります。)

――――

つぎに論理演算について説明します。
論理演算は,真か偽を返す式に対する演算で,『and』(論理積),『or』(論理和),『not』(否定)の演算子で指定します。

『〈式1〉and〈式2〉』は, 〈式1〉と〈式2〉の結果がいずれも真である場合に真となり,それ以外の場合は偽となります。
例: kosu ≧ 12 and kosu ≦ 27 (kosu が12 以上27 以下なら真となります。)

『〈式1〉or〈式2〉』は, 〈式1〉と〈式2〉の結果のどちらかが真である場合に真となり,それ以外の場合は偽となります。
例: kosu% 2 == 0 or kosu < 0 (kosuを2で割った余りが0となる数は偶数なのでkosu が偶数か負の値なら真となります。)

――


つぎは制御文について説明していきます。
今から説明する、条件分岐文や条件繰返し文,順次繰返し文をまとめて制御文と呼びます。


まず条件分岐文について説明します。
条件分岐文は, 〈条件〉が成り立つかどうかによって,実行する処理を切り替えます。
〈条件〉が成り立つかどうかによって,実行する処理を切り替える。
〈条件〉が成り立つときにある処理を実行する。

例えばこの処理をxが2、yが1の場合で追っていきます。

条件は2<3が真となるので、字下げしている処理の中に入ります。
xは2なので 2+1で3がxに代入されます
次の処理でyは1なので1+1で2がyに代入されます。

―――


〈条件〉が成り立つときにある処理を実行し,〈条件〉が成り立たないときに別の処理を実行する場合は,次のように『ならば』と『そうでなければ』を組み合わせて指定します。

この例の場合、x=x-1の処理は、xが3の時に実行される処理
その条件に当てはまらない時はy=y*2が実行されます。


条件分岐の中で複数の条件で実行する処理を切り替えたい場合は,
『ならば』と『そうでなければ』の間に
『そうでなくもし』を使って条件を追加します。

この例の場合、x=x-1の処理は、xが3以上の時に実行される処理

x=x*2の処理は、xが3以上の条件にあてはまらず、xが0より小さい時に実行される処理

y=y*2の処理は上記の全ての条件に当てはまらない時に実行される処理になります。


★繰り返し
繰返し文は
〈条件〉が成り立つ間, 〈処理〉を繰り返し実行する。
〈処理〉を実行する前に〈条件〉が成り立つかどうか判定されるため,〈処理〉が1 回も実行されないことがある。
この例の場合、nが10よりも小さい間、処理が繰り返されます。
nを増やす処理が無いと永久にループしてしまいます。
縦棒とL字の記号はループの範囲を表していて、L字記号は制御文の終わりを示します。


〈変数〉の値を増やしながら,〈処理〉を繰返し実行する場合は、
<変数>を<初期値>から<終了値>まで<差分>ずつ増やしながら繰り返す: と記述します。

この場合は、変数xに0から9までの値が1ずつカウントアップされながらループが繰り返されます。
減らしながらというパターンも出題される可能性があります。
―――


最後に関数について説明します。

関数には値を返すものと値を返さないものがあります。関数の動作は,問題文の中で定義されます。

値を返す関数の問題文の例としては
• 指定された値の二乗の値を返す関数「二乗」を用意する 
とあった場合
y=二乗(x) はxを2乗した値がyに代入されます。 
関数名の丸カッコ内に関数に受け渡す値であるパラメータ(引数)を書きます。

値m のn 乗の値を返す関数「べき乗(m,n)」を用意する とあった場合
z=べき乗(x,y)は
xをy乗した値がzに代入されます。このように複数パラメータある場合はカンマで区切ります。

• 値m 以上 値n 以下の整数をランダムに一つ返す関数「乱数(m,n)」を用意する

とあった場合、
r = 乱数(1,6) は(r に1 から6 までの整数のうちいずれかが代入されます。)

• 値n が奇数のとき真を返し,そうでないとき偽を返す関数「奇数(n)」を用意する
の様なものがあります。

奇数(3)は真(True)となり、奇数(4)は偽(False)を返却します。

――

値を返さない関数は問題文の中で
指定された値を2 進数で表示する関数「二進数で表示する」を用意する
とあった場合

二進数で表示する(3) とした場合、関数の処理内で11が表示されます。

2025年からの情報Ⅰで使われる、共通テスト用手順記述標準言語(DNCL) の基本の解説は以上になります。
旧DNCLで記述したオリジナル問題集については、順次新DNCLの記述に変更していく予定です。

最後までご視聴ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?