課題(2002年度)


告知:

まず、課題の評価ですが、早く提出した人、プログラムの完成度(アルゴリズム、コードの美しさ、error 処理対応などが観点)が高い人、 解説が充実している人を高く評価します。 単にプログラムを出すだけでなく、プログラムのコメントや、解説を書くようにしてください。 基本的には、レポートを出していると思ってください。 それから、書き忘れていましたが、演習の感想もお願いします。

課題の締め切りですが、2 段階に設定しています。 最初の締め切りは、11/5 です。出せる人は、11/5 までに提出するように頑張りましょう。 出せなかった人は、現在の状況を連絡するように。
皆さんの状況をもとに 11/5 の夜にヒントを出します。最終締め切りは、11/13 にします。 このあと、解答例を紹介することにする予定です。

もし、最終締め切りに間に合わなかった場合でも、解答例などを参考にシッカリとした解説などを送ってくれれば、評価します。 とはいえ、自作プログラムではないので、点数は低くなりますけど。

それから、他の人に色々アドバイスをもらった場合は、必ずレポート冒頭にその旨明記してください。 何の断りもなく他人のプログラムに酷似したプログラムを提出した場合、確認の上、僕の演習分の点数はなくなると思ってください。


さて、本題に入りましょう。
皆さんは WEB 上の情報を色々みていると思います。 で、情報を探すのに検索エンジンを使うことも多いでしょう。 これら検索エンジンの中には、WEB ページのリンク関係をみて各ページの重要度を判断するものがあります。 というわけで、 今回の問題は、リンク関係からいくつかの情報を求めてみることにしましょう。 サンプルは、この演習ページ中のリンク情報(を幾らか間引いたもの)です。 皆さんには、このリンクの空間(有向グラフ: directed graph である)を探索してもらいます。

さて、この演習ページには例えば


"compile_app_gcc.html"から"compile_link.html"へのリンク
という風に沢山のリンクがあります(情報)。 で、基本的には、"index.html" が玄関口になっています。

さて、これらのリンクをたどることでいろんなページに行くことができるのですが、 ページの中には、

があります。

というわけで、僕の方で Page_t というWEB Page を表す構造体(中身は内緒)と、 利用可能な関数群を準備しました。webPage.hで宣言してあります。

つまり、あるページについて、その名前や別のページへのリンク情報などをたどることが出来るわけです(本当は、、、)。 ページをたどる際に、自分でデータを書き留めておきたければ、各ページの UserArea に書き込みましょう。 UserArea にもっと変数領域を足したければ、userArea.hを自分で書き足してください。

皆さんに与えられた仕事は、このリンク空間を"index.html"からリンクをたどりながら探索し、以下の課題をこなすことです。

皆さんは、結果を print する必要はありませんが、仮に印字させるとしたら、 こんな感じになるはずです。

main program は、初期セットアップが終わってから、index.html の page に対して、 userProg.cの中の

void userSearch(Page_tp page)
を呼び出します(page->name == "index.html"である)。 皆さんは、この関数を完成させて問題 1, 2 をクリアしましょう。

ファイル群の説明をしておきますと、

とりあえず、現状で compile して、実行できるようになっています。 というわけで、あとは頑張ってください。
% make
gcc -g -Wall   -c -o webPage.o webPage.c
gcc -g -Wall   -c -o userProg.o userProg.c
gcc -o webSearch  webPage.o userProg.o
% ./webSearch        今のところ、userSearch(page)は、単に page の中身を表示しているだけ
Name: index.html
HTML?: true
uara depth 0
uara inverse link 0

プログラムが完成し、その解説ができたら課題を提出しましょう(提出法)。 提出物は、プログラム解説と、皆さんの変更/作成したプログラムです。 くれぐれも、名前や学番を忘れないようにしてください。 書き忘れていましたが、演習の感想もお願いします。

それから、この課題は、再帰関数の扱いと、 pointer を辿る skill と、有向グラフのイメージがあれば、特に難しくないはずです。 あと、debugger が結構役立つと思います(segmentation fault とかを起こしやすそうだし)。


オプション課題

オプション課題は以下のようなものを考えています。詳細は詰めていないですが、 必要なら鎌田に言ってください。詳しい解説を準備します。力の有り余っている人はどうぞ。 提出してくれたら、とっても評価します。
いいわけ1: 本当は、、、、実際に WEB 空間を探索するプログラムを提供したかったんです。 単にシミュレートするだけでは、イマイチ面白味にかけると思うかも知れませんから。
ただ、C ではライブラリをそろえるのが大変なのでやめました(皆さんの演習環境が、Linux/PPC, Cygwin/Pentium, Win/Pentium, MIPS/IRIX, Linux/Pentium などと様々なので)。 で、実は、Java などの場合、URL から簡単にそのファイルの中身にアクセス出来たりします。 ライブラリの配布も簡単です。こういうのを考えると、Java って便利です。

2002.10.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp