CORPAS C++ Online Randomized Problem Generator And Grading System Mr CORPAS C++ Online Randomized Problem Generator And Grading System Mr.Thongyos Songsat 523040500-4 Mr.Narin Kunaseth 523040511-9 Advisor Ph.D.Kornchawal Chaipah Department of Computer Engineering Faculty of Engineering Khon Kaen University
Introduction Motivation
Objective พัฒนาระบบสุ่มออกโจทย์ พัฒนาระบบตรวจโค้ดอัตโนมัติ พัฒนาระบบ Account&Statistic
Related Application JLab - JLAB is a Free-software Developed by Somchai Prasitjutrakul Over a 12 years of devolope from version 0.1 to version 9.13.03 (01/03/2012)
Problem Input code Compile
JLab ข้อดี -เหมาะแก่ผู้เริ่มต้นในการเขียนโปรแกรม Java เพราะแบบฝึกหัดไม่ยากจนเกินไป -ใช้งานง่าย มีสิ่งอำนวยความสะดวก(features) ที่ช่วยเหลือให้แก่ผู้ใช้งานระดับเริ่มต้น เช่น กำหนดบรรทัดที่ใช้เขียนโค้ด, แบบฝึกหัดแบ่งเป็นหัวข้อง่ายต่อการเลือกทำ ข้อเสีย -ต้องดาวน์โหลดโปรแกรมหลายโปรแกรมเพื่อเริ่มต้นใช้งาน เช่น J2SDK รุ่น 1.5 ขึ้นไป, JLab, Java 6 Help file
Pc^2 (PC-Square) -Pc^2 is a dynamic, distributed real-time system designed to manage and control Programming Contests. -Developed by Smir E. Ashoo, Troy Boudreau and Douglas A.Lane
Pc^2 (PC-Square)
Pc^2 (PC-Square) ข้อดี -สิ่งอำนวยความสะดวก(features) ที่ใช้ในการจัดการและควบคุมการแข่งขันการเขียนโปรแกรมมีหลากหลาย เช่น การควบคุมการสื่อสารระหว่างผู้เข้าแข่งขันกับกรรมการหรือผู้ตัดสิน การกำหนดสิทธิต่างๆสำหรับผู้ใช้ ข้อเสีย -โปรแกรมถูกออกแบบให้ใช้เฉพาะกลุ่มคือ ใช้จัดการและควบคุมการแข่งขันเท่านั้น ไม่ได้มีสิ่งอำนวยความสะดวกอื่นๆเช่นสื่อการเรียนการสอน และ แบบฝึกหัดระดับเบื้องต้น
UVa Online Judge UVa Online Judge is an online automated judge for programming problems Developed by Miguel Revilla Rodríguez and Ciriaco García de Celis Created in 1995
UVa Online Judge Submit Problem
Wrong Result Correct Result
UVa Online Judge ข้อดี -สะดวกและใช้งานได้ง่ายต้องการเพียง Web Browser -สามารถแก้ปัญหาได้โดยใช้ได้ถึง 4 ภาษา ได้แก่ ANSI C, Java, C++, Pascal -มีการจัดเก็บสถิติของผู้ใช้ เช่น จำนวนปัญหาที่ได้ทำ จำนวนครั้งที่ส่งปัญหา จำนวนครั้งที่ทำถูกและผิด ข้อเสีย -โจทย์แบบฝึกหัดไม่เหมาะแก่ผู้ใช้ระดับเริ่มต้น เพราะโจทย์นำมาจากการแข่งขัน ACM-ICPC -ผลลัพธ์ที่ส่งมาให้ทางอีเมล์ถ้าหากทำผิด ไม่สามารถบอกได้ว่าผิดตรงส่วนไหน เพราะอะไร ทำให้ผู้ใช้ไม่สามารถรับทราบถึงปัญหา
Design Use Case Diagram Design & Develop Design Use Case Diagram
User Interface
User Interface
แผนงานที่ได้ดำเนินการไปแล้ว ทำการสร้างหน้าต่างส่วนต่อประสานกับผู้ใช้(User Interface) มี menu ต่างๆดังนี้ Lesson, Exercise, Guideline, About us บนเว็บโฮสติ้ง(Web Hosting)ที่ได้ถูกกำหนดมาให้คือ www.sooksala.com/corpas ได้ตัวอย่างดังรูป
ภาพทางซ้ายมือเป็นรูปแบบในส่วนของ “การเขียนโค้ด(Editor Text) การรับไฟล์ input code และการ Compile&Run” ภาพทางขวามือเป็นรูปแบบในส่วนของ “Lesson”
ภาพทางซ้ายมือเป็นรูปแบบในส่วนของ “Guide line” ภาพทางขวามือเป็นรูปแบบในส่วนของ “About us”
แผนงานที่ได้ดำเนินการไปแล้ว วิธีประมวลผล(Compile&Run)ภาษา C++ ผ่านทาง Web Application โดยขั้นตอนการทำงานของการประมวลผลภาษา C++ ผ่านทาง Web Application จะแบ่งเป็น 3 ขั้นตอนดังนี้ 1. ใช้ PHP ในการรับไฟล์ที่เป็นโค้ด(.cpp) 2. ใช้คำสั่ง exec แล้วตามด้วยคำสั่งที่ต้องการให้พิมพ์บน command promt ของ server ที่เป็น linux ดังนี้ exec(‘g++ /ชื่อ path ที่ใช้เก็บไฟล์/ชื่อไฟล์.cpp’) 3.นำ output ที่ได้มาแสดงออกบนเว็บเพจ ซึ่งผลที่ได้คือ ผลรันของโค้ด หรือ ข้อผิดพลาดต่างๆที่เกิดจากการ compile ไม่ผ่าน
<form action='upload <form action='upload.php' method='POST' ENCTYPE='multipart/form-data'> <input type='file' name='f'><input type='submit'> </form> <?php $f = './'.$_FILES['f']['name'];if(move_uploaded_file($_FILES['f']['tmp_name'], $f))?> <? exec('g++ test.cpp 2>&1', $output); $output = implode("</br>", $output); print_r($output); exec('./a.out 2>&1',$output2); $output2 = implode("</br>", $output2); print_r($output2); ?> โค้ด php ที่ใช้ในการส่งคำสั่ง command promt ไปยังเครื่องที่เป็น linux พร้อมทั้งนำค่า output ที่ได้กลับมาแสดงบน webpage
วิธีประมวลผล(Compile&Run)ภาษา C++ ผ่านทาง Web Application ภาพทางซ้ายมือเป็นผลลัพธ์จากการรันโค้ดที่ถูกต้อง ภาพทางขวามือเป็นผลลัพธ์จากการรันโค้ดที่ไม่ถูกต้อง(มี SYSTAX ERROR)
แผนงานที่ได้ดำเนินการไปแล้ว ทำการพัฒนาฟังก์ชันที่จะใช้ในการตรวจสอบความถูกต้องของโค้ดภาษาซีพลัสพลัส(C++) โดยหลักการจะเป็นการรับค่าจากไฟล์ที่เป็นชุดตัวเลขที่ใช้ในการตรวจสอบ แล้วทำการรันโค้ดเพื่อเทียบผลลัพธ์กับโค้ดที่ถูกต้อง
แผนงานที่ได้ดำเนินการไปแล้ว ตัวอย่างของโค้ดที่มีการทำงานที่จะทำการรับค่าเข้ามา(input) กล่าวคือมีการ cin เข้ามานั่นเอง
แผนงานที่ได้ดำเนินการไปแล้ว ภาพทางซ้ายมือเป็นตัวอย่างของไฟล์ที่เป็น input ภาพทางขวามือเป็นผลจากการรันโค้ดและทำการรับค่าจากไฟล์ที่เป็น input
งานต่อไปที่จะดำเนินการ ออกแบบหน้าต่างส่วนประสานติดต่อกับผู้ใช้(User Interface) ให้สวยงาม สร้างระบบฐานข้อมูลและทำการเชื่อมต่อกับเว็บแอปพลิเคชันของตนเอง พัฒนาฟังก์ชันการตรวจโค้ดของภาษาซีพลัสพลัส(C++) ให้สมบูรณ์
Thank You