演習¾¼
指定した英語のテキストファイルの中の文字数と行数を数えるプログラムを作成せよ。作成 したプログラムを、ホームページで公開しているファイル を展開して得られる英語 のテキストファイル( )に適用せよ。
【ヒント·コメント】
¯ 作成したプログラムを指定した三つのテキストファイルに適用するように指示しているが、
一部に適用した結果しかレポートに記載していないものや、異なるファイルに適用した結果 を載せているものがあった。演習課題の指示に従っていないという点で問題である。
¯ 「文字数」を数える際に、空白文字や改行文字を数えないようにしているプログラムがあっ た。これは、一つの工夫と考えられるが、通常「ファイルの中の文字数」と言った場合、空 白文字や改行文字も文字として数えるので、プログラム例に示すように、単純に文 字入力するたびに「文字数」を数える変数を増やすだけで良い。
¯ 「行数」を数えるには、入力した文字が改行文字であれば、行数を数える変数を増やせば よい。
¯ 「行数」を数える変数をに初期化しているため、実際の行数よりも行多い結果を出力す るプログラムが見受けられる。「行数」を数える変数はに初期化すべきである。
¯ 文字数と行数を数える部分で
文字数を数える変数の値を増やす
行数を数える変数の値を増やす
のようにしているプログラムがあった。 関数は、呼び出されるたびに次の文字のコード を返すので、 ループの中で回 を呼び出すと、ループ回につき文字読み込む ことになる。したがって、このようなプログラムでは、
文字目を読み込み、それがでなければ文字数を数える変数の値を増やす
文字目を読み込み、それが改行文字なら行数を数える変数の値を増やす
文字目を読み込み、それがでなければ文字数を数える変数の値を増やす
文字目を読み込み、それが改行文字なら行数を数える変数の値を増やす
・・・
のようになるので正しくない。
正しく動かすためには、 関数で得られた値を変数に格納するなどして、ループ回につ き 関数は回しか呼び出さないようにすれば良い。例えば、を型の変数として、
ファイルから文字入力してに代入
それがで無い間以下を繰り返す 文字数を数える変数の値を増やす
が改行文字なら、行数を数える変数の値を増やす
や
以下を繰り返す
ファイルから文字入力してに代入
それがならループ終了 文字数を数える変数の値を増やす
が改行文字なら、行数を数える変数の値を増やす
のようにすれば良い。
¯ 正解と、よくある誤り例の結果を以下に示す。
正解 よくある誤り例 ファイル 文字数 行数 文字数 行数