ホーム » スタッフ » 斉藤徹 (ページ 141)

斉藤徹」カテゴリーアーカイブ

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

昨年度のテスト過去問題…(05/09)

  • 05/09 昨年度のテスト過去問題のページの更新ができていなかったので、更新作業。ファイルは保存してあったけど、問題ページからリンクが無かった… #fnct http://tinyurl.com/d5kcxvl

この記事は、twitter の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。


N進数と文字数値変換

N進数の話の演習として、C言語における8進数,16進数の話や、 文字コード、エスケープ文字などを説明の後、 文字列⇔数値の相互変換プログラムを説明。

テスト前演習課題とするが、レポートでの採点基準を説明。

  • プログラムの難易度
  • プログラムの説明
  • 実行結果(動作が怪しくなりそうなケースの動作検証をしているか)
  • 動作検証や、プログラムの改良についての考察

課題テーマN進数

参考資料で10進数⇔文字列変換(atoi,itoa)などを取り扱ったので、 これを拡張し、8進,16進,N進などを取り扱えるようにする。 自信があれば、小数点を含む文字列の変換などに取り組む。

補数とN進数

前回の授業で数値範囲についての説明はしたけど、 2の補数表現やN進数の話が抜けていたので、説明。 基本は、他の授業で既に行われているが、小数点以下のN進数変換などを 交えながら、Nで割りながら余りを書き並べるとか、Nをかけながら整数部を書き 並べるといった、N進数変換を説明。

この前に、説明の不十分であった、ポインタ渡し・配列渡しなどを 説明しておく。

複素数クラスの演習

GW真ん中の授業。といっても、先週の複素数クラスの演習なので、 出席をとって各自演習。 質問などの確認をしたけど、ひとまず専攻科学生なら、自分で調べるだろう。 ただ、"C++,複素数クラス"なんてぐぐると、operator+( Complex… )みたいな、 演算子オーバロードばりばりな、サンプルコードになりそうなので、 ひとまず注意だけしておく。

nagios3でトラブルメールが飛ばなかった

OSをoldstableからstableに変更したサーバだけど、サーバ監視ソフトを当然入れたんだけど、nagios3でトラブル時にメールが飛ばない。 色々チェックして悩んでいたけど、 ようやく判明。contacts_nagios2.cfg の、contact_name の項目で alias が設定ミスで、 他の項目の名前とかぶっていた。

nagios3 の起動時のエラーチェックは、それなりに充実しているから、安心していたけど、 alias の衝突は無チェック&内部データテーブルは alias 名で管理されてるのね….

今日は体育祭

晴天の中、昨日の順延を受け、本日が体育祭です。

1204271208_640x480.jpg

ハノイの塔とマージソートの分析

再帰呼び出しを含む処理の、速度分析の説明として、ハノイの塔とマージソートを 説明する。

ハノイの塔

ハノイの塔は、3本の塔にN枚のディスクを積み、ディスクの上により大きいディスクを積まずに、移動させるパズル。 ハノイの塔の移動回数を とした場合、 少ない枚数での回数の考察から、 ということが予想される。

この予想が常に正しいことを証明するために、ハノイの塔の処理を、 最も下のディスク1枚と、その上の(N-1)枚のディスクに分けて考える。 これより、


ということが言える。 ディスクが 枚で、予想が正しいと仮定すると、 枚では、



となり、 枚でも、予想が正しいことが証明された。 よって数学的帰納法により、1枚以上で予想が常に成り立つことが証明できた。

マージソートの処理速度分析

最も高速なソートアルゴリズムとして、クイックソートがあげられる。 しかし、説明が分かり難いので、同じ処理速度のオーダとなる、 マージソートの分析で説明する。

マージソートのアルゴリズムは、

  • データが1件の時は、そのまま。
  • それ以上の件数では、
    • データを中央で2分割して、それぞれをマージソートを行う。
    • 出来上がった2つのデータ列を、先頭から2つを比較し小さい方から移し替える。

この方式であれば、再帰方程式として、以下の式が示される。


N=1,2,4,8,…と、代入を繰り返すと、処理時間は、 であることがわかる。

複素数のクラスと隠蔽化

前回までで、オブジェクト指向でのクラスの説明が終わったので、 class宣言の外にメソッド実体を書く方法(クラス限定子"::")や、 inline宣言などを説明し、実際の例として複素数クラスを用いて演習にとりかかってもらう。

// 直交座標系
class Complex {
private:
double  re , im ;
public:
inline Complex( double r , double j )
: re( r ) , im( j ) {}
inline void print() {
printf( "%lf + j%lf" , re , im ) ;
}
inline void add( Complex& z ) {
re += z.re ;
im += z.im ;
}
} ;
void main() {
Complex a( 1 , 2 ) ;
Complex b( 2 , 3 ) ;
a.add( b ) ;
a.print() ;
}
// 極座標系
class Complex {
private:
double  ab , th ;
public:
inline Complex( double r , double j )
: ab( sqrt( r*r + j*j  ) ) , th( atan2( j , r ) ) {}
inline void print() {
printf( "%lf ∠ %lf" , ab , th ) ;
}
inline void add( Complex& z ) {
// 演習のネタ
}
} ;

直交座標系のクラスと、極座標系のクラスにて、 複素数の加減乗除のメソッドを実装し、 これにより隠蔽化が可能で、クラス内を変更(リファクタリング) しても利用者に影響が少なくできることを体感してもらう。

fvwmとかgwmって、いつの時代やねん…

電子情報のメインサーバも oldstable のままなので、 移行作業を始めるための準備。 使うだろうと入れてあるけど、実質使っていない gnome やら kde やら を削除したあと、aptitude をかけた時に競合パッケージを減らすために、 利用頻度が低いパッケージを目視で削除中。

ただ、fvwm-data やら gwm-data といった、過去の遺物のパッケージ名が 未だにインストールされてた。(さすがにバイナリは競合の中消えてしまっている)

もう少し、要らないパッケージを消して、夕方あたりから本格的な更新作業を 行うかな….

uptime 200を超えると再起動おそ…

ようやく、主要パッケージだけにできたので、更新作業を夕方から行った。 確認すると、uptime 250日。再起動をかければ、まちがいなく fsck が起動するから、 再起動中に他の方からのクレームが来ないか心配しながらの再起動。

途中、grubでなくLILOのブート画面に、クラクラしながらも、ルート,/home の fsck にイライラしながらの再起動が完了。 後は、監視系の munin , nagios3 を入れて、足場を固める。 gnome,KDEの再インストールとも思うが、ニーズが出るまではやめておこう。

体育祭の応援練習

まだ練習も始まった所、本人達自身から『なんかラジオ体操っぽくね?』の声。
うん、私もそう思う。
# でも、本番では例年かっこよく決めてくれる….

1204201636_739x512.jpg

システム

最新の投稿(電子情報)

最近の投稿(斉藤 徹)

アーカイブ

カテゴリー