遠足でバーベキュー
今日は遠足で、西山公園。体育祭の応援練習で風邪をひいている学生やら、 サボりの学生やらで、出発時には27名。まあ、こんなもんでしょう。 JR武生駅から、日野川堤防沿いに西山公園まで。 別に車で移動してもらった、ママにバーベキューセットを店開きして、 焼きそば中心の低予算バーベキュー。 思ったよりも、楽に着いたという学生多数。
しかし体調不良は、自分自身もひどかった。 しっかり学生から風邪を写されていた。おかげで翌日も風邪で身動きとれず。
なにげなく、「来年は日野山かぁ〜」と振ってみたが、反対意見が多かったな。
達成度チェックシート
JABEEでは、学生各自が学習教育目標を達成しているのかを、 チェックできるようなシステムが要求されている。 JABEE向けの自己点検書で、各自の達成度の資料を簡単に 作成するためのExcelシートを作成した。 専攻科の学生さんは、一度このシートを使ってチェックしてみましょう。
抽象化と隠蔽化、および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年問題の方に興味が高かったみたい。