高等学校情報科「情報Ⅰ」教員研修用教材「第3章 コンピュータとプログラミング」の内容あるいは関連する内容をEduBlocksで実装します。ただし、すべてを網羅するものではありません。このページですでに類似の内容を提供済みの場合は原則として取り上げません。また、独自の補足などを追加しています(練習問題はオリジナル)。このページは随時更新していきます(したがって、準備中の項目もあります)。
参考:高校教科「情報」シンポジウム(ジョーシン)2020秋 基調講演 新しい情報科を考える準備をしよう
(0)基数変換
(a) 2進数と10進数
次の図をクリックすると説明が表示されます(PDF)。
(b) 10進数→2進数変換(金種計算風 )
〔概要〕10進数→2進数変換を金種計算と同じ方法で行います。
〔実行例〕
〔プログラム〕
(1)学習11 コンピュータの仕組み (2) 論理演算<演習1>
〔概要〕ベン図は省略します。
Python(EduBlocksも同じ。以下同様)では、真偽値に関して以下の記述があります。
https://docs.python.org/ja/3/distutils/apiref.html?highlight=%E7%9C%9F%E5%81%BD%E5%80%A4#distutils.util.strtobool
また、bool 型の真値の記述は以下にあります。
https://docs.python.org/ja/3/library/constants.html?highlight=true#True
ただし、PythonにはXORという論理演算子はないので、ビット単位演算子の^を用います。
https://docs.python.org/ja/3/reference/expressions.html?highlight=%E6%BC%94%E7%AE%97%E5%AD%90#binary-bitwise-operations
〔技法〕AND、OR、NOT、XOR
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
<補足>
EduBlocksには現在のところeval()関数が実装されていないようですので、通常のPythonを使うと、入門レベルを超えますが次のようにできます。
(2)学習11 論理演算を用いた二進数の足し算<演習2>
〔概要〕この論理回路は半加算器(半加算回路)と呼ばれるものです。
真理値表より、出力Cは「A AND B」、出力Fは「A XOR B」で求まることが分かります。なお、XORは、AND、OR、NOTを使うと、「NOT (A AND B) AND (A OR B)」で実現できます。
〔参考〕半加算器
基本情報技術者平成29年春期 午前問22
基本情報技術者過去問題 平成21年秋期 午後問1
〔技法〕論理演算、論理回路
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(3)学習11 コンピュータの仕組み (2) 論理演算:XORによる暗号化【練習問題1】
〔概要〕XORを使って簡単な暗号化を行います。
鍵を使って平文を暗号化し、その後鍵を使って復号します。
〔技法〕論理演算
(例)
0110110 = 54 ←平文
xor 1111011 = 123 ←鍵
-----------
1001101 = 77 ←暗号化
〔参考〕XORの性質
〔実行例〕
〔プログラム〕(省略)
(4)学習11 コンピュータの仕組み (2) 論理演算:文字による絵表示【練習問題2】
〔概要〕前問を文字による絵として表現します。
〔技法〕リスト、2重ループ
〔実行例〕
〔プログラム〕(省略)
(5)学習11 プログラミングで誤差を体験する
〔概要〕浮動小数点数の精度は計算環境によって異なります。
EduBlocksには「sys.float_info.max」定数が実装されていないため、その部分は省略します(先頭に#をつけてコメントにしています)。
〔技法〕浮動小数点数、無限大
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(6)学習11 プログラミングで誤差を体験する:0.01を100回足すと?【補足1】
〔概要〕浮動小数点数の精度は有限であり、計算誤差を生じる場合があります。
ただし、EduBlocksの場合は以下のようになり、Python 3と異なる結果が得られることに注意してください。
〔技法〕浮動小数点数、誤差
Pyrhon
〔プログラムと実行例〕
EduBlocks
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
※「学習12 外部装置との接続」は、ハードウェア関連のため割愛しています。
(7)学習13 基本的プログラム 分岐の例 :大の月・小の月の判定【練習問題3】
〔概要〕大の月・小の月の判定を分岐(条件判断)だけで行ってください。ただし、閏年は考えないものとします。なお、月をキーボードから読み込むようにしてください。
〔技法〕分岐(条件判断)
〔実行例〕
〔プログラム〕(省略)
〔補足〕反復(繰り返し)で表示した実行例
〔発展〕閏年の判定処理を追加してください。
(8)学習13 基本的プログラム 反復の例 :同じクラスで同じ誕生日の確率【練習問題4】
〔概要〕同じクラスに同じ誕生日の友達がひとりいる確率を求めてください。
参考文献
(a) 確率の一覧表示
〔技法〕反復(繰り返し)
〔実行例〕
〔プログラム〕(省略)
(B) グラフ表示
〔実行例〕
〔技法〕反復、Pygal
〔プログラム〕(省略)
(9)学習13 基本的プログラム 分岐と反復を組み合わせた例:指定した年月のカレンダー表示【練習問題5】
〔概要〕指定した年月のカレンダー表示してください。ただし、閏年は考えないものとする。
〔技法〕分岐(条件判断)、反復(繰り返し)、dateオブジェクト、datetime.weekday()
〔実行例〕
〔プログラム〕(省略)
(10)学習14 応用的プログラム 図表 3 リストを用いたプログラムの例 2:合計計算の式表示【練習問題6】
〔概要〕説明文にある以下の式を、リストと繰り返し処理を用いて表示してください。
goukei=56+3+62+17+87+22+36+83+21+12=399
〔技法〕リスト、反復(繰り返し)
〔実行例〕
〔プログラム〕(省略)
(11)学習14 応用的プログラム 図表 3 リストを用いたプログラムの例 :図形の上下反転【練習問題7】
〔概要〕リストに格納してある図形データの上下を反転してリストに再格納してください。
応用:図形データを左または右に90°回転してください。
〔技法〕リスト、反復(繰り返し)
〔実行例〕
〔プログラム〕(省略)
(12)学習14 応用的プログラム 乱数を用いたプログラムの例:数当てゲーム【練習問題8】
〔概要〕「図表 4 乱数を用いたプログラムの例 1」を参考にして、コンピュータが発生した乱数を当てるためにキーボードから1桁の数値を入力できるように拡張してください。また。当たるまで繰り返せるようにしてください。
〔技法〕random
〔実行例〕
〔プログラム〕(省略)
(13)学習14 応用的プログラム 関数で分割したプログラムの例:文字列処理【練習問題9】
〔概要〕ハイフンが含まれる電話番号文字列からハイフンを削除し、文字としての番号からなるリストを生成して返す関数を定義して利用する。
関数名:remove
書式:string[] remove(string[] tel)
戻り値:string型のリスト
説明:ハイフンが含まれる電話番号文字列から引数として渡すと、ハイフンを削除し、文字としての番号からなるリストを生成して返す。
(例)
0123-456-7890 → [‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’]
〔技法〕リスト、関数
〔実行例〕
〔プログラム〕(省略)
(14)学習15 アルゴリズムの比較:線形探索:時刻表検索【練習問題10】
〔概要〕時と分をセットにした時刻表のリストの線形探索を行って、指定した時刻以降の直近の時刻を表示する。
〔技法〕
〔実行例〕
〔プログラム〕(省略)
(14ー2)学習15 アルゴリズムの比較<演習2>
〔概要〕線形探索と二分探索での最大探索回数の比較。
〔技法〕matplotlib.pyplot
〔実行例〕
〔プログラム〕
(15)学習16 確定モデルと確率モデル
(a) 確定モデル:ねずみ算【練習問題11】
〔概要〕ねずみ算の結果をグラフ表示してください。
参考:Pythonでの出力例
(注)データの初期値0月を2(匹)としています。
〔実行例〕
(注)データの初期値0月を2(匹)としていますが、横軸の目盛りの値は一つずれているので、1を引いて見てください。
〔技法〕matplotlib.pyplot
〔プログラム〕(省略)
(b) 確率モデル
(b1) 交通渋滞シミュレーション
〔概要〕「情報」試作問題(検討用イメージ)の第4問を実装してください。
〔技法〕Pygal、シミュレーション、乱数
(b1-1) 図2【練習問題12】
〔実行例〕
〔プログラム〕(省略)
(b1-2) 図3【練習問題13】
〔実行例〕
〔プログラム〕(省略)
(B2) 中心極限定理のシミュレーション
〔概要〕図表 10 度数分布(棒グラフ)表現のプログラムの発展として、中心極限定理のシミュレーションを参照してください。
(16)学習17 自然現象のモデル化とシミュレーション
(a) 準備:オイラー法(常微分方程式の数値解法)
〔概要〕微分方程式 xy′–2y=0の解曲線y(x)=cx2を表示する。
〔参考文献〕オイラー法、スロープフィールドとオイラー法、1階常微分方程式の数値解-オイラー法、ホイン法、ルンゲクッタ法
〔技法〕Pyplot
〔実行例〕
緑の線がy(x)=x2、青の線がオイラー法による近似解です。
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(b) SIRモデル【練習問題14】
〔概要〕感染症の流行のモデルの一つであるSIRモデルによりシミュレーションを行ってください。
〔参考文献〕SIRモデル、SIRモデル(奥村先生)
〔技法〕Pyplot
〔実行例〕
〔プログラム〕(省略)
(17)学習17 (1)物体の放物運動のモデル化
〔実行環境〕Legacy版
〔技法〕Pyplot
〔実行例〕
〔プログラム〕
(18)学習17 (3)生命体の増加シミュレーション
〔実行環境〕Legacy版
〔技法〕Pyplot
〔実行例〕
〔プログラム〕
(19)学習17 (4)ランダムウォークのシミュレーション
〔実行環境〕Legacy版
〔技法〕Pyplot
〔実行例〕
〔プログラム〕
(番外1)一次元バーコードの表示【発展問題1】
〔概要〕キーボードからバーコードの数値を入力するとバーコードが表示されるプログラムを作成してください。
なお、この例では先頭の国別コードのうちの1桁目の「4」は固定としています。
〔参考文献〕JANコードのバーコードを作る(13桁JAN)
〔技法〕リスト、Processing
〔実行例〕
※この画像を、スマホのバーコードリーダーなどで読み込むと数値として確認することができます。
〔プログラム〕(省略)
(番外2)交通流シミュレーション
最も単純な交通流シミュレーションのプログラムです。
〔参考文献〕ルール184 ー Wikipedia、Rule 184 – Rule properties、セルオートマトンによる交通流モデルについて、「渋滞」を分析する数理モデルとしての セルオートマトンとその応用
(a) 準備(初期値の設定)
〔概要〕次の図のようにセルの現在の状態と次の状態を保持する2次元のリストを準備する。
初期状態の1(黒)の割合を百分率(%)で0~100%まで、キーボードから指定できる。
〔技法〕リスト
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(b) リスト表示
〔概要〕境界条件は周期境界条件とする。
〔技法〕リスト
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(c) 図表示【練習問題】
〔概要〕境界条件は周期境界条件とする。
〔技法〕リスト
〔実行例〕(省略)
〔プログラム〕(省略)
(d) アニメーション表示【練習問題】
〔概要〕Turtleグラフィックスによりアニメーションとして実装してください。
〔技法〕リスト
〔実行例〕(省略)
〔プログラム〕(省略)
(番外3)掃除ロボットシミュレーション
最も単純な掃除ロボットシミュレーションのプログラムです。
(a) 準備(初期値の設定)
〔概要〕次の図のように部屋の見取り図に相当する2次元のリストを準備する。縦横5m×5mの部屋の中を1区画50cm×50cmの集まりとして考える。
周囲は壁であり移動できない場所の目印として、たとえば「-1」を格納している。また、列10の行5~6には家具があり、同じく移動できない場所の目印として「-1」を格納している。
自由に移動できる区画には、目印として、たとえば初期値「0」を格納しておくものとする。
なお、掃除ロボット(●印で表す)の待機場所(最初の場所)は、たとえば行5目の列1とする。
掃除ロボットは1単位時間に、周囲の隣合った区画にのみ移動できるものとする。また、移動方向としては、最も単純な考え方として、進行方向を乱数により決定し、壁や障害物に接するまで同じ進行方向とする。そして、壁や障害物に接したとき、再度乱数によって進行方向を決めるものとする。
〔技法〕リスト
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(b) 見取り図表示【練習問題】
〔概要〕見取り図のように表示してください。
〔技法〕リスト
〔実行例〕
〔プログラム〕(省略)
(c) 移動経路のリスト表示
〔概要〕移動経路を番号で表示します。
〔技法〕リスト
〔実行例〕
〔プログラム〕
プロジェクトファイル(プログラムファイル):右クリックでダウンロードして、EduBlocksで読み込むことにより実行できます。
(d) 移動経路の履歴表示【練習問題】
〔概要〕移動経路の履歴を表示してください。
〔技法〕リスト
〔実行例〕
〔プログラム〕(省略)
(e) 移動回数のリスト表示【練習問題】
〔概要〕各区画に移動した回数を表示してください。
〔技法〕リスト
〔実行例〕(省略)
〔プログラム〕(省略)
(f) アニメーション表示【練習問題】
〔概要〕移動の様子をアニメーションとして表示してください。
〔技法〕Turtleグラフィックスによりアニメーションとして実装してください。
〔実行例〕(省略)
〔プログラム〕(省略)
(番外編4)乱数による順番決め
乱数を用いて順番を決めます。
〔参考〕random.randint(a, b)、random.shuffle(x)、random.seed(a=None, version=2)
※seedを指定すると特定の乱数系列を指定することができます。
(a) 繰り返し処理による方法
〔実行例〕
〔プログラム〕
(b) shuffle関数を使う方法
shuffle関数を使うと簡単に処理できます。
〔実行例〕
〔プログラム〕
Copyright (C) 2022 Easy Programming