学力到達度試験で優秀者2名
今年最初に3年を対象として行われた、全国高専学力到達度試験にて、 2名の学生が優秀な成績であったとのことで、学内表賞の 賞状と副賞(図書券)を配りました。優秀者は以下の2名。 3年末での試験といいながら学生さんにしてみれば、 メリットが少なくきちんと準備して受験していない人も多い中、 日頃の成果をきちんと出してくれたと思います。
- 4EI本山くん(数学・物理の2科目)
- 4EIツェンデくん(数学)
ループ型処理の時間見積もり
先週の単純サーチの処理時間に引き続き、 2分探索法の処理時間と、最大選択法の処理時間の式を示す。 この結果を踏まえ、処理時間の見積もりでは、Nが巨大化したときの最大項と、 その項から比例乗数を抜いた式を、オーダ記法と言うことを説明する。
今日の授業だけど、4年になった変化なのか、いい意味でのツッコミなどがぽんぽんと 出てきて、説明のリズム的にもすごく話しやすかった。 積極的に質問も出てくるし、どこが変わったんだろうか…. 楽しく話ができて、気持ちいい授業でした!!
関数ポインタやプロセス起動
今日は、専攻科の特別研究中間発表のある日で、短縮授業。 時間短いしテキパキやろうと授業に乗り込んだけど、発表準備があるためか、 電子情報の学生さん2人のみ。 このまま授業を進めると、来週復帰してくる学生さんがワケワカメになるので、 講義内容を変更する。
通常、電子情報以外の学科の人には、C言語の基本が知らなかったりするので、 話を省略している、関数ポインタについて紹介する。
関数ポインタ
オブジェクト指向が多用されるGUIなプログラミングでは、マウスが押されたときに動かす処理… といったように、GUIライブラリに自作処理を渡すコールバック関数が多用される。 また、後々のオブジェクト指向の講義で話す、仮想関数の実装でも関数ポインタが使われる。 典型的な使い方は、以下のとおり。
int add( int x , int y ) { return x+y ; } int mul( int x , int y ) { return x*y ; } void main() { int (*f)( int , int ) ; // fは関数へのポインタ。 // (2つのint引数を持ち、intを返す関数) f = add ; printf( "%d" , (*f)( 2 , 3 ) ) ; // 2+3が表示 f = mul ; printf( "%d" , (*f)( 2 , 3 ) ) ; // 2*3が表示
プロセス起動
説明の中で、お二人さんから特別研究に関係するC言語のテクニックとして、質問がでたので 回答する。
(( main は、どう書くのが正しいか? )) int main( int argc , char* argv[] ) { : return 0 ; } // argcはコマンドライン引数の数(プロセス名を含む) // argvはコマンドライン引数の実体 // mainのreturn値は、プロセスの実行結果 // 0:正常終了 // それ以外:異常終了
(( 自分で書いた処理から、gnuplot を起動したい...)) 表示させる処理を書いたscriptを作って、 system( "gnuplot スクリプト" ) ; みたいに呼び出せばいい。ただし、gnuplot の処理が終わるまで、 呼び出し側は処理ができない。呼び出し側で凝った処理をしたい ならば、fork() + exec() で gnuplot を呼び出し、必要に応じて gnuplot とパイプで処理を渡すなどのテクニックを使うべきかも。