センター試験のプログラミング言語を用いた
プログラミング教育
中西渉
watayan@meigaku.ac.jp
名古屋高等学校2019 年 12 月 26 日

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

1 / 32

準備

1

準備

Web ブラウザを起動してhttps://watayan.net/misc/ipsj2019/にアクセスしてください。

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

2 / 32

準備

DNCL について
センター試験「情報関係基礎」で使われるプログラミング言語
もともとは擬似言語→ PEN という実行環境中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

3 / 32準備

PEN にフローチャートを追加→ PenFlowchart

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

4 / 32

準備

PenFlowchart を Web ブラウザ上で→ WaPEN (Web-aided PEN)中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

5 / 32

準備

WaPEN のいいところ
インストール不要（Java，Flash 不要）
自分のサーバに置けば. . .
サンプルプログラムを変更できる
細かい手直しができる

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

6 / 32

準備「サンプル 1」〜「サンプル 8」を呼び出して実行してみてください（「サンプル 9」「サンプル 10」は後で使います）
プログラムを読みながら，何をしているか読み取ってください中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

7 / 32

xDNCL の文法

2xDNCL の文法

プリントを参照してください中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

8 / 32

練習3

練習

ガチャのシミュレーションを作ってみよう
景品は 10 種類すべて等確率
全種類揃うまでに何回引くか

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

9 / 32

練習WaPEN の準備「新規」ボタンで空っぽにする
コードでもフローチャートでも好きな方で（できればコードで）注意
ワープロを打つように 1 文字ずつ打ち込むのはダメ

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

10 / 32

練習(01)
整数 kaisu,ransu,keihin[10],nuke,n
変数の宣言
コード 「整数」ボタンを押して，変数を書き並べる
フローチャート 「整数」の空欄に，変数を書き並べる

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

11 / 32

練習(02)〜(03)kaisu ← 0keihin ← [0,0,0,0,0,0,0,0,0,0]
代入
コード 「代入」ボタン→変数と値を書き込む
フローチャート 縦棒で右クリック→「代入」を選ぶ
代入記号で右クリック→「編集」→変数と値を書き込む(03) の 0 は 10 個です。

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

12 / 32

練習(04)〜(15)繰り返し，｜を，nuke=0 になるまで実行する
繰り返し
コード 「〜になるまで実行する」ボタン
フローチャート 「ループ」→「後条件」
文字下げの「｜」は（だいたい）自動的に挿入される

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

13 / 32

練習(05)〜(09)kaisu ← kaisu+1
ransu ← random(9)+1keihin[ransu] ← keihin[ransu]+1
kaisu と keihin を表示する
nuke ← 0
代入と出力（繰り返しの中で）
コード 「代入」ボタン，「出力」ボタン
Enter で新しい行
フローチャート 「代入」，「出力」

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

14 / 32

練習(10)〜(14)n を 1 から 10 まで 1 ずつ増やしながら，｜を繰り返す（変数を増やしながら）繰り返し
コード 「増やしながら」ボタン
フローチャート 「ループ」→「増やしながら」中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

15 / 32

練習(11)〜(13)もし keihin[n]=0 ならば｜を実行する
分岐
コード 「もし」ボタン
フローチャート 「分岐」

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

16 / 32

練習(12)nuke ← 1代入※どの繰り返しの中でどの繰り返しの外であるかに注意中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

17 / 32

練習出来上がったら. . .
実行して確認
うまくいかなければ修正改造案（例）
100 回の平均を求める
レアを設定する

参考

n 種類の景品のガチャをコンプリートするための回数の期待値は()
1 1 11n+ + + ··· +1 2 3nn = 10 のときの期待値は 29.28 . . .
中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

18 / 32

練習プログラムを見直してみる

(01)
(02)
(03)
(04)
(05)
(06)
(07)
(08)
(09)
(10)
(11)
(12)
(13)
(14)
(15)

整数 kaisu,ransu,keihin[10],nuke,nkaisu ← 0keihin ← [0,0,0,0,0,0,0,0,0,0]
繰り返し，｜ kaisu ← kaisu+1｜ ransu ← random(9)+1｜ keihin[ransu] ← keihin[ransu]+1｜ kaisu と keihin を表示する｜ nuke ← 0｜ n を 1 から 10 まで 1 ずつ増やしながら，｜｜もし keihin[n]=0 ならば｜｜｜ nuke ← 1｜｜を実行する｜を繰り返すを， nuke=0 になるまで実行する

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

19 / 32

センター試験の問題を解いてみる

4

センター試験の問題を解いてみる

2019 年度センター試験「情報関係基礎」第 3 問
これから解いてみよう
まず 30〜31 ページの振り分け方法をよく読んでください中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

20 / 32

センター試験の問題を解いてみる

方法 1
最初に埋まる 2 グループは 3 人
残りは 2 人
くじの順位 12
生徒の名前 A B
第 1 希望春 秋
第 2 希望秋 春
第 3 希望夏 冬
第 4 希望冬 夏
季節 決まった人数
春夏
秋冬中西渉 (名古屋高等学校)

3C

4D5E6F

7G

8H

9I

10J

春
秋
夏
冬

春
秋
冬
夏

春
夏
冬
秋

夏
春
秋
冬

春
夏
秋
冬

秋
春
夏
冬

春
秋
冬
夏

春
夏
秋
冬

情報処理学会教員免許更新講習

2019 年 12 月 26 日

21 / 32

センター試験の問題を解いてみる

33 ページのプログラムを作ってみよう「サンプル 9」の《ケ》〜《ス》
実行して正しい結果が得られれば（たぶん）OK
問題文にヒントがある（変数の意味は大事）

teiin はグループ人数の上限
基本的には syog は上限に達したグループ数
amari 個のグループは定員を 1 増やす→g<amari の間は teiin を syo+1 にする
Gninzu は各グループに振り分けられた人数

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

22 / 32

センター試験の問題を解いてみる

答え合わせ《ケ》 g<amari《コ》 Gninzu[koho]《サ》 Gninzu[koho]《シ》 owari=1《ス》 Gninzu[i]中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

23 / 32

センター試験の問題を解いてみる

方法 2
第 1 希望の多い春と秋は 3 人
残りは 2 人
くじの順位 12 3 4
生徒の名前 A B C D
第 1 希望春 秋 春 春第 2 希望秋 春 秋 秋
第 3 希望夏 冬 夏 冬第 4 希望冬 夏 冬 夏
季節 定員 決まった人数
春
3夏
2
秋
3冬
2

中西渉 (名古屋高等学校)

5
E

6F

7
G

8
H

9I

10J

春
夏
冬
秋

夏
春
秋
冬

春
夏
秋
冬

秋
春
夏
冬

春
秋
冬
夏

春
夏
秋
冬

情報処理学会教員免許更新講習

2019 年 12 月 26 日

24 / 32

センター試験の問題を解いてみる

35 ページのプログラムを作ってみよう「サンプル 10」の《セ》〜《チ》（《コ》《シ》《ス》は 33 ページと同じ）実行して正しい結果が得られれば（たぶん）OK

Kibosu は各グループの第 1 希望の人数
Gteiin は各グループの上限→ Kibosu をカウントして，それを用いて Gteiin を決める
Kibosu が多い方から amari 個のグループは Gteiin を 1 増やす
syo+1 が選択肢にないことに注意中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

25 / 32

センター試験の問題を解いてみる

答え合わせ《セ》 Kibosu[g]+1《ソ》 Kibosu[j]《タ》 syo《チ》 Gteiin[g]+1《コ》 Gninzu[koho]《シ》 owari=1《ス》 Gninzu[i]中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

26 / 32

センター試験の問題を解いてみる

最後の解答欄《ツテ》の答えは?
図 2 の (20) はサンプル 10 では 41 行
回数を数えるための変数 kaisu を追加
プログラムの最初の方で kaisu に 0 を代入しておく（↑これでずれた）42 行の直後に kaisu を 1 増やす
最後に kaisu を表示する

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

27 / 32

考察

考察

5

変数の意味は超重要
手作業でやるとしたらどうするかを考える
たとえば方法 2 では
1

各グループの第 1 希望数→ Kibosu

2

各グループの定員 Gteiin を syo で初期化

3

「Kibosu の多い順に Gteiin を 1 増やす」を amari 回行う

この 3 つがプログラムの 3 つのループ

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

28 / 32

おわりに

6

おわりに「情報」の教科書で使われている言語. . . JavaScript，Excel VBA
でも，DNCL もいいものです
英語の壁を避けられる
他の手続き型言語への橋渡し
筆記試験がやりやすい
教科書では取り上げられてないけど. . .
テキストなんて自分で作ればいい「基本」はだいたい同じ

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

29 / 32

おわりにPyPEN なんてものも作ってみました
流行りの Python っぽい感じ
Python への「翻訳」もできる

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

30 / 32

おわりに「基本」って何だろう
処理を分解して考える
処理しやすいように読み替える

どこまで分解したらいいか
環境に合わせた「公式」まで理解している「構文」まで→ どんな言語・環境でも通用する→ 数学の問題でも同じことをしてる→ どんな勉強でも通用する

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

31 / 32

本スライドおよび配布資料（ただしセンター試験の問題・解答は除く）の著作権者は中西渉であり，クリエイティブ・コモンズ 表示
4.0 国際で公開する

中西渉 (名古屋高等学校)

情報処理学会教員免許更新講習

2019 年 12 月 26 日

32 / 32