ホーム » 2004 (ページ 14)
年別アーカイブ: 2004
工場見学旅行のおおまかな計画案
JTBさんが来られた時に、内之浦見学が可能か色々と相談をする。 初日に飛行機で鹿児島入りという案もあったが、1日目日程が かなりつぶれるため、断念。 見学優先の計画と、娯楽系優先の計画 FN ほぼ、前回の担任時のコースと似通ってしまうので、できれば避けたい。 /FN の2案を検討。 特活時に、概略を説明するが、見学優先の日程でも、納得してくれる意見が多かっ た。
日程案は以下の通り(まだまだ検討中)
- 鯖江→松下電器技術館→天保山マーケットプレース→フェリー
- フェリー→志布志港→内之浦ロケット打ち上げ場→国分京セラ→霧島温泉
- 霧島→熊本・島原・長崎などを経由(未定)→ハウステンボス→ハウステンボス ホテル
- ハウステンボス→福岡方面で何らかの見学→福岡解散
3日目が移動日状態となり、多少苦痛かも。 でも早めの夕方にハウステンボス入りができれば、 園内の見学なども自由にできるのではないかと期待。 学生の希望の多かった、博多ラーメン博物館・スペースワールドが予定に 入れることができなかったが、福岡解散であれば、自由行動時に各自で行けるでしょ う。
仮想関数の演習
先週説明した、グラフィックスを用いた仮想関数の演習課題をレポートとする ことを伝える。レポートの課題は、以下の通り。
- ベースとなったプログラムに仮想関数等を追加する。
- そのプログラムを印刷し、 そのプログラムにオブジェクト指向の用語の解説を加える。
台風直撃?らしいので、午後の授業が休講になる
台風6号が迫る中、3限目授業開始時点で、 『台風のため午後の授業を休講とします』 だそうだ。放送終了後、歓声があがる。 こちらにしてみりゃ、5年実験なので、どうせ1週延びただけじゃん。
それよか、JABEE委員会の会議(16:30開始 FN おぃおぃ、予想からすると暴風雨域にはいっとるじゃん。 /FN ) は早まらんのかぃ!!
追試
試験の採点をしたら、思ったより成績が悪い。 基本情報処理あたりで出題傾向の高い浮動小数点とビットパターンの 問題を導入したが、基本情報処理などを受けた学生以外は、 単純ミスも含めて酷い結果。 平均点も60点程度。
ということで、水曜の段階で追試をアナウンスし、今日の講義中に 追試を実施。しかし、結果を見ると、補数を求めたけど最終結果に マイナスが無かったり、基数が間違っていたり、単純な誤解が残っている。
夏休みは、たっぷり補講か…….はぁ….
リスト処理の導入
前回説明した、配列に次のデータの場所を保存する手法と対比しながら、 リスト構造の説明を行う。次のデータの場所を覚える、末尾には目印として NULLを入れておくなど。
struct List { int data ; struct List* next ; } ; // 最初は、手作業で示す。 struct List* top ; top = (struct List*)malloc( sizeof( struct List ) ) ; top->data = 12 ; top->next = (struct List*)malloc( sizeof( struct List ) ) ; top->next->data = 34 ; top->next->next = (struct List*)malloc( sizeof( struct List ) ) ; top->next->next->data = 56 ; top->next->next->next = NULL ; struct List* p ; for( p = top ; p != NULL ; p = p->next ) printf( "%d\n" , p->data ) ;
簡単な練習として、リスト処理で合計やら検索などを演習させる。 来週は、入力しながらリスト生成などを示す予定。
グラフィックスを用いた仮想関数の演習前説明
グラフィックス表示を例題とした、仮想関数の演習を来週にかけて実施予定。 表示だけの仮想基底クラスをもつ図形クラスから、 異なる図形(三角、丸、四角)のクラスを導出し、 配列に異なる図形クラスを入れ、仮想関数の呼び出しを体験してもらう演習。
機械系・電気系学生は、グラフィックスの扱い自体の経験が少ないので、 Visual C++ を使ったグラフィックスの基礎の説明も行う。
傾向を読まれたか?
情報構造論のテスト結果は、同じ問題は出していないものの、 出題傾向を読まれたのか、思ったより良い成績。 83.1 というのは、なかなか。
# 採点も落ち込むことなく、すんなり終了した。今からレポート採点だ!
仮想関数
6/7(Mon)は、Happy Monday 法の逆の余波により、火曜日の授業に振り替え。 おかげで、6/7,8の連日でオブジェクト指向の授業。 このため講義メモは 2 日分を一括記載。
共用体による異なるデータを1つの配列に保存するプログラム例
導出の概念を簡単に復習し、導出の便利な使い方の一例ということで、 コンテナクラスの概念を説明。コンテナクラス側で、データを扱う 一般的な処理を作成しておき、コンテナクラスを使う時は、自分用 のデータを追加した導出クラスを作成し、継承概念を利用し、 あらかじめ作られているアルゴリズムを使うという説明を行う。
仮想関数の説明として、基底クラスを作成し、導出したクラスで 異なる処理を呼び出すという概念を述べる。しかしこれだけでは、 判りにくいので、C言語による共用体の使い方を説明し、 別に仮想関数の話しをすることにする。
union A { int x ; float y ; char z[ 10 ] ; } ; struct AA { int type ; union A data ; } ; void set_int( struct AA*p , int d ) { p->type = 1 ; p->data.x = d ; } void set_float( struct AA*p , float d ) { p->type = 2 ; p->data.y = d ; } void print( struct AA*p ) { if ( p->type == 1 ) // ディスパッチ処理が羅列される例 printf( "%d\n" , p->data.x ) ; else if ( p->type == 2 ) printf( "%f\n" , p->data.y ) ; } void main() { struct AA a[ 2 ] ; set_int( &a[ 0 ] , 1234 ) ; // a[] に異なるデータが保存できる例 set_float( &a[ 1 ] , 1.234 ) ; for( int i = 0 ; i < 2 ; i++ ) // 異なるデータにメソッドは同じだけど print( &a[ i ] ) ; // 異なる処理が実行されるという説明 }
仮想関数のプログラムの実例
仮想関数の最も簡単な実例として、以下のプログラムを提示する。
// 1行記述が多いのは、シンプル日記の都合上。 class Data { public: virtual void print() = 0 ; // virtual は仮想関数を表すキーワード // =0 は、基底クラスでのメソッドが無いことを表す } ; class DataInt : public Data { private: int x ; public: void set( int d ) { x = d ; } virtual void print() { printf( "%d" , x ) ; } } ; class DataFloat: public Data { private: float y ; public: void set( float d ) { y = d ; } virtual void print() { printf( "%f" , y ) ; } } ; void main() { DataInt b ; b.set( 1234 ) ; DataFloat c ; c.set( 1.234 ) ; Data* a[ 2 ] ; a[0] = &b ; // 派生クラスポインタは基底クラスポインタに型変換可能 a[1] = &c ; for( int i = 0 ; i < 2 ; i++ ) a[ i ]->print() ; // 仮想関数の呼び出し }
仮想関数と union での事例の比較として、次の点を強調する。
- if文ディスパッチャが無くなっている事、
- 型識別ID の保存処理が無い事、
仮想関数の実装のための補助知識
仮想関数の実装方法の知識として、関数ポインタの説明を行う。
switch文、文字列処理、試験後の範囲の前説(OSについて)
プログラムの基本文法の説明時に、switch 文の説明が不完全で、過去問が 解らないという質問者があったので、switch 文の説明。 よくある間違った使用例ということで、定数式部に、文字列を書く間違いを紹介す る。 これに伴い、C言語の文字列処理の標準関数として、strcmp , strcpy 等を、 コーディングと共に処理を説明する。
この際に、strcmp,strcpy を文字列処理を配列的に記述する例や、ポインタ操作で行 う例を 示す。そのときに、while( *p++ = *q++ ) ; といったC言語特有の省略記法の解説、 i++,++iの違いなどを説明する。
後半は、中間試験後の導入として、ファイル処理の講義予告と、OSに関連した説明を 行う。 特に、OSはコンピュータ資源アクセスのための共通処理の提供と、 コンピュータ資源の不当アクセスを許さないための機能の話しを、 特権モード・ユーザモードの話しを交えながら口頭で説明する。
ヒープ総括+リスト構造導入ネタ+試験勉強
シラバスの予定を見ると、今回は無理に授業を進める必要はなさそうなので、 復習を中心とした話しと、試験勉強とする。 最初に、1/4程度の時間で malloc の説明を実施。 次に中間試験後の授業のために、リスト構造のイメージを説明する講義。 整列された配列データの中間にデータを挿入しようとするときの、 O(N)の処理効率の悪さを説明し、 次のデータの場所を配列のindexで実装した例を、イメージ+簡単なプログラムで説明。
残りの半分の時間は、自由な試験勉強時間とする。 半数は演習室にて課題作成。 残りの学生は、オーダ記法や再帰方程式などの質問をしてきたので、解説を行う。 前回フィボナッチ数列の説明が怪しかった時の宿題を、 教室に掲示していないことが判明。印刷して掲示しに行こう!