อัลกอริทึม, การเขียนโปรแกรม, คอมไพเลอร์
แนะนำใหม่| English | ความหมาย |
|---|---|
| algorithm/ˈælɡərɪθəm/ | อัลกอริทึม |
| high-level language/haɪ ˈlevl ˈlæŋɡwɪdʒ/ | ภาษาขั้นสูง |
| compiler/kəmˈpaɪlə/ | คอมไพเลอร์ |
| syntax error/ˈsɪntæks ˈerə/ | ความผิดพลาดทางไวยากรณ์ |
| logic error/ˈlɒdʒɪk ˈerə/ | ความผิดพลาดทางตรรกะ |
การสร้างที่สะอาดก็อาจขายด้วยราคาผิดได้
- โปรแกรมร้านตั้งใจจะลดราคา 10% จากราคา 100 แต่คำนวณราคา * 10 / 100 เป็นจำนวนเงินที่ต้องจ่าย
- มันคำนวณจำนวนส่วนลด, 10, แทนที่จะเป็นราคาที่ลดแล้ว, 90 โค้ดสามารถคอมไพล์และรันได้โดยที่ยังใช้สูตรผิด
อัลกอริทึมคืออะไร?
- อัลกอริทึม คือ ชุดขั้นตอนที่มีจำกัดและเป็นลำดับ ที่แก้ปัญหาหนึ่งๆ สูตรทำอาหารเป็นอัลกอริทึม: ขั้นตอนที่ชัดเจนตามลำดับจนเสร็จสิ้น
- การเขียนโปรแกรมคือวิชาชีพในการแปลงอัลกอริทึมให้เป็นโค้ดที่คอมพิวเตอร์รัน สำหรับอัลกอริทึมจำกัดที่สอนในที่นี้ ทุกอินพุตที่ถูกต้องต้องนำไปสู่ผลลัพธ์หลังจากจำนวนขั้นตอนที่จำกัด โปรแกรมอาจรันบริการที่ดำเนินต่อไปได้; ไม่ใช่นำโปรแกรมทั้งหมดมาคำนวณที่สิ้นสุด
ภาษาโปรแกรม
- คอมพิวเตอร์รัน รหัสเครื่อง ( 0s และ 1s แบบดิบ ) — ซึ่งยากสำหรับมนุษย์ในการเขียน เราเขียนใน ภาษาสูง เช่น Java: อ่านง่าย 类似于英语
- โค้ด Java บอกว่า ทำอะไร; ตัวแปล会将之转化为机器指令。รายวิชานี้สอนการแก้ปัญหา ผ่าน Java
คอมไพเลอร์
- คอมไพลอร์ เช่น javac แปลงไฟล์ต้นฉบับ Java เป็นไฟล์คลาสและตรวจสอบไวยากรณ์ ประเภท และชื่อ Java 컴ไพล์เป็น 字节码, ซึ่ง Java Virtual Machine (JVM) จะรันต่อไป
- "เขียนครั้งเดียว รันได้ทุกที่": ไฟล์ class สามารถรันบนแพลตฟอร์มต่างๆ ด้วย JVM ที่รองรับและ libraries ที่จำเป็น; เวอร์ชันไฟล์ class ใหม่ต้องการ runtime ที่รองรับCompile errors (จับได้ก่อนรัน) แตกต่างจาก run-time errors (จับได้ขณะรัน)
อัลกอริทึมอธิบายได้ดีที่สุดว่าเป็น...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ขั้นตอนที่มีจำนวนจำกัดและเป็นลำดับและสิ้นสุด — นั่นคืออัลกอริทึม
คอมไพเลอร์ Java แปลงซอร์สโค้ดของคุณเป็น...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
JavaCompile เป็นไบต์โค้ด ซึ่ง JVM จะดำเนินการ
โปรแกรมที่CompileและRunได้แต่ให้คำตอบผิด มี...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ผลลัพธ์ผิดแม้Compileสะอาด = ข้อผิดพลาดทางตรรกะ
ข้อผิดพลาดทางไวยากรณ์ทำให้โปรแกรมJavaไม่สามารถCompileได้
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ไวยากรณ์ผิด → คอมไพเลอร์ปฏิเสธการสร้าง
หากโปรแกรมCompileได้โดยไม่มีความผิดพลาด จะรับประกันได้ว่าถูกต้อง
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คอมไพเลอร์ตรวจสอบไวยากรณ์ ประเภท และชื่อ แต่ไม่ได้กำหนดกฎธุรกิจที่มุ่งหมายหรือผลลัพธ์ที่ถูกต้อง
ข้อยกเว้นทุกชนิดที่รันได้จะหยุดโปรแกรมโดยจำเป็น แม้ว่ามีโค้ดจัดการข้อยกเว้นจับมันไว้ก็ตาม
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ข้อยกเว้นอาจถูกจับและจัดการ; ส่วนที่ไม่ถูกจับสามารถหยุดการทำงานได้
การดำเนินการใดที่throw ArithmeticException สำหรับตัวแปร int ที่มีค่า 0?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
การหารจำนวนเต็มด้วยศูนย์จะthrow; การหารdoubleด้วยศูนย์จะมีผลลัพธ์ตามมาตรฐาน IEEE floating-point
ประเภทของข้อผิดพลาด
- Syntax error (ข้อผิดพลาดด้านไวยากรณ์) ทำลายกฎการเขียนโค้ดของ Java — คอมไพเลอร์จะปฏิเสธการสร้างโปรแกรม Run-time error (ข้อผิดพลาดขณะรัน) เกิดขึ้นระหว่างการทำงาน; หากเกิด Exception ที่ไม่ถูกจัดการอาจทำให้โปรแกรมหยุดทำงาน การหารด้วยเลขจำนวนเต็มด้วยตัวแปรที่มีค่าเป็นศูนย์จะสร้าง ArithmeticException ส่วนการหารด้วยทศนิยมจะมีกฎที่แตกต่างออกไป
- ข้อผิดพลาดด้านตรรกะ รันปกติแต่ให้คำตอบที่ ผิด การดีบักคือการค้นหาและแก้ไขทั้งสามประเภทนี้
จากซอร์สโค้ดไปยังโปรแกรมที่กำลังทำงาน
ดูว่าซอร์สโค้ด Java กลายเป็นโปรแกรมที่ทำงานได้อย่างไร
โปรแกรมที่คอมไพล์ได้ไม่จำเป็นต้องถูกต้องเสมอไป คอมไพลอร์จับข้อผิดพลาดด้านไวยากรณ์และข้อผิดพลาดอื่นๆ ขณะคอมไพล์ รวมถึงข้อผิดพลาดประเภทและชื่อ ข้อผิดพลาดด้านตรรกะ — สูตรผิด เงื่อนไขผิด — สามารถคอมไพล์ได้อย่างสมบูรณ์และรันได้แต่จะให้ผลลัพธ์ที่ผิด ต้องทดสอบ ผลลัพธ์ ของอัลกอริทึมของคุณเสมอ ไม่ใช่แค่ตรวจสอบว่าสร้างสำเร็จหรือไม่
Match each defect to its category.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
The categories depend on when and how the defect is detected; successful compilation does not establish the intended result.
อัลกอริทึมเพื่อหาค่ามากที่สุดในสองเลข a และ b:
- ขั้นตอนที่ 1: ถ้า
a > b, คำตอบคือa - ขั้นตอนที่ 2: มิฉะนั้น, คำตอบคือ
b - มีจำนวนจำกัด, เรียงลำดับ, และจบเสมอ — เป็นอัลกอริทึมที่ถูกต้อง พร้อมเขียนเป็น Java
ขยายเหตุผลไปยังกรณีใหม่
- ตรวจสอบผลลัพธ์ส่วนลดกับกรณีKnown. สำหรับตัวอย่างนี้, 100 ควรให้ 90 และ 0 ควรให้ 0; รวมถึงอินพุตที่ไม่ใช่จำนวนเต็มภายใต้นโยบายการปัดเลขที่กำหนดไว้แทนการสันนิษฐานว่าการหารจำนวนเต็มคือคณิตศาสตร์ทศนิยม
- คอมไพลอร์ยังจับข้อผิดพลาดประเภทและชื่อไม่ได้มีเพียงข้อผิดพลาดเรื่องเครื่องหมายวรรคตอนเท่านั้น ในทางกลับกัน ข้อยกเว้นสามารถจัดการได้ระหว่างการดำเนินการ; การคอมไพล์ที่สะอาดไม่รับประกันผลลัพธ์ที่ตั้งใจไว้หรือการขาดข้อผิดพลาดขณะรัน
อัลกอริทึม คือชุดขั้นตอนที่มีจำนวนจำกัดและเรียงลำดับเพื่อแก้ปัญหา; การเขียนโปรแกรมแปลงมันให้เป็นโค้ด Java เป็น ภาษาสูง ที่ คอมไพเลอร์ แปลงเป็น bytecode สำหรับ JVM ระวัง syntax, run-time, และ logic errors — การคอมไพล์ที่สะอาดไม่ได้การันตีผลลัพธ์ที่ถูกต้อง