#author("2017-11-07T10:02:53+09:00","default:takataka","takataka") #author("2017-11-07T10:09:28+09:00","default:takataka","takataka") *応用プログラミング演習 2017年度 第7回 [#bebe2b15] //&color(#ff0000){工事中}; #contents **注意 [#o3f5d008] - 演習のすすめ方について [[AProg/2017/ex00]] - Linux環境での操作についてわからないことがあったら [[Docs/4UNIXBeginners]] - &color(red){締切に間に合わずチェックを受けられなかった課題は自分で完成させておくこと.}; 先の回には,過去の課題のプログラムを改造して新たなプログラムを作る課題があります. 締切後には点数はつきませんが,質問等は随時どうぞ. **課題A(TA) 締切: 次回実習開始直後 [#kadaiA] &color(blue){郵便番号簿探索プログラムの作成(2)}; [[前回の課題E>AProg/2017/ex06#kadaiE]] では,郵便番号を線形探索するプログラムを自分で作った. 今度は,一部他人の作ったプログラムを利用して,郵便番号を二分探索するプログラムを作ろう. + 自分の aprog20XY ディレクトリへ移動してから,次のように cp コマンドを実行しよう, $ cp /roes/sample/takataka/aprog20XY/zipsearch* . ← 最後の「空白+ピリオド」を忘れずに 上記のようにファイル名の一部に * を含めると,これは「0文字以上の長さの任意の文字」にマッチする.上記の場合,該当ディレクトリ内にある3つのファイル zipsearch, zipsearch.h, zipsearch.o がマッチするので,これらがカレントディレクトリ(現在自分がいる場所.「ピリオド」がそれを表している) にコピーされる.zipsearch は以前の課題で一度コピーしているので,上書きするか尋ねられるかもしれない.上書きしよう.ちなみに,次のように rm コマンドを実行すると大変なことになる. $ rm * 実際にやっちゃだめですよ.絶対やっちゃだめですよ. + 今回の目標は,zipsearch.h と zipsearch.o を利用して,上記の zipsearch と同じことができるプログラムを作成することである( zipsearch は[[第5回課題A>AProg/2017/ex05#kadaiA]]でも実行したが,今回作成するのはそこからいくつかの機能を削除したものである).上書きした zipsearch を実行して,動作を観察しよう.ただし,この zipsearch では #pre{{ 7桁の郵便番号を入力して下さい(負の数だと終了) 5202123 探索回数は17回でした [51078] 5202123 滋賀県大津市瀬田大江町 }} のような出力が得られる.[51078] は,ソート後の配列中の何番目にこのデータが入っていたかを表している.この値や探索回数は,自分のプログラムでは表示しなくて構わない(余裕があったら実現してみてください). + 実際にプログラムを作成しよう.main関数を定義したソースファイルの名前は ex07search.c とすること.1. で入手したファイルのうち,zipsearch.h には,プログラム作成の手がかりになる情報がたくさん含まれているので,よく読もう(残り2つのファイルは人間が読める形式ではない).&color(red){zipsearch.h は修正しないこと.}; + 動作確認できたら,郵便番号データのファイルを fopen しているところを次のように書いて,13万件弱のデータの探索をやってみること. + 動作確認できたら,[[AProg/2017/ex06#kadaiE]] に書いてあることを参考に,13万件弱のデータの探索ができるようにしておくこと. **課題B(TA) 締切: 次回の実習終了30分前 [#kadaiB] 右のリンク先を参照 [[AProg/2017/ex07B]] **課題C(TA) 締切: 次回の実習終了30分前 [#kadaiC] &color(blue){三目ならべ(oxゲーム)をつくろう}; ディレクトリ /roes/sample/takataka/aprog20XY/ に,sammoku.h, sammoku.c, sammokumain.c というファイルがおいてある. これらを自分のこの科目のディレクトリにコピーしなさい. これらは,三目ならべ(oxゲーム)のプログラムである. コンパイルして動かしてみると…. これをちゃんと遊べるように直そう(どこをどう修正したのか忘れないようにソース中にコメントを書いておくこと). ただし,三目ならべを五目ならべや百目ならべに変更するのが簡単に済むように考えること. ヒント: - sammoku.h を修正する必要はないはず. - まずはコンパイラのエラーメッセージを見て,コンパイルエラーをなくそう. - 人間対コンピュータでとりあえずゲームができるようになったら,よく観察しよう. 既に置いてあるとことか (5,5) なんて所に置こうとするとか… **課題S(おまけ) 締切: 次回実習終了まで [#kadaiS] &color(blue){郵便番号の二分探索を自力で}; 次のことをやりなさい. + 二分探索のアルゴリズムについて調べる.次のことに答えられるように -- なぜ効率がよい(探索回数が少なくて済む)のか -- なぜ課題のデータを二分探索した場合,探索回数が最大17回なのか + [[AProg/2017/ex06#kadaiE]] のプログラムをベースにして,[[AProg/2017/ex06#kadaiS]] も使い,郵便番号データを二分探索できるプログラムを作成する **課題T(おまけ) 締切: 次回実習終了まで [#kadaiT] &color(blue){うずまきぐ〜るぐる}; 課題Bの hogeUzumaki 関数と [[AProg/2017/ex04#kadaiS]] の技を組み合わせて,うずまきぐ〜るぐるなアニメーションを作ろう.