◎第12回 よいプログラムとは
◇下へ・一覧へ
○テキスト
7章、8章
◇下へ・上へ
よいプログラムを作成するために,インタフェース,プログラム書法,
データ構造の選択,プログラムのテストなど
◇下へ・上へ
よいプログラム
・正しい結果を出す
・使いやすい
・修正しやすい
◇下へ・上へ
正しさの検証
プログラムのテスト
典型的データでの動作
通常、一般的に想定されるデータで
正しい結果が得られるか
境界での動作
通常許される(あるいは、想定される)データと
そうでないデータの境目にあるデータでは
どういう動作をするか?
誤ったデータでの動作
誤ったデータでも致命的結果を招かないか?
部分的にも、総合的にもテストする
◇下へ・上へ
テストの結果、間違いが判明したら、修正する。
「間違い」の種類
1. もともとのアルゴリズムに問題がある。
2. アルゴリズムをプログラムにする段階で誤りがある。
(人間の理解とコンパイラなどシステムの理解に相違があるなど)
3. プログラムを入力する段階で誤りがある。
これら間違いを起きにくくする、もし起こっても、その原因の発見を容易
にするためには、次の二つ事項「データ構造」「プログラミングスタイル」が
大事である。また、これらは機能を拡張するなどの場合にも大事である。
◇下へ・上へ
データ構造の選択
単純な配列がよいか
スタックがよいか
キューがよいか
線形リストがよいか
木構造がよいか
適切に選択するとプログラムが簡単になって
見やすい・修正しやすい・間違いにくい などが実現しやすくなる。
◇下へ・上へ
プログラムのスタイル
見やすい
修正しやすい
間違いにくい
C言語・Pascal言語 などは、ブロック構造があるので、段つけ(インデント、
字下げ)をして一目で制御構造がわかるようにする。
わかりやすい変数名をつける。
単に a, b, c では、後でなにを意味しているかがわからない。
コメント(注釈)をつける。
他人にわかるようにする。コメントをつけないと、
3日もすれば自分でもわからなくなる。(3日後の自分は他人)
◇下へ・上へ
意味のない例
a=b; /* aにbを代入する */
(このコメントの内容なら、プログラムを見ればわかる!)
もう少しよい例
i=n; /* i をデータの個数で初期化する */
( これがある繰り返しの初期化であることと、
n がデータの個数であることが、わかる )
◇下へ・上へ
もう少しよい例
i=kosuu; /* i をデータの個数で初期化する */
( 変数名を見るだけでそれが、(データの?)個数で
あることがわかる。i=numData;のほうがもっと
わかりやすいかも知れない )
すべての文につける必要はないが、「何」をしているかは
書くようにする。上の例でわかるように、「何」はプロ
グラミング上の事項よりは、解決するべき問題に即した
事項を書く。
◇下へ・上へ
使いやすさ
人間とのインタフェース
(マン・マシンインタフェース)
(入出力)
・わかりやすいメッセージを出す
・誤ったデータの処理
まず、判断する。
対応
メッセージを出す
再入力
無視する
◇下へ・上へ
・入力データが修正が容易にできる
沢山のデータを入力する時、間違いは必ずあるので
全部入れ直すことは避けたい
あらかじめ、ファイルに入れておいてファイルを読めるようにすると
自分の好きなエディタで編集できる。
・出力データが見やすい
やたら多くのメッセージを出せばよいというわけではない。
多すぎると必要なデータが見えないこともある。
多くのデータはファイルに出力できるようにしておくとよい
他のプログラムで利用しやすい形にしておくと便利
(gnuplot など)
◇下へ・上へ
・いくつかの「モード」を作る
多くのメッセージを出すモード「冗舌」モード verbose mode
中間結果を出すモード 「デバッグ」モード debug mode
メッセージをほとんど出さないモード
「静粛」モード silent mode
これらのモードは、コマンドラインから指定できるようにする。
( 「微分方程式」を数値的な近似解を求める、ちょっと複雑な
プログラムの例として sample12.c を参照できる )
◇下へ・上へ
◯演習12
12.1 第1回から11回までの演習およびレポート課題(復習も含む)を
復習する。
12.2 50個以内の実数型データがある。それらを読み込んで、
Before sorting という見出しの後に印刷し、また、それらの値の
小さい順に並べ換えて、After sorting という見出しの後に
印刷するプログラムを作成せよ。
ただし、データの終りはデータが尽きることによって判断する。
データが50個を越えるときは、
error --- too many data (>50)
と印刷して、(それまでの入力データの印刷以外には)何もしないで
終了する。(テキストp171 例題7.2"改題)
50個以内、以上両方のデータを入力して動作結果を確認すること。
テキストのp162〜182を読んで、自分なりに使いやすい、きれいな
プログラムになるよう、工夫すること。 (模範解答)
◇一覧へ・上へ
◯レポート課題
12.1 基礎プログラミング及び演習をしての感想・意見をe-mailで
この授業中に出してください。
[メールアドレス]
E1 クラス: okada@edu.cc.uec.ac.jp,lira@edu.cc.uec.ac.jp(両方に)
E2 クラス: murakami@edu.cc.uec.ac.jp
12.2 プログラムの良さの基準について考えを述べよ。
(テキストp251 復習8.2) 1000字程度にまとめること。
提出先:
E1 クラス:W2-407 ( 2/12(火)14:40 締め切り)
E2 クラス:W8-611 ( 2/ 5(火)13:00 締め切り)