AProg/2015/ex06

応用プログラミング演習 2015年度 第6回

注意

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

構造体の学習(1)

講義資料の kcard.h, kcard.c, kenshin3.c を作ってコンパイル&実行しよう. kenshin3.c は以下のリンク先から入手すればよい.

kenshin3.c

check 他の2つは,理解を深めるため,コピペしたりしないで,何を書いてるのか考えながらキーボードを叩いて入力しよう.

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

構造体の学習(2) & 郵便番号簿探索プログラム作成の準備(1)

第5回課題C のプログラムと同じことをする,構造体バージョンのプログラムを作ろう.ファイルは次の2つから成るものとする.

ex06zip.h
次のものを含むヘッダファイル
  • ex05zip.c と同様の定数 NCHAR の定義(構造体の定義で使う)
  • 郵便番号簿データ(郵便番号と住所)を格納するための構造体の定義(詳しくは後述)
ex06b.c
main関数を定義したソースファイル.次のようなものとする.
  • 上記ヘッダファイルで定義された構造体の配列を宣言する.配列の大きさは,ex05zip.c と同じように,ソース中で定義した定数 NDATA で表す.
  • ファイル zipdataS を読んで,上記の配列の要素に代入する.ex05zip.c と同様に,読み込みの処理はfscanfの戻り値を利用して行うこと.
  • ex05zip.c と同様に,データ件数,最初のデータ,最後のデータを printf で出力する

構造体の定義は次のようにすること.

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

郵便番号簿探索プログラム作成の準備(2)

↓の課題E で,郵便番号データを読み込んで郵便番号をキーとして線形探索するプログラムを作成する.その準備として,次の2つのものを紙に書きなさい(どこが1の解答でどこが2の解答かわかるように,線を引いて番号を書き入れる等の工夫をしてください).

  1. 課題B で書いた構造体 ZIP の定義
  2. 線形探索の関数の定義

線形探索の関数は次の仕様を満たすようにすること

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

他人の作ったプログラムを利用してみる

自分の aprog2015 ディレクトリへ移動してから,次のように cp コマンドを実行すると,prime.h と prime.o という2つのファイルを手元にコピーすることができる.

$ cp /roes/sample/takataka/aprog2015/prime.*   .     ← 最後の「空白+ピリオド」を忘れずに

これらは,次のようなものである.

これらのファイルを利用するプログラムを書こう.ただし...

課題E(TA) 締切:次回演習終了20分前

郵便番号簿探索プログラムの作成(1)

課題B課題C の結果を組み合わせて,郵便番号データを読み込んで,郵便番号をキーとして線形探索するプログラムを作成しよう.

ファイルの構成は次のようにすること.

ex06zip.h
課題Bと同じヘッダファイル.必要なものを追加
ex06zip.c
課題Cで書いた線形探索の関数を定義.
ex06e.c
main関数を定義

実行すると次のような動作をするように作ること.

  1. 郵便番号データのファイル zipdataS を読み込む
  2. キーの値(検索したい郵便番号)を入力してもらう.それが負の数だったらプログラムを終了
  3. LSearch を呼ぶ
  4. 戻り値に応じた結果を出力
    • 見つからないときはそのことを知らせる
    • 見つかったときはその郵便番号と住所を出力(0からはじまる郵便番号に注意)
  5. 2. に戻る

課題S(おまけ) 締切: 次回演習開始直後

郵便番号データのソート

課題B のプログラムをもとにして,郵便番号データをソートして出力するプログラムを作ろう.ただし,ソートのアルゴリズムには,平均の時間計算量が \( O(n\log{n}) \) であるようなものを選び,関数を使って実現すること.

次回予告

次回出題予定の課題の一部は,次回の授業日(11月6日)以前に公開する予定です. 公開したら AProg/2015 からリンクしますので,確認してください.


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