応用プログラミング及び実習 2017年度 第3回

注意

課題A(self) 締切: 今回の実習終了時

実習第1回の課題D-2のプログラムを元にして,次のようなプログラムを作成しなさい.

課題B(self) 締切: 今回の実習終了時

下記のプログラムソースは,標準入力からPGMファイルの名前を受け取り,そのファイルを開いてヘッダの情報を読み取り,それを標準出力に出力することを意図したプログラムである(関数 getnum と readPGMHeader については,関数定義の上のコメントに書いてあることがわかればok.中身についてきちんと理解することは,この課題の要件ではありません).これを ex03b.c という名前で保存し,次のことをやりなさい.

  1. 次のことをやってプログラムを完成させなさい.この2箇所の他には修正の必要はないはず.
    • 空欄となっている fopen の引数を書きなさい
    • 空欄となっている readPGMHeader の引数を書きなさい
  2. 実際に画像ファイルを読み込ませる等して動作確認しなさい
  3. 次の問に対する答えを考えなさい(白字で答えが書いてあります)
    • このプログラムで正しく扱えるファイル名の文字数は最大何文字か: 答 配列の大きさは100文字分あるが,文字列の最後に '\0' を付ける必要があるので,文字数の最大は99
    • 次の三通りの条件でプログラムを実行した場合,23行目と26行目の if 文の条件判定の結果は,真(true)/偽(false)/そもそもそのif文が実行されない,のいずれになるか答えなさい.また,そのときのプログラムの出力はどうなるか答えなさい.
      1. ファイル名として,正しいPGM形式のファイルの名前を指定した場合(例えば uni3.pgm): 答 23行目は false,26行目は true,出力は自分で確かめよう
      2. ファイル名として,存在するがPGM形式ではないファイルの名前を指定した場合(例えば ex03b.c): 答 23行目は false,26行目も false,出力は自分で確かめよう
      3. ファイル名として,存在しないものを指定した場合: 答 23行目は true,26行目は実行されない,出力は自分で確かめよう

#gist(efb87905a4dbdc6bf706);

課題C(TA&takataka) 締切: 後述

次の仕様の二つの関数の定義を指定の紙に書いて提出しなさい. いずれも,課題Bのプログラムに後で追加して使うと想定しよう(したがって,課題Bのプログラムで #define してる定数を使うこと).

check 前回の課題B のプログラムを参考にしたら,ちょこちょこ書き換えて使えますね.

課題D(TA) 締切:次回実習開始直後

この課題のチェック時には,課題Cの紙を見せてもらいます.なくさないでね.

課題B課題C前回の課題C の結果を組み合わせて,指定されたPGMファイルを読み込み,その画素値を反転させ,指定されたPGMファイルに書き出す,というプログラムを作りなさい.

いきなり完成させようとすると混乱する可能性大です.次のように順を追って作ろう

  1. cp コマンドで ex03b.c を ex03negate.c にコピーする
  2. コンパイル&動作確認.この時点では当然課題Bと同じ動作しかしない
  3. readPGMBody を追加し,main 内の適切な場所で呼ぶ
  4. コンパイル&動作確認.readPGMBody の結果を出力してないので,見た目の動作は課題Bと同じでしょう
  5. writePGM を追加し,main に出力処理を書く
  6. コンパイル&動作確認.画像をコピーすることができるはず
  7. negate も追加
  8. コンパイル&動作確認.画素値を反転させるプログラムの完成

課題S & T(おまけ)

右のリンク先参照 AProg/2016/ex03ST


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS