|
3-6 專題研討
內容:
3-6-1 自我挑戰:溫度轉換工具
(A)系統功能:PM3_5.java
我們需要一套可以轉換溫度攝氏與華式之間的工具,期望操作如下:
***
攝氏/華式溫度轉換工具 ***
請輸入華式溫度 =>103.5
華氏 103.50
度=
攝氏 39.72
度
請輸入攝式溫度 =>32.1
攝氏 32.10
度=
華氏 89.78
度 |
(B)製作技巧提示:
首先我們必須了解兩者溫度之間的轉換,華式溫度(F)轉換攝氏溫度(C)公式是(C = (F - 32)* 5/9,需包含小數點);攝氏溫度轉(C )換成華氏溫度(F )的計算公式是(F = 32 + (9 * C)/5)。程式片段如下:
01
02
03
04
05
06
07 |
….
System.out.printf("***
攝氏/華式溫度轉換工具
***\n");
System.out.printf("請輸入華式溫度
=>");
value_F
=
keyin.nextFloat();
value_C
= (value_F
- 32) * 5.0F/9.0F;
…. |
3-6-2 自我挑戰:手機計費工具
(A)系統功能:PM3_6.java
手機通訊費率大多採用秒數計算,請製作一套計算費率系統。系統要求輸入通話時間是『時 分 秒』方式(請引用 Scanner 套件),接著系統要求輸入每秒通話費(如0.5元),則系統需計算出總通話秒數,以及通話費多寡,期望操作介面如下:
***
手機通話費計算工具 ***
請輸入通話時間(時
分
秒) =>2 30 50
通話時間總共 9050
秒
請輸入每秒計費(如 0.5) =>0.4
通話費總共 3620
元 |
(B)製作技巧提示:
01
02
03
04
05
06 |
….
times
= (hour
* 60 +
minute)
* 60 +
second;
…..
total
=
units
*
times;
System.out.printf("通話費總共
%d
元\n",
(int)total);
…. |
3-6-3 範例研討:登革熱診斷系統(一)
(A)程式功能:Ex3_6.java
高雄地區的登革熱病蚊傳播嚴重,衛生局常要求醫生隨時通報案例發生,同時也鼓勵民眾初步自行診斷是否有被感染,因此期望在網站上公佈一個簡單的診斷工具,如有病情徵兆時,再到醫院進一步檢查。診斷系統要求使用者填入各種徵兆項目,再依照這些參數的比重推論病情可能被感染比例。徵兆項目如下:(假設症狀與事實不完全相符)
-
發高燒(x,比重 a=6)。
-
筋骨酸痛(y,比重 b=3)。
-
感冒症狀(z,比重 c=8)。
-
貪睡症狀(k,比重 d=3)。
上述各種症狀的徵兆數值為(0 ~ 10):不明顯(0)、稍明顯(4)、明顯(6)、很明顯(10)。感染登革熱指數(0 ~ 10) = (x * 6 + y*3 + z*8 + k*3) = (6+3+8+3),指數越高則表示被感染可能性越高,民眾自我診斷之後,再自行判斷是否到醫院確實診治。期望系統的操作介面如下:
***
登革熱自我診斷系統 ***
請依照程式詢問步驟,
輸入各種症狀明顯度如何 (0 ~ 10)
如:
不明顯(0),稍明顯 (4)
明顯(6),很明顯(10)
請輸入發燒症狀明顯否(0~10) =>5
請輸入筋骨酸痛症狀明顯否(0~10) =>8
請輸入感冒症狀明顯否(0~10) =>6
請輸入嗜睡症狀明顯否(0~10) =>7
您感染登革熱指數為(0 ~ 10)= 6.33
|
(B)製作技巧分析:
讀入每一種症狀的明顯度(0 ~ 10),再乘以該症狀的加權比重;將所有症狀明顯度的總合,在除以總加權比重,即可得到感染登革熱的指數為何。
(C)程式範例:Ex3_6.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
// Ex3_6.java
import
java.util.*;
public
class
Ex3_6 {
public
static
void
main(String
args[]){
Scanner
keyin
=
new
Scanner(System.in);
final
int
a=8,
b=6,
c=4,
d=3;
int
weights
=
a+b+c+d;
int
x,
y,
z,
k;
float
value;
System.out.printf("***
登革熱自我診斷系統
***\n");
System.out.printf("請輸入各種症狀明顯度如何
(0 ~ 10)\n");
System.out.printf("\t如:
不明顯(0),稍明顯
(4)
明顯(6),很明顯(10)\n");
System.out.printf("請輸入發燒症狀明顯否(0~10)
=>");
x
=
keyin.nextInt();
System.out.print("請輸入筋骨酸痛症狀明顯否(0~10)
=>");
y
=
keyin.nextInt();
System.out.print("請輸入感冒症狀明顯否(0~10)
=>");
z
=
keyin.nextInt();
System.out.print("請輸入嗜睡症狀明顯否(0~10)
=>");
k
=
keyin.nextInt();
value
= (float)(x*a
+
y*b
+z*c
+
k*d)/weights;
//value=Math.sqrt((a*x*x + b*y*y + c*z*z + d*k*k) /(double)(a+b+c+d));
System.out.printf("\n您感染登革熱指數為(0
~ 10)= %.2f\n",
value);
}
} |
(D)程式重點分析:
-
第 8
行:『final int a=8, b=6, c=4, d=3;』。設定各項症狀的加權比重值,數值越大表示該症狀對是否感染登革可能性越高。
-
第 9
行:『int weights = a+b+c+d;』。所有加權比重的總合。
-
第 28
行:『value = (float)(x*a + y*b + z*c + k*d)/weights;』。利用加權比重計算出感染登革熱指數的多寡。
3-6-4 自我挑戰:登革熱診斷系統
之二
(A)程式功能:PM3_7.java
許多疾病的症狀是大同小異的,當民眾到醫院時,醫生診斷病患是否感染登革熱,或是邏患其他疾病,就顯得非常困難。雖然選擇正確的症狀與加權比重,對於判斷的正確性越高,但加權比重的計算方式,也會影響到最後的判斷正確否;請您幫醫生建立一套更精密的計算方式,來提高判斷的正確性。有另一種均方根值的數理推論計算方式,說不定可以提高正確判斷,計算公式如下:
吾人期望的操作介面如下:
***
登革熱自我診斷系統 ***
請依照程式詢問步驟,
輸入各種症狀明顯度如何 (0 ~ 10)
如:
不明顯(0),稍明顯 (4)
明顯(6),很明顯(10)
請輸入發燒症狀明顯否(0~10) =>5
請輸入筋骨酸痛症狀明顯否(0~10) =>8
請輸入感冒症狀明顯否(0~10) =>6
請輸入嗜睡症狀明顯否(0~10) =>7
您感染登革熱指數為(0 ~ 10)= 6.45
|
(B) 程式製作提示:
輸出入介面大致上與 Ex3_6.java 相同,我們只要變更感染指數的計算公式即可,程式提示如下:
value=Math.sqrt((a*x*x + b*y*y + c*z*z + d*k*k) /(double)(a+b+c+d));
System.out.printf("\n您感染登革熱指數為(0
~ 10)= %.2f\n", value); |
3-6-5 自我挑戰:憂鬱症自我診斷工具
(A)程式功能:PM3_8.java
依照醫學學術單位研究,在這緊張社會環境裡,民眾大多有憂鬱症的傾向;衛生局期望建立一套自行探討系統,能讓國人隨時瞭解自己憂鬱症傾向如何。在網路上公布一套對談選單方式,讓國人自行填入各項參數,再推論憂鬱症傾向比重如何。推論參數如下:各項皆 0 ~ 10 分。
(1) 想哭(比重 5)
(2) 情不好(比重 4)
(3) 以前更容易發脾氣(比重 5)
(4) 我睡不好(比重 3)
(5) 我覺得不想吃東西(比重 2)
(6) 我覺得想事情或做事情比以前慢(比重 3)
(7) 我比較會往壞的方向想(比重 4)
(8) 我覺得身體不舒服(比重 2)
(9) 我覺得自己很沒用(比重 3)
(10) 我很想不開、甚至想死(比重 5)
為了增加系統推論的正確性,提供有兩種演算法,依照上述症狀推論是否邏患憂鬱症,演算法如下:
期望操作介面如下:
*****
憂鬱症自我診斷系統 *****
請依序回答下列問題,
相似度 (0 ~ 10)
不明顯(0),
稍明顯(2),
明顯(6),
很明顯(10)
我常覺得想哭(比重 5)=>4
我覺得心情不好(比重 4)=>3
我覺得比以前更容易發脾氣(比重 5)=>9
我睡不好(比重 3)=>8
我覺得不想吃東西(比重 2)=>8
我覺得想事情或做事情比以前慢(比重 3)=>7
我比較會往壞的方向想(比重 4)=>9
我覺得身體不舒服(比重 2)=>5
我覺得自己很沒用(比重 3)=>7
我很想不開、甚至想死(比重 5)=>5
總合計算 (0 ~ 100),
判斷結果:
正常(0 ~ 30)
輕微憂鬱症(30 ~ 60),
明顯憂鬱症(60~100)
您憂鬱症指數為 =>65
加權指數計算 (0 ~ 10),
判斷結果:
正常(0 ~ 3)
輕微憂鬱症(3 ~ 6),
明顯憂鬱症(6~10)
您憂鬱症指數為 =>6.39
|
(B)製作技巧提示:
分別讀入各項問題的分數,各項分數的總和(sum1),即是總和計算的判斷法;如分別乘以加權比重,累加其總和(sum2),再除以加權比重的合計(weights),即可加權指數計算方式。提示如下:
……
System.out.printf("\n總合計算
(0 ~ 100), 判斷結果:
正常(0
~ 30)\n");
System.out.printf("\t輕微憂鬱症(30
~ 60), 明顯憂鬱症(60~100)\n");
System.out.printf("您憂鬱症指數為
=>%d\n", sum1);
System.out.printf("\n加權指數計算
(0 ~ 10), 判斷結果:
正常(0
~ 3)\n");
System.out.printf("\t輕微憂鬱症(3
~ 6),
明顯憂鬱症(6~10)\n");
System.out.printf("您憂鬱症指數為
=>%.2f\n", (float)sum2/weights); |
|
翻轉工作室:粘添壽
Java 程式設計(一) 含程式邏輯
翻轉電子書系列:
|