Top / Graphics / 2017 / ex05

グラフィックス基礎及び実習 2017年度 第5回 [edit]

注意 [edit]

  • 実習のすすめ方 Graphics/2017/ex00
  • この実習では,ls,cd,cpなどのUNIXのコマンドや,emacsというエディタを用います.これらの使い方を忘れた人は,次のページを参照しなさい: Docs/4UNIXBeginners
  • 前回同様に,TurtleクラスおよびTurtleクラスを使うプログラムとそうでないプログラムで保存するディレクトリを分けること.

課題A(self) 完成目標: 今回の実習終了まで [edit]

問1,2を全てやりなさい

問1 配列の作り方/添字が範囲をはずれると... [edit]

  1. 教科書の「5.1 配列」(p.43からp.44)と講義資料の 2/5 を読みなさい
  2. 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
  3. 講義資料 2/5 の 「Javaでintの配列」に記されたプログラムの断片の前後を補ってプログラムを完成させ,動作確認しなさい.ただし,クラス名は G05IntArray とすること.
  4. 講義資料 3/5 の 「5.1.3」の部分を読み,「上記の4行目を...」を実際にやってみなさい.

check

  • C言語とは配列の作り方が全然違いますね.
  • C言語では,添字が範囲をはずれても何も言わずおかしな動作を続けたり,「セグメントエラー」,「Segmentation Falut」,「Bus Error」というようなエラーメッセージしか出力しません.一方,Java では,添字が範囲をはずれてないか実行中にちゃんとチェックして,はずれたらはずれたと教えてくれる,ということですね.その分,実行に余計な手間がかかってますが....

問2 かめの配列/インスタンス変数 length [edit]

  1. 講義資料 3/5 の「5.1.2」の部分を読み,T51 を作って動作確認しなさい.
  2. Q3 をやりなさい(T51を書き換える).

check Q3で書き換える前の hm.length の値は 10 で,書き換えたあとは 6 のはずですね.

課題B(self) 完成目標: 今回の実習終了まで [edit]

  1. 教科書の「5.2 初期値をもった配列」(p.45から)と講義資料の 4/5 を読みなさい.
  2. 講義資料の Q4 をやりなさい.クラス名は G05IntArray2 とすること.

check

  • 配列 a の初期値をすべて0より大きい数にしても正しく動作するか?
  • 配列 a の初期値が
    9, 3, 3, 3, 7
    だったとき,「最小値のインデックス」は 1 か 3 のどちらか一方が出力されるように作ればよい.どちらの出力をするかは,プログラム中の1文字を書き換えるだけで変更できるだろう.

課題C(TA) 締め切り: 次回実習開始直後 [edit]

教科書p.47の練習問題5.10をやりなさい(Graph51). ただし,次のようにすること.

  • addMesh()する
  • 最初の点までの移動時には線をひかない
  • 次のような場合にもエラーになってしまわないようにする
    1. 配列 graph の長さが0や1のとき ==> プログラムを実行しても何もしないで or Frame を描画しただけで終了
      int graph[] = {};
      int graph[] = { 50 };
    2. 配列 graph の長さが奇数のとき ==> 配列の最後の値を無視する.ヒント(白字で書いてます):いろんなやり方がありますが,graph の長さが奇数のとき,例えば 7 のとき, graph.length / 2 の値は...で, i = 1, 2 のとき 2*i と 2*i+1 は ...
      int graph[] = { 50, 300, 100, 100, 300 };
  • チェック時のために,上記の例をソース中にコメントとして残しておきましょう
      // int graph[] = {}:
      // int graph[] = { 50 }:
      // int graph[] = { 50, 300, 100, 100, 300 }:
    

check

  • 教科書p.14 によると,addMesh() は何クラスのメソッド? インスタンスメソッド? それともクラスメソッド? 両者のどちらであるかはどこを見ればわかる?
  • 練習問題に示された例や上記の例で望み通りの動作をすることを確認しよう.
  • それらがうまくいったら,次の例で動作確認すること
    	int graph[] = {
    	    200, 175, 200, 100, 140, 100, 140, 120,
    	    160, 120, 160, 100, 100, 100, 100, 175,
    	    125, 175, 125, 150, 175, 150, 175, 175,
    	    275, 175, 275, 150, 325, 150, 325, 175,
    	    350, 175, 350, 100, 290, 100, 290, 115,
    	    310, 115, 310, 100, 250, 100, 250, 175,
    	    250, 100, 350, 100, 350, 300, 325, 300,
    	    325, 275,  75, 275,  75, 250, 350, 250,
    	    350, 300
    	};
    
  • 暇なひとはこれもやってみたらよい.最後にかめの絵の色を黒にして,上向きに停止させるとさらにすてきかも.TAの某氏作.
    int  graph[] = {
    	       100,500, 100,480, 300,480, 300,500, 300,460, 100,460, 
       	       100,480, 100,440, 80,440, 300,440, 300,460, 300,440, 320,440,
    	       320,390, 80,390, 80,440, 80,340, 110,340, 110,370,
    	       130,370, 130,340, 320,340, 320,390, 320,290, 130,290,
    	       130,370, 110,370, 110,290, 80,290, 80,340, 80,290,
    	       90,290, 80,270, 90,250, 90,200, 120,180, 160,180,
    	       180,260, 180,270, 210,220, 260,220, 270,230, 270,220,
    	       260,210, 280,190, 310,210, 310,290
    	    };
    

課題S(omake) [edit]

数理情報学科の学力認定試験の問題に挑戦してみよう. 2012年2月に行われた2011年度試験の専門Iの問題IV. 次のようにして問題を閲覧できる.

  1. 数理情報学科のWikiのサイトから「学力認定試験」へ

    数理情報学科のwikiサイトのアクセス時に求められるユーザ名とパスワードは,全学統合認証のものと同じ. 学力認定試験の他にも定期試験の過去問,教員による授業自己点検報告書なども閲覧できる.

  2. 「大学院入試問題」(←学力認定試験の過去問もこちら) へ
  3. 「media:学力認定試験(2012.2).pdf」を開く

問(1)の「クラスメソッドbproblem() を書きなさい」とか,「Randクラスのクラスメソッドirand()…」みたいな指示になるべく沿ってソースを角煮は,↓に示すようなソースファイルを作るとよい.試験問題では,Randクラスが存在すると仮定して,そのソースは書く必要がないということだが,ここではそれもあわせて書く例にしてある.

// クラス BProblem の定義
class BProblem {

    // クラスメソッド bproblem の定義
    static int bproblem(int m) {
          :
	return n;
    }

    // mainメソッドの定義
    public static void main(String[] args) {

       ここでクラスメソッド bproblem を呼ぶには
       n = bproblem(10) または n = BProblem.bproblem(10) のように書けばよい

    }

}

// クラス Rand の定義
class Rand {

    // クラスメソッド irand の定義
    static int irand() {
	return (int)(365*Math.random());
    }
}

ここでは,一つのソースファイルで複数のクラスを定義する例を示している. class の前に public がついていないことに注意.このソースファイル自体の名前は, 二つのクラス名と無関係に適当な名前をつければよい(ここでは Birth.java とする). このとき,

$ javac Birth.java

とコンパイルすると,BProblem.class と Rand.class ができる.実行するには,実行したいmainメソッドを含むクラスの名前を指定すればよいので,

$ java BProblem

とする.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-16 (火) 15:20:28 (127d)