- <目次>
- シラバスの達成目標の6「プログラミングの概念と 設計方法 を理解し, KISS原則 を意識した構造化プログラミング(100行程度)を実践することができる。(小作品制作)」
- 問い: システムの仕様が提示された時、どのようにシステムを組み上げていけば(プログラミングしていけば)良いだろうか?
- A1: KISS原則やDRY原則に則って開発する。一度に全体を実装するのではなく、問題を機能単位に分割して個別に仕上げる。
- A2: 機能を洗い出す。対象知識の無い人に、実装すべき作業をやってもらうにはどう伝えたら(指導したら)良いか検討することで必要な機能を洗い出す。
- 問い: システムの仕様が提示された時、どのようにシステムを組み上げていけば(プログラミングしていけば)良いだろうか?
- 関連
- 授業5回目の「取り組み方」
- (1) 問題を分割する。
- 分割して分かるところから手を付ける(土台を作る)
- 分からないところは、更に分割できないか考える
- (2) 個々のサブ問題を個別に解く。
- これ以上分割できない≒最小の部品なら、教科書・授業で習っているはず(該当部分を復習)
- 今回追加: 分割した要素を関数として設計する。(=関数名、入力、出力を検討する)
- (3) それらの組み合わせ方を考える。
- (1) 問題を分割する。
- 別の視点
- シラバスの「授業内容と方法」
- 言語仕様を学ぶだけではなく,「実現したいことを理解し,説明できるレベルまで整理し,コンピュータが処理できる形に翻訳する」というプログラミング開発一連の流れを体験する。
- いきなりコードを書くのではなく、やりたいタスクを人に説明してみる。(他人にタスクを依頼できるぐらい、やりたいことを理解する必要がある)
- シラバスの「授業内容と方法」
- 授業5回目の「取り組み方」
-
下記の書式でオセロの対戦ログが用意されているとする。
- 書式
- 1行目: ログファイルに掲載されてる手数。
- 2行目以降: 1行に1手分の記録が掲載さている。例えば黒が6-5に指した場合「B 6 5」、白が4-6に指した場合「W 4 6」が記録されている。なお、「B 6 5」は「縦6、横5」とする。
- ログファイルの例
- 下記log1.txt参照。
- 補足
- ログファイルには記載されていないが、プレイ開始時には中央に黒と白が2個ずつ置かれているものとする。
- ログファイルには「白黒どちらがどこに指したか」しか記録しておらず、白黒反転処理は自前で処理する必要がある。
- 書式
-
プログラム目標
- ログファイルを読み込み、勝敗を判定せよ。
-
初期配置
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||
| 2 | ||||||||
| 3 | ||||||||
| 4 | W | B | ||||||
| 5 | B | W | ||||||
| 6 | ||||||||
| 7 | ||||||||
| 8 |
- ログファイル1(log1.txt)
2
B 6 5
W 4 6
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|
| 1 | ||||||||
| 2 | ||||||||
| 3 | ||||||||
| 4 | W | W | W | |||||
| 5 | B | B | ||||||
| 6 | B | |||||||
| 7 | ||||||||
| 8 |
- 考え方の例
- どんな機能が必要だろうか?
- オセロを知らない人に、ログファイルからゲームを再現させるにはどうしたら良いだろうか?
- 授業メモ
- ホワイトとブラックの数の大小関係を比較する機能が必要。
- compare_black_white(board)
- 同じ色で挟んだら、間の部分が反転する機能
- 間で挟めない場合は、手を打てない(パス)する機能
- ブラックだったら、ホワイトを挟めるように。ホワイトだったら、ブラックを挟めるようにうつプログラム。
- 既に置かれている場所に上書きしないプログラム
- ホワイトとブラックの数の大小関係を比較する機能が必要。