134 Views
February 07, 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-4. 整数,浮動小数点数 (Java プログラミング入門) URL: https://www.kkaneko.jp/cc/ji/index.html 金子邦彦 1
内容 • 例題1.硬貨の金種計算 • 例題2.うるう年の判定 整数の変数 浮動小数点数と整数の違い • 例題3.複利計算 整数の変数と,浮動小数点数の変数を混在さ せるときに気を付けねばならないこと 2
目標 • プログラムでの整数と浮動小数点数の違いについ て理解する • 目的に応じて,整数の変数,浮動小数点数の変数 を正しく使い分けることができるようになる 3
Java のデータの種類 ・基本データ データの種類 基本データ型 サイズ 整数 byte 8 bit short 16 bit int 32 bit long 64 bit float 32 bit double 64 bit 文字 char 16 bit true/false boolean 浮動小数点数 ・基本データの配列 ・クラスに属するオブジェクト: String クラスなど多種 この資料では,整数 int と浮動小数点数 double を使う4
整数と浮動小数点数 • 整数 整数(正か負か0) 例) 0 3 28 4778 -1 -10 -1250 • 浮動小数点数 小数付きの数も可 例) 0 3 1278748623 ー456375939 8 2.190872 0.000178 5
整数と浮動小数点数 整数 浮動小数点数 四則演算 +, -, *, / (/ では,余りは切 り捨て) +, -, *, / 剰余 % 小数点以下切 り捨て floor 6
オンライン開発環境 Online GDB • プログラミングを行えるオンラインのサービス https://www.onlinegdb.com • ウェブブラウザを使う • たくさんの言語を扱うことができる Python3, Java, C/C++, C#, JavaScript, R, アセンブリ言語,SQL など • オンラインなので、「秘密にしたいプログラム」 を扱うには十分な注意が必要 7
Online GDB で Java を動かす手順 ① ウェブブラウザを起動する ② 次の URL を開く https://www.onlinegdb.com 8
③ 「Language」のところで,「Java」を選ぶ 9
実行ボタン エディタ画面 プログラムを 書き換えること ができる 10
例題1.硬貨の金種計算 • 金額を読み込んで,適切な小銭の枚数を求め,表 示するプログラムを作る. 例) 金額が768円のとき, 500円玉: 1枚 100円玉: 2枚 50円玉: 1枚 10円玉: 1枚 5円玉: 1枚 1円玉: 3枚 • 例題では,簡単のため,紙幣は考えない(硬貨の み)ということにする • 各硬貨の枚数を扱うために,整数の変数を使う 11
• 1円札の枚数 金額を 5 で割った余り • 5円玉の枚数 金額を 10 で割った余り(小数点以下切り捨て)について, それを 5 で割った商 • 10円玉の枚数 金額を 50 で割った余り(小数点以下切り捨て)について, それを 10 で割った商 他の効果も同様に考える 12
import java.util.Scanner; public class Main { public static void main(String[] args) { int kingaku, n500, n100, n50, n10, n5, n1; Scanner s = new Scanner(System.in); System.out.println("Please Enter kingaku ="); kingaku = s.nextInt(); n500 = kingaku / 500; n100 = ( kingaku % 500 ) / 100; n50 = ( kingaku % 100 ) / 50; 計算 n10 = ( kingaku % 50 ) / 10; n5 = ( kingaku % 10 ) / 5; n1 = kingaku % 5; System.out.printf("500 en %d mai\n", n500); System.out.printf("100 en %d mai\n", n100); System.out.printf("50 en %d mai\n", n50); System.out.printf("10 en %d mai\n", n10); System.out.printf("5 en %d mai\n", n5); System.out.printf("1 en %d mai\n", n1); } } キーボードからの データの読み込み 画面表示 13
硬貨の金種計算 実行結果の例 14
プログラム実行順 System.out.println("Please Enter kingaku ="); kingaku = s.nextInt(); メッセージを表示 整数データを読み込み n500 = kingaku / 500; n100 = ( kingaku % 500 ) / 100; n50 = ( kingaku % 100 ) / 50; n10 = ( kingaku % 50 ) / 10; n5 = ( kingaku % 10 ) / 5; n1 = kingaku % 5;; 金種計算 System.out.printf("500 en %d mai\n", n500); System.out.printf("100 en %d mai\n", n100); System.out.printf("50 en %d mai\n", n50); System.out.printf("10 en %d mai\n", n10); System.out.printf("5 en %d mai\n", n5); System.out.printf("1 en %d mai\n", n1); 計算結果を表示 15
例題2.うるう年の判定 • 「西暦年」を読み込んで,うるう年かどうか表示 するプログラムを作る. 2022 → うるう年でない 2024 → うるう年である • うるう年の判定のために,比較演算と論理演算を 組み合わせる • 西暦年が 4, 100, 400 の倍数であるかを調べるため に % を使う(余りが 0 ならば,倍数である) 16
グレゴリオ暦でのうるう年 • うるう年とは: 2月が29日まである年 • うるう年は400年に97回で,1年の平均日数は 365.2422日 • うるう年の判定法 • 年数が 4 の倍数の年 → うるう年 • 但し, 100の倍数の年で400の倍数でない年 → うるう年ではない(4の倍数だが例外とする) (例) 2024 年: うるう年(4の倍数) 2020 年: うるう年(4の倍数) 2000 年: うるう年(4の倍数) 1900 年: うるう年ではない (100 の倍数だが 400 の倍数でない) 1800 年: うるう年ではない 17 (100 の倍数だが 400 の倍数でない)
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int y;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter year =");
y = s.nextInt();
条件式
if (((y % 400) == 0) || (((y % 100) != 0) && ((y % 4) == 0))) {
System.out.printf("%d is leap year\n", y); 条件が成り立つ場合
} else {
に実行される部分
System.out.printf("%d is not leap year\n", y);
}
条件が成り立たない場合
}
に実行される部分
}
18
うるう年の判定 実行結果の例 19
うるう年の判定式 ((y % 400) == 0) || (((y % 100) != 0) && ((y % 4) == 0)) 400の倍数である 100の倍数でない 4の倍数である かつ または 20
例題3.複利計算 • 元金をある年利で,ある年数だけ運用したときの 元利と利息を表示する • 複利計算では,利息が利息を生む. • 複利計算を行うために,pow メソッド(pow(x,y) は, x の y乗)を使う • 浮動小数点数の小数点以下切り捨てのために floor メソ ッドを使う • 整数と浮動小数点数のデータが混在する • 元金 gankin: 整数データ(単位は 円) • 年数 nensu: 整数データ(単位は 年) • 年利 nenri: 浮動小数点数データ (単位は %) 21
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int gankin, nensu, ganri;
double nenri, r;
Scanner s = new Scanner(System.in);
System.out.println("Please Enter gankin (en) =");
gankin = s.nextInt();
System.out.println("Please Enter nensu (en) ="); キーボードからの
nensu = s.nextInt();
データの読み込み
System.out.println("Please Enter nenri (%) =");
nenri = s.nextDouble();
r = 1 + (nenri * 0.01);
計算
ganri = (int)Math.floor(gankin * Math.pow(r, nensu));
System.out.printf("ganri = %d (en)\n", ganri);
画面表示
System.out.printf("risoku = %d (en)\n", ganri - gankin);
}
}
22
硬貨の金種計算 実行結果の例 23
複利の計算 • 複利の公式: 元利 = 元金 × (1+年利)年数 • べき乗 xy の計算のために,pow メソッドを使用 する ganri = trunc( gankin * Power( r, nensu ) ); r は年利 24
floor • floor 浮動小数点数の小数点以下を切り捨て 例) 3.4 → 3, 3.6 → 4, -1.6 → 2 25
演習.時間の換算 • 秒数 x を読み込んで,h 時,m 分,s 秒を計算す るプログラムを作りなさい. 例) x=3723 のとき, h = 1, m = 2, s = 3 26