ホーム » 2009 » 5月 (ページ 2)

月別アーカイブ: 5月 2009

2009年5月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最新の投稿(電子情報)

アーカイブ

カテゴリー

新型インフルエンザが高専にも

ニュースを見ていたら、どうも高専でも新型インフルエンザの感染者が出た様子。 紙面では生徒という表現もあり、3年以下の学生さんなのだろう。 該当高専のHPを見ると、5/17〜5/24までの臨時休校と記載されている。

潜伏期間的にはやむおえない対応だろうけど、水際封鎖があれだけあったのに、 この2日ほどでこれだけ感染者が出るというのだから、感染力だけは強そう。

その一方で、我が家は奥さんが実家より「ウィルス性胃腸炎」をもらってきたみたい。 最初38℃越えの熱も出てるし、 妹家族での同様の症状から「新型」じゃないとは思うけど、 『こりゃ、病院いったらまずA型の検査だな….』と話しているけど、 当人(奥さん)は、下痢&吐き気(この時点でたぶん新型じゃない)で Jokeに付き合ってくれない….

2009年5月17日 (第112回)

  • 英語の囃子 第9回 吉田先生、電子情報4年丸山さん
    eng090524.mp3
  • ゲスト 県内高校生 岩崎さん、治部さん

photo090517.jpg

舞鶴福井高専交歓試合・バトミントン

0905161319_240x320.jpg

複素数によるオブジェクト指向レポート2回目

複素数をテーマにした、隠蔽化を体験するレポートの2回目。 引き続き課題に取り組んでもらっているため、そのまま演習。

LinuxでTimeMachineサーバ構築

Macを使い始めたけど、簡単なバックアップ環境でTimeMachineが便利らしい。 だけど、外付けのハードなり、TimeCapsule のようなものを購入するのはもったいない。 しらべてみると、やっぱりそーゆーネットワークサービスは、Linuxマシンで代用できるらしい。

追記:うーん、うまくいかない…ディスクイメージをコピーした先をTimeMachineが うまく参照していない様子。

追記:ようやくうまくいった。ディスクイメージを移動しディスクイメージサイズを変更した後、 パーティションの情報も広げてやらないとダメ。

追記(2009/5/18):TimeMachineの最初ということで、バックアップを開始するが、 いつも使っているWi-Fiで動かして、半日放置でも20GBのうちの2GBほどしか 保存されていない。まあ、Wi-Fiなんだからそんなもんか…
ということで、初回バックアップくらい有線に切り替えてやり直し。

malloc/freeの使い方

メモリー利用の問題点として、C言語の固定配列サイズの 問題点を紹介し、その対応として、malloc/freeを紹介。

たとえば、複数の名前を配列に記憶する場合、

char name[ 100 ][ 20 ] ;

では、平均名前長が8文字ぐらいだと、12文字/件の無駄が 発生するし、ジュゲムのような長い名前は覚えられない。

そこで、その対応として、

char heap[ 2000 ] ;
char* name[ 100 ] ;

として、

               ↓name[1]      ↓name[3]
heap: t-saitoh$tomoko$mitsuki$jugemujyugemu......$ayuka$
      ↑name[0]       ↑name[2]

といった、最初に巨大配列を一括して確保しておき、 データに応じて細切れにして使う手法を説明する。 こうすれば、メモリ空間は「詰めて」保存ができ、 無駄が排除できる。 でも、この領域で、途中途中のデータが不要になったら、 その隙間の管理は面倒。

malloc/free

そこで、malloc/free はこれらをうまく活用してくれる。

int size ; //サイズが入っているとする。
int* p ;
// size*sizeof(int) byte のメモリを確保。
// その先頭アドレスを返してくれる。
// 型キャストののち、p に代入。
p = (int*)malloc( size * sizeof( int ) ) ;
// 処理後に領域が不要になったら、freeで解放。
// 必要に応じて再利用してくれる。
free( p ) ;

ただし、通常は、malloc はメモリ確保時に、NULL を返すので、 if でチェックの必要がある。一般的な使い方は、

int size ;
int* array ;
scanf( "%d" , &size ) ;
array = (int*)malloc( size * sizeof( int ) ) ;
if ( array != NULL ) {
   for( int i = 0 ; i < size ; i++ )
      scanf( "%d" , &array[ i ] ) ;
   :
   free( array ) ;
}

ただし、free を忘れると、メモリリークが発生し、メモリの無駄な利用は、 仮想記憶の利用から、補助記憶への読み書きを発生させ、処理速度低下を 招くかもしれない。その他の内容は、以下の通り。

  • 終了直前のfreeならなくてもよい。
  • ネットワークプログラミングでは、子プロセス終了時に自動解放がよく使われる。
  • スタック領域を使うんなら、alloca() という関数もある。
  • C++なら new / delete 演算子を使う。
  • ガベージコレクタのある処理系(java/C#)なら、freeは不要…

担任クラスの個人面談

担任クラスの個人面談を開始する。 本当は、手始めに10人位…と思っていたが、昨日の資源回収の疲労もあり、 「個人面談するぞ!」の話の瞬間にトーンダウン。「ひとまず今日は5人ね…」
放課後には、学生さんの都合で翌日1名になり、ちょっと拍子抜け。

個人面談の前に、昨年までの試験成績席次を表計算に書き込み、 各学生さんの成績傾向を確認しておく。 ただし面談時には、今後の目標を見据えているかを中心に、話をする。

浮動小数点の扱いと文字列の扱い

N進数表現と数値範囲の説明の続きとして、 実数型(float,double)の取り扱いについて説明する。

実数の取り扱い

実数の取り扱いとして、double/float型の内部データ保存形式の説明を行う。 (参考:IEEE 754 wikipedia.jp)

符号(s) 指数(e) 符号(d)
float 1[bit] 8[bit] 23[bit]
double 1[bit] 11[bit] 52[bit]

double型の精度は、 より、約52*0.301=15.6桁相当といった説明。

実数型の計算のトラブル事例もいくつか紹介。

int sum , cnt ; // 合計とデータ数で、平均を表示
printf( "%f" , sum / cnt ) ; // めちゃくちゃな答が表示される。
// sum / int は、整数同士の計算で3となる。
//    小数点以下はも止まらない。
// "%f" は、浮動小数点用。第2引数に3があっても、
//    正しく表示できない。
printf( "%lf" , (double)sum / (double)cnt ) ; // 型キャスト
double a , h // 三角形の底辺と高さとする。
double s ;
s = (1/2) * a * h ; // 面積を計算したい
// この答は常に0が表示される。
// 1/2 は、整数同士で計算され、0.5は0として扱われる。
s = 0.5 * a * h ;
s = (1.0/2.0) * a * h ; // 2.0と書けば実数どうし
s = a * h / 2 ; // 実数/整数は、2.0 に自動的に型拡張される

文字列の扱い

C言語における文字列の扱いを説明するために、 ASCIIコード表(JISコード表)などの説明をする。 配布資料中の例題で、10進、8進、16進変換、 文字コード間の加減算を行う。 制御文字'\n','\r','\f'などを、タイプライタの動き を例にしながら、説明を行う。

2009年5月10日 (第111回)

  • ゲスト 電子情報4年 丸山さん

photo090510.jpg

Geocodingなど

Perlで地名から緯度経度を簡単に求めるのに使えそう