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

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

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

電子回路シミュレータ(QUCS)

電子回路シミュレータ(QUCS)

spice とかを入れてみたけど、操作なども初心者にもわかり難かったけど、 この QUCS は、メニューも日本語化されているし、Linux,Windows で動く。

仮想関数

仮想関数のメカニズムの説明。 昨年度の資料に、資料を追加して説明を行う。

  • vsample0.cxx ~単純な派生での派生クラスの格下げ問題の提起
  • vsample2.cxx ~仮想関数をまずは使ってみせる。
  • vsample4.cxx ~Object基底クラスより整数・実数・文字列を派生させた例。(追加資料)
  • vsample1.cxx ~仮想関数と同じことを無理やりunionでやってみる。 ただし巨大なswitch文が必要となる事例で紹介。
  • vsample3.cxx ~Cでも関数ポインタなどを使えば、巨大switch無しでも書ける事例。 これより、仮想関数の内部メカニズムを紹介。

Rgrey(S25R+greylisting)

Rgrey(S25R+greylisting)

SPAM排除のために 「メールの配送が来たら再送要求で送り返して、ちゃんと再送してきたら受け取る」 というテクニック。 コンテンツフィルタ方式とは違うために、軽い実装が可能らしい。

会社宛のエロSPAM対策は管理者の責任に…

会社宛のエロSPAM対策は管理者の責任に…

職場に大量に届くエロSPAMですが、何もしないまま「利用者で分類駆除してね..」だと、 セクハラ対策不備で管理者の責任が問われる時代だそうだ。

ガッコの方は、この半年ほど「SPAMフィルタの性能が上がった+あっさり削除」の方針の おかげで、随分と迷惑メールが減った。 これに比べ自宅宛(プロバイダ=丹南CATV)メールは、SPAMのラベリングはしてくれるけど、 誤認削除への責任対策なのか「あっさり削除」まで踏み込んでくれない。 SPAMラベリングを「無料」で唱っているんなら、あっさり削除のオプションも追加して欲しい。

たまに yahoo 発信を誤認識して SPAM ラベルつけてくれているけど、 そりゃ送るヤツも悪いということで、あっさり消して欲しいなぁ…

SPAM

グラフ電卓TI89にウィルス

グラフ電卓TI89にウィルス

数学科の先生が関数の概念の早期習得を目指して、 全学生が購入しているグラフ電卓TI89ですが、 ウィルスの標的になっているそうです。

学生と話していても、電卓の極座標変換さえも知らない学生さんがいるかと思えば、 機械語まで使って公開されているゲームまで動かして、駆使している人もいる。 ということで、そーゆー人はひとまず注意してね。

高専プロコン予選応募

高専プロコン予選応募

昨日(締め切り)時点で、プロコンに学内審査を通った4作品を登録した。 週の始めに登録作業をおこなったため、若い登録番号となった。 FN 例年であれば、登録番号が60番台といった 「締め切り仕事バレバレじゃん」といった状況ばかりであった。 /FN みなさんの積極的な早期に資料が完成できた成果ということで、ありがとうごぜーます>4EI学生さん。
さて、数多い予選通過を期待しましょう。

派生クラスと継承

前回までの範囲でカプセル化による、プログラムがわかりやすくなるといった事例の 紹介。これ以降の継承などを使えるようになれば「車輪の再発明」と言われるような、 他人が作ったものと同じようなものを、また作らないといけない… ということが減らせるはず。

派生の必要となりそうな事例ということで、基本データにオプショナルな要素が 加わったデータ事例にて、問題点を示す。

派生がないと発生する手間

// C言語でオプショナルな要素の加わった場合。
// 基本型:    名前・身長
// 追加データ:親の情報
struct Person {
char   name[ 20 ] ;
double height ;
} ;
void print_Person( struct Person* p ) ;
// ダメダメな追加データの型
struct Child {
char   name[ 20 ] ;
double height ;
struct Person* parent ;  // 追加データ
} ;
// この方法では、同じようなプログラムをまた作ることになる。
void print_Child( struct Child* p ) {
また同じ処理を書く羽目になる...
}
// ちょっとマシな追加データ型
struct Child {
struct Person  super ;   // 基底クラス
struct Person* parent ;
} ;
// 同じ処理を書くよりはマシだけど、
// 基底クラスのメソッド呼出しを何度も書く必要がある。
void print_Child( struct Child* p ) {
print_Person( &(p->super) ) ;
}

導出を使って

この様に、オプショナルなデータの増えたプログラムで手抜きができるために、 オブジェクト指向言語では、派生(導出)といった方法が使われる。

class Person {
private:
char   name[ 20 ] ;
double height ;
public:
Person( char s[] , double h ) {
strcpy( name , s ) ;
height = h ;
}
void print() { printf( "%s %f" , name , height ) ; }
} ;
class Child : public Person {
private:
Person* parent ;
public:
Child( char s[] , double h , Parent* p )
: Person( s , h )
{ parent = p ; }
} ;
void main() {
Person  saitoh( "斉藤" , 172 ) ;
saitoh.print() ;
Child   mitsuki( "みつき" , 130 , &saitoh ) ;
mitsuki.print() ;  // 基底クラスの print を継承し、流用してくれる。
Person tomoko( "ともこ" , 148 ) ;
Child  ayuka( "あゆか" , 122 , &tomoko ) ;
Person* family[ 4 ] ;
family[0] = &saitoh ;
family[1] = &mitsuki ;  // ChildがPersonに格下げして代入
family[2] = &tomoko ;
family[3] = &ayuka ;    // Personに格下げ
// 家族全員を表示
for( int i = 0 ; i < 4 ; i++ ) // PersonとChildが混在するけど
family[ i ]->print() ;     // 正しく表示ができる。
}

問題提起

前述のChildクラスでは、printメソッドは継承を利用していたが、 Child クラス用の処理を書いたとする。すると、格下げの問題が表面化してくる。

class Child : public Person {
:
void print() {           // 子供は、親の名前も表示したかったとする。
Person::print() ;
printf( "%s" , parent->name ) ;  // "public Person" で派生したから
}                                    // できる芸当である。
} ;
// 家族全員の表示。
for( int i = 0 ; i < 4 ; i++ )
family[ i ]->print() ;
// この結果では、family に代入する時点で、
// Child も Person に格下げされているので、
// mitsuki の親の名前は表示されない。      -----> 仮想関数で解決できる。

自宅サーバに頼りっきり

朝から仕事をしようとブラウザを立ち上げるが、 スタートページの自宅サーバのページが表示されない。 そういえば、朝から電気設備の交換で ちょっとだけ停電と連絡あったっけ。

どこでも仕事ができるようにと、 試作中のプログラムも自宅でネットワーク越しに触っていたから、 試作プログラムも触れない。
# はぁ…

数値文字変換演習

数値型・文字型などのデータを一通り復習もすんだので、数値・文字列変換の演習。

課題テーマ

  • N進数の文字列(char[])を入力し、その数値(int)を求める関数と、
  • 数値(int)を入力し、N進数文字列(char[])に変換

する関数を2つ作成し動作を確認しレポートを作成せよ。 ただしN進数文字列については、自分の理解度に応じて以下の中から選ぶこと。

  1. 8進数文字列<=>数値(int)
  2. 16進数文字列<=>数値(int)
  3. N進数文字列<=>数値(int),(Nは0-9,A-Zを使えば最大36進数が表現できるはず)
  4. 10進実数文字列(例-1.23e-10)<=>実数

テスト前で過去問を整理

テスト前で過去問を整理

そろそろテスト前週。 ということで、昨年度のテスト過去問題で、未掲示の内容を掲載する。

システム

最新の投稿(電子情報)

最近の投稿(斉藤 徹)

アーカイブ

カテゴリー