プログラミング実習I (2021年度) のクラス 2 の補足ページ
目次
1. TA の担当
- 情報 M2 (巳波研) 池田 晴人 hqr55832@kwansei.ac.jp
- 37023469
- 37023472
- 37023474
- 37023475
- 37023476
- 37023477
- 37023478
- 37023458
- 情報 M2 (作元研) 瀬川 絵里子 ijt52842@kwansei.ac.jp
- 37023452
- 37023456
- 37023459
- 37023460
- 37023461
- 37023462
- 37023466
- 37023468
- 27020835
- 情報 M1 (作元研) 坂口 翔太郎 hbn04470@kwansei.ac.jp
- 37023479
- 37023480
- 37023484
- 37023485
- 37023488
- 37023489
- 37023492
- 37021467
- 人シス M1 (長田研) 坂本 櫻 gjm02496@kwansei.ac.jp
- 37023495
- 37023496
- 37023498
- 37023502
- 37023504
- 37023505
- 37023506
- 37022477
2. レポートの書き方
2.1. 冒頭の部分
以下のように書いてください
- ※「R1」 に対するレポートを「関学 太郎」(学生番号:12345678) が書く場合の例
- ※ 所要時間は,授業中と授業外を合わせたものを書くてください
課題: R1 学生番号: 12345678 氏名: 関学次郎 所要時間: ( 4 ) 時間
2.2. Q&A 方式の課題(非プログラム作成課題)の場合
質問と解答をそれぞれの対応関係が分かるように書いてください
- 質問は,そのままコピペで問題ありません.
- 具体例を以下にまとめます
質問1: オブジェクト指向とは何か? 解答1: オブジェクト指向とは,従来からの手続型と呼ばれるプログラミングの方式に 対して操作対象となる「モノ(部品)」を主体にしたプログラミングの方式のこ とである.
2.3. プログラムを作成する課題の場合
必要項目
- 小課題(R1_2 など)ごとに,以下の 3 つ項目を書いてください
- 方法(課題を解くために,どのようなプログラムを作成したのか説明する)
- ※ 問題文の単なるコピペではなく,自分を主体とした文章で簡潔にまとめてください
- 問題文は「...せよ」などの命令形で書かれてありますが,レポートでは「...する」のように主体が自分となるようにしましょう
- ※ 問題文の単なるコピペではなく,自分を主体とした文章で簡潔にまとめてください
- 結果(実行結果などをコピーして貼り付ける)
- ※ 実行結果の説明を簡単に行ってください
- ※ 実行した結果が分かるようにスクリーンショットを撮って貼り付けてください
- 考察(理解した点,工夫した点,苦労した点,などを 50 〜 200 字程度で書く)
- ※ R1 や R2 ではあまり書くことがないかもしれません. その場合は,50 文字未満でも構いません.
- 方法(課題を解くために,どのようなプログラムを作成したのか説明する)
例
R1_2 の例を以下にまとめます
- ※ 実行結果のスクリーンショットで,実行結果をマークする必要はありません
図1: R1_2 のレポートの例
2.4. 末尾の部分
課題全体に対する感想を書いてください
- R1 に対する例を以下にまとめます
[R1] 全体に対する感想 今回の課題を通じて,Java を用いてコンソールに文字列を出力する方法や, 簡単な数値の計算,変数の使い方などの基本的な内容を学ぶことができた. Java によるプログラミングは初めてだったため,エラーの理解などに時間が かかってしまった.次回以降の実習では,今回学んだ Java の基本的な内容の 理解や,エラーへの対処方法などを役立てていきたい.
3. 中間試験の準備
3.1. 目的
- 中間審査に必要な演習室の PC 操作をやってみる
3.2. 手順
必要なファイルのダウンロードと確認
- ココ から準備に必要なファイル(sample.zip) をダウンロード
- sample.zip を解凍する(パスワードは prog1 です)
- 解凍してできたフォルダに以下が含まれることを確認
- problem.pdf
- test フォルダ
- MyFrame2.java
- Face.java
- DisplayFaceObject.java
- problem.pdf をダブルクリックする
- pdf が閲覧できることを確認
ecipse のファイル操作の確認
- eclipse を起動する
- exam_sample という名前のプロジェクトを作成する
- 作成したプロジェクト exam_sample に以下を追加(プロジェクトにある src に向けてドラッグ&ドロップ)
- MyFrame2.java
- Face.java
- DisplayFaceObject.java
- DisplayFaceObject.java を実行する
- 以下のようなウィンドウが表示されれば ok
図2: DisplayFaceObject.java の実行例
4. R5_6 のヒント
- 線分描画のヒント: 以下の手順(★) に従って 1×1の四角形を fillRect(x, y, 1, 1) を用いて少しづつ描画していけばいい
- 以下の 5 つの変数を初期化する
- 横方向の変化量(整数) \(dx = x_2 - x_1\)
- 縦方向の変化量(整数) \(dy = y_2 - y_1\)
- 変化量の最大値(整数) \({\rm steps} = \max(|dx|, |dy|)\)
- 描画する 1x0 の四角形の x 座標(実数) \(x = x_1\)
- 描画する 1x0 の四角形の y 座標(実数) \(y = y_1\)
- \(i = 0, 1, ... , {\rm steps}\) と変化する for 文により,以下を上から順に繰り返す
- fillRect((int)x, (int)y, 1, 1) で 1×1の四角形を描画
- \(x\) += \(dx\) /(double) \({\rm steps}\) (☆)
- \(y\) += \(dy\) /(double) \({\rm steps}\) (☆)
- 以下の 5 つの変数を初期化する
- 手順(★) の解説
- 簡単のため,\(x_1 < x_2\) および \(y_1 < y_2\) の場合に限定して解説する
- この場合,線分の描画パターンは,図 3 に示す(a) と (b) に分けられる
(a) \(|dx| \ge |dy|\) である場合( 横方向の変化量の絶対値のほうが大きい場合 ),線分の \((x, y)\) 座標は以下で与えられる \((i = 0, 1, ... |dx|)\) (☆☆)
\begin{align} x &= x_1 + i\\ y &= y_1 + \frac{dy}{dx} \times i \end{align}- ※ \(x\) は \(x_1, x_1+1, ..., x_2\) で変化
(b) \(|dx| < |dy|\) である場合( 縦方向の変化量の絶対値のほうが大きい場合 ),線分の \((x, y)\) 座標は以下で与えられる \((i = 0, 1, ... |dy|)\) (☆☆)
\begin{align} x &= x_1 + \frac{dx}{dy} \times i\\ y &= y_1 + i \end{align}- ※ (a) とは異なり,今度は,\(y\) が \(y_1, y_1+1, ... , y_2\) で変化
- 傾きが急であるため,\(y\) を一つずつ変化させていかないと,1x0の四角形がまばらになってしまう
図3: 線分の描画パターン (\(x_1 < x_2\) および \(y_1 < y_2\) の場合)
- ※ (a) とは異なり,今度は,\(y\) が \(y_1, y_1+1, ... , y_2\) で変化
- 手順(★) における (☆) は,(a) と (b) のどちらの場合でも,線分の \((x, y)\) 座標の式に一致する(確認してみよ)
- 手順(★)は,\(x_1 \ge x_2\) および \(y_1 \ge y_2\) の場合でもうまくいく(なぜか考えて,考察にまとめてみよ)
- 備考
- 興味のある学生は以下のことを調べ,考察にまとめてみよ
- 線分の描画手順(★)は Digital differential analyzer アルゴリズムと呼ばれ,実は,あまり良くないことが知られている
- どういった意味で良くないのか?
- また,線分の良い描画方法として「ブレゼンハムのアルゴリズム」 というものがある
- どのように改善しているか?
- 線分の描画手順(★)は Digital differential analyzer アルゴリズムと呼ばれ,実は,あまり良くないことが知られている
- 興味のある学生は以下のことを調べ,考察にまとめてみよ