ホーム » 2014 (ページ 13)

年別アーカイブ: 2014

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

F5クラスへの学科説明

工学基礎コースのF5クラスでは、2年進級時に転科を希望する学生さんもいることから、改めて学科の説明会が開催されました。

1401291527_320x240.JPG

2014年1月26日(第357回)

  • まるよし Train Pops ~ 国語と遊ぼう! 第40回 「高専入試の国語
  • 「オープニングトーク」の話
  • 資格について
  • 部活動の顧問の話
  • 入試について

担当:前田勝(4EI)、山野(2C)、長水(教員)、五味(教員)

優秀学生表彰と学生総会

今日は、短縮授業としたなか、昼休み時間に、優秀学生表彰と学生が開かれました。

1401231250_320x240.JPG

C++11を使う

情報構造論のシメとして、簡単なジェネリック型とかテンプレート型などを 紹介して終わろうかと、Boost や STL の資料を見ていて、C++を使っていても 解らない点がでてくる。 C++11あたりの新しい文法もからむので、改めて C++11の概要をWikipediaで見てみる。 なかなか、Boostなどのライブラリなどを的確に記述できるための文法なんだろうけど、 クラッシックなC++の理解に留まっていると (@_@) である。

興味深い文法があったので試すけど、動かないのであれ?っと思ったけど、 コマンドラインオプションで “-std=c++11″とか指定する必要があるのね。

void foo(int x) { std::cout << "foo(int)" << std::endl ; }
void foo(char*p) { std::cout << "foo(char*)" << std::endl ; }
int main() {
   foo(0) ;
   foo(NULL) ;    // 曖昧だからコンパイルエラーだってさ。
   foo(nullptr) ; // これが試してみたかった。
   return 0 ;
}

こういったC++11の文法を使いたかったら、

$ g++ -std=c++11 test.cxx

H26年度・春季・情報処理技術者試験の案内

H26年度春季・情報処理技術者試験の案内文書が届いております。

受付期間は、下記のようになっておりますので、 自分の学んできたことの実力を試し、 将来の就職試験でも学生時代の実力を見てもらうための手段として、 試験にチャレンジしてみましょう。

電子情報の学生さんであれば、基本情報や応用情報などの試験にチャレンジしてみましょう。

受付期間
インターネット 1/14(火)〜2/21(金)20時
郵便 1/14(火)〜2/10(月)消印有効
実施する試験区分
基本情報、応用情報、プロジェクトマネージャ、データベース、 エンベデッドシステム、情報セキュリティ、システム監査

OS X Mavericks(10.9)の ntp 挙動

自宅 Windows7 の時計の自動同期がおかしくて、 設定を変更などをしていたけど、 ちゃんと動いているのか確認をしていたら、職場の Mac OS も 5分ずれている。

おかしい…と思い、"システム環境設定・日付と時刻"を表示させたら、 ずれていた時計が勝手に治っている。

改めて、NTPの設定を確認したら、このような記事を見つける。 日付と時刻を起動したら治るという点では同じ状況。

ということで、下記の設定を行い、再起動となった。

(( /etc/ntp.conf ))
server 学内TimeServer       minpoll 6 maxpoll 10
server ntp1.jst.mfeed.ad.jp minpoll 6 maxpoll 10
server time.asia.apple.com  minpoll 6 maxpoll 10


2014年1月19日(第356回)

収録でお送りしました。

  • 入試の話
  • 到達度試験の話
  • "先輩"が答える!~かかってこいや

担当:中村(4EI)、牧田(4EI)、山野(2C)、松島(2C)

2次元グラフィックスの課題

前回の2次元座標の移動・回転・拡大などの説明を行ったので、 今回はその応用として、座標回転拡大の理解がわかるプログラム作成の課題に 取り組んでもらう。

一筆書きで簡単な家の絵を、(-50,-50)並行移動して、60度刻みで回転し、少しづつ倍率を増やしてみた。

構造体の関数渡しなどもわかってほしいので、 以下に示すようなコードとしてみた。 (ただしGrWinを使用)

2014年1月12日(第355回)

  • まるよし Train Pops ~ 国語と遊ぼう! 第39回 「駅と車内のアナウンス」
  • 受験について
  • 成人式について
  • 五味が答える!~かかってこいや~

担当:松島(2C)、山野(2C)、五味(教員)

関数ポインタとコールバック

例年より授業の進度が速いので、 全体の総括の前に、追加ネタを加える。

関数ポインタは、オブジェクト指向の仮想関数の実装であったり、 イベント駆動型のプログラミングで重要なテクニックなので紹介する。

関数ポインタの基礎

基本的には、関数ポインタは以下のように使用する。 以下のサンプルプログラムでは、(*f)( 2 , 3 ) にて、fに代入されている関数を、 引数(2,3) にて呼び出す。

int fadd( int x , int y ) {
return x + y ;
}
int fmul( int x , int y ) {
return x * y ;
}
void main() {
// 型は2つのintを引数を持つintを返り値とする関数へのポインタ
int (*f)( int , int ) ;
f = fadd ; // 関数名の後ろに丸カッコがない点に注目
printf( "%d¥n" , (*f)( 2 , 3 ) ) ; // 2+3=5
f = fmul ;
printf( "%d¥n" , (*f)( 2 , 3 ) ) ; // 2*3=6
}

関数ポインタは、ライブラリを利用する際に、自分なりの変更を加えたい部分があったら、 その処理を関数で記述しておき、その関数のポインタをライブラリに渡す。 ライブラリは、必要に応じて関数ポインタを使って、関数を呼び出す。 このように、ライブラリの中から自分の渡した関数を呼び出してもらうのは、 「コールバック関数」と呼ばれる。

以下に簡単な例として、配列の最大データの添字を返すプログラムの例を示す。 この方法であれば、異なるデータの型でもコールバック関数を専用に作るだけで良い。

int intcmp( int* x , int* y ) { // 整数比較関数
if ( *x > *y )
return 1 ;
else if ( *x < *y )
return -1 ;
else
return 0 ;
}
int vmax( void* array ,    // 配列先頭アドレス
int size ,       // 配列データ件数
int sizeofdata , // 1件あたりのbyte数
int(*f)( void*,void* ) ) { // 比較関数
int i , max = 0 ;
for( i = 0 ; i < size ; i++ )
if ( (*f)( array + max * sizeofdata ,
array + i   * sizeofdata ) < 0 )
max = i ;
return max ;
}
int idata[ 4 ] = { 11 , 33 , 22 , 44 } ;
char sdata[ 4 ][ 4 ] = { "ab" , "bc" , "aa" , "c" } ;
void main() {
int m ;
// intcmp関数を使って、idata から最大値を探す
m = vmax( idata , 4 , sizeof(int) , intcmp ) ;
printf( "%d" , idata[ m ] ) ;
// strcmp関数を使って、sdata から最大値を探す
m = vmax( sdata , 4 , sizeof(sdata[0]) , strcmp ) ;
printf( "%s" , sdata[ m ] ) ;
}

この方式をそのまま使った便利な関数が、C言語のクイックソートの標準関数 qsort( void* , sizt_t , size_t , int(*)( void*,void* ) ) である。この関数を使えば、データ比較用のコールバック関数を書くだけで、 配列の高速ソートが可能となる。

// LLVMなどの新しいC言語では、無名関数みたいな
// block pointer ってぇのが使えるらしい。
int (^f)( int , int ) ;
f = ^( int x , int y ) {
return x + y ;
} ;
printf( "%d¥n" , f( 2 , 3 ) ) ;
f = ^( int x , int y ) {
return x * y ;
} ;
printf( "%d¥n" , f( 2 , 3 ) ) ;

オブジェクト指向での仮想関数

関数ポインタは、オブジェクト指向での仮想関数機能の実現に利用されている。

// 純粋仮想基底クラス
class A {
public:
virtual void print() { printf( "A¥n" ) ; }
} ;
// 派生クラス A_int
class A_int : public A {
private:
int data ;
public:
A_int( int x ) { data = x ; }
virtual void print() { printf( "A_int : %d¥n" , data ) ; }
} ;
// 派生クラス A_str
class A_str : public A {
private:
const char* data ;
public:
A_str( const char* x ) { data = x ; }
virtual void print() { printf( "A_str : %s¥n" , data ) ; }
} ;
int main() {
A      aa ;
A_int  ai( 10 ) ;
A_str  as( "hello" ) ;
// array[] には、異なる型のデータ(同じ基底クラス)が入ってる。
A* array[] = { &aa , &ai , &as } ;
for( int i = 0 ; i < 3 ; i++ ) {
array[ i ]-> print() ;
}
// 実行結果
// A
// A_int : 10
// A_str : hello
return 0 ;
}

JavaScriptと無名関数

JavaScript では、イベント駆動のプログラムを実現するために、無名関数を利用することが多い。

var func ;
func = function( x , y ) {
return x + y ;
} ;
func( 2 , 3 ) ; // 答えは5
function foo( func ) {
alert( func( 2 , 3 ) ) ;
}
foo( function(int x,int y) { return x * y ; } ) ;
// alertで6が表示される

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー