คลังเก็บรวบรวมงานปฏิบัติการ (Labs) และการบ้าน (Homeworks) ของวิชา ENGCE117 ซึ่งเป็นวิชาที่ครอบคลุมการเขียนโปรแกรมภาษา C/C++ ตั้งแต่ระดับพื้นฐาน ไปจนถึงโครงสร้างข้อมูล (Data Structures) และการออกแบบอัลกอริทึม (Algorithms) ที่สำคัญในสาขาวิศวกรรมคอมพิวเตอร์
โปรเจกต์นี้แบ่งออกเป็น 2 ส่วนหลัก ๆ ดังนี้:
Lab/: ประกอบด้วยไฟล์งานปฏิบัติการในห้องเรียน (Lab1 ถึง Lab14) และแนวข้อสอบปฏิบัติปลายภาค (Final)Homework/: ประกอบด้วยการบ้านเพื่อทบทวนความรู้และฝึกฝนการเขียนโปรแกรมเพิ่มเติม (HW01 ถึง HW16)
| โฟลเดอร์ | หัวข้อ / อัลกอริทึมที่ศึกษา | รายละเอียด / คำอธิบาย |
|---|---|---|
| Lab1 | C++ Programming Basics | เรียนรู้โครงสร้างโปรแกรมภาษา C++ พื้นฐาน, การนำเข้า/แสดงผลข้อมูล (Input/Output) |
| Lab2 | Arrays & String Manipulation | การจัดการอาเรย์ 1 มิติ/2 มิติ และฟังก์ชันย้อนกลับข้อความ (String Reversal) |
| Lab3 | Structures (Struct) | การสร้างโครงสร้างข้อมูลแบบกำหนดเอง และการส่งค่าแบบ Pass by Value vs Pass by Pointer |
| Lab4 | Pointers & Linked List Nodes | การใช้ Pointer, Double Pointer (int **p) และโครงสร้างของ Node สำหรับ Linked List |
| Lab5 | Singly Linked List | การสร้าง ค้นหา แทรก และลบข้อมูลใน Singly Linked List (โครงสร้างข้อมูลแบบเชื่อมโยงทิศทางเดียว) |
| Lab6 | Doubly Linked List | การใช้งานโครงสร้างข้อมูลแบบ Linked List สองทิศทาง (แทรก/ลบข้อมูลหน้า-หลัง) |
| Lab7 | Circular Linked List | โครงสร้างข้อมูล Linked List แบบวงกลม |
| Lab8 | OOP & File Handling (CSV) | การสร้าง Class/Object ใน C++ และการอ่าน/ประมวลผลข้อมูลจากไฟล์ CSV (customer.csv) |
| Lab9 | Recursion & Math | พื้นฐานการเขียนโปรแกรมแบบเรียกซ้ำ (Recursion), การหาผลรวม และหอคอยฮานอย (Tower of Hanoi) |
| Lab10 | Sorting & Searching | การจัดเรียงข้อมูลแบบ Merge Sort และการค้นหาแบบ Binary Search บน dynamic array |
| Lab11 | Greedy Algorithm | การแก้ปัญหาหาส่วนต่างที่สั้นที่สุด (Dijkstra's Algorithm) และการประมาณการใน Knapsack Greedy |
| Lab12 | Dynamic Programming | การแก้ปัญหาการเลือกของใส่กระเป๋าแบบ 0/1 (0/1 Knapsack Problem) ด้วย Dynamic Programming |
| Lab13 | Backtracking | การค้นหาคำตอบที่ดีที่สุดของปัญหา Knapsack ด้วยวิธีค้นหาย้อนกลับ (Backtracking) |
| Lab14 | Numerical Methods | การหาค่ารากของสมการ (Root of Function) ด้วยวิธีแบ่งครึ่งช่วง (Bisection Method) แบบ Recursive |
| Final | Final Examination Practical | แนวข้อสอบและโจทย์ปฏิบัติจริงในการสอบปลายภาค เช่น Recursive Binary Search และการจัดการ Dynamic Array |
การบ้านในโปรเจกต์นี้ (ตั้งแต่ HW01 ถึง HW16) เป็นโจทย์ที่สอดคล้องกับ Lab ในแต่ละสัปดาห์ เพื่อเน้นการทำความเข้าใจด้วยตนเองและการวิเคราะห์ปัญหาด้วย Flowchart/Draw.io:
- HW01 - HW03: พื้นฐานลูป ตัวแปร และเงื่อนไขเบื้องต้นพร้อมการบันทึกภาพผลลัพธ์ (
Result.txt) และไฟล์ออกแบบอัลกอริทึม (.drawio) - HW04 - HW08: การจัดการ Struct, Pointer และการเริ่มต้นเขียน Linked List เบื้องต้น
- HW09 - HW12: การเขียนโปรแกรมโครงสร้างข้อมูลขั้นสูงและการออกแบบ Recursion
- HW13 - HW15: โจทย์ท้าทายเกี่ยวกับ Greedy Algorithm และ Dynamic Programming
- HW16: การเปรียบเทียบประสิทธิภาพการค้นหาข้อมูลระหว่าง Sequential Search (ค้นหาตามลำดับ) และ Binary Search (ค้นหาแบบแบ่งครึ่ง)
คุณจำเป็นต้องมี Compiler สำหรับภาษา C/C++ เช่น g++ (ผ่าน MinGW หรือ GCC บน Linux/macOS) เพื่อทำการคอมไพล์โปรแกรม
- เปิด Terminal หรือ Command Prompt
- นำทางเข้าสู่โฟลเดอร์ของไฟล์ที่ต้องการคอมไพล์ เช่น:
cd ENGCE117/Lab/Lab10 - สั่งคอมไพล์ด้วยคำสั่ง
g++:g++ lab10.cpp -o lab10
- รันโปรแกรม:
- Windows:
lab10.exe
- macOS / Linux:
./lab10
- Windows:
- ภาษาเขียนโปรแกรม: C / C++ (Standard ISO C++)
- IDE / Text Editor: Visual Studio Code (พร้อมไฟล์ตั้งค่าคอมไพล์ใน
.vscode) - การออกแบบ Flowchart: Draw.io (ไฟล์นามสกุล
.drawioสำหรับจำลองตรรกะการรันโปรแกรม)