Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Slicker Algorithm หาพื้นที่ Polygon ใน C++ (ไม่ต้อง Triangulation)

    Slicker Algorithm (หรือ Shoelace Formula) คำนวณพื้นที่ polygon โดยตรงจากพิกัดจุดโหนด ไม่ต้องแยกเป็นสามเหลี่ยม สูตรคณิตศาสตร์ สำหรับ polygon ที่มีโหนด (x₀,y₀), (x₁,y₁), ..., (xₙ₋₁,yₙ₋₁) เรียงตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา: Area = ½ | Σ(xᵢ * yᵢ₊₁ - xᵢ₊₁ * yᵢ) | โดย i = 0 ถึง n-1 และ (xₙ, yₙ) = (x₀,

  2. ทดสอบการחתךของเส้นสองเส้นด้วย Above-Below Primitive ใน C++

    ใช้การทดสอบ Above-Below (หรือ Orientation Test) เพื่อตรวจสอบว่าเส้นสองเส้น intersect กันหรือไม่ โดยดูจากตำแหน่งปลายทางของเส้นหนึ่งเทียบกับอีกเส้นหนึ่ง หลักการ เส้นสองเส้น L1 (จุด p1, p2) และ L2 (จุด q1, q2) จะ intersect กันก็ต่อเมื่อ: ปลายทางของ L2 อยู่คนละด้านของ L1 (หนึ่ง above, หนึ่ง below) AND

  3. ตรวจสอบจุดอยู่ใน/นอกวงกลมที่กำหนดโดย 3 จุด ใน C++

    กำหนดวงกลมด้วย 3 จุดที่ไม่一直線 (non-collinear) แล้วตรวจสอบว่าจุดที่ 4 อยู่ภายใน นอก หรือบนวงกลม หลักการทางเรขาคณิต สมการวงกลมทั่วไป: (x - h)² + (y - k)² = r² โดยจุดศูนย์กลาง (h, k) และรัศมี r สามารถคำนวณจาก 3 จุดได้ สำหรับจุดทดสอบ (x, y) คำนวณค่า: s = (x - h)² + (y - k)² - r² s < 0 → จุดอยู่ ภายใน

  4. Gift Wrapping Algorithm (Jarvis March) หา Convex Hull ใน C++

    Gift Wrapping Algorithm (หรือ Jarvis March) เป็นอัลกอริทึมสำหรับหา Convex Hull (凸包) ของชุดจุดใน 2 มิติ โดยการ ห่อของขวัญ รอบจุดต่างๆ หลักการทำงาน หาจุดที่อยู่ซ้ายสุด (lowest x) เริ่มต้น จากจุดปัจจุบัน หาจุดถัดไปที่ทำมุม ซ้ายสุด (counter-clockwise) เท่าที่สุด ทำซ้ำจนกลับมาที่จุดเริ่มต้น Complexity:

  5. ความแตกต่างระหว่าง Namespace และ Class ใน C++

    namespace และ class เป็นคอนเซปต์ที่ต่างกันจริง แม้ทั้งคู่จะใช้จัดกลุ่มโค้ดได้ ความแตกต่างหลัก ด้านNamespaceClass ลักษณะกลุ่มชื่อ (name grouping)ชนิดข้อมูล (data type) สร้างอินสแตนซ์ได้ไหมไม่ได้ได้ (object) using directiveรองรับ (using namespace)ไม่รองรับ (ยกเว้น inheritance) Reopen ได้ไหมได้ (ข

  6. ความแตกต่างระหว่าง std::vector และ std::array ใน C++

    ทั้ง std::vector และ std::array เป็นคอนเทนเนอร์สำหรับเก็บลำดับข้อมูล แต่มีคุณสมบัติและกรณีใช้งานที่แตกต่างกันอย่างมีนัยสำคัญ ตารางเปรียบเทียบ คุณสมบัติstd::vectorstd::array ขนาดไดนามิก (ขยาย/หดได้)คงที่ (Fixed at compile-time) หน่วยความจำHeap allocationStack allocation (โดยปกติ) Overheadมี (poi

  7. คลาส std::array ใน C++: คู่มือครบถ้วนพร้อมตัวอย่าง

    std::array เป็นคอนเทนเนอร์ที่ห่อหุ้มอาร์เรย์แบบ C-style ให้มีอินเตอร์เฟซเหมือน STL containers รู้ขนาดของตัวเอง และมีประสิทธิภาพเท่าอาร์เรย์ดิบ สมาชิกฟังก์ชันหลัก ฟังก์ชันคำอธิบาย size()จำนวนองค์ประกอบ (คงที่) max_size()จำนวนองค์ประกอบสูงสุด (เท่ากับ size()) at(i)เข้าถึงพร้อม bounds checking (th

  8. สร้าง Expression Tree จาก Prefix Expression ใน C++

    Expression Tree เป็น Binary Tree ที่ใช้แสดงนิพจน์ทางคณิตศาสตร์ โดยโหนดภายใน (internal nodes) เป็นตัวดำเนินการ (operators) และโหนดใบ (leaf nodes) เป็นตัวถูกดำเนินการ (operands) อัลกอริทึมสร้างจาก Prefix อ่าน Prefix expression จากขวาไปซ้าย ถ้าเป็นตัวเลข (operand) → สร้างโหนดและ push เข้า stack ถ้าเป

  9. พิมพ์ตัวอักษรซ้ำ n ครั้งโดยไม่ใช้ลูป Recursion หรือ Goto ใน C++

    สามารถพิมพ์ตัวอักษรซ้ำหลายครั้งได้อย่างง่ายดายด้วยคอนสตรัคเตอร์ของคลาส std::string โดยไม่ต้องใช้ลูป Recursion หรือ Goto หลักการ std::string มีคอนสตรัคเตอร์ที่รับพารามิเตอร์ 2 ค่า: string(count, character) count: จำนวนครั้งที่ต้องการซ้ำ character: ตัวอักษรที่ต้องการพิมพ์ ตัวอย่างโค้ด 0) {

  10. คำนวณช่วงค่าของชนิดข้อมูล (Data Types) ใน C++ แบบโปรแกรม

    ใน C++ ชนิดข้อมูลแต่ละชนิดมีขนาดและช่วงค่าที่แตกต่างกัน สามารถคำนวณได้ด้วยโปรแกรมโดยใช้ sizeof และคณิตศาสตร์พื้นฐาน หลักการคำนวณ ขนาดในบิต = sizeof(type) * 8 Signed (มีเครื่องหมาย): ช่วงคือ -2^(n-1) ถึง 2^(n-1) - 1 Unsigned (ไม่มีเครื่องหมาย): ช่วงคือ 0 ถึง 2^n - 1 ตัวอย่างโค้ด #include <iost

  11. ทำไมควรหลีกเลี่ยง std::endl ใน C++: เหตุผลด้านประสิทธิภาพ

    หลายโปรแกรมเมอร์ใช้ std::endl เพื่อขึ้นบรรทัดใหม่ แต่ไม่รู้ว่ามันส่งผลต่อประสิทธิภาพอย่างรุนแรงเมื่อใช้กับปริมาณ I/O มาก ความแตกต่างระหว่าง std::endl และ \n คุณสมบัติstd::endl\n ขึ้นบรรทัดใหม่✓✓ Flush buffer✓ (ทุกครั้ง)✗ (ไม่บังคับ) ค่าใช้จ่ายสูง (system call)ต่ำ ทำไม Flush Buffer ถึงมีค่าใช

  12. การใช้ fork() และ wait() สำหรับควบคุมลำดับการทำงานของโปรเซส (Bottom-up) ใน C++

    ระบบเรียก fork() ใช้สร้างโปรเซสใหม่ (child process) จากโปรเซสเดิม (parent process) โดยคืนค่า 0 ให้โปรเซสลูก และคืนค่า PID ของลูกให้โปรเซสแม่ หลักการทำงานแบบ Bottom-up ตัวอย่างนี้สาธิตการสร้างโปรเซส 4 ตัว (1 แม่, 2 ลูก, 1 หลาน) และใช้ wait() ร่วมกับ sleep() เพื่อควบคุมให้โปรเซสทำงานเสร็จตามลำดับจากใ

  13. std::reference_wrapper ใน C++: การอ้างอิงที่คัดลอกและมอบหมายได้

    ใน C++ คลาสเทมเพลต std::reference_wrapper ช่วยให้สามารถห่อหุ้มอ้างอิง (reference) ไว้ในออบเจกต์ที่สามารถสร้างสำเนา (copy constructible) และมอบหมายค่า (copy assignable) ได้ ซึ่งเป็นสิ่งที่อ้างอิงทั่วไปทำไม่ได้โดยตรง คุณสมบัติหลัก อินสแตนซ์ของ std::reference_wrapper เป็นออบเจกต์ทั่วไป แต่สามารถแปลงเ

  14. โปรแกรมพิมพ์รูปพีระมิดและเพชรทรงกลมว่าง (Hollow Pyramid and Diamond Pattern) ใน C++

    ที่นี่เราจะดูวิธีสร้างรูปพีระมิดว่าง (hollow pyramid) และรูปเพชรทรงกลมว่าง (hollow diamond patterns) โดยใช้ C++ เราสามารถสร้างรูปพีระมิดทึบ (solid Pyramid patterns) ได้ง่ายมาก เพื่อทำให้ว่าง เราต้องเพิ่มเทคนิคเล็กน้อย พีระมิดว่าง (Hollow Pyramid) สำหรับพีระมิดที่บรรทัดแรก จะพิมพ์ดาวหนึ่งดวง และที่บ

  15. การคำนวณในกระบวนการพาเรนต์และชิลด์โดยใช้ fork() ใน C++

    ในส่วนนี้ เราจะดูวิธีใช้ fork() เพื่อสร้างกระบวนการลูก (child process) ใน C++ เรายังทำการคำนวณบางอย่างในแต่ละกระบวนการ ดังนั้น ในกระบวนการพาเรนต์ (parent process) เราจะหาผลรวมของตัวเลขคู่ทั้งหมดของอาร์เรย์ และภายในกระบวนการลูก (child process) เราจะนับผลรวมของตัวเลขคี่จากองค์ประกอบอาร์เรย์ เมื่อ for

  16. RTTI (Run-time type Information) ใน C++

    ในส่วนนี้ เราจะดูว่า RTTI (Runtime Type Information) ใน C++ คืออะไร ใน C++ RTTI เป็นกลไกที่เปิดเผยข้อมูลเกี่ยวกับชนิดข้อมูลของออบเจ็กต์ (objects datatype) ในขณะรันไทม์ ฟีเจอร์นี้สามารถใช้งานได้ก็ต่อเมื่อคลาสมีฟังก์ชันเสมือน (virtual function) อย่างน้อยหนึ่งฟังก์ชัน มันอนุญาตให้ชนิดของออบเจ็กต์ถูกกำ

  17. ไลบรารี Chrono ใน C++

    ในส่วนนี้ เราจะดูว่าไลบรารี Chrono ใน C++ คืออะไร ไลบรารี Chrono นี้ใช้สำหรับวันที่และเวลา ตัวจับเวลา (Timers) และนาฬิกา (clocks) แตกต่างกันไปในระบบต่างๆ ดังนั้น หากเราต้องการปรับปรุงความแม่นยำด้านเวลา เราสามารถใช้ไลบรารีนี้ได้ ในไลบรารีนี้ มันให้แนวคิดที่เป็นกลางด้านความแม่นยำ (precision-neutral c

  18. การทำงานของข้อยกเว้น (Exceptions) ใน C++

    ใน C++ การจัดการข้อยกเว้น (Exception Handling) เป็นกระบวนการสำหรับจัดการข้อผิดพลาดรันไทม์ (runtime errors) ข้อยกเว้น (Exception) เป็นเหตุการณ์ที่ถูกโยน (thrown) ในขณะรันไทม์ใน C++ ทุกข้อยกเว้นมาจากคลาส std::exception นี่คือข้อผิดพลาดรันไทม์ที่สามารถจัดการได้ มันพิมพ์ข้อความข้อยกเว้นและจบโปรแกรม หาก

  19. โปรแกรม C++ นับการกลับสลับ (Inversion) ในอาร์เรย์

    การนับการกลับสลับ (Count inversion) หมายถึงจำนวนการสลับที่จำเป็นเพื่อทำให้อาร์เรย์จัดเรียงแล้ว Inversion count = 0 เมื่ออาร์เรย์จัดเรียงแล้ว Inversion count = สูงสุด เมื่ออาร์เรย์จัดเรียงในลำดับย้อนกลับ มาพัฒนาโปรแกรม C++ เพื่อนับการกลับสลับในอาร์เรย์ อัลกอริทึม Begin ฟังก์ชัน CountInversionArray

  20. โปรแกรม C++ สำหรับการนำต้นไม้ค้นหาทวิภาคมาใช้งานโดยใช้รายการเชื่อมต่อ

    นี่คือโปรแกรม C++ สำหรับการนำต้นไม้ค้นหาทวิภาคมาใช้งานโดยใช้รายการเชื่อมต่อ (Linked Lists) ฟังก์ชันและ pseudocode อัลกอริทึม Begin รับโหนดของต้นไม้เป็นอินพุท สร้างโครงสร้าง nod เพื่อรับข้อมูล d, พอยน์เตอร์ซ้าย l และพอยน์เตอร์ขวา r เป็นอินพุท สร้างฟังก์ชัน create() เพื่อแทรกโหนดเข้าไปในต้นไม้:

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:45/301  20-คอมพิวเตอร์/Page Goto:1 39 40 41 42 43 44 45 46 47 48 49 50 51