データベース/ガイダンス
データベースの授業の1回目として、ガイダンスを行う。 授業で取り扱う内容などのシラバスについて説明い授業開始。
最近のWebシステムでの3段スキーマ・アーキテクチャなどを交えながら、 データベースの使われ方などの説明の後、データベースを使わなかったら どういった処理が大変で、データベースが如何に便利かを説明する。
2分探索法と2分木
後期に入ったということで、中間試験までと期末試験までの予定を 簡単に説明した後で、2分木の説明を行う。
2分木
比較として、最初に配列での高速なデータ検索として、 2分探索法について説明し、データ検索が O(log(N))で表せること、 データの追加の処理などは、配列で実装すれば、O(N)となり、 あまり高速ではないことを説明する。
一方、リスト構造は、シーケンシャルアクセスしかできないから、 中央値を取り出すのには、O(N)の時間を要するため、 2分探索法が出来ないことを説明する。
そこで、2分木のデータ例を図示し、目的のデータを探すのに 要する比較回数を検討してもらう。これにより、 2分木のピラミッド構造の段数が、データ検索の際のループ回数である ことを説明し、段数 m と、データ件数 2m = N より、 O(log(N))などの説明を行う。
structd Tree { int data ; struct Tree *left ; struct Tree *right ; } ; struct Tree* tcons( int x , struct Tree*l , struct Tree*r ) { struct Tree* n ; n = (struct Tree*)malloc( sizeof( struct Tree ) ) ; if ( n != NULL ) { n->data = x ; n->left = l ; n->right = r ; } return n ; } struct Tree* top = // 静的にデータを生成 tcons( 50 , tcons( 75 , NULL , NULL ) , tcons( 25 , NULL , NULL ) ) ;
例題
2分木データ挿入処理のプログラムは複雑になりそうだし、 いきなりポインタのポインタでは、混乱をすると思われるので、 簡単に検索、データ件数カウントなどの例題を示す。
int find( struct Tree* p , int key ) { while( p != NULL ) { if ( p->data == key ) return 1 ; else if ( p->data > key ) p = p->left ; else p = p->right ; } return 0 ; // 見つからない } int count( struct Tree* p ) { if ( p == NULL ) return 0 ; else return 1 + count( p->left ) + count( p->right ) ; }
構造体の説明
後期に入って1回目の授業ということで、簡単に後期の授業の予定 (中間試験まで構造体、以降グラッフィック)といった点を伝えてからの、 説明。 構造体も2年の最後にやっている様ではあるが、 学生も「まだよく解っていない…」とのことで、 あらためて説明を行う。
構造体
最初の説明として、定番の「名前と国語,算数,理科の成績で、クラスの データを扱う…」というネタで、構造体を使わずに記載すると、どうなるか? 途中で、扱うデータ件数が変更になったら、どうするか? 複数クラスのデータを扱うようになったらどうするか? といった変更について、説明を行う。
char name[ 50 ][ 20 ] ; int kokugo[ 50 ] ; int sansu[ 50 ] ; int rika[ 50 ] ;
人数が50と、マジックナンバーのまま。もし、1人分の名前の長さの20が 50であったら、50人クラス→100人との変更要求があれば、1人分の名前の 長さも変更してしまうミスがあるかもしれない。
他のクラスのデータも扱うようになったら?(例:電気科のデータも…)
char e_name[ 50 ][ 20 ] ; int e_kokugo[ 50 ] ; int e_sansu[ 50 ] ; int e_rika[ 50 ] ;
科目名が sansu → sugaku なら、e_sansu → e_sugaku を忘れるかも。 一番の問題は、name,…の入力処理と、e_name,…の入力処理を、 共通化できない。
構造体を使えば、
struct Student { char name[ 20 ] ; int kokugo ; int sansu ; int rika } ; struct Student saitoh = { "saitoh" , 90,92,96 } ; struct Student ei[ 50 ] ; // EI学生 struct Student ee[ 50 ] ; // 電気学生...
構造体の入れ子
説明の中で、構造体の要素参照や、初期化を説明した後、 構造体の入れ子を説明する。 その前に、処理の入れ子として、{} による処理の複文の中に、 さらに{}のブロックがあるのも、処理の入れ子として説明。
struct Birthday { int month ; int day ; } ; struct Student { char name[ 20 ] ; struct Birthday bday int kokugo ; int sansu ; } ;
やばかった…職場のネッ…(09/25)
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
第6回歯みがきロボットコンテストに参加
第6回目となった福井県歯科医師会主催の歯みがきロボットコンテストですが、 運営や審判での協力と、4EI学生が選手として参加しました。
なお、このコンテストの模様は、10/7(Sun) 16:55 より放送を予定しています。
4EI学生も参加
この大会には、4年電子情報から、 リモコン部門(一般の部)に青池君,市橋君,川原君,山口君のグループと、自律部門(一般の部)に山腰君が参加しました。残念ながら、対戦では勝ち残ることはできませんでしたが、 前期の創造工学演習で作っていた作品を改良した車体にて、頑張ってくれました。

おりょ、職場のサーバに…(09/11)
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
北陸支部連合大会に参加
体調不良で変な汗をかき、ゴホゲホしながら、連合大会に参加しました。
C言語学習に萌え要素を取り入れるといっても、 マニュアルだけでは意味がない。 プログラミング言語は、実際のプログラムの試行錯誤の経験が重要だろう。
授業ビデオ検索システムは、すごく興味が持てた。 撮影したビデオを音声認識させ、検索ワードでシーンを探せる。
シフト制の職場の勤怠管理(シフト作成支援)環境は、 Web上で動き面白い。シフト自動作成ではないけれど、 シフト作成者が忘れがちな微妙なノウハウを、警告なり で支援してくれる機能などが明言されていれば、 もっと興味がもてた。
Twitterを観光アピールにつなげるための、地域イベント 抽出ソフトは、個人的にも面白かった。 GEOタグ付きのTweetを集めるけど、Botなどのゴミを 地域に関連したユーザリストを、利用しフィルタリング とのことであった。盛り上がっているイベントは、 ハッシュタグも活用されるので、その扱いなどが あればさらに活用できないかと興味が持てた。
萌えおこしのデータベースを作ろうとの発表は、 萌えおこしでは、画像や盛り上げたキーパーソン が重要という説明の割に、それをどうデータベース化しようという 話が無かった。 Web-DBアプリ作るとの話であったが、Wiki 使えばいいじゃん。
MS-Excelと連携可能なWeb出欠管理システムは、 出席管理をExcelで扱える利便性を考慮し、ODBCを使って…とのネタ。 技術的には面白いけど、Excelを使い続けたいという人種の方は、 データベースに接続とか面倒なことは大嫌い。
スマホで家電製品の遠隔操作システムのテーマは、 個人的にも手抜き実践して遊んでいるので、興味があった。 外野の方の質問で、複数部屋への拡大などの質問があった。 しかし赤外線リモコンは、フィードバック制御ができず、 Webカメラと併設が必須、んでこれが面倒…