2000.11.22 KPC 情報技術科 関谷
新しいことを学習しているので、前の章の演習問題などが途中でも、それは後回しにして、現在の所に集中すること。そうしないと、現在の学習に付いていけなくなる。遅れている部分は、放課後にすること。
小生の勧める方法を実行してくれていない学生が居るが、その人達は、なぜ、取り入れないのですか?どんな課題のソースプログラムを誰がいつ作ったのか、そして、何が分かったのか(考察)が分からないのでは、レポートには、なり得ない。
演習問題に限らず、テキストのプログラムは、段々と複雑になっている。従って、前のプログラムを元にして、違っている所を追加・編集する方法を取るのが良い。そうすれば、間違いも少なく出来る。プログラムの様式も統一できる。(考えずにタッチする「タイピングの練習」にならないが。)
プログラム7−5は、C言語ソースプログラムを読み、括弧のチェックをするプログラム例である。(最後に解説があるが、このプログラムでは、括弧が文字として使われているときには、正しい結果が得られない。)
入力するソース・ファイル名は、コマンドラインの引数から取る。
処理は、ファイル名を使ってファイルを開く。parcheck()関数で、EOFになるまで読み込み、表示すると共に、括弧なら、parec()関数で外部配列par[][]にセットする。
読み終わって、外部配列par[][]を調べ、レベルごとの括弧の対応をcpar()関数を呼び、チェックする。
実行例(入力文字の出力、対応する括弧のチェックリスト−左と右の括弧出現番号の添え字)がある。p.112では、外部配列parの表があり、使用している変数とその値が説明してある。外部配列の表では、括弧の出現番号が添え字になっている。
括弧の出現番号でプログラムの処理は良いが、デバッグなどの実用では、行番号(と桁番号)を付加して、括弧の開始行と括弧の閉じる行との行番号(と桁番号)をj,kにそれぞれ付けるのが良い。そのためには、外部配列をpar[][6]として、par[][4]に行番号(、par[][5]に桁番号)をセットする。行番号のセットは、parcheck()で、初期値を1として、読み込んだ文字cが'\n'のときに+1する。(桁番号のセットは、'\n'のときに0にし、そうでなければ+1する。)
1)プログラムは、C言語のプログラムの様式に合わせて作成のこと。なお、考察を先頭部分に書くのが良い。
2)ソースプログラムの入力方法:元になるプログラム7-1を貼り付けて、それを編集するのが早いし、様式も統一できる。入力の間違いも少ないであろう。
3)ソースプログラムの最初に、#include
4)ANSI Cとしては、関数のプロトタイプ宣言をmain()関数の前に、付けること。
void parcheck(FILE *fp);
void parec(int c, int i, int g, int m, int s);
void cpar(int j, int i, int c, int d, int p, int q, int r);
5)表のプリントを追加したが、その部分のリスト(行,桁あり) printf("\nTable Print\n k c g m s gyo keta\n"); for(k = 0; k < i; k++) { printf("%3d %c", k, par[k][0]); for(j = 1; j < 6; j++) { printf(" %3d", par[k][j]); } printf("\n"); }
Program7-5 Cプログラムの括弧のチェック 2000.11.22 KPC sekiya 1.表のプリントを追加した。 2.括弧の通し番号に(行番号 桁番号)を追加した。 main() // test.c for pro7-5.c 2000.11.22 KPC sekiya { int i=0; char s[20]; while((s[i++] = getchar()) != '\n') ; } Table Print k c g m s gyo keta 0 ( 0 1 0 1 5 1 ) 0 1 0 1 6 2 { 1 0 0 2 1 3 [ 1 0 1 4 8 4 ] 1 0 1 4 11 5 ( 1 1 0 6 7 6 ( 1 2 0 6 8 7 [ 1 2 1 6 10 8 ] 1 2 1 6 14 9 ( 1 3 0 6 25 10 ) 1 3 0 6 26 11 ) 1 2 0 6 27 12 ) 1 1 0 6 36 13 } 1 0 0 8 1 ( 0 of( 1, 5) ) 1 of( 1, 6) ok { 2 of( 2, 1) } 13 of( 8, 1) ok [ 3 of( 4, 8) ] 4 of( 4, 11) ok ( 5 of( 6, 7) ) 12 of( 6, 36) ok ( 6 of( 6, 8) ) 11 of( 6, 27) ok [ 7 of( 6, 10) ] 8 of( 6, 14) ok ( 9 of( 6, 25) ) 10 of( 6, 26) ok
文字列から整数に、あるいは、その逆に変換する問題が3)と4)でした。それの応用がこの浮動小数点数の問題である。
文字列からの変換では、小数点が来たら、今度は、1/10ずつ小さくなった値を加えることになる。文字列に変換するときには、誤差の問題を考えると、小数点3桁くらいで終わってもよいであろう。
単純に、2種の文字列の入力とファイル出力である。区切り文字を’, ’などにすると良いであろうが、解答例ではそれを考慮していない。
レポートは、実習した全部のプログラムを順番に貼り付けて、レポート用のテキストファイルを作成のこと。
・フォルダ:w:\アプリケーション演習¥C言語75_par11.22 ・ファイル名:nn氏名ap18.txt