Top / Graphics / 2017 / ex04

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

おしらせ [edit]

  • 実習のすすめ方 Graphics/2017/ex00
  • この実習では,ls,cd,cpなどのUNIXのコマンドや,emacsというエディタを用います.これらの使い方を忘れた人は,次のページを参照しなさい: Docs/4UNIXBeginners
  • 注意: 今回の課題の中には,Turtle.class も TurtleFrame.class も使わないものがあります.そのようなソースファイルは,それらと同じディレクトリに置く必要はありません.すなわち,~/Graphics20XY/turtle の下にある必要はありません.そのようなソースファイルは,~/Graphics20XY の中に置くようにして下さい(今後同様のケースがあれば同じ扱いをして下さい).

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

  1. 今回の講義資料 1/5 を読みなさい
  2. そこに記されたプログラムの断片に必要な部分を補ってプログラムとして完成させなさい.クラス名は G04String とすること.したがって,ソースファイル名は...
  3. そのプログラムを実行し,実行結果を講義資料の「左の実行結果」欄にメモしておきなさい.

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

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

問1 for文 [edit]

  1. 教科書の「4.1 for文による繰り返し」(p.31からp.34)を読みなさい(余裕があれば4.2節も).
  2. 講義資料 2/5 の T41.java を作成し,Q2 をやりなさい.

問2 while文と do-while文 [edit]

  1. 教科書の「4.3 while文による繰り返し」(p.36からp.37)を読みなさい
  2. 教科書 p.34 の Sum41 を作り,講義資料 3/5 の Q5 をやりなさい(Sum41を書き換えればよい).
  3. 講義資料 3/5 の Q7 をやりなさい.
    1. 「whileの例」に記されたプログラムの断片の前後を補って G04While.java を作成
    2. 実行して動作確認,どうなったか講義資料にメモっておく
    3. while文の部分をコメントにして,「do-whileの例」を書く
    4. 実行して動作確認,どうなったか講義資料にメモっておく

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

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

問1 boolean型と論理演算子 [edit]

  1. 教科書「4.4 論理演算子」(p.37からp.38)と講義資料 4/5 を読みなさい.
  2. 講義資料 4/5 の「boolean型を使った例」のプログラム断片の前後を補ったものが,↓にある.これを手元に保存して実行し,いじってみなさい.
  3. 講義資料 4/5 の Q8 をやりなさい.紙に条件式を書くとともに,↑のプログラムの該当箇所を書き換えて動作確認しよう.

問2 if文 [edit]

  1. 教科書「4.5 if文」(p.38からp.50)と講義資料 5/5 を読みなさい.
  2. 講義資料 5/5 の Q11 に関するプログラムが,↓にある.これをダウンロードして実行してみなさい.いじって Q11 の答えを考えなさい.

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

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

問1 [edit]

教科書p.35の練習問題4.8 (P46 & P47).ただし,次のようにすること.

  • P46ではTurtleクラスのクラスメソッドを,P47では同クラスのインスタンスメソッドを用いて,かめを最高速にすること.

check

  • P46
    • 二重ループになってるはずやけど,内外のループはそれぞれ何をしてるの?
    • 内側と外側の繰り返し回数を数える変数は,内外どっちが先に変化していくの?
    • かめを最高速にするために用いたクラスメソッドの名前は何? 教科書p.14のどこに載ってる?
  • P47
    • かめを最高速にするために用いたインスタンスメソッドの名前は何? 教科書p.14のどこに載ってる?
  • 共通
    • API仕様のメソッド一覧でクラスメソッドとインスタンスメソッドを見分けるポイントは何?

問2 [edit]

教科書p.40の練習問題4.15をやりなさい(Janken41).

check 教科書の問題文を最後までよく読みなさい.脚注も.

以下を元にして,どこがどう間違いなのか考えながら修正すること.

/** じゃんけんプログラム(間違いがあるよ)*/

public class Gaian41{

    public static void main(String[] args){
	if(random() < 2/3){
	    System.out.println("ぐぅ〜");
	}
	if(random() < 1/3){
	    System.out.println("ちょき〜ん");
	}else{
	    System.out.println("ぱぁ〜");
	}
   }

}

check

  • コンパイルが通るように修正すればよいというものではない. 正しい動作(例えば,ぐーちょきぱーは等確率になるようにするとか)を実現すること.
  • Javaに限らずプログラミングを学んでいると,99/100 とかいう式見たらどきどきしますね(プログラミング言語によっては気をきかせてこの式の値を0.99 にしてくれるのもありますが…).
  • 妹のペンネームはクリスチーネ剛田

課題S(omake) [edit]

以下のプログラムとその実行結果を参考にして,キーボードから年月日を入力すると,その日の曜日を教えてくれるプログラムを作ろう.

  • クラス名は G04WeekdayName とすること
  • 1901年以降について計算できればよい.1901年の1月1日は火曜日である.
  • 自分で導出できない謎の公式を使わずに計算するものとすること.
  • 計算機室のLinux環境では cal コマンドでカレンダーを表示できる(動作確認にどうぞ)
    $ cal
    $ cal 1901
  • ヒント: http://ja.wikipedia.org/wiki/%E9%96%8F%E5%B9%B4 の「グレゴリオ暦」の項を参照すると,ある年がうるう年かどうかの判定法がわかる.
  • 簡潔なプログラムを書こうと思うと,配列を使いたくなるかもしれない.教科書第5章へどうぞ(p.45?).
/** キーボードから入力した数の和を表示 */

import java.util.*;  // Scanner クラスのために

public class G04Scan{

    public static void main(String[] args){
	
	// Scannerクラスの使い方は,p.208やJava API参照
	Scanner s = new Scanner(System.in);
	double sum = 0.0;

	System.out.println("スペースや改行を区切りにしていくつか数値を入力してみてね");
	System.out.println("最後は数値以外の文字を入力してね");
	while(s.hasNextDouble()){
	    sum += s.nextDouble();
	}
	System.out.println("合計は" + sum + "だぴょん");
    }
}
$ java G04Scan
スペースや改行を区切りにしていくつか数値を入力してみてね
最後は数値以外の文字を入力してね
1 1 3.14     ← キーボードからの入力
1 1 1        ← キーボードからの入力
hoge 999     ← キーボードからの入力
合計は8.14だぴょん

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