#author("2017-10-21T14:19:31+09:00","default:takataka","takataka") #author("2017-10-23T09:57:33+09:00","default:takataka","takataka") *応用プログラミング及び実習 2017年度 第5回 [#bebe2b15] //&color(#ff0000){工事中}; #contents **注意 [#o3f5d008] - 演習のすすめ方について [[AProg/2017/ex00]] - Linux環境での操作についてわからないことがあったら [[Docs/4UNIXBeginners]] - &color(red){締切に間に合わずチェックを受けられなかった課題は自分で完成させておくこと.}; 先の回には,過去の課題のプログラムを改造して新たなプログラムを作る課題があります. 締切後には点数はつきませんが,質問等は随時どうぞ. **課題A(self) 締切:今回の実習終了時 [#kadaiA] &color(blue){郵便番号探索のサンプルプログラムの実行ファイルをコピーして実行してみよう}; + 自分の aprog20XY ディレクトリへ移動してから,次のように cp コマンドを実行すると,zipsearch という名前の実行形式のファイルを手元にコピーすることができる. $ cp /roes/sample/takataka/aprog20XY/zipsearch . ← 最後の「空白+ピリオド」を忘れずに & XY は当然... これは, > / (ルートディレクトリ)の中の roes ディレクトリの中の sample ディレクトリの中の...の zipsearch というファイルを,. つまりカレントディレクトリ(cd で移動した現在地)にコピーせよ ''/ (ルートディレクトリ)の中の roes ディレクトリの中の sample ディレクトリの中の...の zipsearch というファイルを,. つまりカレントディレクトリ(cd で移動した現在地)にコピーせよ'' < という指示である.cp コマンドは,コピー先としてファイル名ではなくディレクトリ名を指定した場合,そのディレクトリ中に元と同じ名前でコピーしてくれる. + 入手したファイルは実行形式のものであるから,そのまま実行できる.実際に実行して,適当な入力をして動作を確認しなさい. **課題B(self) 締切:今回の実習終了時 [#kadaiB] &color(blue){[[第4回課題B>AProg/2017/ex04#kadaiB]] のプログラムの一部を使いまわして,改良しよう}; 新たに作成するソースファイル(main関数の定義を含むもの)の名前は ex05b.c として,次のようにする. + ex04b.c では main の中でデータ件数を読み取り,それから個々の値を読み取るようにしていたが,ex05b.c では, scanf の戻り値を利用してデータ件数をプログラム自身に数えさせるようにする.ex05b.c 以外のソースをいじる必要はないはず + 標準入力のリダイレクションを利用して,適当に作ったテキストファイル hoge に対して $ ./ex05b < hoge のように実行すると,hoge の中身を読み取って ex04b と同様の出力が得られるようにする **課題C(TA) 締切: &color(blue){今回の実習終了20分前}; [#kadaiC] &color(blue){郵便番号データを読み込むプログラムを作ろう}; +次の場所に,課題Aのプログラムで扱っている郵便番号データの一部を抜粋したテキストファイルがある. /roes/sample/takataka/aprog20XY/zipdataS 課題Aの cp コマンドの使い方を参考に,これを自分の aprog20XY ディレクトリにコピーしなさい.コピーできたら,less で中身を眺めてみよう. + 以下を修正して,上記のファイルを読み込んで,データ件数,ファイルの最初の行のデータ(郵便番号と住所),最後の行のデータを出力するプログラムを作りなさい.ソースファイル名は ex05zip.c としよう.ただし,次のことに注意. -- &color(white,blue){check}; 変数 addr の宣言に NCHAR + 1 とあるのはなぜか,理由を考えておくこと. -- &color(white,blue){check}; ファイルは1行ずつ読み込むものとして,fscanf の戻り値を利用してデータ件数をプログラム自身に数えさせよう. -- &color(white,blue){check}; 郵便番号には 0 ではじまるものもある.最初の 0 も表示させるようにすること.printf の「書式指定」の仕方を書籍やウェブで調べよう. &gist(83893d328566a80d7a8e); **課題D(TA) 締切:次回実習開始直後 [#kadaiD] &color(blue){[[第4回課題D>AProg/2017/ex04#kadaiD]] のプログラムをもとに,機能強化したプログラムを作ろう.}; 改良点は次の通り.main を含むソースファイルの名前は ex05d.c とすること. + 画像を左右反転させる関数 flipH を ex04image.c に追加する(当然あっちのファイルも修正が...).ちなみに,H は horizontally, V は vertically の意味です. + 次のような処理手順とする. ++ 画像をファイルから読み込む ++ 画像処理のメニューを表示し,番号で処理を選択してもらう.処理は繰り返し適用できるようにしておく ++ 画像をファイルへ書き出す こんな感じ. この例では,uni3.pgm の画素値を反転してさらに上下も反転した画像が hoge.pgm に出力されることになります. - (★ほげ)は,プログラムの出力ではなくコメントです. - メッセージなどを忠実に再現する必要はありません.自分で適当にアレンジしたらよいほげ. #pre{{ 入力ファイル名を指定するほげ: uni3.pgm ← uni3.pgm はキーボードからの入力 uni3.pgm を読み込んだほげ (★ fopenのエラー時の処理は,ex04d.c のをそのまま使えばよい) 次のことができるほげ: [1] 画素値反転 [2] 左右反転 [3] 上下反転 [99] ファイルに書き出す どないするほげ?: 1 (★ 1はキーボードからの入力) ほげ〜,画素値反転したで 次のことができるほげ: [1] 画素値反転 [2] 左右反転 [3] 上下反転 [99] ファイルに書き出す どないするほげ?: 3 (★ 3はキーボードからの入力) ほげ〜,上下反転したで 次のことができるほげ: [1] 画素値反転 [2] 左右反転 [3] 上下反転 [99] ファイルに書き出す どないするほげ?: 666 (★ 666はキーボードからの入力) ほげほげ〜,わからへん 次のことができるほげ: [1] 画素値反転 [2] 左右反転 [3] 上下反転 [99] ファイルに書き出す どないするほげ?: 99 (★ 99はキーボードからの入力) 出力ファイル名を指定するほげ: hoge.pgm hoge.pgm に書きだしたほげ.ばいばい }} **課題S(おまけ) [#c220731d] 新規の出題はありません.以下をやる,適当に自分で面白い課題を見つける,等々お好きにどうぞ. - [[AProg/2017/ex03ST]] - [[AProg/2017/ex04#kadaiS]]