Skip to Content
CoursesCSC102หาค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐาน

หาค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐาน

โจทย์

รับค่าทั้งหมด 10 ค่าและหาค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานตามสูตรที่โจทย์ให้มา โดยห้ามใช้ Array

xˉ=Mean=i=1nxin\bar{x} = Mean = \frac{\sum_{i=1}^{n} x_i}{n} σ=S.D.=i=1nxi2(i=1nxi)2nn1\sigma = S.D. = \sqrt{\frac{\sum_{i=1}^{n} x^2_i - \frac{({\sum_{i=1}^{n} x_i})^2}{n}}{n - 1}}
InputOutput
1 2 3 4 5 6 7 8 9 10Mean: 5.5
SD: 3.02765
1.8 2.6 4 8 7 9 5 6 8 6.7Mean: 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) ซึ่งมีผลต่อความแม่นยำของการคำนวณ:

  1. การใช้ 10.0 แทน 10:
  • เมื่อเราใช้ 10 (จำนวนเต็ม) ในการหาร ผลลัพธ์จะถูกปัดเป็นจำนวนเต็มเสมอ
  • เช่น 23 / 10 จะได้ 2 ไม่ใช่ 2.3
  • แต่เมื่อใช้ 10.0 (ทศนิยม) ผลลัพธ์จะเป็นทศนิยมที่แม่นยำ
  • 23 / 10.0 จะได้ 2.3 ซึ่งถูกต้องและแม่นยำกว่า
  1. การใช้ 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
  • เปรียบเสมือนการเขียนผลการทดลองลงบนกระดานให้ทุกคนเห็น
ปรับปรุงล่าสุด