演習課題C:計算機序論2(2010年度)

計算機序論2, 2010/11/17a

注意

必修課題は必ず提出して下さい。
発展課題は提出できなくても構いません(必修だけで演習100点になるように配点します)。

【11/12 追記】
課題Cを全て正常にやりとげても、この時点では実行ファイルは 3種類のファイル(物体・アニメーション・光源)を正常に読み終えたあと、 グラフィックまわりの処理を開始した辺りでSegmentation Faultで落ちます。 これは仕様です。標準(大域変数vflagの値が2)の状態では、3種類のファイルを読んだあと、 標準出力に読み込んだ結果を表示するようになっています。 その標準出力が思っている通りの結果になっていれば、 その先でSegmentation Faultで落ちても本課題については問題ありません。


C1.(必修):アニメーションスクリプトファイルの読み込み

ベースプログラムの中で、 アニメーションスクリプトを読むために必要なプログラム改良を、 ic2exp-build_animation.c に加えること。
必要な箇所はic2exp-build_animation.cの中でも

のマークがある3箇所である。
それぞれ、新たに書き加えた部分およびその前後で必要と思われる部分について、 必ずコメントの形で動作に関する解説を書き加えること。
これがない提出物は最低限のスコア(ないし類似コードが認められた場合はそれ以下)しか 得られないものと覚悟しておくこと。下記は書き方の一例である。
(この通りである必要はないが、採点しやすさを高めるために、コメントの先頭には できるだけ自分のイニシャルや名字などを入れておくことを勧める)
‥‥
  // [Report-0010] new_ic2OBJECT(), new_ic2LIGHT()を参考にコードを書け
  printf("Here is a junk code.\n"); //亀田:エクリプスでのオンラインデバッグでは限界があるので
                                    //亀田:ここではprintfによってデバッグしやすくしてます。
  for (i = 0; i < 5; i++) {         //亀田:hogehogeをするため5回ループ回します。
‥‥

提出にあたって: 各課題については、学生同士で相談して進めてよい。
特にプログラム提出の課題の場合、提出するプログラムコードがどうしてもお互い(ないし教えた・教えられた側の両側で)似通ったものになる可能性がある。
これについて、当該コード部分のコメントに、誰と相談して(誰に教わって・誰に教えて)進めたかを明示している場合はコードが似ていることについて不問とする。
ただし、その記述がない場合は、単にコピーしただけとみなして相応に低い点数にすることがある。
独力で解いた場合でも、コメントによる解説は必ず示すこと。コメントのないコードもまた、相応に低い点数になる可能性がある。

提出物


C2.(必修):アニメーションスクリプトの自動訂正

ベースプログラムic2exp-build_animation.c には、ファイルから読み取った内容に不具合があった場合、ある程度訂正する機能が記述されている。 これらはic2exp-build_animation.c内の下記の4箇所にみられる。

このそれぞれについて、アニメーションスクリプトのどのような文法不適合を どのように直すかを、スクリプトファイルの例と合わせて示せ。

提出物


C10.(発展):アニメーションの無限ループ化

ベースプログラムでは、 起動時に -loop オプションをつけると、大域変数animationloopに1がセットされる (こうした大域変数はフラグと呼ばれることがある)。
これに対応して、 ic2exp-build_animation.c

に相当する部分において、以後、メモリ上のic2ANIMATIONによるlinked listを辿っても終点がないように(終点に到達した時点で最初のアニメーションに戻るように)データ構造を改変するプログラムコードを記述せよ。
また、同時にコメント文を書いて、それがどうして無限ループを実現することになるのか解説せよ。

提出にあたっての諸注意は、課題C1に同じ。

提出物


kameda[at]iit.tsukuba.ac.jp