[x] ปิดหน้าต่างนี้
Powered by ATOMYMAXSITE 2.5
บทเรียนออนไลน์โดยใช้กระบวนการทางเทคโนโลยี
ยินดีต้อนรับคุณ บุคคลทั่วไป  
ค้นหา   
บทเรียนออนไลน์
 










เอกสารประกอบการสอน


แนวคิดเชิงนามธรรม
อัลกอริทึมและภาษาคอมพิวเตอร์
การออกแบบอัลกอริทึมด้วยภาษาธรรมชาติ
 การออกแบบอัลกอริทึมด้วยรหัสเทียม
การออกแบบอัลกอริทึมด้วยผังงาน

กรณีศึกษาการออกแบบอัลกอริทึม





  
อัลกอริทึมเบื้องต้น  
 



     Algorithm คือ กระบวนการแก้ปัญหาที่สามารถอธิบายออกมาเป็นขั้นตอนที่ชัดเจน เมื่อนำเข้าอะไร แล้วจะต้องได้ผลลัพธ์เช่นไร  กระบวนการนี้ประกอบด้วยจะประกอบด้วย วิธีการเป็นขั้นๆ และมีส่วนที่ต้องทำแบบวนซำอีก จนกระทั่งเสร็จสิ้นการทำงาน 
     Algorithm ไม่ใช่คำตอบแต่เป็นชุดคำสั่งที่ทำให้ได้คำตอบ วิธีการในการอธิบาย Algorithm ได้แก่
     1. Natural Language อธิบายแบบใช้ภาษาที่เราสื่อสารกันทั่วไป
     2.Pseudocode อธิบายด้วยรหัสจำลองหรือรหัสเทียม
     3.Flowchart อธิบายด้วยแผนผัง
     การนำขั้นตอนวิธีไปใช้แก้ปัญหา ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่นเดียวกันตัวอย่างเช่น ในการวางแผนการใช้ทรัพยากรทางธุรกิจขององค์กร หรือ Enterprise Resource Planning (ERP) เพื่อให้เกิดการใช้ทรัพยากรอย่างมีประโยชน์สูงสุด ซึ่งจำเป็นต้องวางแผนอย่างเป็นระบบ เป็นขั้นตอน จึงจำเป็นต้องอาศัย Algorithm ด้วย เพื่อให้ทราบถึงขั้นตอนต่างๆ และสามารถตัดทอนขั้นตอนที่เกินความจำเป็น อีกทั้งยังสามารถปรับปรุง และเพิ่มเติมขั้นตอนใหม่ เข้าไปได้ ช่วยลดความสับสนขณะทำงานด้วย
1.หลักการเขียนอัลกอริทึม
     1.กระบวนการสำคัญเริ่มต้นที่จุดจุดเดียวในการมีจุดเริ่มต้นหลายที่จะทำให้กระบวนการวิธีสับสน จนในที่สุดอาจทำให้ผลลัพธ์ที่ได้ไม่ตรงกับความต้องการ หรืออาจทำให้อัลกอริทึมนั้นไม่สามารถทำงานได้เลย
     2.กำหนดการทำงานเป็นขั้นเป็นตอนอย่างชัดเจน การกำหนดอัลกอริทึมที่ดีควรมีขั้นตอนที่ชัดเจนไม่คลุมเครือ เสร็จจากขั้นตอนหนึ่ง ไปยังขั้นตอนที่สองมีเงื่อนไขการทำงานอย่างไร ควรกำหนดให้ชัดเจน
     3.การทำงานแต่ละขั้นตอนควรสั้นกระชับ เพราะการกำหนดขั้นตอนการทำงานให้สั้นกระชับนอกจากจะทำให้โปรแกรมทำงานได้รวดเร็วแล้ว ยังเป็นประโยชน์ต่อผู้อื่นที่มาพัฒนาโปรแกรมต่อด้วยเพราะสามารถศึกษาอัลกอริทึมจากโปรแกรมที่เขียนไว้ได้ง่าย
     4.ผลลัพธ์ในแต่ละขั้นตอนควรต่อเนื่องกัน การออกแบบขั้นตอนที่ดีนั้นผลลัพธ์จากขั้นตอนแรกควรเป็นข้อมูลสำหรับนำเข้า ให้กับข้อมูลในขั้นต่อไป ต่อเนื่องกันไปจนกระทั่งได้ผลลัพธ์ตามที่ต้องการ
     5.การออกแบบอัลกอริทึมที่ดี ควรออกแบบให้ครอบคลุมการทำงานในหลายรูปแบบ เช่น การออกแบบโดยคิดไว้ล่วงหน้าว่าหากผู้ใช้โปรแกรมป้อนข้อมูลเข้าผิดประเภท โปรแกรมจะมีการเตื่อนว่าผู้ใช้งานมีการใส่ข้อมูลที่ผิดประเภทโดยโปรแกรมจะไม่รับข้อมูลนั้น เพื่อให้ใส่ข้อมูลใหม่อีกครั้ง เพื่อป้องกันการเกิดจุดบกพร่องของโปรแกรมได้


2. ภาษาคอมพิวเตอร์
         ภาษาคอมพิวเตอร์คือโปรแกรมหรือชุดคำสั่งที่โปรแกรมเมอร์เขียนเพื่อใช้สั่งงานตามรูปแบบและโครงสร้างของภาษา ซึ่งแบ่งออกเป็น 5 ยุค ดังนี้


          2.1  ภาษาเครื่อง (Machine Language

          ภาษาคอมพิวเตอร์ คือภาษาเครื่อง (Machine Language) ซึ่งเป็นภาษาระดับต่ำที่สุด ประกอบด้วยเลขฐานสองคือ 0 และ 1 ซึ่งจะสัมพันธ์กับการเปิด (On) และ การปิด (Off) ของสัญญาณไฟฟ้า ภายในเครื่องคอมพิวเตอร์แทนข้อมูล คำสั่งต่างๆ จะเป็นภาษาที่ขึ้นอยู่กับชนิดของเครื่องคอมพิวเตอร์ หรือหน่วยประมวลผลที่ใช้ แต่ละเครื่องก็จะมีรูปแบบของคำสั่ง เฉพาะ ซึ่งนักคำนวณและนักเขียนโปรแกรมต้องรู้จักวิธีที่จะรวมตัวเลขเพื่อแทนคำสั่งต่าง ๆ ทำให้การเขียนโปรแกรมยุ่งยากมาก 
           เครื่องคอมพิวเตอร์แต่ละประเภทจะมีภาษาเครื่องที่เป็นของตนเอง ไม่สามารถนำภาษาเครื่องที่ใช้กับเครื่องประเภทหนึ่ง ไปใช้กับเครื่องประเภทอื่นได้ เนื่องจากแต่ละระบบก็จะมีชุดคำสั่งของภาษาเครื่องที่แตกต่างกันออกไป เป็นลักษณะของภาษาที่มีพัฒนาการนั้นขึ้นอยู่กับเครื่อง (Machine Dependent) 
 
           2.2 ภาษาแอสเซมบลี (Assembly Language) 
            เป็นภาษาที่ใช้ตัวอักษรในภาษาอังกฤษมาแทนคำสั่งที่เป็นเลขฐานสอง และเรียกอักษรสัญลักษณ์นี้ว่าสัญลักษณ์นีโมนิค (mnemonic codes) เพื่อให้ง่ายต่อการเขียนและการจดจำมากกว่าภาษาเครื่อง จัดภาษาแอสเซมบลีนี้เป็นภาษาระดับต่ำ ตัวอย่างเช่น มีการใช้สัญลักษณ์ต่อไปนี้ 
A  มาจาก  Add  หมายถึงการบวก 
S  มาจาก  Subtract  หมายถึงการลบ 
C  มาจาก  Compare  หมายถึงการเปรียบเทียบ 
MP  มาจาก  Multiply  หมายถึง การคูณ 
ST  มาจาก  Store  หมายถึง การเก็บข้อมูลไว้ในความจำ เป็นต้น

     ทำให้นักเขียนโปรแกรมสามารถเขียนโปรแกรมได้ สะดวกสบายมากขึ้น เนื่องจากไม่ต้องจดจำเลข 0 และ 1 เลขฐานสอง


      การแปลโปรแกรมภาษาแอสเซมบลี ให้เป็นภาษาเครื่องเพื่อให้คอมพิวเตอร์สามารถทำงานตามคำสั่งในโปรแกรมได้ การแปลภาษาแอสเซมบลี เป็นภาษาเครื่อง มีตัวแปลภาษาแอสเซมบลี่เรียกว่า แอสเซมเบลอร์ (Assembler) เป็นตัวแปล ซึ่งภาษาแอสเซมบลี 1 คำสั่งแปลเป็นภาษาเครื่อง 1 คำสั่งเช่นกัน ดังนั้น ถ้าเขียนโปรแกรม ภาษาแอสเซมบลี 10 คำสั่ง จะถูกแปล เป็นภาษาเครื่อง 10 คำสั่งเช่นกัน จึงเห็นได้ว่า ภาษาแอสเซมบลี มีลักษณะที่เหมือนกับภาษาเครื่อง คือ เป็นภาษาที่ขึ้นอยู่กับเครื่อง 

         โปรแกรมที่เขียนด้วยแอสเซมบลี โปรแกรมเดียวกันไปใช้ในเครื่องต่างชนิดกันได้ และนอกจากนี้ผู้ที่ จะเขียนโปรแกรม ภาษาแอสเซมบลีได้ จะต้องมีความรู้ความเข้าใจ ในเรื่องของฮาร์ดแวร์เป็นอย่างดี เนื่องจากจะต้อง ยุ่งเกี่ยวกับ การใช้งานหน่วยความจำ ที่เป็นรีจิสเตอร์ภายใน จึงใช้เขียนในงาน ที่ต้องการความเร็ว ในการทำงานสูง เช่น งานทางด้านกราฟิก หรืองานพัฒนาซอฟแวร์ ระบบต่างๆ ถึงแม้ว่าภาษานี้จะง่ายกว่าการเขียนด้วยภาษาเครื่อง แต่ก็ยังถือว่าเป็นภาษาชั้นต่ำ ที่ยังยากต่อการเขียน และการเรียนรู้ให้เข้าใจได้ดี สำหรับผู้ที่ไม่มีความรู้เกี่ยวกับ ฮาร์ดแวร์เท่าใดนัก

           2.3 ภาษาชั้นสูง (High – level Language) 
           ภาษารุ่นที่ 3 (3rd Generation Language หรือ 3GLs) ภาษาสร้างขึ้นมาให้สามารถเขียน และอ่านโปรแกรมได้ง่ายขึ้น มีลักษณะเหมือนภาษาอังกฤษทั่ว ๆ ไป ผู้เขียนโปรแกรม ไม่ต้องมีความรู้เกี่ยวกับ ระบบฮาร์ดแวร์แต่อย่างใด ตัวอย่างของภาษาประเภทนี้ได้แก่ ภาษาฟอร์แทรน(Fortran) , โคบอล (Cobol) , เบสิก (Basic) , ปาสคาล (Pascal) , ซี(C) , เอดา(ADA) เป็นต้น 
           โปรแกรมที่ถูกเขียนด้วยภาษาประเภทนี้จะทำงานได้เมื่อมีการแปลงให้เป็นภาษาเครื่องเสียก่อน ซึ่งวิธีการแปลงจากภาษาชั้นสูง ให้เป็นภาษาเครื่องนั้น จะทำได้โดยใช้โปรแกรมที่เรียกว่า คอมไพเลอร์(Compiler) หรือ  อินเตอร์พรีเตอร์ (Interpreter)  อย่างใดอย่างหนึ่ง โดยภาษาชั้นสูงแต่ละภาษาจะมีตัวแปลภาษาเฉพาะเป็นของตัวเอง ดังนั้นจึงไม่สามารถนำตัวแปลของภาษาหนึ่งไปใช้กับอีกภาษาหนึ่งได้ ตัวอย่างเช่น ภาษาโคบอลจะมีตัวแปลภาษาที่เรียกว่า โคบอลคอมไพเลอร์ ไม่สามารถนำคอมไพเลอร์ของภาษาโคบอลนี้ไปใช้แปลภาษาปาสคาลได้ เป็นต้น

            การเขียนโปรแกรมด้วยภาษาขั้นสูงนั้นนอกจากจะให้ความสะดวกแก่ผู้เขียนเป็นอันมากแล้ว ผู้เขียนแทบจะไม่ต้อง มีความรู้ เกี่ยวกับการทำงานของ ระบบฮาร์ดแวร์ก็สามารถเขียนโปรแกรมสั่งให้เครื่องคอมพิวเตอร์ทำงานได้ นอกจากนี้ยัง มีข้อดีอีกอย่างคือ สามารถนำโปรแกรม ไปใช้งานบนเครื่องใดก็ได้ คือมีลักษณะที่ไม่ขึ้นอยู่กับเครื่อง (Hardware Independent) เพียงแต่ต้องทำการแปลโปรแกรมใหม่เท่านั้น แต่อย่างไรก็ตามภาษาเครื่อง ที่ได้จากการแปลภาษาชั้นสูงนี้ อาจเยิ่นเย้อ และไม่มีประสิทธิภาพ เท่ากับการเขียนด้วยภาษาเครื่องหรือแอสเซมบลีโดยตรง 

             ภาษารุ่นที่ 3 นี้ ส่วนใหญ่จะจัดอยู่ในกลุ่มของ ภาษามีแบบแผน (Procedural Language) เนื่องจาก ลักษณะการเขียนโปรแกรม จะมีโครงสร้างแบบแผนที่เป็นระเบียบ งานทุกอย่างผู้เขียนโปรแกรม ต้องเขียนโปรแกรมควบคุ การทำงานเองทั้งหมด และต้องเขียนคำสั่งการทำงานที่เป็นขั้นเป็นตอน ไม่ว่าจะเป็นการสร้างแบบฟอร์มกรอกข้อมูล การประมวลผล หรือการสร้างรายงาน ซึ่งโปรแกรมที่เขียนจะค่อนข้างซับซ้อน และใช้เวลาในการพัฒนาค่อนข้างมาก

         2.4 ภาษาขั้นสูงมาก (Very high-level Language) 
        สามารถเรียกได้อีกอย่างว่า ภาษาในรุ่นที่ 4 (4GLs : Fourth-Generation Languages) ภาษานี้เป็นภาษาที่อยู่ในระดับสูงกว่า ภาษารุ่นที่ 3 มีลักษณะของภาษาที่เป็นธรรมชาติ คล้ายกับภาษาพูดของมนุษย์ ช่วยในเรื่องของ การสร้างแบบฟอร์มบนหน้าจอ เพื่อจัดการเกี่ยวกับข้อมูล รวมไปถึงการออกรายงาน ซึ่งจะมีการจัดการที่ง่ายมาก ไม่ยุ่งยากเหมือนภาษารุ่นที่ 3 ตัวอย่างของภาษาในรุ่นที่ 4 ได้แก่ Informix-4GL , Focus , Sybase , InGres เป็นต้น

     ภาษาในรุ่นที่ 4 เป็นภาษาที่ผู้เขียนโปรแกรมเพียงแต่บอกว่าต้องการอะไร (What) แต่ไม่ต้องบอกคอมพิวเตอร์ว่า ให้ทำอย่างไร (How) แต่ภาษาในรุ่นที่3 ผู้เขียนโปรแกรมต้องบอกคอมพิวเตอร์ทั้งหมดว่าต้องการทำอะไร และต้องบอกด้วย ว่าต้องทำอย่างไร ซึ่งจะต้องสั่งให้คอมพิวเตอร์ ทำงานเป็นขั้นตอน และคอมพิวเตอร์ก็จะมีหน้าที่ทำงานตามที่ผู้เขียนโปรแกรม สั่งนั่นเอง

             2.5 ภาษาธรรมชาติ (Natural Language)     
             ภาษาในยุคที่ 5 มีรูปแบบเป็นภาษาธรรมชาติ สามารถสั่งงานคอมพิวเตอร์ได้โดยใช้ภาษามนุษย์โดยตรง คำสั่งที่มนุษย์ป้อนเข้าไปในคอมพิวเตอร์ จะอยู่ในรูปของภาษาพูดมนุษย์ ซึ่งอาจมีรูปแบบที่ไม่แน่นอนตายตัว แต่คอมพิวเตอร์ก็สามารถแปลคำสั่งเหล่านั้นให้อยู่ ในรูปแบบที่คอมพิวเตอร์สามารถเข้าใจคำสั่งได้ ถ้าคำสั่งใดไม่ชัดเจน  จะมีการถามกลับ เพื่อให้เข้าใจคำสั่งได้อย่างถูกต้อง 
             ภาษาธรรมชาติ ถูกสร้างขึ้นมาจากเทคโนโลยีทางด้านระบบผู้เชี่ยวชาญ (Expert System) เป็นงานที่อยู่ในสาขา ปัญญาประดิษฐ์ (Artificial Intelligence)   การที่พยายามทำให้คอมพิวเตอร์ เปรียบเสมือนกับเป็นผู้เชี่ยวชาญคนหนึ่ง ที่สามารถคิด และตัดสินใจ ได้เช่นเดียวกับมนุษย์ คอมพิวเตอร์สามารถตอบคำถามของมนุษย์ได้อย่างถูกต้อง พร้อมทั้งมีข้อแนะนำต่างๆ เพื่อช่วยในการตัดสินใจของมนุษย์ได้ ระบบผู้เชี่ยวชาญใช้กับงานเฉพาะด้านใดด้านหนึ่ง เช่นในด้านการแพทย์ ในการพยากรณ์อากาศ ในการวิเคราะห์ทางเคมี การลงทุน ฯลฯ ซึ่งในการนี้จะต้องมีการเก็บรวบรวมข้อมูล และข่าวสารจากผู้เชี่ยวชาญเฉพาะด้าน และแปลงให้อยู่ในรูปของกฏเกณฑ์ ข้อความจริงต่าง ๆ เก็บไว้ในระบบฐานข้อมูล ของผู้เชี่ยวชาญ เรียกว่าฐานข้อมูลความรู้ (Knowledge Base)   ซึ่งจะต้องเก็บข้อมูลที่มีอยู่เป็นจำนวนมหาศาล และให้ผู้ใช้สามารถใช้กับภาษาธรรมชาติ ในการดึงข้อมูลจากฐานข้อมูลความรู้นี้ได้เราจึงอาจเรียกระบบผู้เชี่ยวชาญนี้ได้ อีกอย่างว่า ระบบฐานความรู้ (Knowledge Base System)




บทเรียนออนไลน์ ครูวิศณุ เจริญราช Created by Wissanu Charoenrach