111 Views
February 04, 22
スライド概要
Java プログラミング入門(スライド資料とプログラム例)(全6回)
https://www.kkaneko.jp/pro/ji/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
ji-3. 条件分岐と場合分け (Java プログラミング入門) URL: https://www.kkaneko.jp/cc/ji/index.html 金子邦彦 1
内容 例題1.平方根の計算 if 文,else 文,条件分岐,比較演算 例題2.定形郵便物の料金 例題3.2次方程式 多分岐 例題4.直線と原点の距離 比較演算と論理演算の組み合わせ 2
目標 • 条件分岐(if 文)を使って,より役に立つプログ ラムを作ることができるようになる. • 比較演算(<,<=,>,>=,=,<>)の使い方 を理解する • 前回習った四則演算,Java の標準ライブラリ(指数関 数,対数関数)も使う 3
条件分岐 条件分岐では,条件式が成り立てばAを,成り立た なければBを実行というように分岐する 条件式 Yes No B A 4
オンライン開発環境 Online GDB • プログラミングを行えるオンラインのサービス https://www.onlinegdb.com • ウェブブラウザを使う • たくさんの言語を扱うことができる Python3, Java, C/C++, C#, JavaScript, R, アセンブリ言語,SQL など • オンラインなので、「秘密にしたいプログラム」 を扱うには十分な注意が必要 5
Online GDB で Java を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 6
③ 「Language」のところで,「Java」を選ぶ 7
実行ボタン エディタ画面 プログラムを 書き換えること ができる 8
if, else if, else を用いて,「条件式」が成り立てばAを、 成り立たなければBを実行するようなプログラムを 書くことができる. if ( 条件式 ) { 文; 文; A ... } else { 文; 文; B ... } 条件式 No B Yes A 9
if のみ • if のみを書いて,else を書かないこともできる • 「条件式」が成り立つときに限りAを実行 if ( 条件式 ) { 文; 文; A ... } 条件式 No Yes A 10
比較演算 比較演算は,条件式を書くときなどに使用 < <= > >= == <> 左辺が右辺より小さい 左辺が右辺以下 左辺が右辺より大きい 左辺が右辺以上 左辺が右辺と等しい 左辺が右辺と等しくない 11
比較演算の例 条件式 x >= 0 は,「x が 0 以上」の意味 12
平方根を求める • 次は,平方根を求めるプログラム • 「-5」を与えると,NaN と表示される これは正常動作.そもそも x の値がマイナスになる のが想定外 → 次ページ以降で改良版を示す 13
例題1.平方根の計算 浮動小数点数データを読み込んで,平方根の計算と 表示を行うプログラム • 但し,負の数の場合には,「計算できないこと」を意 味するメッセージを表示する 正または0のとき: sqrt() を使って計算できる 負のとき: 「計算できないこと」と,確認の ために x の値も表示 • 負であるかどうかによって条件分岐を行うために if 文 を使う 14
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) { 条件式
double x;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter x =");
x = s.nextDouble();
条件が成り立つ場合に実行され
if (x >= 0) {
る部分
System.out.printf("sqrt(x) = %8.3f\n", Math.sqrt(x));
} else {
System.out.printf("out of range, x = %8.3f\n", x);
}
条件が成り立たない場合に実行
}
される部分
}
15
平方根の計算 実行結果の例 x = 9 のときは,平方根が表示される x = -5 のときは,計算できないという メッセージと,x の値が表示される 16
プログラム実行順 メッセージ System.out.println("Please Enter x =");「Please Enter x =」を表示 x = s.nextDouble(); 浮動小数点数データを読み込み No x >= 0 条件分岐 Yes System.out.printf("sqrt(x) = %8.3f\n", Math.sqrt(x)); 平方根を計算し,計算 結果を表示 メッセージと x の値 を表示 System.out.printf("sqrt(x) = %8.3f\n", Math.sqrt(x)); 終わり 17
プログラムとデータ メモリ ① x ③ 1つの変数 x = s.nextDouble(); 浮動小数点数 データを読み込み System.out.printf("sqrt(x) = %8.3f\n", Math.sqrt(x)); 計算と表示 (x >= 0 のとき) 18
例題2.定形郵便物の料金 • キーボードから数値を読み込んで, 25 以下なら 「84 Yen」 25 より大きくて50以下なら 「94 Yen」 50より大きいなら 「Too heavy」 と表示するプログラムを作る • 多分岐を行うために,if 文を使う 19
import java.lang.Math; import java.util.Scanner; public class Main { public static void main(String[] args) { double x; Scanner s = new Scanner(System.in); System.out.println("juuryou?"); x = s.nextDouble(); if (x <= 25) { System.out.println("84 Yen"); } else if (x <= 50 ) { System.out.println("94 Yen"); } else { System.out.println("Too heavy"); } } } x <= 25 が成り立つ 場合に実行される部分 x <= 25 が成り立たず, x <= 50 が成り立つ 場合に実行される部分 x <= 25 も成り立たず, x <= 50 も成り立たない 場合に実行される部分 20
定形郵便物の料金 実行結果の例 21
定形郵便物の料金 A, B, C のうちどれか1つを実行 Yes x <= 25 No System.out.println("84 Yen"); A Yes x <= 50 No System.out.println("94 Yen"); System.out.println("Too heavy"); B C 22
import java.lang.Math; import java.util.Scanner; public class Main { public static void main(String[] args) { double x; Scanner s = new Scanner(System.in); System.out.println("juuryou?"); x = s.nextDouble(); if (x <= 25) { System.out.println("84 Yen"); } else if (x <= 50 ) { System.out.println("94 Yen"); } else { このうちどれか1つ が実行される System.out.println("Too heavy"); } } } 23
例題3.2次方程式 • 2次方程式 ax2 + by + c = 0 の解を求めるプログ ラムを作る • 重解,虚数解も正しく求めるために,判別式 b2 -4ac の値で条件分岐する • 「a=0」の場合は考えない 24
D = b2 - 4ac とする 1) 判別式 D > 0 のとき −b+ D −b− D x= , 2a 2a 2) D = 0 のとき 異なる2実数解 b x = − , 2a 重解 −b+i − D −b−i − D x= , 2a 2a 異なる2虚数解 •25 3) D < 0 のとき
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
double a, b, c, D;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter a =");
a = s.nextDouble();
System.out.println("Please Enter b =");
b = s.nextDouble();
System.out.println("Please Enter c =");
c = s.nextDouble();
D = b * b - 4 * a * c;
if (D > 0) {
System.out.printf("x = %8.3f, %8.3f\n",
(-b + Math.sqrt(D)) / (2 * a),
(-b - Math.sqrt(D)) / (2 * a));
} else if (D == 0) {
System.out.printf("x = %8.3f\n", -b / (2*a));
} else {
System.out.printf("x = %8.3f + %8.3f i, %8.3f - %8.3f i\n",
-b / (2 * a), Math.sqrt(-D) / (2 * a),
-b /(2 * a), Math.sqrt(-D) / (2 * a));
}
}
}
D > 0 のとき
D = 0 のとき
D < 0 のとき
26
2次方程式 実行結果の例 27
例題4.直線と原点の距離 • 平面: ax + by + c = 0 と原点との距離を求めるプ ログラムを作成する • 但し,a = 0 かつ b = 0 のときには計算を行わない d= c a +b 2 2 28
直線と原点の距離 y o x 直線 ax + by + c = 0 29
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
double a, b, c, d;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter a =");
a = s.nextDouble();
System.out.println("Please Enter b =");
b = s.nextDouble();
System.out.println("Please Enter c ="); 条件が成り立つ場合に
c = s.nextDouble();
実行される部分
if ((a == 0) && (b == 0)) {
System.out.println("a=0 and b=0!");
} else {
d = Math.abs(c) / Math.sqrt(a * a + b * b);
System.out.printf("d = %8.3f\n", d);
}
条件が成り立たない
}
}
場合に実行される部分 30
直線と原点の距離 実行結果の例 31
条件式 (a == 0) && (b == 0) a=0 である b=0 である かつ 32
論理演算 A && B A かつ B A || B A または B !A Aでない 真,偽に関する論理的な演算を行う. 33
演習.論理式に関する演習 (1)2次方程式 ax2 + by + c = 0 の解を求めるプ ログラムを作りなさい 例題3のプログラムを書き換えて,a=0 の場合にも,正 しく解を求めるようにしなさい (2)平面 ax + by + cz + d = 0 と原点の距離を求 めるプログラムを作りなさい 34
演習(1)で行うこと • a = 0 かつ b = 0 かつ c = 0 のとき 「すべての x が解である」と表示 • a = 0 かつ b = 0 かつ c ≠0 のとき 「解なし」と表示 • a = 0 かつ b ≠ 0 のとき x=-c/b 35
演習(1)で行うこと
• a = 0 かつ b ≠ 0 のとき
x=-c/b
この部分のプログラム例(正解は1つでは無い)
else if ((a == 0) && (b != 0)) {
System.out.printf("x = %8.3f", -c / b);
}
36