ホーム » 2012 » 5月 » 28

日別アーカイブ: 2012年5月28日

2012年5月
« 4月   6月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

2011年度授業アンケート

授業アンケート(2011年度)のデータが送付されてきた。 ということで、例年通りそのまま記載。

データベース

75.9→77.8でポイントは微増。 黒板やOHP資料のポイントが低い。 担任クラスでもあり、甘めの評価の懸念あり。

情報構造論

81.3→82.3でポイントは微増。 黒板やOHP資料のポイントが低い。 意見欄では、良かったや分かりやすかったの意見があり、 総じて良い評価であったと思われる。

創造工学演習

時間不足を指摘する意見が多い。 前年度の授業段階から事前準備などの提案もあり、 目的意識を持って取り組んだという意味では、良い傾向と思われる。

プログラミング応用

77.3→81.0でポイントも上がっている。 この科目では、黒板OHPのポイントが特に悪いという程ではない。 意見欄でも、プリントが分かりやすいとか理解が深まったとの 好印象な意見が得られた。 一方、授業中の演習が座学と区別しているため、実際にどんな動きをするのか見てみたかったとの意見もあった。

計算機システム

N進数変換とbit演算の応用

前回の授業で、#defineマクロやbit演算の説明をしたけど、 まだ詰めが甘かったので、開いたサブルーチン・閉じたサブルーチンなどの 説明を行い、標準関数などの説明も行う。

開いたサブルーチンと閉じたサブルーチン

#define マクロと、関数の違いを理解してもらうために、 プリプロセッサ・コンパイル・リンクといった機械語生成までの流れを説明し、 #define マクロを多用すると、同じ機械語が何度も生成され、機械語が肥大する 可能性を説明する。逆に関数を何度も利用しても、一箇所の機械語が使われるため 機械語の肥大は無いことを説明する。一方、関数では実引数・仮引数の 値渡しなどが発生するので、わずかとはいえ余計な処理時間を要することを説明。 この結果、#define マクロは、小さな関数向きであることを述べる。 また、関数は入口・出口が明確に作られることから、閉じたサブルーチンと呼ばれる。 逆に #define マクロは入口・出口が明確でなく、開いたサブルーチンと呼ばれることを 説明する。

N進数変換や文字列処理で使う標準関数

N進数変換や文字列処理で、ctype.h の isdigit() 関数や、stdlib.h の strtol() などの 標準関数を説明する。

型の問題と実行時のトラブル

1桁の数値と+,-記号で式の値を求めるeval() という関数を示し、 文字列処理のサンプルを説明する。このあと、以下の様な呼び出しの問題点を考えてもらう。

int eval( char s[] ) {
// 一桁の数値と"+","-"の計算式
// 例 printf( "%d" , eval( "1+2+3" ) ) ; // 6
}
void main() {
printf( "%d" , eval( 1+2+3 ) ) ;  // 引数型の不一致
printf( "%d" , eval( '1+2+3' ) ) ; // 文字定数エラー
printf( "%d" , eval( "1+2+3" ) ) ; // OK
// よくありそうな書き間違い
char s[ 100 ] ;
scanf( "%s" , s ) ;
printf( "%d" , eval( s[100] ) ) ; // 引数型不一致
// 文字列ポインタの間違い
char* s ;
scanf( "%s" , s ) ;  // 変な場所に文字列格納でメモリエラー
printf( "%d" , eval( s ) ) ;
//
char s[ 5 ] ;
scanf( "%s" , s ) ; // 1+2+3+4+5+6 を入力したら!?
printf( "%d" , eval( s ) ) ;
}