Top / Graphics / 2016 / ex03

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

注意とおしらせ [edit]

  • 実習のすすめ方 Graphics/2016/ex00
  • この実習では,ls,cd,cpなどのUNIXのコマンドや,emacsというエディタを用います.これらの使い方を忘れた人は,次のページを参照しなさい: Docs/4UNIXBeginners

課題A(special) 締切: 実習開始後25分以内 [edit]

この課題のやり方については授業時に指示します.

G03exA.png

上記に示すソースプログラムに関する次の問題に解答しなさい. 実際にプログラムを作成&実行して修正を加えながら解答してもよい.

  1. 10行目を
     Color c = new Color(255, 255, 0);
    と変更したとする.この時にプログラムを正しく動作させるために,1行目に文を追加したい.どのような文を追加したらよいか答えなさい.
  2. 右下に向かうかめを表すインスタンスを指しているのは,なんという名前の変数か
  3. 以下の4カ所にそれぞれ指定された処理を行うにはどのように書けばよいか答えなさい
    • A(16行目): speedAllメソッドを呼び出してかめの速さを低速にする
    • B(17行目): speedメソッドを呼び出して kame の速さを変える(引数には10を指定すること)
    • C(18行目): game の絵の大きさを 0.2 に変更する
    • D(22行目): withTurtleAllの値を変化させる
      • この問に答えるためには boolean 型についてちょっと勉強が必要.教科書p.37参照
  4. 以下のアイウエにあてはまる文を上記のABCDから選んで答えなさい
    • ア:クラス変数に値を代入している
    • イ:クラスメソッドを呼び出している
    • ウ:インスタンス変数に値を代入している
    • エ:インスタンスメソッドを呼び出している

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

以下の二つのことをやりなさい

B-1 [edit]

この科目のページのリンクをたどると(Graphics/Link),Java APIのページにたどりつくことができる.それを用いて,教科書p.24の練習問題3.2をやりなさい.

check

  • API仕様文書によると,Java SE 7 の java.awt.Color クラスのコンストラクタは何通りあるか?
  • 練習問題3.2 で指定されたコンストラクタでは,引数はどんな型でどんな範囲の数か?

B-2 [edit]

教科書p.31-33を読み,p.33の練習問題4.1をやりなさい.

check

  • 変数 s と n の値を変えるだけで一辺の長さと何角形を描くかを変えられるようにできてる?
  • 1辺の長さ 1 で360角形を描く場合,for 文による繰り返しブロックの中の文はそれぞれ何回実行されることになるか?

課題C(TA) 完成目標: 次回実習開始直後 [edit]

以下のリンク先のクラスファイルを手元に保存し,実行してみなさい(このクラスは,TurtleクラスとTurtleFrameクラスを利用します).

G03RandomSample.class

これは,かめがランダムな角度左に回転してからランダムな距離前進する動作を50回繰り返すプログラムである. これとほぼ同じ動作をするプログラムを作りなさい. ただし,次のようにすること.

  • ソースファイル名は G03Random.java とする.
  • 回転角度は 0 以上 180 未満の整数の乱数とする. そのためには,Mathクラスのrandomメソッドを用いて,次のようにすればよい(double型で得られた値をint型に変換している).
    int theta = (int)(180*Math.random());
  • 前進距離は -20 以上 40 未満の整数の乱数とする(どうすればいいかは自分の頭で考えること).
  • 文字の表示の仕方はp.30を参考にするとよいでしょう.詳しくは次回説明します.
  • 段階的にプログラムを作っていくことを意識して,次のようにしてみよう
    1. 左に一定角度回転して一定距離前進することを一定回数繰り返すプログラムを作る
    2. その動作を確認し,間違いを修正する
    3. 角度と距離を表示するようにする
    4. その動作を確認し,間違いを修正する
    5. 回転角度を乱数にする
    6. その動作を確認し,間違いを修正する
    7. 前進距離を乱数にする
    8. その動作を確認し,間違いを修正する

check

  • ちゃんと文字でメッセージを表示するように作ってる?
  • 以下はどこがいけてないだろう?
    int theta = (int)(180 * Math.random());
    
    for(int i = 0; i < 50; i++){
         :
         m.lt(theta);
         :
    }
    
  • 「前進距離は -20 以上 40 未満の整数の乱数とする」をどうやって実現したか,人に説明できるか? ちゃんと -20「以上」40「未満」になっていることを説明できるか? プログラムの出力を眺めて確認ってのはだめです.理屈で説明すること.
  • <次回以降の授業内容に関連した発展的ポイント> 以下の右辺の int へのキャスト((int))を省略すると何が起こるか.実際にやって確かめなさい.
    int theta = (int)(180 * Math.random());
    ちなみに,Javaと違ってC言語ではこのような場合,何も言わずに勝手に浮動小数点数を整数へ変換してしまう(そのため気づきにくいバグを生むことがある).

課題S(おまけ) [edit]

以下のリンク先のクラスファイルを手元に保存し,実行してみなさい(このクラスは,TurtleクラスとTurtleFrameクラスを利用します).

G03RandomSample2.class

これは,かめをフレームの中央に配置し,そこからかめまでの距離が一定値以上になるまで,次の動作を繰り返すものである.

  1. 確率 \( \frac{1}{2} \) ずつで次の行動のいずれかを行なう
    1. かめを右に60度回転し,ペンの色を赤にする
    2. かめを左に60度回転し,ペンの色を青にする
  2. 一定距離前進する

これと同じような動作をするプログラムを作成しなさい.ただし,クラス名は G03Random2 とすること.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-26 (火) 21:09:53 (572d)