You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/th/2-js-basics/3-making-decisions/assignment.md

118 lines
12 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ffe366b2d1f037b99fbadbe1dc81083d",
"translation_date": "2025-10-23T20:45:25+00:00",
"source_file": "2-js-basics/3-making-decisions/assignment.md",
"language_code": "th"
}
-->
# การตัดสินใจ: โปรแกรมประมวลผลเกรดนักเรียน
## วัตถุประสงค์การเรียนรู้
ในงานนี้ คุณจะได้ฝึกฝนแนวคิดเกี่ยวกับการตัดสินใจจากบทเรียนนี้ โดยการสร้างโปรแกรมที่ประมวลผลเกรดนักเรียนจากระบบการให้คะแนนที่แตกต่างกัน คุณจะใช้คำสั่ง `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) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้