PAGE TOP ▲

授業実践事例

フローチャートを使った論理的思考力の育成

~組み立てから動作確認までできるツールPenFlowchartを使って~

1 はじめに

 近年、プログラミング教育の重要性に注目が集まっているが、テキストベースのプログラミング言語を授業で扱う場合、生徒が文法を覚えることに時間がかかり、論理的に組み立てる力の習得と、処理をコンピュータに自動実行させる有効性の理解、というプログラミング学習の本質を伝えることが難しい。
 そこで、PenFlowchartを使用して、トライアンドエラーの体験も含めたプログラミング学習を行った。PenFlowchartは、テキストを入力する代わりに、プログラムの流れをフローチャートとして表現することができ、実際に動作させて結果を確認できるため、課題を解決するための論理的な思考に焦点化することができる。フローチャートを使って論理的に組み立てる力を育成することは、学習者・指導者のどちらにとってもハードルが低く、教材としてふさわしいと考える。

2 単元及び目標

(1) 科目名・単元名

 社会と情報  発展:問題の解決と処理手順の自動化

(2) 単元のとらえ方

 コンピュータを使った「問題解決」の一手段として、具体的な問題解決の手順をアルゴリズムで表現するために必要となる基礎的な知識を習得させる。目的を実現するための処理の流れを、適切なアルゴリズムでコンピュータに自動実行させることによって、誤りなく繰り返し使用することができるなど自動実行の有効性について理解させる。

(3) 単元の目標

 問題解決の手順をアルゴリズムで表現し、コンピュータで実行するための方法として、制御構造の基本を理解する。また、制御構造の基本を活用し、フローチャートを用いて論理的に表現することができる。

(4) 単元の指導実施上の留意点

 与えられたフローチャートの例をそのまままねして終わることのないようにする。例をアレンジするよう促すなどして、作成しているフローチャートと、実行している処理との関連を理解させることを徹底する。組み立て方はひととおりではないことを理解させ、トライアンドエラーで効率的なプログラムを作り上げていく姿勢を身に付けさせる。

3 指導内容及び教材

  (1) 指導内容

    ア フローチャートの基礎
    イ 順次処理・分岐処理・繰返し処理
    ウ 配列・関数

  (2) 使用教材(配付資料等)

    ア プリント(PDFWord
    イ スライド(PowerPoint

  (3) 使用ソフト

    PenFlowchart

4 指導の流れ

▽1時限目(制御構造とフローチャートの基礎・順次処理)

学習内容・学習活動 指導上の留意点
導入
(5分)
・学習内容の把握  近年プログラミング教育に注目が集まっていること、また、そのプログラミングの基礎となるアルゴリズムや制御構造について説明する。
展開
(40分)
・プログラミングの基本の理解
 プログラミング、アルゴリズム、制御構造の言葉の意味を理解する。


 順次・分岐・繰返しの3要素の組み合わせで、さまざまな処理の記述ができることを理解する。

 身近な事柄で簡単なフローチャートを書く(手書き)。



 「変数」「型宣言」「代入」「入力」「出力」の用語について理解する。

 技術の習得が目的ではなく、論理的に考えを組み立て、表現できるようになることが目的であることを伝える。




 独自のフローチャートが思いつかない生徒には、プリントの例をアレンジするよう促す。
・PenFlowchartの使い方
 「消費税を求める(プリント実習1-1)」を作成しながら、使い方を習得する(動作確認含む)。
消費税を求めるフローチャート

 学習用プログラミング言語Penについても簡単に説明するが、今回は使わないことを伝える。

 「*」「/」について説明する。さまざまなプログラミング言語やExcel等でも同じ記法であることを伝える。
・順次処理のみを使ったフローチャートの作成
 「説明メッセージの追加(プリント実習1-2)」に取り組む。 説明メッセージの追加

 入力を促すメッセージがあるかないかで使いやすさ、ユーザビリティが格段に違うことを体験させる。

 自分で書いたフローチャートに従い、コンピュータが動作することを体験させる。

 プリントに記載のフローチャートの注意事項(変数や数字は全て半角で記述すること、乗算、除算はそれぞれ「*」「/」を使うこと、文字列は「"」などの決められた記号でくくること、変数には型宣言が必要なこと、など)は、テキストベースのプログラミングにもほぼ共通であり、重要な事柄であることを強調する。

 「プリント1-2」が早くできた生徒は、「応用実習1-3」に取り組むよう指示する。

 「消費税を求める・応用版(プリント応用実習1-3)」に取り組む。
消費税を求める応用版
 変数名は自由に付けてよい、ということを伝える。

 全員「実習1-2」が終わった時点で、「応用実習1-3」の作成例をスライドで示す。
まとめ
(5分)
・次時の学習内容の把握  何人か指名して感想を聞く。

 次時は、分岐処理・繰り返し処理について学習することを伝える。

▽2時限目(分岐処理・繰り返し処理)

学習内容・学習活動 指導上の留意点
導入
(5分)
・学習内容の把握  分岐と繰り返しを組み合わせることで、あらゆる処理を組み立てられることに言及する。
展開①
(30分)
・分岐処理についての理解
 昭和/平成を判断する条件を考える。



 「西暦・和暦変換(プリント実習2-1)」をプリントのとおりに作成する。
西暦和暦変換フローチャート

 西暦から昭和/平成を判断する方法や和暦に変換する方法を指名して答えさせる。

 動作確認をする際、平成と昭和の両方のケースについて確認するよう注意する。

 「説明メッセージの追加(プリント実習2-2)」に取り組む。
西暦和暦変換フローチャート2
 「平成」「昭和」の表示がない状態では、何の処理が行われたか理解できないことを体験させ、ユーザビリティの大切さについて考えさせる。
 「明治・大正の追加(プリント実習2-3)」に取り組む。
西暦和暦変換フローチャート3
 目的を実現するためのフローチャートはひととおりではないことを伝える。

 動作確認ができた生徒の画面をプロジェクタに投影する。
 「エラー処理(プリント考えよう2-4)」について考える。
 実行時に昭和でも平成でもない西暦(1000年など)を入力するとどうなるか考え、実際に試す。
 「考えよう2-4」について指名して答えさせる。
・繰り返し処理についての理解
 「ロケットのカウントダウン(プリント実習3-1)」をプリントのとおりに作成する。
ロケットカウントダウンフローチャート
 繰り返し処理の「前条件」「後条件」「増やし」「減らし」について理解する。

 繰り返しの上下パーツに挟まれた処理が繰り返されることを説明する。
 「sleepの追加(プリント実習3-2)」をプリントのとおりに作成する。
ロケットカウントダウンフローチャート2
 コンピュータは処理が早いため、sleepのような処理を入れて使いやすくすることが多々あることを説明する。

 「繰り返し処理を使うメリット(プリント考えよう3-3)」について考え、繰り返し処理の有効性を理解する。




 「ロケットのカウントダウン(プリント実習3-1)」を、10からのカウントダウンとなるよう変更する。
 繰り返し処理を使ったフローチャートと使わないフローチャートを比較したスライドを見せ、繰り返し処理を使うことで、変更への対応がしやすくなることを説明する。
展開②
(10分)
・制御構造を組み合わせた処理
 「約数表示(プリント実習4-1)」に取り組む。
約数表示フローチャート
 「%」について理解する。

 7桁程度の大きな整数を入力し、プログラムを実行させて、ループの様子を確認し、プログラムによる自動化の有効性を理解する。

 100の約数を数個答えさせる。また、「2」や「4」は約数で「3」は約数でないと判断した理由を答えさせることで約数を表示させる思考過程を考えさせる。

 コンピュータは、人間が考えた手順を明確に指示しないと正しい結果(この場合は約数表示)が出せないことを説明する。

 「実習4-1」の作成・実行が全員終わった時点で、フローチャートの作成例をスライドで見せ、繰り返しと分岐が組み合わさった処理の流れを全員が理解できるよう、1ステップずつ流れを追って復習する。
 習得した制御構造を組み合わせて使い、「ノベルゲーム(プリント実習4-2)」を参考にして独自のフローチャートを作成する。  独自のフローチャートが思いつかない生徒には、プリント記載のノベルゲーム風フローチャート例をアレンジするよう促す。
まとめ
(5分)
・制作物の発表


・論理的に表現することで、コンピュータが動作していることの理解







・次時の学習内容の把握
 生徒の画面をプロジェクタに投影する。

 実用的なプログラミング言語を見たことがない生徒が多く、フローチャートによる組み立てよりもプログラミング言語は難しいと敬遠してしまうことを避けるために、フローチャートとプログラミング言語の比較スライドを見せ、論理的な組み立てさえできれば、実際のプログラミングは難しくないことを伝える。

 次時は、配列・関数について学習することを伝える。

▽3時限目(配列・関数)

学習内容・学習活動 指導上の留意点
導入
(5分)
・学習内容の把握  前回使用した関数sleep()を例として挙げ、ライブラリ関数を使うことで表現の幅が広がることに言及する。

 プリント記載の配列についての解説図を使い、数値の集合を扱う上で配列が重要なものであることを説明する。
展開①
(30分)
・配列についての理解
 「配列(プリント実習5-1)」をプリントのとおりに作成する。
配列を使ったフローチャート
 出力する要素を変更(番号を変更)して実行する。

 サイズが5の配列xについて、x[5]を出力するよう指定したらどうなるか考える。また、実際に試してみる。

 中括弧やコンマは半角で記述することを再確認する。

 プログラムの不具合、記述ミスの中で、配列のサイズや番号指定に起因するものが非常に多いことに言及する。
・関数についての理解
 「乱数(プリント実習5-2)」をプリントのとおりに作成する。
乱数を使ったフローチャート

 乱数は、ゲームなどで多く使われていることに言及し、興味をもたせる。

 早く終わった生徒には、「実習5-3」への準備として、配列の番号をランダムに指定するフローチャートを考えさせる。
展開②
(10分)
・関数と配列を組み合わせた処理の組み立て
 「おみくじ(プリント応用実習5-3)」に取り組む。
おみくじのフローチャート

 変数の宣言が、配列用と番号用に2種類必要であることを考えさせ、ヒントをスライドで見せる。

 全く手がつかない生徒には、「大吉」「吉」「凶」3種類のおみくじのフローチャート例を見せて考えさせる。

 作成・実行確認が終わった生徒には、「中吉」など種類を増やすアレンジをするよう指示する。
まとめ
(5分)
・制作物の発表


・プログラムの有効性についての振り返り
 生徒の画面をプロジェクタに投影する。

 2時限目で見せたフローチャートとプログラミング言語の比較スライドを再度見せる。

5 評価規準

(1) 単元の評価規準

  関心・意欲・態度 思考・判断・表現 技能 知識・理解
単元の
評価規準
・アルゴリズムや問題解決の自動実行に関心をもっている。
・問題解決にコンピュータを活用しようとしている。
・処理手順を考え、各段階で適切な方法を選択して表現している。 ・処理手順を、フローチャートを用いて表現することができる。 ・フローチャートを読んで処理内容を理解することができる。
・処理手順を、フローチャートを用いて表現する方法について理解している。
学習活動に
即した
評価規準
・自分の組み立てた処理がコンピュータ上で実行されることに関心をもっている。 ・目的に応じた適切な制御構造を選択してフローチャートを組み立てることができる。 ・ツールPenFlowchartを用いてフローチャートを組み立て、実行させることができる。 ・各種制御構造を理解している。
・「変数」「型宣言」「代入」「入出力」といったプログラミングの決まりごとについて理解している。

(2) 指導と評価の計画

時間 学習内容及び活動
(指導上の留意点)
観点別評価内容 評価の観点 評価の方法
関心

意欲

態度
思考

判断

表現
技能 知識

理解
発表内容 提出物の内容 授業態度
1時限目 制御構造とフローチャートの基礎
・「変数」「型宣言」「代入」「入出力」といったプログラミングの決まりごとに従ってフローチャートを作成することができる。 ・変数を使った入出力のあるフローチャートを作成・実行できる。
・順次処理のフローチャート作成を通し、ユーザビリティについて興味を持つ。 ・自分でアレンジするなど積極的に表現しようとする。
2時限目 分岐処理と繰返し処理
・分岐処理・繰返し処理について理解する。 ・制御構造について理解している。
・分岐と繰返しを組み合わせた処理を組み立てる。 ・各制御構造を適切に組み合わせて表現することができる。
3時限目 配列と関数
・配列・関数について理解する。 ・配列・関数について理解している。
・分岐、繰返し、配列、関数を組み合わせ、応用的なフローチャートを作成する。 ・適切な組み立てにより、複雑な処理が実行されることに興味をもつ。

6 実践結果の考察

 今回重視したのは、「目的を実現するための処理を自ら考えて組み立て、トライアンドエラーを通して目的どおりの実行結果を得る」というプログラミングの一連の流れを通して論理的に組み立てる力を付けさせることである。
 授業後アンケートの感想では、「難しかったが楽しかった」「自分で考えたものが機能したときうれしかった」など前向きなものが大変多く、興味や達成感を与えることはできたと感じる。また、図2より内容について約75%の生徒が理解したと答えており、使用した題材も適切なものであったと思われる。
 これらの結果から論理的に組み立てる力が付いたと判断するのは早計であるが、興味をもって取り組めたこと、自分で考える楽しさを感じられたことは、次の段階であるテキストベースのプログラミングの理解と構築へ向けて欠かせない一歩を進めることができたと考えられる。
 個別の題材についてアンケート結果(図4、図5)を見てみると、「約数の表示」が興味・理解ともにやや他の題材よりも低い結果となったが、授業中の生徒の様子では、大きな数であっても全ての約数を表示できることに感動している様子だった。
 アンケート結果や授業の様子も参考にしながら、論理的に組み立てる力を伸ばすための題材選び、意欲的に取り組める題材選びについて、今後更に検討・改善していきたい。

授業後アンケート結果:感想

・自分で作るのが難しかったけれど、とても楽しかった(多数)
・自分で考えたものが機能したとき、とてもうれしかった(多数)
・フローチャートでノベルゲームが作れたのが楽しかった(多数)
・ランダムが印象に残っている(多数)
・できたときの達成感(複数)
・おみくじが楽しかった(複数)
・意外と何でもできるものだと思った
・中学でも結構やっていたのでふつうにやった
・よく考えないと複雑なものはできないと思った
・細かなミスで動かないことがあり、苦戦した
・時間が少なかった

授業後アンケート結果:授業全体

アンケート結果1

授業後アンケート結果:題材別

アンケート結果2

7 おわりに

 フローチャートについては、中学時に習得済みの生徒が半数近くいた(ロボット、ライントレースカーなど)。今後、ほぼ全員が、小学校・中学校でビジュアルプログラミングを学んだ状態で高校へ入学してくることが想定される中、高校段階でプログラミングをどう扱うか、教材として適切なものは何か、ということを、常に検討し続けなければならない。

参考文献とURL

  名古屋高等学校「プログラムとアルゴリズム~PenFlowchart を使って」(2016)
  http://watayan.net/doc/20170217/programming_b4.pdf(最終閲覧日:2017/11/28)