# การตัดสินใจ: โปรแกรมประมวลผลเกรดนักเรียน ## วัตถุประสงค์การเรียนรู้ ในงานนี้ คุณจะได้ฝึกฝนแนวคิดเกี่ยวกับการตัดสินใจจากบทเรียนนี้ โดยการสร้างโปรแกรมที่ประมวลผลเกรดนักเรียนจากระบบการให้คะแนนที่แตกต่างกัน คุณจะใช้คำสั่ง `if...else` ตัวดำเนินการเปรียบเทียบ และตัวดำเนินการเชิงตรรกะเพื่อกำหนดว่านักเรียนคนใดผ่านวิชาเรียนของพวกเขา ## ความท้าทาย คุณทำงานในโรงเรียนที่เพิ่งรวมกับสถาบันอื่น ตอนนี้คุณต้องประมวลผลเกรดนักเรียนจากระบบการให้คะแนนที่แตกต่างกันสองระบบ และกำหนดว่านักเรียนคนใดผ่านการเรียน นี่เป็นโอกาสที่ดีในการฝึกฝนตรรกะเงื่อนไข! ### การทำความเข้าใจระบบการให้คะแนน #### ระบบการให้คะแนนแรก (ตัวเลข) - เกรดจะถูกให้เป็นตัวเลขตั้งแต่ 1-5 - **เกรดผ่าน**: 3 ขึ้นไป (3, 4 หรือ 5) - **เกรดไม่ผ่าน**: ต่ำกว่า 3 (1 หรือ 2) #### ระบบการให้คะแนนที่สอง (เกรดตัวอักษร) - เกรดใช้ตัวอักษร: `A`, `A-`, `B`, `B-`, `C`, `C-` - **เกรดผ่าน**: `A`, `A-`, `B`, `B-`, `C`, `C-` (เกรดทั้งหมดที่ระบุถือว่าผ่าน) - **หมายเหตุ**: ระบบนี้ไม่มีเกรดไม่ผ่าน เช่น `D` หรือ `F` ### งานของคุณ จากอาร์เรย์ `allStudents` ด้านล่างที่แสดงนักเรียนทั้งหมดและเกรดของพวกเขา ให้สร้างอาร์เรย์ใหม่ `studentsWhoPass` ที่มีนักเรียนทั้งหมดที่ผ่านตามระบบการให้คะแนนของพวกเขา ```javascript let allStudents = [ 'A', // Letter grade - passing 'B-', // Letter grade - passing 1, // Numeric grade - failing 4, // Numeric grade - passing 5, // Numeric grade - passing 2 // Numeric grade - failing ]; let studentsWhoPass = []; ``` ### วิธีการทีละขั้นตอน 1. **ตั้งค่าลูป** เพื่อวนผ่านแต่ละเกรดในอาร์เรย์ `allStudents` 2. **ตรวจสอบประเภทของเกรด** (เป็นตัวเลขหรือสตริง?) 3. **ใช้กฎของระบบการให้คะแนนที่เหมาะสม**: - สำหรับตัวเลข: ตรวจสอบว่าเกรด >= 3 - สำหรับสตริง: ตรวจสอบว่าเป็นหนึ่งในเกรดตัวอักษรที่ผ่าน 4. **เพิ่มเกรดที่ผ่าน** ลงในอาร์เรย์ `studentsWhoPass` ### เทคนิคการเขียนโค้ดที่มีประโยชน์ ใช้แนวคิด JavaScript เหล่านี้จากบทเรียน: - **ตัวดำเนินการ typeof**: `typeof grade === 'number'` เพื่อตรวจสอบว่าเป็นเกรดตัวเลข - **ตัวดำเนินการเปรียบเทียบ**: `>=` เพื่อเปรียบเทียบเกรดตัวเลข - **ตัวดำเนินการเชิงตรรกะ**: `||` เพื่อตรวจสอบเงื่อนไขเกรดตัวอักษรหลายตัว - **คำสั่ง if...else**: เพื่อจัดการระบบการให้คะแนนที่แตกต่างกัน - **เมธอดของอาร์เรย์**: `.push()` เพื่อเพิ่มเกรดที่ผ่านลงในอาร์เรย์ใหม่ ### ผลลัพธ์ที่คาดหวัง เมื่อคุณรันโปรแกรมของคุณ `studentsWhoPass` ควรมี: `['A', 'B-', 4, 5]` **เหตุผลที่เกรดเหล่านี้ผ่าน:** - `'A'` และ `'B-'` เป็นเกรดตัวอักษรที่ผ่าน (เกรดตัวอักษรทั้งหมดในระบบนี้ถือว่าผ่าน) - `4` และ `5` เป็นเกรดตัวเลข >= 3 - `1` และ `2` ไม่ผ่านเพราะเป็นเกรดตัวเลข < 3 ## การทดสอบโซลูชันของคุณ ทดสอบโค้ดของคุณด้วยสถานการณ์ต่างๆ: ```javascript // Test with different grade combinations let testGrades1 = ['A-', 3, 'C', 1, 'B']; let testGrades2 = [5, 'A', 2, 'C-', 4]; // Your solution should work with any combination of valid grades ``` ## ความท้าทายเพิ่มเติม เมื่อคุณทำงานพื้นฐานเสร็จแล้ว ลองทำส่วนขยายเหล่านี้: 1. **เพิ่มการตรวจสอบความถูกต้อง**: ตรวจสอบเกรดที่ไม่ถูกต้อง (เช่น ตัวเลขติดลบหรือตัวอักษรที่ไม่ถูกต้อง) 2. **นับสถิติ**: คำนวณจำนวนนักเรียนที่ผ่านและไม่ผ่าน 3. **การแปลงเกรด**: แปลงเกรดทั้งหมดเป็นระบบตัวเลขเดียว (A=5, B=4, C=3 เป็นต้น) ## เกณฑ์การประเมิน | เกณฑ์ | ยอดเยี่ยม (4) | ดี (3) | พอใช้ (2) | เริ่มต้น (1) | |-------|---------------|--------|-----------|---------------| | **การทำงาน** | โปรแกรมสามารถระบุเกรดที่ผ่านทั้งหมดจากทั้งสองระบบได้อย่างถูกต้อง | โปรแกรมทำงานได้ดีแต่มีปัญหาเล็กน้อยหรือกรณีขอบ | โปรแกรมทำงานบางส่วนแต่มีข้อผิดพลาดทางตรรกะ | โปรแกรมมีข้อผิดพลาดสำคัญหรือไม่สามารถรันได้ | | **โครงสร้างโค้ด** | โค้ดสะอาดและจัดระเบียบดี พร้อมตรรกะ if...else ที่เหมาะสม | โครงสร้างดีพร้อมคำสั่งเงื่อนไขที่เหมาะสม | โครงสร้างพอใช้แต่มีปัญหาในการจัดระเบียบ | โครงสร้างไม่ดีและตรรกะยากต่อการติดตาม | | **การใช้แนวคิด** | ใช้ตัวดำเนินการเปรียบเทียบ ตัวดำเนินการเชิงตรรกะ และคำสั่งเงื่อนไขได้อย่างมีประสิทธิภาพ | ใช้แนวคิดจากบทเรียนได้ดีแต่มีช่องว่างเล็กน้อย | ใช้แนวคิดจากบทเรียนบางส่วนแต่ขาดองค์ประกอบสำคัญ | ใช้แนวคิดจากบทเรียนน้อยมาก | | **การแก้ปัญหา** | แสดงความเข้าใจปัญหาอย่างชัดเจนและมีวิธีแก้ปัญหาที่สง่างาม | วิธีแก้ปัญหาดีพร้อมตรรกะที่มั่นคง | วิธีแก้ปัญหาเพียงพอแต่มีความสับสนบางส่วน | วิธีแก้ปัญหาไม่ชัดเจนและไม่แสดงความเข้าใจ | ## แนวทางการส่งงาน 1. **ทดสอบโค้ดของคุณ** อย่างละเอียดด้วยตัวอย่างที่ให้มา 2. **เพิ่มคอมเมนต์** อธิบายตรรกะของคุณ โดยเฉพาะสำหรับคำสั่งเงื่อนไข 3. **ตรวจสอบผลลัพธ์** ให้ตรงกับผลลัพธ์ที่คาดหวัง: `['A', 'B-', 4, 5]` 4. **พิจารณากรณีขอบ** เช่น อาร์เรย์ว่างหรือประเภทข้อมูลที่ไม่คาดคิด > 💡 **เคล็ดลับ**: เริ่มต้นง่ายๆ! ทำให้ฟังก์ชันพื้นฐานทำงานได้ก่อน แล้วจึงเพิ่มฟีเจอร์ที่ซับซ้อนมากขึ้น อย่าลืมว่าเป้าหมายคือการฝึกตรรกะการตัดสินใจด้วยเครื่องมือที่คุณเรียนรู้ในบทเรียนนี้ --- **ข้อจำกัดความรับผิดชอบ**: เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้