หาค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐาน
โจทย์
รับค่าทั้งหมด 10 ค่าและหาค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานตามสูตรที่โจทย์ให้มา โดยห้ามใช้ Array
| Input | Output |
|---|---|
| 1 2 3 4 5 6 7 8 9 10 | Mean: 5.5 SD: 3.02765 |
| 1.8 2.6 4 8 7 9 5 6 8 6.7 | Mean: 5.8100000000000005 SD: 2.41129 |
โค้ด
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
double sum = 0;
double sumSquares = 0;
for (int i = 0; i < 10; i++) {
double number = scanner.nextDouble();
sum += number;
sumSquares += number * number;
}
double mean = sum / 10.0;
double sd = Math.sqrt((sumSquares - ((sum * sum) / 10.0)) / 9.0);
System.out.println("Mean: " + mean);
System.out.printf("SD: %.5f", sd);
}
}คำอธิบาย
ขั้นตอนที่ 1: การนำเข้าไลบรารี
import java.util.Scanner;- บรรทัดนี้เป็นการนำเข้าไลบรารีที่ชื่อว่า
Scanner Scannerเป็นเครื่องมือที่ช่วยให้เราสามารถรับข้อมูลจากผู้ใช้ได้- เปรียบเสมือนการหยิบเครื่องคิดเลขที่สามารถรับตัวเลขจากเราได้มาเตรียมไว้
ขั้นตอนที่ 2: การสร้างคลาส
public class Main {
// โค้ดอื่นๆ จะอยู่ในนี้
}class Mainคือการสร้างกล่องใหญ่ที่จะเก็บโค้ดทั้งหมดของเรา- คิดเหมือนกับการสร้างห้องปฏิบัติการที่ชื่อว่า “Main” ที่เราจะใช้ทำการทดลองทางสถิติ
ขั้นตอนที่ 3: การสร้างเมธอดหลัก
public static void main (String[] args) {
// โค้ดหลักจะอยู่ในนี้
}- นี่คือจุดเริ่มต้นของโปรแกรมของเรา
- เปรียบเสมือนประตูทางเข้าของห้องปฏิบัติการ เมื่อเราเปิดโปรแกรม มันจะเริ่มทำงานจากตรงนี้
ขั้นตอนที่ 4: การสร้างตัวรับข้อมูล
Scanner scanner = new Scanner(System.in);- เราสร้างเครื่องมือที่ชื่อว่า
scannerเพื่อรับข้อมูลจากผู้ใช้ - คิดเหมือนกับการเตรียมกระดาษและปากกาไว้พร้อมจดบันทึกตัวเลขที่ผู้ใช้จะบอกเรา
ขั้นตอนที่ 5: การเตรียมตัวแปรสำหรับการคำนวณ
double sum = 0;
double sumSquares = 0;- เราสร้างกล่องสองใบ:
sumสำหรับเก็บผลรวมของตัวเลข และsumSquaresสำหรับเก็บผลรวมของตัวเลขยกกำลังสอง - เริ่มต้น เราใส่ค่า 0 ลงในทั้งสองกล่อง
- เปรียบเสมือนการเตรียมถังสองใบไว้ใส่ลูกแก้ว: ถังหนึ่งสำหรับลูกแก้วปกติ อีกถังสำหรับลูกแก้วที่มีขนาดเป็นกำลังสองของลูกแก้วปกติ
ขั้นตอนที่ 6: การรับข้อมูลและคำนวณผลรวม
for (int i = 0; i < 10; i++) {
double number = scanner.nextDouble();
sum += number;
sumSquares += number * number;
}- เราใช้ลูป
forเพื่อทำซ้ำ 10 ครั้ง - ในแต่ละรอบ:
- เราอ่านตัวเลขจากผู้ใช้ด้วย
scanner.nextDouble() - เพิ่มตัวเลขนั้นเข้าไปใน
sum - เพิ่มกำลังสองของตัวเลขนั้นเข้าไปใน
sumSquares - เปรียบเสมือนการรับลูกแก้ว 10 ลูก แล้วใส่ลงในถังที่เตรียมไว้: ใส่ลูกแก้วปกติลงในถังแรก และใส่ลูกแก้วที่มีขนาดเป็นกำลังสองลงในถังที่สอง
ขั้นตอนที่ 7: การคำนวณค่าเฉลี่ย
double mean = sum / 10.0;- เราคำนวณค่าเฉลี่ยโดยหาร
sumด้วย 10.0 - เปรียบเสมือนการนำลูกแก้วทั้งหมดในถังแรกมาแบ่งเท่าๆ กัน 10 ส่วน แล้วดูว่าแต่ละส่วนมีขนาดเท่าไร
- สังเกตว่าเราใช้ 10.0 แทนที่จะเป็น 10 เพื่อบอกคอมพิวเตอร์ว่าเราต้องการผลลัพธ์เป็นเลขทศนิยม
ขั้นตอนที่ 8: การคำนวณส่วนเบี่ยงเบนมาตรฐาน
double sd = Math.sqrt((sumSquares - ((sum * sum) / 10.0)) / 9.0);- นี่คือสูตรการคำนวณส่วนเบี่ยงเบนมาตรฐาน
Math.sqrt()คือการหารากที่สอง- เปรียบเสมือนการใช้สูตรวิเศษเพื่อวัดว่าลูกแก้วแต่ละลูกแตกต่างจากขนาดเฉลี่ยมากน้อยเพียงใด
- สังเกตว่าเราใช้ 10.0 และ 9.0 แทนที่จะเป็น 10 และ 9
คำอธิบายเพิ่มเติม: ทำไมต้องใช้ 10.0 และ 9.0 แทน 10 และ 9
ในภาษา Java และภาษาโปรแกรมมิ่งหลายภาษา มีความแตกต่างระหว่างการคำนวณด้วยตัวเลขจำนวนเต็ม (integer) และตัวเลขทศนิยม (floating-point number) ซึ่งมีผลต่อความแม่นยำของการคำนวณ:
- การใช้ 10.0 แทน 10:
- เมื่อเราใช้ 10 (จำนวนเต็ม) ในการหาร ผลลัพธ์จะถูกปัดเป็นจำนวนเต็มเสมอ
- เช่น 23 / 10 จะได้ 2 ไม่ใช่ 2.3
- แต่เมื่อใช้ 10.0 (ทศนิยม) ผลลัพธ์จะเป็นทศนิยมที่แม่นยำ
- 23 / 10.0 จะได้ 2.3 ซึ่งถูกต้องและแม่นยำกว่า
- การใช้ 9.0 แทน 9:
- ในสูตรคำนวณส่วนเบี่ยงเบนมาตรฐาน เราใช้ 9.0 เพราะเรามีข้อมูล 10 ตัว
- การใช้ 9.0 ทำให้แน่ใจว่าผลลัพธ์จะเป็นทศนิยมที่แม่นยำ
- หากใช้ 9 อาจทำให้เกิดการปัดเศษที่ไม่ต้องการในระหว่างการคำนวณ
เปรียบเทียบได้กับการชั่งน้ำหนัก:
- การใช้ตัวเลขจำนวนเต็มเหมือนการชั่งน้ำหนักโดยปัดเศษเป็นกิโลกรัมเต็มๆ เสมอ
- การใช้ตัวเลขทศนิยมเหมือนการชั่งน้ำหนักที่แสดงผลละเอียดถึงกรัม ทำให้ได้ค่าที่แม่นยำกว่า
ในการคำนวณทางสถิติ ความแม่นยำเป็นสิ่งสำคัญมาก การใช้ 10.0 และ 9.0 ช่วยให้มั่นใจได้ว่าผลลัพธ์จะมีความแม่นยำสูงสุดเท่าที่เป็นไปได้ในการคำนวณด้วยคอมพิวเตอร์
ขั้นตอนที่ 9: การแสดงผลลัพธ์
System.out.println("Mean: " + mean);
System.out.printf("SD: %.5f", sd);- เราแสดงค่าเฉลี่ย (Mean) และส่วนเบี่ยงเบนมาตรฐาน (SD) ที่คำนวณได้
%.5fหมายถึงแสดงทศนิยม 5 ตำแหน่งสำหรับค่า SD- เปรียบเสมือนการเขียนผลการทดลองลงบนกระดานให้ทุกคนเห็น
ปรับปรุงล่าสุด