ขั้นตอนการทำงานของอัลกอริทึม


ขั้นตอนของอัลกอริทึม

            เครื่องมือที่ใช้แสดงขั้นตอนการทำงาน (Algorithm)  ของระบบงานใดๆในงานคอมพิวเตอร์มีหลายอย่างและเครื่องมือที่นิยมใช้กันมากก็คือ ผังงานโครงสร้าง (Structured  Flowchart)  และคำสั่งเทียม(Pseudo  Code)  ซึ่งเครื่องมือที่ใช้เหล่านี้ผู้พัฒนาระบบงาน  สามารถนำไปแปลงเป็นชุดคำสั่งตามรูปแบบไวยากรณ์(Syntax)  ของภาษาคอมพิวเตอร์ภาษาใดๆก็ได้เพื่อพัฒนาระบบงานขึ้นมา
1.1  ผังงานโครงสร้าง (Structured  Flowchart)
            จะเป็นเครื่องมือ(Tools)  ที่ใช้อธิบายรายละเอียดการทำงานตามขั้นตอนการทำงาน(Algorithm)  โดยใช้ สัญลักษณ์(Symbol)แทนคำสั่ง  ใช้ข้อความ(Statement)ในสัญลักษณ์แทนตัวแปรและตัวดำเนินการทางการคำนวณและการเปรียบเทียบ  อีกทั้งยังแสดงความสัมพันธ์ของการทำงานต่างๆอย่างเป็นลำดับขั้นตอนโดยสามารถแบ่งลักษณะของความสัมพันธ์เป็นรูปแบบต่างๆได้แก่  การทำงานแบบมีลำดับ  การทำงานแบบให้เลือกทำและการทำงานแบบทำซ้ำในเงื่อนไขต่างๆ  โดยที่สามารถสรุปรายละเอียดของสัญลักษณ์ที่สำคัญและที่นิยมใช้งานบ่อยๆได้ดังนี้










5.3 อธิบายหลักการทำงานของโปรแกรม

5.3.1. ส่วนของอุปกรณ์ RFID  ในขณะนี้ยังเป็นการพัฒนาเพียงในส่วนของ  dll ที่ใช้ในการติดต่อระว่างเครื่องคอมพิวเตอร์เนื่องจาก dll ที่ให้มาพร้อมเครื่องไม่สะดวกกับการใช้งาน จึงได้มีการพัฒนาขึ้นใหม่ให้เข้ากับการใช้งานในส่วนของการพัฒนาด้านการแสดงผลของแผนผังอาคาร   เหลือการพัฒนาในส่วนของการส่งข้อมูลโดยใช้ระบบ LAN 






/// <summary>
        /// กำหนดค่ารูปแบบของ Tag ที่ใช้งาน
        /// โดยชนิดของ Tag
        /// SIC7771 ให้ใช้ค่า 71
        /// SIC7960 ให้ใช้ค่า 60
        /// SIC7845 ให้ใช้ค่า 45
        /// SIC7845X ให้ใช้ค่า 46
        /// </summary>
        /// <param name="SICTagType"></param>
        /// <returns></returns>
        public static int SIC_Tag_Type(byte SICTagType)
        {
            SendLen = 2;
            SendBuff[0] = 0xC1;           
            SendBuff[1] = SICTagType;
            return DUAL_Polling(Port, Address,ref SendBuff[0], SendLen,ref RecvBuff[0]);
        }









/// <summary>
        /// สั่งงานให้ Reader เล่นเสียง
        /// โดย 0 -> ปิดเสียง
        ///    1 -> ดังหนึ่งครั้ง (สั้น)
        ///    2 -> ดังสองครั้ง
        ///    3 -> ดังหนึ่งครั้ง (ยาว)
        /// </summary>
        /// <param name="Buzzer"></param>
        /// <returns></returns>
        public static int SIC_Buzzer(byte Buzzer)
        {
            SendLen = 2;
            SendBuff[0] = 0xC3;
            SendBuff[1] = Buzzer;
            return DUAL_Polling(Port, Address,ref SendBuff[0], SendLen,ref RecvBuff[0]);
          }






/// <summary>
        /// ตั้งค่า Data Rate, Encode, Packet
        /// โดย DataRate RF/32 -> 1, RF/64 -> 0 (แต่ยังไม่สามารถใช้งานได้ ในเวอร์ชั่นนี้)
        ///    Encode   Manchester -> 0, Bi-Phase -> 1
        ///    Packet   ST-E5551 -> 0, EM4001 -> 1, ISO11784 -> 2
        ///    คำแนะนำ     สำหรับ SIC7771/SIC7960 ให้ใช้ค่า Packet เป็น 0 และ Encode เป็น 0 หรือ 1
        ///    คำแนะนำ     สำหรับ Animal Tag ให้ใช้ค่า Packet เป็น 2 และ Encode เป็น 1
        /// </summary>
        /// <param name="DRate"></param>
        /// <param name="Coding"></param>
        /// <returns></returns>
        public static int SIC_Configure_Codec(byte DRate, byte Coding)
        {
            SendLen = 4;
            SendBuff[0] = 0xC6;
            SendBuff[1] = DRate;
            SendBuff[2] = Coding;
            SendBuff[3] = 0;    // Packet = 0 -> สำหรับ SIC7771 / SIC7960
            return DUAL_Polling(Port, Address,ref SendBuff[0], SendLen,ref RecvBuff[0]);
        }












/// <summary>
        /// อ่านข้อมูลใน Block ที่กำหนด
        /// ข้อมูลมีขนาด 4 Bytes
        /// และคำสั่งนี้ไม่สามารถใช้งานได้ หากอยู่ใน Password Mode
        /// </summary>
        /// <param name="blk"></param>
        /// <returns></returns>
        public static int SIC_Direct_Access(byte blk)
        {
            SendLen = 2;
            SendBuff[0] = 0xE3;
            SendBuff[1] = blk;
            return DUAL_Polling(Port, Address,ref SendBuff[0], SendLen,ref RecvBuff[0]);
        }









/// <summary>
        /// เขียนข้อมูลใน Block แบบ Standard Write
        /// </summary>
        /// <param name="write_mode"></param>
        /// <param name="blk"></param>
        /// <param name="data_0"></param>
        /// <param name="data_1"></param>
        /// <param name="data_2"></param>
        /// <param name="data_3"></param>
        /// <param name="onField"></param>
        /// <param name="lck"></param>
        /// <param name="pwd_0"></param>
        /// <param name="pwd_1"></param>
        /// <param name="pwd_2"></param>
        /// <param name="pwd_3"></param>
        /// <returns></returns>
        public static int SIC_Write(string blk, string data_0, string data_1, string data_2, string data_3)
        {
            SendLen = 8;
            SendBuff[0] = 0xE4;
            // Data in Standard and Protected Write
            SendBuff[1] = Convert.ToByte(blk);
            SendBuff[2] = Convert.ToByte(data_0);
            SendBuff[3] = Convert.ToByte(data_1);
            SendBuff[4] = Convert.ToByte(data_2);
            SendBuff[5] = Convert.ToByte(data_3);
            SendBuff[6] = 0x01;
            SendBuff[7] = 0x00;

            return DUAL_Polling(Port, Address,ref SendBuff[0], SendLen,ref RecvBuff[0]);
        }



/// <summary>
        /// เขียนข้อมูลใน Block แบบ Protected Write
        /// </summary>
        /// <param name="write_mode"></param>
        /// <param name="blk"></param>
        /// <param name="data_0"></param>
        /// <param name="data_1"></param>
        /// <param name="data_2"></param>
        /// <param name="data_3"></param>
        /// <param name="onField"></param>
        /// <param name="lck"></param>
        /// <param name="pwd_0"></param>
        /// <param name="pwd_1"></param>
        /// <param name="pwd_2"></param>
        /// <param name="pwd_3"></param>
        /// <returns></returns>
        public static int SIC_Write(string blk, string data_0, string data_1, string data_2, string data_3, string pwd_0, string pwd_1, string pwd_2, string pwd_3)
        {
            SendLen = 12;
            SendBuff[0] = 0xE4;
            SendBuff[1] = Convert.ToByte(blk);
            SendBuff[2] = Convert.ToByte(data_0);
            SendBuff[3] = Convert.ToByte(data_1);
            SendBuff[4] = Convert.ToByte(data_2);
            SendBuff[5] = Convert.ToByte(data_3);
            SendBuff[6] = 0x01;
            SendBuff[7] = 0x00;




                    ขั้นตอนการทำงาน และอธิบายการทำงานของ Dijkstra's algorithm


        ภาพขั้นตอนการทำงานของ Dijkstra's algorithm ที่ใช้ในการคำนวนหาเส้นทางและระยะทางที่สั้นที่สุดโดยแสดงดังรูปที่ 3












































 1. Depth First Search
Depth First Search  เป็นการค้นหาแบบลึกก่อนเป็นการค้นหาที่กำหนดทิศทางจากรูปของโครงสร้างต้นไม้ ที่เริ่มต้นจากโหนดราก (Root node) ที่อยู่บนสุด แล้วเดินลงมาให้ลึกที่สุด เมื่อถึงโหนดล่างสุด (Terminal node) ให้ย้อนขึ้นมาที่จุดสูงสุดของกิ่งเดี่ยวกันที่มีกิ่งแยกและยังไม่ได้เดินผ่าน แล้วเริ่มเดินลงจนถึงโหนดลึกสุดอีก ทำเช่นนี้สลับไปเรื่อยจนพบโหนดที่ต้องการหาหรือสำรวจครบทุกโหนดแล้ว การค้นหาแบบลึกก่อนจะมีลำดับการเดินตามโหนดดังตัวเลขที่กำกับไว้ในแต่ละโหนดดังรูปที่ 4









            อัลกอริทึม
1.   กำหนดจุดเริ่มต้น
2.   นําโหนดที่อยู่ติดกับโหนดที่กําลังสํารวจอยู่(ที่ยังไม่ได้ทําการสํารวจและยังไม่ได้อยู่ในแสต็กมาใส่แสต็ก) มาเก็บไว้ในสแต็ก
3.   เมื่อสํารวจโหนดนั้นเสร็จ ให้พอพ(pop) ตัวบนสุดของโหนดออกมาทําการสํารวจ
4.   ทำการตรวจสอบโหนดที่ต้องการ แล้วนําโหนดข้างเคียงทั้งหมดที่ยังไม่ได้สํารวจมาต่อท้ายแสต็ก
5.   พอพตัวบนสุดออกมาสํารวจ ทำตามขั้นตอนที่ 2-4 จนกระทั้งพบโหนดที่ต้องการ หรือสํารวจครบทุดโหนด 





























































ไม่มีความคิดเห็น:

แสดงความคิดเห็น