ホーム » スタッフ (ページ 214)
「スタッフ」カテゴリーアーカイブ
2010年10月3日(第184回)
- メールテーマ:秋の定番
eneloop充電ステーション
実験用に学科で導入。なんとなく、すげー
画像処理型
歯みがきロボコンを前にして、学生さんの画像処理型ロボットが少しづつ 動くようになってきました。 ブラシの部分は、学生さんが「キャタピラの部品がほしい」との話でしたが、 近所に売っている所もなかったので、私の方で歯の曲がり具合に応じて 円弧っぽく動くようなものを作ってみました。
画像処理型といっても、処理速度やアルゴリズムの都合で、画面上の数点の 明るさしか取得していないんですけどね…

構造体の説明
プログラミング応用での後半では、構造体などの複合型とグラフィックスを説明する予定。 特に中間試験までは、構造体・共用体・列挙型といったプログラムのデータ構造の 記述のバリエーションが広がることを目標にする。
構造体の説明といっても、2年生でも一応習っている内容でもあり、 関連する情報なども交えながら解説を行う。 構造体は、COBOL(Common Business Oriented Language:商用向け言語)での、 複合データを記述する考え方から出ている。 同じように、プログラミング言語では、手続きの構造化などの発展と共に、 構造化プログラミング(Structured Programming)に発展する。 データの構造化・処理の構造化は、データに対する処理の記述から、 オブジェクト指向へと発展していく。
構造体が無かったら、プログラムが発展していくときに、面倒が増えるのかといった話題を 説明したあと、実際の文法の説明を行う。 この中で、タグ名(Person) , 要素名(name,kokugo…) といった用語を解説。
struct Person { char name[ 20 ] ; int kokugo ; int sansu ; int rika ; } ; struct Person saitoh ; strcpy( saitoh.name , "Saitoh" ) ; saitoh.kokugo = 59 ;
途中で、タグ名などで変数名と同じルールといっても通じなかったので、 変数名が [A-Za-z_][A-Za-z0-9_]* (正規表現でかくと)といったものが使用可能 であることを説明する。
複合の型の雰囲気を感じてもらうために、構造体の初期化、構造体の入れ子(nesting)、 同一構造体の一括代入などの説明を行う。
構造体の一括代入などは、ANSI-Cなどでの機能であり、K&Rだとダメ…とかいった、 話題をしたので、ちょっと脱線して、JIS規格とかK&R文法などを紹介する。
2分木とヒープ
前期最後の双方向リストの次ということで、2分木の説明を行う。
最初に2分探索法について説明をして、検索処理速度のオーダーが、 で示されることを復習する。 その後、この方法が配列でランダムアクセスが可能で、a[(l+r)/2] が取り出せる からこそ有効であることを説明する。
これを踏まえ、2分木のイメージ図を示した後、ノード(節)とパス(枝)といった用語を説明し、 構造体の宣言を示してから、この概念を説明する。 ひとまず、処理の理解ということで、データ生成と検索処理までを示す。
struct Tree { int data ; struct Tree* left ; struct Tree* right ; } ; struct Tree* tcons( int x , struct Tree*l , struct Tree*r ) { struct Tree* ans ; ans = (struct Tree*)malloc( sizeof( struct Tree ) ) ; if ( ans != NULL ) { ans->data = x ; ans->left = l ; ans->right = r ; } return ans ; } // データは、0..100の値と仮定し、見つからなかったら負 int find( struct Tree* p , int key ) { while( p != NULL ) { if ( p->data == key ) return key ; else if ( p->data > key ) p = p->left ; else p = p->right ; } return -1 ; } void main() { struct Tree* top = tcons( 50 , tcons( 24 , NULL , NULL ) , tcons( 76 , NULL , NULL ) ) ; printf( "%d\n" , find( top , 20 ) ) ; }
この2分木構造では、木の段数がM段あって、木が左右均一であれば、 全データ件数は、 の関係から、
を満たし、処理時間は、
で示される。
ヒープ
2分木の欠点を考えると、データ1件につき、左右のポインタが必要であることから、 32bit コンピュータであれば、sizeof( struct Tree ) は12byte となり、単純な配列1件=4byte と比べればメモリのムダとなる。
この欠点の改善方法として、ヒープと呼ばれる方法がある。

この方法であれば、N番目のデータの左枝は2*N+1、右枝は2*N+2の位置に存在するため、 ポインタが不要となる。
4EI 遠足未体験
今日は、後期の最初の授業ということで、授業前に短いホームルーム時間がとられていた。 まずは、インターンシップ後の提出物や、高専祭の週の保護者面談の希望日程調査の 提出物を回収。4EIは後期実験のガイダンスとなった。
実験ガイダンスが予定より早く終わったので、残りの時間でホームルームの続きを行った。 この際、クラス役員の選挙と、11月の3年工場見学旅行中に行われる遠足を検討してもらった。 ただこの際に、なかなか行先アイデアが出てこない。1,2,3年の時の経験を踏まえれば、 もう少しアイデアが出てくるかと思ったら、担任クラスは色々と不可避なトラブルで、 クラスでのネタがいろいろとつぶれている。
1年生では、4月の新入生オリエンテーションが能登沖地震で、宿泊研修なし。 1年生の遠足は台風で中止。 昨年の3年では、新型インフルエンザで工場見学旅行が延期&3月実施。 みごとなまでにクラス・レクリエーション系で、運が無い。
ということで、遠足の行先決めで、発展的意見がでず議論が発散するので、 希望の行先を考えてくるという宿題にて、一旦ホームルームを終了とした。
データベース・ガイダンス&導入説明
5年後期のデータベース(選択)の授業の最初ということで、 シラバスやガイダンスといった説明の後、データベースの利便性の導入を説明した。
最初に、JABEEで学習・教育目標を決めているけど、本科学生の学習・教育目標が 不明確ということで、本科の内容を少し変更された。特に4,5年生は、 本科学生かつJABEE対象ということで、2つの学習・教育目標(言い回しが微妙に違うだけ) が記載されている。
授業の方針などを話した後、データベースの利便性を説明するために、 1行1件可変長データでは、while+fscanf+if+処理では、シーケンシャルしかできず、 O(N)にしかならない話をする。速度向上のためには、2分探索などが必要であり、 ランダムアクセス機能が重要であることなどを説明する。 データベースシステムを使わない場合、ランダムアクセスをどのようにするかということで、 fseek+freadなどのC言語の関数を説明する。(参考:昨年度の初回内容)
しかしながら、fseek+freadでランダムアクセスのできる処理が書けたとしても、 以下のような問題が残っている。これらの問題が行ないようにするために、 データベースシステムを使わずにプログラムを書こうと思ったら、 プログラマーには大変な負担となる。
- OSが落ちた場合に処理が中途半端にならない原子性(Atomicity)
- データがあってはいけない値にならない整合性(Consistency)
- マルチタスクで複数の問い合わせがあった場合の、排他制御の重要性(Isolation)
- データが消失しない耐久性(Durability)
自律部門ビギナーの部の工作教室
歯みがきロボットコンテストの自律部門のビギナーの部の 参加者対象ということで、 WROに参加した中学生を対象に工作教室を開催した。
講師には、福井工業大学の小沢先生にお願いし、 私は歯ブラシの取り付けを中心に説明を行った。

といっても、WROで車体の組み立てやプログラミングは 経験しているし、自分たちで作っていた車体をベースに 動かしたいという思いもあって、こちらの説明の資料が あんまり役に立たない。 このため、コースに合わせた調整が中心となった。
これとは別に、例年参加してくれている家族の方が 試走および調整に来られた。 リモコンの部も含め、興味深い車体で撮影したものを 掲載したいんだけど、作戦もあるでしょうから ひとまず、ナ・イ・ショ。
NXTのモーターの中身
工作教室の中で、小沢先生がNXTのモータの中が見えるようにしたものを見せてくれた。 興味深いので写真をとる。右側のギアには穴が空いており、フォトインタラプタで回転数が 取れるようになっている。

ROBOLAB
講習会では、プログラムの作成はROBOLABを使っていた。 うちの高専では、NXTソフトウェアを使っており、 ちょっと使い方のインタフェースが違うので、中学生のROBOLABのプログラムは、 横で見ていててよく解らない。 工大の方の動きの説明でのデモを見ていると、ROBOLABの方がループの周回速度は 早そうな雰囲気(1光センサーのライントレースでの頭の振り方がスムーズ)。
NXTソフトウェアでは、「moveの1つのアイコンで2モータへの速度指定ができる」という点では、 解りやすいと思う。しかし、ROBOLABでは、1つのモータ速度指定の定数を、 複数の処理アイコンに接続できるので、便利そう。 あえて言うなら、最近のNXT2.0であれば、35000円の中に、 NXTソフトウェア2.0が含まれている点がお勧めかも。
2010年9月26日(第183回)
スタジオお休みにつき収録でお送りしました!
- IT研究会共同ブログ構想について