## chatGPT 10 題
學習[條件判斷](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/if...else),並且了解[邏輯運算子](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Expressions_and_Operators)。藉由包裝生活中常見的基礎算式來練習邏輯能力。
### 題目一:多重條件
一週有七天,請製作一個函式可輸入不同的星期日數,並回傳當天的心情小語,如下例:
``` =JavaScript
function getMood(dayOfWeek) {
switch (dayOfWeek) {
case 1:
return "星期一,新的一週開始了,加油!";
case 2:
return "星期二,一週的工作已經開始進行,繼續保持!";
case 3:
return "星期三,一週的中點,繼續堅持!";
case 4:
return "星期四,快要到週末了,再堅持一下!";
case 5:
return "星期五,週末就要到了,做個總結,準備迎接週末吧!";
case 6:
return "星期六,週末愉快!";
case 7:
return "星期日,放鬆一下,為新的一週充電!";
default:
return "請輸入一個介於 1 到 7 的數字。";
}
}
console.log(getMood(1))// 星期一,新的一週開始了,加油!
console.log(getMood(2)) // 星期二,一週的工作已經開始進行,繼續保持!
```
**(心情小語內容可自訂、必須使用 [Switch](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/switch) 語法來達成。)**
在函式中,我們使用 switch 語法將輸入的星期日數對應到相應的心情小語,並將其存儲在 thought 變數中。最後,函式返回 thought 變數的值。如果輸入的星期日數不在 1 到 7 的範圍內,函式會返回一個錯誤訊息。
### 題目二:飲酒測試
最低法定飲酒年齡為 18 歲,請撰寫一個函式來測驗輸入的年齡是否能飲酒。
``` =JavaScript
function canDrink(age) {
return age >= 18 ? "你可以飲酒。" : "你不能飲酒。";
}
console.log(getMood(1)) // 你可以飲酒。
console.log(canDrink(14)) // 你不能飲酒。
```
**(必須使用[條件運算子](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)來達成。)**
### 題目三:發燒檢測
人的中心體溫通常會自動調節在 37 ℃ 左右,只要 ≥ 38度就代表可能發燒了!請製作一個探測人體溫度是否發燒的函式。
``` =JavaScript
幫我用javascrpt寫一段程式碼,第一個函式命名為isFever,大於等於 38,就會輸出 true ,否則就輸出 false
function isFever(temperature) {
if (temperature >= 38) {
console.log(true);
} else {
console.log(false);
}
}
console.log(isFever(37)); // false
console.log(isFever(38)); // true
```
函式接收一個表示體溫的參數 temp,如果 temp 大於等於 38,就會回傳 true 代表發燒,否則就回傳 false。
### 題目四:溫標轉換
目前常見的溫度標示有攝氏(°C)與華氏(°F),請撰寫兩個函式可以轉換彼此四捨五入至小數第一位,如下範例。
* 攝氏轉華氏: (10°C x 9/5) + 32 = 50°F
* 華氏轉攝氏: (10°F − 32) × 5/9 = -12.2°C
``` =JavaScript
幫我用javascrpt寫一段程式碼,第一個函式命名為CtoF,是攝氏轉華氏並四捨五入至小數第一位
function CtoF(celsius) {
var fahrenheit = celsius * 9/5 + 32;
return Math.round(fahrenheit * 10) / 10;
}
幫我用javascrpt寫一段程式碼,第一個函式命名為FtoC,是華氏轉攝氏並四捨五入至小數第一位
function FtoC(fahrenheit) {
var celsius = (fahrenheit - 32) * 5/9;
return Math.round(celsius * 10) / 10;
}
console.log(CtoF(10)) // 50
console.log(FtoC(10)) // -12.2
```
### 題目五:餵食青蛙
請幫遊戲內的青蛙角色設計被餵食飼料時的反應,輸入不同種類單位大小的飼料,讓青蛙做出相對應的回饋,如下範例:
* 飼料太小(<=5) 回傳 "嘓!"
* 飼料太大(>=50) 回傳 "嘔"
* 如果以上都不是,回傳 "..."
```javascript
function frogReaction(feedSize) {
if (feedSize <= 5) {
return "嘓!"; // 飼料太小
} else if (feedSize >= 50) {
return "嘔"; // 飼料太大
} else {
return "…"; // 其他情況
}
}
console.log(frogReaction(3)); // 嘓!
console.log(frogReaction(66)); // 嘔
```
### 題目六:計算球體體積
請製作一個球體積計算函式,參數為半徑,回傳計算後四捨五入取至第一位小數的結果。
球體積 = 4 / 3 x π x 球半徑³
``` =JavaScript
// 詠唱
// Use JavaScript
// Please give me a function names "sphereVolume" accept a number params names "radius"
// return value is 4 / 3 x π x radius³ and round to the first decimal place
function sphereVolume(radius) {
var volume = (4 / 3) * Math.PI * Math.pow(radius, 3);
var roundedVolume = Math.round(volume * 10) / 10; // Round to the first decimal place
return roundedVolume;
}
// Example usage:
var radius = 3.5;
var result = sphereVolume(radius);
console.log("The volume of the sphere with radius " + radius + " is: " + result);
// The volume of the sphere with radius 3.5 is: 179.6
```
可參考:[球體積計算機](https://www.google.com/search?client=firefox-b-d&q=sphereVolume+calc)
### 題目七:BMI 計算
BMI 稱為身體質量指數(Body Mass Index,縮寫為BMI),是目前美國疾病管制局及世界衛生組織所認可,利用身高為基礎來測量體重是否符合標準。請套用以下公式製作一個 BMI 計算函式。
<div style="text-align: center; padding: 4rem">
BMI = 體重(公斤) / 身高的平方(公尺)
</div>

延伸思考:可將過重、輕度肥胖、中度肥胖、重度肥胖、腰圍功能判斷也完成。
``` =JavaScript
// 詠唱
// Use JavaScript
// Please give me a function names "bmi" accept two number params names "cm" and "kg"
// get a result by caculating kg / (cm/100)²
// result < 18.5 return "體重過輕"
// 18.5 <= result < 24 return "正常範圍"
// result >= 24 return "異常範圍"
function bmi(cm, kg) {
// Calculate BMI
const result = kg / Math.pow(cm / 100, 2);
// Determine the result category
if (result < 18.5) {
return "體重過輕";
} else if (result < 24) {
return "正常範圍";
} else {
return "異常範圍";
}
}
// Example usage:
const height = 170; // in centimeters
const weight = 65; // in kilograms
const bmiResult = bmi(height, weight);
console.log(bmiResult); // Output: "正常範圍"
```
### 題目八:斜邊計算
直角三角形的斜邊長度公式為:x² + y² = z²,請製作一個輸入兩邊邊長並回傳四捨五入取至小數第一位斜邊的函式。
```javascript
function calcHypotenuse(x, y) {
// 計算斜邊長度
var z = Math.sqrt(x*x + y*y);
// 將结果四舍五入至小數第一位
var roundedHypotenuse = Math.round(z * 10) / 10;
return roundedHypotenuse;
}
console.log(calcHypotenuse(3, 4)); // 5
console.log(calcHypotenuse(10, 10)); // 14.1
```
### 題目九:FizzBuzz
FizzBuzz 是一個簡單的小遊戲,給定一串從 1 到 100 的數字:
* 如果是 3 的倍數,就印出 “Fizz”
* 如果是 5 的倍數,就印出 “Buzz”
* 如果同時是 3 和 5 的倍數,就印出 “FizzBuzz”
* 將結果回傳為一個陣列。
```
function fizzBuzz() {
var result = [];
for (var i = 1; i <= 100; i++) {
if (i % 3 === 0 && i % 5 === 0) {
result.push("FizzBuzz");
} else if (i % 3 === 0) {
result.push("Fizz");
} else if (i % 5 === 0) {
result.push("Buzz");
} else {
result.push(i);
}
}
return result;
}
```
### 題目十:蜘蛛下網

蜘蛛在一個由四個支撐點構成,11x11 單位的正方形蜘蛛網上。請製作一個函式以蜘蛛的座標為參數並依循以下規則回傳結果:
* 計算出距離蜘蛛最近的點並回傳"哪裡是最近的支撐點 + 最短路徑距離"。
* 如果蜘蛛超出蜘蛛網外,回傳"蜘蛛不在網上了"。
``` =JavaScript
// input 輸入
spiderLeaveWeb(8, 3)
spiderLeaveWeb(5, 5)
spiderLeaveWeb(6, 5)
spiderLeaveWeb(5, 6)
spiderLeaveWeb(6, 6)
spiderLeaveWeb(20, 20)
spiderLeaveWeb(0, 0)
spiderLeaveWeb(11, 0)
spiderLeaveWeb(0, 11)
spiderLeaveWeb(11, 11)
// output 輸出
"右上角為最近的支撐點,距離 4.2 單位"
"左上為最近的支撐點,距離 7.1 單位"
"右上角為最近的支撐點,距離 7.1 單位"
"左下角為最近的支撐點,距離 7.1 單位"
"右下角為最近的支撐點,距離 7.1 單位"
"蜘蛛不在網上了"
"左上為最近的支撐點,距離 0 單位"
"右上角為最近的支撐點,距離 0 單位"
"左下角為最近的支撐點,距離 0 單位"
"右下角為最近的支撐點,距離 0 單位"
```
```javascript
function spiderLeaveWeb(x, y) {
// 检查蜘蛛是否在网上
if (x < 0 || x > 11 || y < 0 || y > 11) {
return "蜘蛛不在網上了";
}
// 计算距离四个支撑点的距离
var distances = [
{point: "左上", distance: Math.sqrt(x*x + y*y)},
{point: "右上角", distance: Math.sqrt((11-x)*(11-x) + y*y)},
{point: "左下角", distance: Math.sqrt(x*x + (11-y)*(11-y))},
{point: "右下角", distance: Math.sqrt((11-x)*(11-x) + (11-y)*(11-y))}
];
// 找到最近的支撑点
var minDistancePoint = distances.reduce((min, curr) => curr.distance < min.distance ? curr : min);
// 返回结果
return `${minDistancePoint.point}為最近的支撐點,距離 ${minDistancePoint.distance.toFixed(1)} 單位`;
}
// 示例输入
console.log(spiderLeaveWeb(8, 3));
console.log(spiderLeaveWeb(5, 5));
console.log(spiderLeaveWeb(6, 5));
console.log(spiderLeaveWeb(5, 6));
console.log(spiderLeaveWeb(6, 6));
console.log(spiderLeaveWeb(20, 20));
console.log(spiderLeaveWeb(0, 0));
console.log(spiderLeaveWeb(11, 0));
console.log(spiderLeaveWeb(0, 11));
console.log(spiderLeaveWeb(11, 11));
```
延伸思考:可以將蜘蛛網的尺寸(最大x、最大y)作為參數帶入函式中,思考會遇到什麼樣的情境並撰寫判斷回應。
答案:
以下是 spiderLeaveWeb 函式的範例實作,計算距離的部分使用了勾股定理。
```
function spiderLeaveWeb(x, y, maxX = 10, maxY = 10) {
// 判斷蜘蛛是否在蜘蛛網上
if (x < 0 || y < 0 || x > maxX || y > maxY) {
return "蜘蛛不在網上了";
}
// 計算四個支撐點與蜘蛛座標的距離
const distances = [
{ point: "左上角", distance: Math.sqrt(x * x + y * y) },
{ point: "右上角", distance: Math.sqrt((maxX - x) * (maxX - x) + y * y) },
{ point: "左下角", distance: Math.sqrt(x * x + (maxY - y) * (maxY - y)) },
{
point: "右下角",
distance: Math.sqrt((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y)),
},
];
// 找出距離最短的支撐點
const nearest = distances.reduce((prev, current) =>
prev.distance < current.distance ? prev : current
);
return `${nearest.point}為最近的支撐點,距離 ${nearest.distance.toFixed(1)} 單位`;
}
```
考慮輸入的參數為蜘蛛網的尺寸 maxX 與 maxY 時,我們需要修改判斷蜘蛛是否在網上的部分,判斷蜘蛛的座標是否超出蜘蛛網的範圍:
```
function spiderLeaveWeb(x, y, maxX, maxY) {
// 判斷蜘蛛是否在蜘蛛網上
if (x < 0 || y < 0 || x > maxX || y > maxY) {
return "蜘蛛不在網上了";
}
// 計算四個支撐點與蜘蛛座標的距離
const distances = [
{ point: "左上角", distance: Math.sqrt(x * x + y * y) },
{ point: "右上角", distance: Math.sqrt((maxX - x) * (maxX - x) + y * y) },
{ point: "左下角", distance: Math.sqrt(x * x + (maxY - y) * (maxY - y)) },
{
point: "右下角",
distance: Math.sqrt((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y)),
},
];
// 找出距離最短的支撐點
const nearest = distances.reduce((prev, current) =>
prev.distance < current
```