ホーム » 2004 (ページ 14)

年別アーカイブ: 2004

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

工場見学旅行のおおまかな計画案

JTBさんが来られた時に、内之浦見学が可能か色々と相談をする。 初日に飛行機で鹿児島入りという案もあったが、1日目日程が かなりつぶれるため、断念。 見学優先の計画と、娯楽系優先の計画 FN ほぼ、前回の担任時のコースと似通ってしまうので、できれば避けたい。 /FN の2案を検討。 特活時に、概略を説明するが、見学優先の日程でも、納得してくれる意見が多かっ た。

日程案は以下の通り(まだまだ検討中)

  1. 鯖江→松下電器技術館→天保山マーケットプレース→フェリー
  2. フェリー→志布志港→内之浦ロケット打ち上げ場→国分京セラ→霧島温泉
  3. 霧島→熊本・島原・長崎などを経由(未定)→ハウステンボス→ハウステンボス ホテル
  4. ハウステンボス→福岡方面で何らかの見学→福岡解散

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で実装した例を、イメージ+簡単なプログラムで説明。

残りの半分の時間は、自由な試験勉強時間とする。 半数は演習室にて課題作成。 残りの学生は、オーダ記法や再帰方程式などの質問をしてきたので、解説を行う。 前回フィボナッチ数列の説明が怪しかった時の宿題を、 教室に掲示していないことが判明。印刷して掲示しに行こう!

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー