情報実習Ⅱ

Similar documents
スライド 1

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Javaプログラムの実行手順

プログラミング基礎I(再)

Java講座

メソッドのまとめ

JavaプログラミングⅠ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Microsoft PowerPoint - prog03.ppt

Prog1_15th

プログラミングA

Microsoft Word - java a.doc

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

プログラミングA

Prog1_6th

Microsoft PowerPoint ppt

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

プログラミング入門1

ガイダンス

プログラミング入門1

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

プログラミングA

デジタル表現論・第6回

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

デジタル表現論・第4回

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

Microsoft PowerPoint - prog04.ppt

Prog1_3rd

JavaプログラミングⅠ

PowerPoint プレゼンテーション

基本情報STEP UP演習Java対策

2

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

JavaプログラミングⅠ

kiso2-09.key

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Microsoft PowerPoint - chap10_OOP.ppt

Prog1_2nd

JavaプログラミングⅠ

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Javaによるアルゴリズムとデータ構造

プログラミング入門1

Prog1_10th

Microsoft PowerPoint - prog08.ppt

プログラミング入門1

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

プログラミング入門1

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

JAVA入門

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Microsoft PowerPoint - CproNt02.ppt [互換モード]

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

プログラムの基本構成

JavaプログラミングⅠ

プログラミング入門1

GEC-Java

DVIOUT-exer

JavaプログラミングⅠ

情報処理Ⅰ

JavaプログラミングⅠ

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(Java) サンプル問題 知識科目 第 1 問 (

JavaプログラミングⅠ

Prog2_9th

2

Microsoft PowerPoint - lec06 [互換モード]

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

PowerPoint プレゼンテーション

Microsoft Word - CompA-Ex doc

JavaプログラミングⅠ

プログラミング基礎

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

2

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - prog04.ppt

PowerPoint プレゼンテーション

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

新・明解Javaで学ぶアルゴリズムとデータ構造

GEC-Java

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - 09.pptx

スライド 1

プログラミング実習I

Microsoft PowerPoint - prog09.ppt


Transcription:

情報実習 Ⅱ 第 7 回 ( これまでの復習 ) 課題資料

Java のクラスの概形 クラス フィールドコンストラクタメソッド main メソッドローカル変数宣言オブジェクト生成オブジェクトへのメッセージ ( メソッド呼び出し ) 変数 : 基本型, 参照型 これまでの 習得事項 まだ初歩的な内容だけだが これらを利用するだけでも多くの実用的なプログラムが記述できる キーボード入力 : Scanner の利用 : nextint(), nextdouble(), 演算子 : 算術演算子, 増減演算子, 代入演算子, 比較演算子, 論理演算子 書式付出力と書式指定子 : printf(): %d, %f, %s, %c 条件分岐 : if 文, else-if ラダー, switch 文 繰り返し : while 文, do-while 文, for 文, break 文, continue 文

課題番号 7 任意の 2 次関数の定 積分を近似計算する ためのプログラムの 作成 3 種類の近似法 区分求積法 台形則 ( 今日の課題 ) 合成シンプソン法 x0 x1 定積分値 = න y = f(x) どのような複雑な関数 でも 積分公式を使わ x 1 f(x) dx ずに かなり正確に計 x 0 算できる

一番簡単だが 精度はいまいち 区分求積法 ( 参考 ) 計算範囲を n 等分し n 個の長方形の面積 ( 負になる場合もある ) で近似 grid grid spacing y = f(x) w w w w x0 x1 x2 x3 積分値 f(x0) w +... + f(x3) w w は (x4 x0)/4 で求まる 1 区間の幅 (n=4 の場合 ) x4

台形則 ( 今日の課題 ) 計算範囲を n 等分し n 個の台形の面積 ( 負になる場合もある ) で近似 y = f(x) x0 x1 x2 x3 積分値 w w w w x4 (f(x0) + f(x1)) w/2 + + (f(x3) + f(x4)) w/2 (n=4 の場合 ) 簡単で 精度もそこそこ

ちょっと複雑だが 精度は良い 合成シンプソン法 ( 参考 ) 3 点を通る 2 次関数で f(x) の積分値を近似 区分数は偶数でなければならない y = f(x) w w w w x0 x1 x2 x3 x4 積分値 w n (f x 2 3 0 + f x n + 2 σ 1 2 i=1 f(x 2i ) + 4 σ i=1 f(x 2i 1 )) n

実行例 f(x) = x 2 + 2x + 1 のグラフの彩色部分の面積を求める場合 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 1 2 1 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : -3.0 3.0 f(x) = 1x^2+2x+1 の定積分 [-3.0, 3.0] の近似値 1 分割 : 60.00 10 分割 : 24.36 100 分割 : 24.00 1000 分割 : 24.00 10000 分割 : 24.00 100000 分割 : 24.00 青文字はキーボードからの入力

今日の課題 課題番号 7-1, 7-2, 7-3, レポートの作成 提出するファイルは次の4つ課題 7-1 QuadraticFunction.java 課題 7-2 TrapezoidalRule.java 課題 7-3 IntegralTester.java report7.pdf

課題番号 7-1 積分の対象となる任意の2 次関数を表すクラス QuadraticFunction.javaを作成せよ 実行例 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 2-3 -8 f(x) = 2x^2-3x-8 引数の値 ( 実数 ) を入力 : 6.7 f(6.7) = 61.68 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : -6 5 0 f(x) = -6x^2+5x+0 引数の値 ( 実数 ) を入力 : -4.7 f(-4.7) = -156.04 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : -1 0 1 f(x) = -1x^2+0x+1 引数の値 ( 実数 ) を入力 : 67.0 f(67.0) = -4488.00 表示上の注意 青文字はキーボードからの入力 1 次の係数と定数の値が負のときには演算子が になるように工夫すること 例えば 1 番目の実行例が f(x) = 2x^2+-3x+-8 では不可 演算子が になる際 式中に余分なスペースが入らないように工夫すること f(x) = 2x^2-3x -8 では不可 係数が -1 又は 0 又は 1 のとき 式を正しく表示するためには条件分岐が複雑になりすぎるので 今回の課題では 2 3 番目の実行例のように工夫無しで各係数の値をそのまま表示して良い (4.7 節の String クラスを学習すれば 正しい表示が比較的簡単に実装可能 ) 絶対値の計算には Math.abs メソッドを利用する 例えば b の絶対値を求めるには int test = Math.abs(b) などとすれば良い

課題番号 7-1 QuadraticFunction クラスの仕様 フィールド : a, b, c: int 2 次関数の係数 コンストラクタ : 3つの整数を引数として フィールドを初期化メソッド : evaluate(x: double): 関数の戻り値 ( a x^2 + b x + c の計算結果 ) を返す showfunction(): 前ページに示したように 関数の式を表示 main メソッド : 前ページに示したように キーボードから 3 つの整数を入力して このクラスのオブジェクトを一つ生成する さらにキーボードから 1 つの実数を入力して関数の計算結果を表示する フィールド コンストラクタ メソッドの修飾子はクラス図を参照

Scanner を使えるようにする準備 課題 7-1 の半完成品 /** 課題番号 学籍番号などをドキュメンテーションコメントとして記入 */ クラス宣言 { フィールドの宣言コンストラクタの宣言 evaluate メソッドの宣言 showfunction メソッドの宣言 public static void main(string[] args) { /* キーボード入力の準備 */ Scanner kbscanner = new Scanner(System.in); /* キーボードから 2 次関数の係数を入力する */ System.out.print("2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : "); int a = kbscanner.nextint(); int b = kbscanner.nextint(); int c = kbscanner.nextint(); /* 与えられた係数を元に 2 次関数を表すオブジェクトを生成する */ QuadraticFunction qfunction = new QuadraticFunction(a,b,c); qfunction.showfunction(); System.out.println(); /* キーボードから関数に与える引数の値を入力する */ System.out.print(" 引数の値 ( 実数 ) を入力 : "); double x = kbscanner.nextdouble(); /* 関数の計算結果を表示 */ System.out.printf("f(%1.1f) = %8.2f",x,qFunction.evaluate(x)); } kbscanner.close();

課題 7-1 クラス図

課題番号 7-2 台形則に基づいて 関数の定積分の近似値を計算する機能を持つクラス TrapezoidalRule.java を作成せよ フィールド : startpoint: double TrapezoidalRule クラスの仕様定積分の始点を表す endpoint: double 定積分の終点を表す qfunction: QuadraticFunction 積分対象の関数を表す コンストラクタ : 2 つの整数と QuadraticFunction 型の参照を引数として 各フィールドを初期化 メソッド : calcarea(x: double, gridspacing: double): double qfunction, x, gridspacing を用いて 一区画の台形面積を計算して返す integrate(numofgrid: int): double startpoint から endpoint までの定積分値を numofgrid 個の台形の面積を合計することで近似して返す

メソッド内 (main は除く ) から 同じクラスの他のメソッドを呼び出すには (integrate メソッドのヒント ) 例えば p. 25 の Rectangle.java において move メソッドの中から showstate メソッドを呼び出し move の実行ごとに情報を表示させるようにするには 以下のように記述すればよい public void move(int xmove, int ymove) { xposition = xposition + xmove; yposition = yposition + ymove; showstate(); }

課題 7-2 クラス図

課題番号 7-3 区間分割数を 1~100000 に 10 倍ずつ変化させ 積分の近似計算をする main メソッドのみのプログラム IntegralTester.java を作成せよ 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : -3-8 9 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : -23.4 82.8 f(x) = -3x^2-8x+9 の定積分 [-23.4, 82.8] の近似値 1 分割 : -1203638.94 10 分割 : -610742.63 100 分割 : -604813.66 1000 分割 : -604754.37 10000 分割 : -604753.78 100000 分割 : -604753.78 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 1 2 1 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : -4.0 9.0 f(x) = 1x^2+2x+1 の定積分 [-4.0, 9.0] の近似値 1 分割 : 708.50 10 分割 : 346.00 100 分割 : 342.37 1000 分割 : 342.33 10000 分割 : 342.33 100000 分割 : 342.33 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 3 0 1 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : -578.0 2345.9 f(x) = 3x^2+0x+1 の定積分 [-578.0, 2345.9] の近似値 1 分割 : 25601660256.94 10 分割 : 13228155068.37 100 分割 : 13104420016.49 1000 分割 : 13103182665.97 10000 分割 : 13103170292.47 100000 分割 : 13103170168.71 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 4 0 0 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : 21.0-21.0 積分区間が間違っています. 2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : 7 0 0 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : 9.0 9.0 積分区間が間違っています. 課題 7-3 の実行例

Scanner を使えるようにする準備 IntegralTester.java の半完成品 /** ここに必ずこのクラスの役割を明記する 記述がいい加減な場合も再提出となる */ クラス宣言 { main メソッド { final int maxpartitionnumber = 100000; // 分割数の上限 定数を扱う場合は final 修飾子をつける /* キーボード入力の準備 */ Scanner /* キーボードから 2 次関数の係数を入力する */ System.out.print("2 次関数の 3 つの係数 ( 整数 ) をスペースで区切って入力 : "); /* 与えられた係数を元に 2 次関数を表すオブジェクトを生成する */ QuadraticFunction /* キーボードから積分区間の始点と終点を入力する */ System.out.print(" 積分の始点と終点 ( 実数 ) をスペースで区切って入力 : "); ( 間違った積分区間を入力した際は System.exit(1) で終了 ) /* TrapezoidalRule クラスのオブジェクトを生成 */ TrapezoidalRule /* 積分対象の関数の表示 */ System.out.printf(" の定積分 [%2.1f, %2.1f] の近似値 n", ); } /* 1 maxpartitionnumber 分割したそれぞれの場合の積分の近似値を求め表示する */ for ( ここに 100000 という数値を直接書かないこと ) { } Scanner を閉じる

課題 7-3 のクラス図

各課題ごとに プログラムの先頭に 以下の事項を必ず記入すること 学籍番号 名前 課題番号 提出日 再提出日 例 ( ドキュメンテーションコメントを使用すること ) /** * クラスの簡単な説明 * * @author 19-1-037-0999 近大太郎課題 7-1 提出日 2019/10/29 再提出日 2019/11/19 ( 再提出時のみ ) */

レポートの提出について 今回と第 11 回では LaTeX で作成した pdf 形式のレポート ( ファイル名 report7.pdf ) も提出します 公式ページにレポートの雛形となる report7.tex というファイルがあるので 必ずそれを利用して作成してください またその中に書かれている指示には従ってください 不備のあるレポートは内容を見ずに再提出として返却します また 大幅に減点します

レポートの提出について レポート作成は プログラムを submitj.sh で提出してから行ってください 課題 7.3 は ターミナル上で ~/JJ2/JavaBook/bin に移動し $ java IntegralTester.java として実行し その実行画面の画像をレポートに貼り付けてください 課題 7.1 の画像は不要です Eclipse 上の実行画面では受理しません 詳細は 公式ページにある report7.pdf の第 6 節をよく読んでください

テスト仕様以下のようなテスト結果 ( 入力値は自分で考える ) を記載する 番号 入力 1 入力 2 出力 1 出力 2 合否 1 1 2 1-3.0 3.0 2 f(x) = 1x^2+2x+1 の定積分 [-3.0, 3.0] の近似値 上記以外最低でも 4 つのテスト結果を 2~5 に記載 1 分割 : 60.00 10 分割 : 24.36 100 分割 : 24.00 1000 分割 : 24.00 10000 分割 : 24.00 100000 分割 : 24.00 か を記入 3 4 5 6 右記以外の入力エラーの場合の結果を 2 つ記載 28.8-15.9 積分区間が間違っています. 7 6.2 6.2 積分区間が間違っています.

添付する画像 レポートに添付する画像は 右図のようなターミナル上での実行結果です エクリプス上の実行結果では受理しません 画像には 自分で考えテスト仕様に示した実行結果を全て含めるようにしてください また それ以外の余分な行 (cd や誤ったコマンドなど ) は含めないでください

よくある再提出例 プログラムの仕様の記述が不完全 コメントが無い 字下げしていない または不完全 ( 自己流の字下げ ) ソースコードの一部がはみ出して欠落 または次の行に折り返されている 実行結果の図がターミナルではなく eclipse で実行したものになっている 実行結果の図に java コマンド以外の余分な情報が入っている report7.tex に記載されている指示文章がそのまま残っている これらも含め pdf ファイルに不備が無いかどうかよく確認してから提出してください 再提出となった場合 遅刻提出と同様に大きく減点されます

課題提出期限 課題 7の全てのJavaプログラム 基本期限 : 本日 16:30 延長期限 :11 月 6 日 ( 水 ) 17:00 LaTeX によるレポート ( report7.pdf ) 基本期限 :11 月 6 日 ( 水 ) 17:00