_AProg/2012/ex03
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*応用プログラミング演習 2012年度 第3回 [#bebe2b15]
//&color(#ff0000){工事中};
#contents
**注意 [#i749b259]
-演習のすすめ方について [[AProg/2012/ex01#note]]
-Linux環境での操作についてはわからないことがあったら [[Docs/4UNIXBeginners]]
-締切に間に合わずチェックを受けられなかった課題は自分で完成させておくこと.
先の回には,過去の課題のプログラムを改造して新たなプログラムを作る課題があります.
締切後にはチェックは受けられませんが,質問は随時どうぞ.
**課題A 締切: 今回の演習終了20分前(2点) [#kadaiA]
易しい課題なので,TAさん+高橋は結果のみを評価します.正しい結果が得られているかどうか自分自身でよく考えて判断してください.
[[演習第1回の課題C>AProg/2012/ex01#kadaiC]]のプログラムを元にして,次のようなプログラムを作成しなさい.
-ソースファイル名は ex03x999.c とする
-データ件数とデータをキーボードから受け取るかわりにファイルから読み込むようにする
--したがって,キー入力をうながす「何個?」「0番目:」のようなメッセージは出力をやめよう
-データ件数とデータを記したテキストファイルは適当なものを自分で作成すること
-ファイルを開く際のエラー処理を行うこと
**課題B 締切: 今回の演習終了20分前(3点) [#kadaiB]
[[演習第2回の課題C>AProg/2012/ex02#kadaiC]]のプログラムを元にして,次のようなプログラムを作成しなさい.
-ソースファイル名は ex03fliph.c とする
-画像はファイルから読みファイルに書くようにする.ファイルを開く際のエラー処理も忘れずに
-画素値を反転させるかわりに画像を左右に反転させる.
反転処理のための関数を定義してその中で左右の反転を行うこと
-演習第2回のおまけ課題ができた人は,PPM画像を入出力するプログラムとしても構わない
**課題C 締切: ↓参照 [#kadaiC]
次回演習開始後すぐなら6点(満点),次々回演習開始後すぐなら3点
***step0 [#o28be581]
まず次のようにして,自分の手元に ex03c-sample という実行ファイルをコピーし,それを実行して動作を観察してみよう.
#pre{{
$ cd aprog2012
$ cp /home/sample/takataka/aprog2012/ex03c-sample . ←ピリオド
}}
-入力ファイル名を間違えるとどうなる?
-処理の選択時に1,2,3,4以外のものを入力するとどうなる?
このプログラムと同じ動作をするプログラムを作ろう.ただし,
-ソースファイル名は ex03c.c とすること
-処理の分岐にはif-else(またはswitch文)を用いること.
-3つの反転処理はそれぞれ個別に関数を作ってその中で行なうようにすること.また,それぞれの関数内では画素値をいじる処理だけ行う(そこで入出力はしない)ようにしよう
&color(#ff0000){プログラムは,一気に全てを完成させてコンパイル,というような作り方をするものでは決してない.以下のように,ソースを書く,コンパイル,実行,という段階を何度も何度も繰り返しながら完成させていくものである.};
+一部の機能だけ実現するソースプログラムを作る
+コンパイルする(エラーがあれば修正する)
+実行して動作確認する(おかしなところがあれば修正する)
+うまくいったら,機能を追加して同じ作業を繰り返す
&color(#ff0000){以下にプログラミングstepの例を示すので,どこから手をつけてよいのかわからない,という人は順番に実行していくこと.};
以下のstepを踏まないで自力で作れる人は,従わなくても構わない.
>
★ 余裕のある人向け~
-if-elseによる条件分岐を楽勝で書ける人は,switch文を使ってみるとよいでしょう
-PPM画像を入出力するプログラムとしても構わない
<
***step1 [#ua5e945b]
ファイル名を受け取る部分だけ作ってみよう.
ファイル入出力などのことは横においといて,キーボードから入力された文字列を単にprintf()するだけのプログラムを作ろう.
キーボードから入力された文字列をchar型の配列に格納する方法は,何通りもあります.
どうやったらいいか自分で調べてみよう.
#pre{{
#include <stdio.h>
#define FNAMELENGTH 100
int main(void)
{
char fname[FNAMELENGTH]; // 文字列用の配列
printf("ファイル名を入力してね: ");
?????
printf("ファイル名 %s\n", fname);
return 0;
}
}}
実行結果の例
#pre{{
$ ./ex03c-step1
ファイル名を入力してね: hogeratta.txt
ファイル名 hogeratta.txt
}}
***step2 [#f5985ca5]
step1の結果をもとに[[課題B>#kadaiB]]のプログラムを改造して,入力と出力のファイル名をキーボードから入力するようにしてみよう.
step1の結果をfopen()とどう組み合わせるかについては,C言語の本などから参考例がないか探してみたらよいだろう.
キーボードから入力したファイル名を使って動くものができたら,入力されたファイル名が正しくない(fopen()の戻り値が…)ときは入力をやり直させるように改良しよう.
***step3 [#o93df8dc]
入力された値に応じて処理を変えるプログラムを作ってみよう(step1,2のプログラムとは別に作るのがよいかもしれない).
例えば,キーボードから数を入力させて,次のようなことをするプログラムにしてみるとよい.
-数を入力してもらう
-1だったら「ほげほげ」と出力
-2だったら「ふがふが」と出力
-それ以外だったら数の入力からやり直してもらう
***step4 [#ra5f497c]
step1,2,3の成果をもとに課題のプログラムを作ってみよう.
**課題S & T(おまけ) [#m8240237]
右のリンク先参照 [[AProg/2012/ex03ST]]
終了行:
*応用プログラミング演習 2012年度 第3回 [#bebe2b15]
//&color(#ff0000){工事中};
#contents
**注意 [#i749b259]
-演習のすすめ方について [[AProg/2012/ex01#note]]
-Linux環境での操作についてはわからないことがあったら [[Docs/4UNIXBeginners]]
-締切に間に合わずチェックを受けられなかった課題は自分で完成させておくこと.
先の回には,過去の課題のプログラムを改造して新たなプログラムを作る課題があります.
締切後にはチェックは受けられませんが,質問は随時どうぞ.
**課題A 締切: 今回の演習終了20分前(2点) [#kadaiA]
易しい課題なので,TAさん+高橋は結果のみを評価します.正しい結果が得られているかどうか自分自身でよく考えて判断してください.
[[演習第1回の課題C>AProg/2012/ex01#kadaiC]]のプログラムを元にして,次のようなプログラムを作成しなさい.
-ソースファイル名は ex03x999.c とする
-データ件数とデータをキーボードから受け取るかわりにファイルから読み込むようにする
--したがって,キー入力をうながす「何個?」「0番目:」のようなメッセージは出力をやめよう
-データ件数とデータを記したテキストファイルは適当なものを自分で作成すること
-ファイルを開く際のエラー処理を行うこと
**課題B 締切: 今回の演習終了20分前(3点) [#kadaiB]
[[演習第2回の課題C>AProg/2012/ex02#kadaiC]]のプログラムを元にして,次のようなプログラムを作成しなさい.
-ソースファイル名は ex03fliph.c とする
-画像はファイルから読みファイルに書くようにする.ファイルを開く際のエラー処理も忘れずに
-画素値を反転させるかわりに画像を左右に反転させる.
反転処理のための関数を定義してその中で左右の反転を行うこと
-演習第2回のおまけ課題ができた人は,PPM画像を入出力するプログラムとしても構わない
**課題C 締切: ↓参照 [#kadaiC]
次回演習開始後すぐなら6点(満点),次々回演習開始後すぐなら3点
***step0 [#o28be581]
まず次のようにして,自分の手元に ex03c-sample という実行ファイルをコピーし,それを実行して動作を観察してみよう.
#pre{{
$ cd aprog2012
$ cp /home/sample/takataka/aprog2012/ex03c-sample . ←ピリオド
}}
-入力ファイル名を間違えるとどうなる?
-処理の選択時に1,2,3,4以外のものを入力するとどうなる?
このプログラムと同じ動作をするプログラムを作ろう.ただし,
-ソースファイル名は ex03c.c とすること
-処理の分岐にはif-else(またはswitch文)を用いること.
-3つの反転処理はそれぞれ個別に関数を作ってその中で行なうようにすること.また,それぞれの関数内では画素値をいじる処理だけ行う(そこで入出力はしない)ようにしよう
&color(#ff0000){プログラムは,一気に全てを完成させてコンパイル,というような作り方をするものでは決してない.以下のように,ソースを書く,コンパイル,実行,という段階を何度も何度も繰り返しながら完成させていくものである.};
+一部の機能だけ実現するソースプログラムを作る
+コンパイルする(エラーがあれば修正する)
+実行して動作確認する(おかしなところがあれば修正する)
+うまくいったら,機能を追加して同じ作業を繰り返す
&color(#ff0000){以下にプログラミングstepの例を示すので,どこから手をつけてよいのかわからない,という人は順番に実行していくこと.};
以下のstepを踏まないで自力で作れる人は,従わなくても構わない.
>
★ 余裕のある人向け~
-if-elseによる条件分岐を楽勝で書ける人は,switch文を使ってみるとよいでしょう
-PPM画像を入出力するプログラムとしても構わない
<
***step1 [#ua5e945b]
ファイル名を受け取る部分だけ作ってみよう.
ファイル入出力などのことは横においといて,キーボードから入力された文字列を単にprintf()するだけのプログラムを作ろう.
キーボードから入力された文字列をchar型の配列に格納する方法は,何通りもあります.
どうやったらいいか自分で調べてみよう.
#pre{{
#include <stdio.h>
#define FNAMELENGTH 100
int main(void)
{
char fname[FNAMELENGTH]; // 文字列用の配列
printf("ファイル名を入力してね: ");
?????
printf("ファイル名 %s\n", fname);
return 0;
}
}}
実行結果の例
#pre{{
$ ./ex03c-step1
ファイル名を入力してね: hogeratta.txt
ファイル名 hogeratta.txt
}}
***step2 [#f5985ca5]
step1の結果をもとに[[課題B>#kadaiB]]のプログラムを改造して,入力と出力のファイル名をキーボードから入力するようにしてみよう.
step1の結果をfopen()とどう組み合わせるかについては,C言語の本などから参考例がないか探してみたらよいだろう.
キーボードから入力したファイル名を使って動くものができたら,入力されたファイル名が正しくない(fopen()の戻り値が…)ときは入力をやり直させるように改良しよう.
***step3 [#o93df8dc]
入力された値に応じて処理を変えるプログラムを作ってみよう(step1,2のプログラムとは別に作るのがよいかもしれない).
例えば,キーボードから数を入力させて,次のようなことをするプログラムにしてみるとよい.
-数を入力してもらう
-1だったら「ほげほげ」と出力
-2だったら「ふがふが」と出力
-それ以外だったら数の入力からやり直してもらう
***step4 [#ra5f497c]
step1,2,3の成果をもとに課題のプログラムを作ってみよう.
**課題S & T(おまけ) [#m8240237]
右のリンク先参照 [[AProg/2012/ex03ST]]
ページ名: