応用プログラミング及び実習 2017年度 第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) 締切:次回実習開始直後

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

前回の課題A のソースファイル入手先と同じ場所に,prime.h, prime.o, primedata.txt という3つのファイルがある.次のように cp コマンドを実行すると,これらを手元にコピーすることができる.

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

この3つのファイルは,次のようなものである.

これらのファイルを利用するプログラムを書こう.ただし,↓のリンク先に main関数を定義したソースファイルがあるので,これを手元に保存し,そこに書かれたコメントを参考に修正を加えて作ること(mainの中身は,「★★★」の部分以外を修正する必要はないはず).

ex06prime.c

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

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

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

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

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

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

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

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

郵便番号データのソート

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


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-10-29 (日) 10:12:15