2000年7月29日更新(新規アップロード)
  関谷トップページへ アプリケーション演習トップページへ 作者へのメッセージ

集中実習5日目 C言語プログラミング 演習(5)

 2000.7.28 関谷

1.レポート 演習(4)を見てのコメント

1.1 アルゴリズム(流れ図・文章)

 河野さんが、試行してくれている。
 山縣さんも、一部、使っている。
 しかし、他の人は、まだ、ほとんど、変わっていない。

 アルゴリズムは、課題のキーポイントの処理について、詳しく書くこと。全般的なことは、省略してよい。例えば、並べ替え(昇順・降順)の問題なら、その核心部分である、並べ替えの手順について書くだけで良い。

(以下に、再度、書きます。)
 C言語の文の文法的な説明でなく、「何をどうしようとしているのか」が分かるように、日本語のコメントを書くこと。そして、これで、コーディングが出来る程度に詳しいこと。

 例1「流れ図」

 例1)「流れ図」では、コーディングは出来ますが、何をしようとしているのかが分からない。従って、右側に、流れ図でしようとしていることの説明(コメント)を付ける必要がある。
  (ただし、反復の記号を正確に書いている場合です。反復の処理を省略したら、コーディングできない。)
 流れ図は、ソースリストがあれば、機械的に書ける。しかし、それをしても、プログラムの意味は分からない。例えば、入れ換えの処理を考えてみれば分かる。 

例2「アルゴリズム(処理手順を箇条書きで書く)」

 例2)『forループを作る。』←これを見ても、何をするのかも分からないし、まして、C言語のプログラムは書けない。

処理手順を書いた例

(ループの範囲を含めて、処理手順を書いた例を引用する。)
[B] 素数を求める一番簡単な方法は、定義どうりに、「1からn/2までの整数(割る数)で割って、割り切れたら素数でない。」とすれば良い。
(注)番号のとり方は、レベルと対応させて、枝番を付けること。
   字下げを組み合わせると、分かりやすい。

1)n:2から100までの調べる数のループ
	1.1) スイッチswを素数とセットする(sw=1;)
	1.2) 割る数のループ(j:2からn/2まで)
		1.2.1)  割り切れた(n%j==0)なら
			1.2.1.1)スイッチswをリセットする(素数でない)
			1.2.1.2) このループを中断する。breakする。
	1.3) スイッチが素数(sw==1)なら、nを表示する。
  

1,2 ソースプログラムへのコメントの追加

 これについても、まだ、ちゃんと書いてくれていないひとが居る。

(以下に、再度、書きます。)
 どんな課題を、誰が、どのようにプログラムしたのかが分かるようにすること。特に、ソースプログラムの本文で、その右側に説明をコメントで追加すると良いと思う。
 『テキストの解答例などを参照した時、それぞれの文の意味(目的)を日本語でコメントにして追加すれば、そのプログラムの理解ができたことになる。7/26:15:35追記』

 プログラムを見れば、どんな課題を、どのように解決したのかが実行結果と共に分かること。その方法は、「C言語のソースプログラムの様式について」を参照してほしい。
(R:\sekiya\アプリケーション演習\Cプログラミング\C_style.txt)

 実行結果をソースの最後に追加したときには、その部分をコメントにすること。

2.昨日、今日の演習問題への補足説明

2.1 演習3−23 出現回数の縦の棒グラフ

 (飯星先生の昨日の説明への補足)
 グラフの縦の軸(Y軸)は、出現回数になる。軸目盛りを数字で表示すると良い。
 スクリーン(標準出力)への表示は、最大目盛りから、−1して行き、1まで反復する。
 阿部さんのプログラム例がある。

1)最初に、最大の出現回数を求める。
(この手順は、降順のソートの手順の1回のループで良い。max_kaisu )

2)次に、出現回数iのループを、最大回数max_kaisuから始めて、1まで反復する。
 その中で、各文字の回数が出現回数i以下なら'*'を、そうでなければ' 'を表示する。
 (ここでは、文字配列を使っても良い。配列を使うと、反復が使える。)

3) 最後に、調べた文字を書く。(x軸タイトル)

2.2 演習3−24,25 文字の出現回数

演習21,22とほぼ、同じだから、それを参照できる。
ただし、プログラムを、短く、そして再利用できるようにするには、調べる文字を配列にして、ループでカウントするのが良い。これは、山縣さんの方法であるが、カウントアップもループに出来る。 

 

2.3 演習26 逆ポーランド記法による電卓計算

 プログラム3−11あるいは、例3−7の電卓シミュレーションを参照のこと。
 getchar()での'\n'の読み飛ばしについては、以前の問題と同様である。

 なお、テキストでは、'='演算子の入力の前には、数値0を入力するとなっているが、簡単のために、'='の前に入力した数値は無視することにして良い。

 

以上