#author("2019-04-16T13:52:42+09:00","default:takataka","takataka") #author("2019-04-25T17:40:34+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2018年度 実習第3回 [#e9701092] &color(#ff0000){工事中}; //&color(#ff0000){工事中}; #contents **おしらせ [#ma1a0c86] - 実習のすすめ方 [[Graphics/2019/ex00]] - &color(#0000a0){この実習では,ls,cd,cpなどのUNIXのコマンドや,emacsというエディタを用います.これらの使い方を忘れた人は,次のページを参照しなさい:}; [[Docs/4UNIXBeginners]] **課題A(self) 完成目標: 今回の実習終了まで [#kadaiA] 問1,2を全てやりなさい ***問1 for文 [#ze222c88] + 教科書の「3.1 for文による繰り返し」(p.24からp.29)のうち,3.1.1節と3.1.2節を読みなさい(余裕があれば3.1.3節も). + 講義資料 2/5 の T31.java を作成し,Q2 をやりなさい. ***問2 while文と do-while文 [#leb8ab11] + 教科書の「3.2 while文による繰り返し」(p.30)を読みなさい + 教科書 p.28 の Sum31 を作り,講義資料 3/5 の Q5 をやりなさい(Sum31を書き換えればよい). + 講義資料 3/5 の Q7 をやりなさい. ++ 「whileの例」に記されたプログラムの断片の前後を補って G03While.java を作成 ++ 実行して動作確認,どうなったか講義資料にメモっておく ++ while文の部分をコメントにして,「do-whileの例」を書く ++ 実行して動作確認,どうなったか講義資料にメモっておく **課題B(self) 完成目標: 今回の実習終了まで [#kadaiB] 問1,2を全てやりなさい ***問1 boolean型と論理演算子 [#i343f9ce] + 教科書「3.3 論理演算子」(p.30からp.31)と講義資料 4/5 を読みなさい. //+ 講義資料 4/5 の「boolean型を使った例」のプログラム断片の前後を補ったものが,[[こちら>https://gist.github.com/takatakamanbou/42898aba7a54bf64c8d63b8040855579]]にある.これを手元に保存して実行し,いじってみなさい. + 講義資料 4/5 の「boolean型を使った例」のプログラム断片の前後を補ったものが,↓にある.これを手元に保存して実行し,いじってみなさい. + 講義資料 4/5 の Q8 をやりなさい.紙に条件式を書くとともに,↑のプログラムの該当箇所を書き換えて動作確認しよう. &gist(42898aba7a54bf64c8d63b8040855579); ***問2 if文 [#t9323d88] + 教科書「3.4 if文」(p.32からp.33)と講義資料 5/5 を読みなさい. //+ 講義資料 5/5 の Q11 に関するプログラムが,[[こちら>https://gist.github.com/takatakamanbou/6fc72e422bbc7378a2366ae12d19e4f8]]にある.これをダウンロードして実行してみなさい.いじって Q11 の答えを考えなさい. + 講義資料 5/5 の Q11 に関するプログラムが,↓にある.これをダウンロードして実行してみなさい.いじって Q11 の答えを考えなさい. &gist(6fc72e422bbc7378a2366ae12d19e4f8); **課題C(TA) 締切: 次回実習開始直後 [#kadaiC] 問1,2を全てやりなさい ***問1 [#rbb5d5b1] 教科書p.27の練習問題3.4 (P32).&color(red){ただし,「繰り返しをカウントする変数を 2, 4, ..., 180 と変化させ」のところは,4, 8, ..., 360 にして,かめは「50進み4度向きを変える,50進み8度向きを変える,...,50進み360度向きを変える 」ようにすること.}; ***問2 [#f635e5e7] 次のことをやりなさい. &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G03RandomQ.png); + 上記のプログラムを作成する(G03Random) + 実行する. + かめさんがフレームの外にいってしまうのを避けるため,次のように修正しよう. > 繰り返しのたびにかめの位置をチェックし,かめがフレーム中央の 300 x 300 画素の範囲より外に出ていたら,中央に移動させる < &color(white,blue){check}; 5行目で,TurtleFrame クラスのコンストラクタが引数ありで呼ばれてますね.p.12 の TurtleFrame クラスのAPI仕様のコンストラクタの所を確認すると,この場合,フレームの大きさは ? x ? ですね.ということは,中央 300 x 300 の範囲かどうか調べるにはどういう条件式を書いたらよいでしょう? &color(white,blue){check}; うまくできたと思えたら,実行してメニューから Speed > very fast を選択してみよう. **課題S(omake) [#kadaiS] 以下のプログラムとその実行結果を参考にして,キーボードから年月日を入力すると,その日の曜日を教えてくれるプログラムを作ろう. -クラス名は G03WeekdayName とすること -1901年以降について計算できればよい.1901年の1月1日は火曜日である. -自分で導出できない謎の公式を使わずに計算するものとすること. -計算機室のLinux環境では cal コマンドでカレンダーを表示できる(動作確認にどうぞ) $ cal $ cal 1901 -ヒント: http://ja.wikipedia.org/wiki/%E9%96%8F%E5%B9%B4 の「グレゴリオ暦」の項を参照すると,ある年がうるう年かどうかの判定法がわかる. -簡潔なプログラムを書こうと思うと,配列を使いたくなるかもしれない.教科書第6章へどうぞ. #pre{{ /** キーボードから入力した数の和を表示 */ import java.util.*; // Scanner クラスのために public class G03Scan{ 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 + "だぴょん"); } } }} #pre{{ $ java G03Scan スペースや改行を区切りにしていくつか数値を入力してみてね 最後は数値以外の文字を入力してね 1 1 3.14 ← キーボードからの入力 1 1 1 ← キーボードからの入力 hoge 999 ← キーボードからの入力 合計は8.14だぴょん }}