創造工学演習のネタ
創造工学演習で作ってみるテーマで、半期かければできそうなネタをいくつか紹介。
パソコンを操作という感覚なしで、ゲームができる事例。 手のひらの動きにあわせて、上からプロジェクタで投影する。
音と位置情報をあわせたものづくりができないか?
- GPSデータつきのTwitterのつぶやきを、自分の位置情報にあわせてサラウンドで読み上げる。
- 音を地図にマッピングし、ユーザの動きに合わせて音が変化する。
- 遠方の音ほど、小さい音で、低音がカットされた音で再生する。 ユーザに方角センサーをつけ、ユーザの向いている方角の音は大きな音で再生する。
再帰処理の処理時間の分析
再帰呼び出しの含まれる処理の、分析について説明を行う。 再帰に慣れていない人のために、fact(N) , pyra(N) , fib(N) のプログラムを示し、 適当な引数での実行結果を答えて貰う。
fact(N):階乗のような再帰であれば、処理の時間も繰り返しになることから、代入法で 簡単に説明ができる。しかし、フィボナッチ数列fib(N)であれば、自身の呼び出し回数も 簡単には説明ができない事例。ということで、まずはハノイの塔の処理ステップの証明を、 (1) 代入法による一般解の予想、(2)数学的帰納法を交えてた証明について 説明を行う。
最後に、フィボナッチ数列の再帰の処理時間を、代入法により示し、ピネの公式より オーダを示す。
C構造体からC++クラスへ
授業3回目にて、電子情報以外の学生さんが受講を取りやめ、 受講者全員が電子情報学生となった。 基本的な部分の説明が不要となるため、細かい内容まで話すことができた。 最初に、前回授業で話すことができなかった、参照渡し(ポインタ渡し,値渡し)を説明した後、 C言語でオブジェクトっぽく書くスタイルを発展させながら、下記のようなC++における、 クラス宣言を説明する。
class Person { private: char name[ 20 ] ; int age ; public: Person( char s[] , int a ) { // コンストラクタ strcpy( name , s ) ; age = a ; } inline void print() const // inline 開いたサブルーチンにする { // const メンバ変数を書き換えないメソッド printf( "%s %d\n" , name , age ) ; } } ; void main() { Person saitoh( "T-Saitoh" , 46 ) , mitsuki( "Mitsuki" , 10 ) ; saitoh.print() ; mitsuki.print() ; }
例年は説明を省略しているけど、const メンバ関数宣言や、inline 宣言による説明を行う。