全高情研16

Python & DNCLで書かれた典型的なアルゴリズムの解読と実装

愛知県立一宮高等学校

鈴木 淳子

目次
1.学校紹介＆自己紹介
2.本校におけるプログラミング教育の方向性

3.具体的な方法の提案
3-1 概要3-3 題材紹介

3-2 授業の流れ

3-4 評価4.指導要領による裏付け
5.まとめ

１．学校紹介＆自己紹介

勤 務 校 紹 介

SSH
普通科

データサイエンス教育

８クラス×３学年

ファッション
創造科
１クラス×３学年

R5年度の重点目標の１つ

自 己 紹 介 ～ オモテVer. ～
鈴木 淳子

触った言語

大学で物理専攻（宇宙線）↓Basic（お遊び）電機メーカーでソフトウェア開発（CADCAM）↓Ｃ言語
個人事業主（高速道路掲示板システム↓・出退勤管理システム等）
情報の先生に！
Ｃ＃自 己 紹 介～ ウラVer. ～情報教員になったきっかけ＝趣味のスマホアプリ作り
android/iOS/windowsPhone(故人)java・objective-C

体重管理アプリ・時間割アプリ・仏語学習アプリ等

Google本社 @San Francisco

自 己 紹 介～ ウラVer. ～アプリを作る活動を通して感じたことアウトプットすることの楽しさ

広がる世界

情報教育にかかわりたい

良いアウトプットにするには幅広く正しい知識が必要（本校における）

２．プログラミング教育の方向性

「楽しい＝正義」だったけど・・・？

楽しいプログラミングで自発的な学びを促す？

典型的なアルゴリズムをしっかり伝授する？
https://icons8.com/

Episode：SSH課題研究の発表にて・分岐・繰返し・乱数この子たちの「楽しい」は、こういうことなのか！

基本構造・配列・関数など

コンピュータ上で実体験する

基本装備
修行
各種武器
シミュレーション・探索など←←←

生徒の状況に応じて→→→みんな初めて活用

基本装備
修行
各種武器

入試

←←←

生徒の状況に応じて→→→

３．具体的な方法の提案
3-1 概要public class BubbleSort {public static void main(String args[]) {int a[] = {56,11,10,73,55,50,72,57,3,11,21,87};
for (int i = 0; i < a.length; i++) {System.out.print(a[i] + " ");}System.out.println();boolean flag = true;
while (flag) {flag = false;for (int i = 1; i < a.length; i++) {if (a[i-1] > a[i]) {int w = a[i];a[i] = a[i-1];a[i-1] = w;
flag = true;}}for (int i = 0; i < a.length; i++) {System.out.print(a[i] + " ");}System.out.println();}}}

バブルソートのプログラム例（言語：java）⚫ プログラミング言語には、細かな記述ルールがある⚫ 近年、タイピングの遅い生徒が増加⚫ 多発する実行時エラーへの教員の対応が追いつくか⚫ アルゴリズムの理解まで深められるか

～

提案

～

コードを読み解き、発展させるプログラミング活動

具体的な方法は・・・

The BESTanswer!

解読 ⇨ 一部修正
タイピングミス等にとらわれず、実質的な理解に重きを置ける

c.f. H30愛知県センター研究発表会「コードを読み解き，発展させるプログラミング活動」

具体的な方法は・・・

The BESTanswer!

実際に動かす・実体験・経験として落とし込む・問題解決に活用する

・試行錯誤の経験（デバッグ）

具体的な方法は・・・

The BESTanswer!

様々なアルゴリズムに触れる・スパイラル方式で繰り返す・さまざまな組み立て方をたくさん与える３．具体的な方法の提案
3-2 授業の流れ

１回の実践の流れ（６５分）
導入10分

15分
ペアワーク
提示コードを読み解く

説明スライド
今回のコードの解読に必要な文
法事項の確認

25分

5分

10分

個人作業
改良する

（ペアで相談）全体指名された何人かが説明するまとめ指名された何人かが説明する

ペアワーク：読み解き・動作確認

ペアプロ
もどき
ペアプログラミング
2人で1つのプログラムを作成すること

作業は各自で。
ただし隣同士できるまで次に進まないこと
デバッグも二人でやれば効率的！

コード解読：DNCLを参考にしながらペアワークで相談しながら西暦→和暦
変換プログラム

ワークシート余談

ＤＮＣＬに批判めいた声が・・・？
高校生はＤＮＣＬとかいう謎のプログ
ラミング言語を学ばされるらしい。 共通テストがそれ採用だから嫌でもやるしかないらしい。

プログラミングを仕事にしている人・・・のうちの（多分）ごく一部代表

実務で使えない言語を学ばせて、無駄っ！

余談

ＤＮＣＬの素晴らしさについて語りたい

ＤＮＣＬはプログラミ
ング言語ではない！
フローチャートに代わる視覚化ツールだ！
すべての高校生にプログラミング的思考力を身に付けさせる使命があるんだ！

違うっ！
そもそも我らはプログラマー育成事業をやってるわけじゃない！

DNCLにはフローチャートと同等の視覚効果が【強み１】 日本語なのでぱっと見で頭に入る【強み２】 インデントで処理のまとまりが一目でわかる【強み３】 縦棒やＬ字線で制御構造が把握しやすい【強み４】 Ｐｙｔｈｏｎコードと並べたときに行が１対１対応する

フローチャートだと思って眺めてください

制御構造が一目瞭然I ♥ ＤＮＣＬとはいえ、やはり実機で動かして問題解決に活用させたいのでPythonを習得させたい。
DNCLはアルゴリズムの理解を助ける強力なツール、という位置づけ。

DNCLを参考にしながらコードを解読
Pythonコードを読み解く助けに

西暦→和暦
変換プログラム

ワークシート読み解けたら、実機上で動作 ⇒ 改良

プログラムはあらかじめ教員が準備しておく

改良は生徒

IDLE

❶入出力の確認 ⇒ ❷解読 ⇒ ❸実行・改造

実行・改造

作業の早い生徒用

発展
ワークシート

入出力の確認解読改良は数行でできる
西暦→和暦変換プログラム

３．具体的な方法の提案
3-3 題材紹介

分岐構造
年齢別の映画料金を表示するプログラム

題材紹介（難易度★☆☆）

反復構造
１から指定された数までの和を表示するプログラム

題材紹介（難易度★☆☆）リスト
名簿の名前や人数を表示するプログラム

題材紹介（難易度★☆☆）最大値・最小値
気温のリストから最高気温を求めて表示するプログラム

題材紹介（難易度★★☆）反復・分岐・
真偽値
素数判定プログラム

題材紹介（難易度★ ★☆）反復・分岐・
割り算余り
指定された数の約数の和を求めるプログラム

題材紹介（難易度★ ★☆）シミュレー
ション
サイコロシで１の目が出る確率のシミュレーション

題材紹介（難易度★ ★★）モンテカルロシミュレーション
ランダムな点が円に入る確率シミュレーション（円周率）

題材紹介（難易度★ ★★）matplotlib
版
ランダムな点が円に入る確率
シミュレーション（円周率）

題材紹介（難易度★ ★★）

バブル
ソート

線形探索

鋭意制作中
ユーザ定義関数

クイックソート

二分探索

題材紹介（難易度★★☆～★★★）

難易度別

難易度★
西暦和暦変換１～１０の和数え上げ

難易度★★
約数とその和最大・最小
素数判定
ユーザ定義関数（実際のコードを触る方式は）ここまででいいかな

難易度★★★
線形探索
バブルソート
二分探索
クイックソート
難易度★★★
シミュレーション

３．具体的な方法の提案
3-4 評価評
規準

価プログラムを読み解き、その手順や仕組みを説明できている。

プログラムを読み解き、その手順Aや仕組みを説明した上で、コード（十分満足できる状況）を考慮した改良ができている。

改良

読み解き、説明

B
プログラムを読み解き、その手順（望まれる全員に到達しや仕組みを説明できている。てほしい状況）
C
手順や仕組みの説明が不十分であ（努力を要する状況） る。

ワークシート・
改良プログラム４．学習指導要領による裏付け

プログラミング教育 で 育む資質・能力
知識・技能

アルゴリズムを表現する手段，プログラ
ミングによってコンピュータや情報通信
ネットワークを活用する方法について理解し技能を身に付けること。
高等学校新学習指導要領より抜粋〜 1/2 〜

プログラミング教育 で 育む資質・能力
知識・技能

アルゴリズムを表現する手段，プログラ
コンピュータアルゴリズムミングによってコンピュータや情報通信を活用する方法を表現する手段
ネットワークを活用する方法について理理解し技能を身に付ける
解し技能を身に付けること。
高等学校新学習指導要領より抜粋〜 1/2 〜

プログラミング教育 で 育む資質・能力
思考力・判断力・表現力等
目的に応じたアルゴリズムを考え適切な方法で表現し，プログラミングにより コンピュータや情報通信ネットワークを活用するとともに，その過程を評価し改 善すること。
高等学校新学習指導要領より抜粋〜 2/2 〜

プログラミング教育 で 育む資質・能力
思考力・判断力・表現力等
目的に応じたアルゴリズムを考え適切なその過程をアルゴリズム
コンピュータ
方法で表現し，プログラミングにより コ評価し改善を考え表現を活用
ンピュータや情報通信ネットワークを活用するとともに，その過程を評価し改 善すること。
高等学校新学習指導要領より抜粋〜 2/2 〜

これらを効果的に身に付けさせることができる授業実践
プログラミ

理解

ングで問題のの仕組み発見・解決
改善

考える
表現

情報処理

コンピュータアルゴリズム

技能の活用

５．おわりにできるだけたくさん繰り返す
提示プログラム

ワークシート

何回も読み解く・多種多様なアルゴリズム
ペアワーク

動作確認
＋改良

・さまざまな難易度
でネタを増やしていき、時間の許す限り実践教材データ

ワークシート・プログラムファイル等