ホーム » 2004 (ページ 18)

年別アーカイブ: 2004

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

抽象化と隠蔽化、およびC++のプログラム例

先週からの続きとして、C言語によるオブジェクト指向のエッセンスを 取り入れた短いプログラム例を通して、説明を行う。 関数による 手続き抽象 の説明、三角形のデータ表現を例に用いて データ抽象 の説明および、メンバのアクセス制限の必要性の説明を行う。

この後、Cによる説明から、C++を用いたプログラム例に書き換える。 先週の説明での Person[氏名,年齢,身長]を class 化し、 set,printのメソッドを定義したプログラム例を用いる。 private/publicによるアクセス制限にも言及。 これによりデータ抽象、手続き抽象の効果が得られ、 プログラム開発の役割分担が容易、原因究明の線引きが容易という点を強調。

ただしコンストラクタ、デストラクタなどは用いない。

class Person {
private:  // private指定では、メソッド外からのアクセスを禁止
char  name[20] ;
int   age ;
float height ;
public:   // public指定では、メソッド外から参照できる
void set( char s[] , int a , float h ) { // データ初期化のメソッド
strcpy( name , s ) ; age = a ; height = h ;
}
void print() {    // データ表示のメソッド
printf( "%s %d %f\n" , name , age , height ) ;
}
} ;
int main() {
Person saitoh ;
saitoh.set( "斉藤" , 39 , 172.3 ) ;
Person mitsuki ;
mitsuki.set( "充輝" , 4 , 97.4 ) ;
saitoh.print() ;
mitsuki.print() ;
}

工場見学旅行の行き先の見積もり

今日、前回担任の時にお世話になった、旅行社の方が来られた。 先日の特活の時間の結果を踏まえ、九州方面の旅行パンフレットなどの 準備を依頼する。他業者さんにも、同様の依頼をすることになるだろう。

んで、特活の時の意見での、沖縄、台湾、ハワイなどの見積もりの場合 を聞いてみた。沖縄や台湾は、ほぼ同額で、9万円程度となるらしい。 学校で3年から集める予算は、7万5千円らしいので、 沖縄・台湾に決まると追加で旅行費用を集める必要があるらしい。

ちなみに、 わぃは〜 FN シンガポールでも同様な予算規模となるらしい。 /FN の場合には 9.11 事件の後とはいえ、人気が高いため航空業界の 不景気の状態があったとしても、やっぱり10万を超えるらしい。

対外接続用 DNS 情報の変更

一般科目のWWWサーバを学外からも参照可能となるように、設定の変更。 うちのガッコの対外WWWサーバは、DMZ 設置の apache から、PROXY 機能で 学内サーバを見せている。このため、学内のサーバをガッコから見える ようにするためには、 (1)一般科目のドメイン名を学外でも見えるように、DNS を変更し、 (2)DMZ設置の apache の virtual domain 機能内の proxy の設定を変更する。

浮動小数点の扱いと、変数のスコープと寿命

浮動小数点の扱いを簡単に説明。
大域変数と、局所変数について説明したあと、ループ変数をわざと大域変数にして、 挙動のおかしくなるプログラムについて解説し、「大域変数は極力使わない」と説 明。

この後で、具体的に局所変数のスコープについて、簡単なプログラム例を交えて 有効範囲の説明を行う。次に、大域変数と局所変数の初期化のタイミングと 寿命について解説し、auto変数、static FN 今年はマニアな人がいないので、ファイル内に閉じた大域変数での static に ついて、ツッコミを入れてくる人が居なかったなぁ。 /FN 変数の説明を行う。

再帰のあるプログラムのオーダ

先週の続きとして、再帰プログラムの処理速度予測について説明。 比較のために、ループによる2分探索の処理速度を示した後で、 O(N)となる式の事例や、O(2^N)となる事例で処理速度を示す。

来週の予告としてフィボナッチ数列の処理速度の例を示そうと したら、クラスが歯科検診のため、中断。

来週は、フィボナッチ数列の処理速度と、Mergeソートでの 処理速度の事例を示す予定。

構造体とポインタ

今日は、午前が新入生歓迎会であったためか、欠席者が多い。 機械・電気の出身者は、プログラミングの基礎が弱いので、先週の構造体の解説 の続きを行う。 OOP的使い方ではポインタの利用が多いので、 簡単なポインタの解説も行う。 簡単な構造体と、set(),print()だけの例で、 FN 要素参照は、今週までは、(*p).member 書式の説明に留める。 /FN 呼び出し側が、直観的な呼び出しだけ、要素名が隠蔽化、データに処理を適用の スタイルにできることを示す。来週にはOOP用語を交えた説明を追加予定。

解説をしていると、M・E科では関数の利用も苦手みたい。 返り値や仮引き数・実引き数の話までせなあかんとは、おもわんかった。 FN 関数も使わずにプログラミングの授業で何を勉強してるんだろう….不思議だ… /FN この解説のなかで、値渡し、ポインタ渡しに加えて、参照渡しも説明。

struct Person {
char  name[20] ;
int   age ;
float height ;
} ;
void set( struct Person* p , char s[] , int a , float h ) {
strcpy( (*p).name , s ) ; (*p).age = a ; (*p).height = h ;
}
void print( struct Person* p ) {
printf( "%s %d %f\n" , (*p).name , (*p).age , (*p).height ) ;
}
int main() {
struct Person saitoh ;
struct Person mitsuki ;
set( &saitoh , "斉藤" , 39 , 172.3 ) ;
set( &mitsuki , "充輝" , 4 , 97.4 ) ;
print( &saitoh ) ;
print( &mitsuki ) ;
}

アイディア討議

プロコン・ロボコン対策のシステム設計演習では、 学生の考えてきたアイディアの紹介・学生の趣旨説明を交えながら、 高久先生と私で問題点の指摘と方式案の説明を行った後、 競技・自由・課題・プロコンの4グループに分れてアイディア討議を行う。

来週までの課題として、アイディア説明と5つ以上の問題点指摘を示す。 余裕があれば、問題点の対策案も記載するように指導するが、どうなることやら。

数値の扱い

今日は、数値の扱いの説明として、unsigned/signed,char/short/int/longの 数値のとりうる範囲について説明。2進桁数計算での D=B log 2の説明を行う。 数値の範囲の与える問題例として、16bit intの座標間距離で桁あふれの 起こる例と、2038年問題を紹介。2004年問題もタイムリーなので紹介。

すこし時間が余ったので、浮動小数点の扱いの入り口も説明するが、 中途半端。

学級日誌を見ると、雑談系の2038年問題の方に興味が高かったみたい。

繰返し処理の処理速度の見積もりと、オーダ記法

EI3向けに実施した、情報処理技術者試験のH15年秋の問題での補講 の中の処理速度に関する1問 FN T∝N^3のアルゴリズムがN=100で2秒ならN=1000で4倍速いマシンでは、何秒? /FN を解いてもらうのを、例題として実施。

その後、forループの処理時間、2重ループの処理時間の式を示す。 前記例題と同じような見積もりをしてもらい、次数の低い項を無視する話しをする。 次にオーダ記法を説明し、平方根やlogの混ざった処理時間のオーダを 求める話しをする。

時間が余ったので、来週の再帰方程式のための導入話しとして、 いつもの 「ハノイの塔」の処理回数の導出 を行う。

話しを進める途中で、「どうやって解く?」と聞きながら授業をすすめていると、 例年になく、 Σ i = N*(N-1) やら ロピタルの定理 やら 帰納法 などの答えがタイムリーに返ってくる。 久々に反応が良く気持ちの良い授業であった。

遠足が西山公園か!?

担任クラスの遠足の予定決め。西山公園、ラポーゼ河田、金沢、 等の案が出るも、安易に西山公園と決定。 MAPFAN 等を見ると、武生駅出発西山公園で行程6.1km程。

しかし単純に西山公園だと、つまらないという意見から、 途中でバーベキューでもやりたいという意見が出てくる。 代替案ということで、鯖江駅出発、武生高校側の堤防の公園にて バーベキューは?と提案する。もう一度意見を集約してもらう。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー