#author("2017-10-14T11:13:57+09:00","default:takataka","takataka") *応用プログラミング及び実習 2017年度 第5回 [#bebe2b15] &color(#ff0000){工事中}; #contents **注意 [#o3f5d008] - 実習のすすめ方について [[AProg/2017/ex00]] - Linux環境での操作についてわからないことがあったら [[Docs/4UNIXBeginners]] - &color(red){締切に間に合わずチェックを受けられなかった課題は自分で完成させておくこと.}; 先の回には,過去の課題のプログラムを改造して新たなプログラムを作る課題があります. 締切後には点数はつきませんが,質問等は随時どうぞ. **課題A(self) 締切:今回の実習終了時 [#kadaiA] 次の二つのことをやりなさい. ***その一 [#kadaiA_1] 今回の講義資料の「scanfの戻り値」のページと以下の補足資料を読んで理解しよう.後の課題で使います. [[補足資料>AProggakunai:AProg2016-scanf.pdf]](学内アクセス限定) *** その二 [#kadaiA_2] &color(blue){郵便番号探索のサンプルプログラムの実行ファイルをコピーして実行してみよう}; + 自分の aprog20XY ディレクトリへ移動してから,次のように cp コマンドを実行すると,zipsearch という名前の実行形式のファイルを手元にコピーすることができる. $ cp /roes/sample/takataka/aprog20XY/zipsearch . ← 最後の「空白+ピリオド」を忘れずに & XY は当然... これは, > / (ルートディレクトリ)の中の roes ディレクトリの中の sample ディレクトリの中の...の zipsearch というファイルを,「.」 つまりカレントディレクトリ(cd で移動した現在地)にコピーせよ < という指示である.cp コマンドは,コピー先としてファイル名ではなくディレクトリ名を指定した場合,そのディレクトリ中に元と同じ名前でコピーしてくれる. + 入手したファイルは実行形式のものであるから,そのまま実行できる.実際に実行して,適当な入力をして動作を確認しなさい. **課題B(self) 締切:今回の実習終了時 [#kadaiB] &color(blue){構造体の学習(1)}; 講義資料の kcard.h, kcard.c, kenshin3.c を作ってコンパイル&実行しよう. kenshin3.c は以下のリンク先から入手すればよい(講義資料のものと少し違ってる). [[kenshin3.c>https://gist.github.com/takatakamanbou/64dc9521df74f799a510]] &color(white,blue){check}; kcard.h と kcard.c は,&color(blue){理解を深めるため,コピペしたりしないで,何を書いてるのか考えながらキーボードを叩いて入力しよう.}; **課題C(TA) 締切:%%今回の実習終了20分前%%&color(red){次回実習開始直後}; [#kadaiC] //&color(#ff0000){工事中}; &color(blue){他人の作ったプログラムを利用してみる}; [[課題A>#kadaiA]] のソースファイル入手先と同じ場所に,prime.h, prime.o, primedata.txt という3つのファイルがある.次のように cp コマンドを実行すると,これらを手元にコピーすることができる. $ cp /roes/sample/takataka/aprog20XY/prime* . ← 最後の「空白+ピリオド」を忘れずに この3つのファイルは,次のようなものである. - prime.o: 3つの関数を定義したC言語ソースファイルを龍大計算機室の環境のコンパイラ cc でコンパイルして得られたオブジェクトファイル.オブジェクトファイルだから,中身は(普通の)人間には読めません. - prime.h: 上記3つの関数のプロトタイプ宣言を書いたヘッダファイル.コメントとしてそれぞれの関数の機能と引数の意味が書いてある. - primedata.txt: いくつかの整数がならんだテキストファイル.less や emacs で中身を眺めてみよう. これらのファイルを利用するプログラムを書こう.ただし,↓のリンク先に main関数を定義したソースファイルがあるので,これを手元に保存し,そこに書かれたコメントを参考に修正を加えて作ること(mainの中身は,「★★★」の部分以外を修正する必要はないはず). [[ex05prime.c>https://gist.github.com/takatakamanbou/6515c6450f85de524050afdb3191d2e0]] - &color(white,blue){check}; prime.o はオブジェクトファイルなんだから,既に cc -c の手順は済んでるわけですね.後は ex05prime.c の方をコンパイルして,2つのオブジェクトファイルをリンクして実行形式を作る,と. - &color(white,blue){check}; 授業で説明したように,オブジェクトファイルは,ソースをコンパイルして(ほぼ)機械語プログラムの状態にしたものです.上記のように prime.o は龍大計算機室の環境で実行できる機械語プログラムを生成するコンパイラで作ってあるので,それ以外の環境ではおそらく使えません. - &color(white,blue){check}; 完成して動作確認できたら,次のことを考えよう -- なぜ 4649 と 5963 は出てこない? -- NDATA を 10 に変更したらどうなる? **課題D(takataka) 締切: 来週月曜13時 [#kadaiD] &color(blue){線形探索のプログラムを作ろう}; [[ex05search.c>https://gist.github.com/takatakamanbou/fdd5b225bc156562d073d76887c9f41c]] ↑のリンク先にあるソースは,[[課題C>#kadaiC]] の primedata.txt に書かれた数を配列に読み込んで,キーボードから入力された数をキーとして線形探索するプログラムである.このプログラムを完成させて,次の部分を指定の紙に書いて提出しなさい. + 25行目から32行目までの部分(行数は増減しても構わない) + 関数 LSearch の定義. ただし,以下の指示を守ること. - 関数 LSearch は,次のような仕様とする ++ 引数は,int型の配列,その要素数,探索キーの値の3つ.順序もこの通りとする ++ 戻り値は次のように定める ---配列中にキーの値と一致するものが見つかった場合はその要素番号(配列の添字) ---見つからなければ -1 - main 中の無限ループの中身は,次のような実行結果が得られるように作ること.括弧の部分はプログラムの出力ではなくコメントである. #pre{{ $ ./ex05search 検索したい数を入力してね: 8191 (8191等はキーボードからの入力) 9 番目にあるよ 検索したい数を入力してね: 1 0 番目にあるよ 検索したい数を入力してね: 4649 ないよ 検索したい数を入力してね: 10333 13 番目にあるよ 検索したい数を入力してね: ^C (無限ループするので,CTRL-C で止めた) }} **課題S(おまけ) 締切: 次回実習終了まで [#kadaiS] &color(blue){三目ならべ(oxゲーム)をつくろう}; zipsearch や prime* と同じ場所に,sammoku.h, sammoku.c, sammokumain.c というファイルがおいてある.これらを自分のこの科目のディレクトリにコピーしなさい. これらは,三目ならべ(oxゲーム)のプログラムである. コンパイルして動かしてみると…. これをちゃんと遊べるように直そう(どこをどう修正したのか忘れないようにソース中にコメントを書いておくこと). ただし,三目ならべを五目ならべや百目ならべに変更するのが簡単に済むように考えること. ヒント: - sammoku.h を修正する必要はないはず. - まずはコンパイラのエラーメッセージを見て,コンパイルエラーをなくそう. - 人間対コンピュータでとりあえずゲームができるようになったら,よく観察しよう. 既に置いてあるとことか (5,5) なんて所に置こうとするとか…