課題 6. 機敏な自律ロボッ
提出状況と傾向
19 人中 5 人提出 (SOI 学生含む ) 傾向と総評
ひとりしか完成させることができませんでした
ヒントがあり過ぎたせいかも知れませんが、考える時間が足りなかった人が多い ようです
授業では、最後にはホワイトボードに PAD を描いたので、本当は、みんな作 れたはずだと思います
ほとんど PAD = Logo だからです
もしかしたら PAD のレベルでの理解が不足しているのではないかと思い、今 日は PAD のおさらいをしました
今日は、問題を整理して表現し、自然にプログラムを導いていく手法を紹介し ます
今週の改善点
Thumb Up! のとき、フルネームを表示しないようにし
ました
また、スライドのタイトルにみなさんの名前が現れ ないようにしました
みなさんのプライバシーを保護する施策の一環です
SOI では、これからもみなさんのプライバシーを守
りつつ、インターネットを用いた知の共有のあり方
を探求していきますので、みなさんもぜひ、ご協力
ください
今週の Thumb Up! 1
植木さんの作品
とりあえず、出来たということが素晴らしいです
あとは、人間にとって読みやすいプログラムを書くことを心がけましょう 字下げ (indentation) を活用しましょう
注釈も書きましょう (少なくとも手続きとその引数と戻り値の意味) 字下げについては、このマテリアルでの書き方を参考にしてください
PAD が右に伸びるような場合、1 段下げて書きます
このマテリアルでは、スペースの都合上、注釈はほぼ省略しています その代わり、ではないですが、プログラムの意味の説明はしています
今日のメニュー
はじめに
前回のおさらい 課題レビュー
状態遷移図で描く
練習問題 : ストップウォッチ 課題の出題
実習
状態遷移図で描く
強力なシステム表現手法
p 状態遷移図の例
・腕時計のストップウォッチ機能 の使い方です
・ボタンを押すと、状態が変わる 様子を描いています
・状態に応じて、ボタンは 違った意味を持ちます
計測を始めます
計測をストップ します
ラップタイム を表示します
計測をストップ します
計測を再開 します
計測を再開 します リセットします
計測中 ラップタイム
ラップタイム 計測
時間
基準時間
ラップタイム をクリアします
p 状態遷移図とは
物の一生を絵で描きます
前ページの絵よりも簡略化した図形で描きます 物の状態がどう変化していくかに注目します
○の中にその状態を表す言葉を書いて、状態を表します
実は形は何でもよいのですが、□だと PAD と混乱するかも知れないので、こ の授業では状態を○で表すことにします
どんなイベントでどのように状態が変化するかを考えます S→T で状態 S から状態 T への遷移を表します
矢印の上にイベントの説明を書きます
物について理解する上で役立つツールです
どのくらい役立つか、ということを表すエピソードを紹介すると . . .
p ペットボトルの o 状態遷移図
空
空で ない
・現在入っている量に注目
・売ったり捨てると所有者が変わるので、
製造する
リサイクルする
現在の量 > 0
現在の量 == 0 飲む
飲む
捨てる 売る
存在して
いない
p 状態遷移図の考え方
描き方
物 (この授業の場合は Cricket) に注目 物に何が起こるかな?
それによって、物の状態はどう変わるかな? 物の状態 = 変数の組が持つ値の範囲
· 例: ペットボトルの状態 = < 現在の量, 所有者 >
デジタルコンピュータのプログラミングの本質は、表現したい物を、デジタ ル (=数値表現) な変数の組として捉えることです
イベントの説明の書き方
この授業では次のように書くことにします イベント → 処理
スロットマシンの例で
見てみましょう
p やってみよう
1 から 9 までの数字を 3 桁、揃えるスロットマシンを 作ってください
ハードウェアの構成
タッチセンサー (スイッチ) をセンサーポート a につなぎます 4 桁ディスプレイをバスポートにつなぎます
使い方 ( 仕様 )
1. スイッチを押すと、4 桁ディスプレイに 3 桁のデタラメな数が表示され、め まぐるしく変化します
2. 1 秒ごとに、次のことが起きます
1 の位、10 の位、100 の位の順に数字が確定していきます ビープ音が鳴ります
3. 数が 3 つ揃ったらあなたはラッキー!
4. 何度でも繰り返し遊べます
p スロットマシンの o 状態遷移図
100の位まで 決まっている
10の位まで 決まっている
1の位が 決まっている
すべての位が 決まってない
ボタン
→開始
1秒経過
→1の位を決める 細かな時間
→回す
細かな時間
→回す
細かな時間 1秒経過 →回す
→10の位を 決める 1秒経過
→100の位を 決める ボタン→停止
動いて
いない
p 方針を決める
状態遷移図をブレイクダウンしていく方針を考えます 状態はどんな変数で表されるかを考えます
確定された数が状態を表しています
ふたり (when/run タスク ) で実行することを考えます
when タスクは次のことを行ないます 1 秒経過するのを待ち構えます
1 の位から順に、リールの数を確定します
100 の位まで確定したら、数を表示して、スイッチが押されるのを待ちます run タスクは次のことを行ないます
まず、スイッチが押されるのを待ちます
それから、スロットマシンのリールをめまぐるしく表示させます ふたつのタスクの間でやりとりされる情報は?
when タスクから run タスクへ、確定された数が伝わる必要があります when タスクと run タスクは状態を共有するということですね