วันศุกร์ที่ 16 ตุลาคม พ.ศ. 2552

ลูกแรดเตรียมพร้อมล่าเหยื่อ

จากการเรียนวิชาเตรียมฝึกประสบการณ์วิชาชีพบริหารธุรกิจได้รับความรู้ดังนี้

1. ได้รับความรู้จากท่านวิทยากรที่มาให้ความรู้ในแต่ละสัปดาห์มากมาย ซึ่งท่านก็มาเล่าประสบการณ์ชีวิตจากการทำงานของท่าน ซึ่งกว่าจะมาประสบความสำเร็จในปัจจุบันก็ผ่านอุปสรรคมากมาย ได้นำความรู้ที่ได้มาปรับใช้ในการดำเนินชีวิติประจำวัน

2. ได้เรียนรู้การทำงานเป็นทีมกับเพื่อนในกลุ่ม ต้องมีการติดต่อสื่อสารและการประสานงานที่ดี และต้องมีการบริหารด้านเวลาอีกด้วย เพราะในบางครั้งการทำงานย่อมมีกำหนดเวลาที่ตายตัว ต้องมีการวางแผนที่ดี ถ้าบางครั้งเวลาไม่พอจริงๆ ก็ต้องแก้ปัญหา ซึ่งเป็นการฝึกวิธีการแก้ปัญหา

3. การกล้าแสดงออกมากขึ้น เพราะต้องถ่ายทอดความรู้เกี่ยวกับเศรษฐกิจพอเพียงให้กับนักเรียนโรงเรียนอยู่เย็นวิทยา และต้องมีวิธีการที่จะนำเสนอกิจกรรมให้น่าสนใจ

4. การฝึกทักษะด้านการพูดและการเขาพบกับผู้ใหญ่ โครงการที่ได้ไปทำเป็นการติดต่อสื่อสารกับบุคคลที่ไม่เคยรู้จักมาก่อน ดังนั้นก็ต้องมีวิธีการพูด บุคลิก ท่าทาง น้ำเสียง ที่เหมาะสม

5. การทำงานต้องมีความรอบคอบ ต้องมีการคิดที่เป็นระบบมากขึ้น

6. การตรงต่อเวลา ความเป็นระเบียบ

วันพุธที่ 16 กันยายน พ.ศ. 2552

DTS 10-09/09/52

สรุป
กราฟ และ sorting
กราฟมีน้ำหนัก หมายถึง กราฟที่ทุกเอดจ์ มีค่าน้ำหนักกำกับ ซึ่งค่าน้ำหนักอาจสื่อถึงระยะทาง เวลา ค่าใช้จ่าย เป็นต้น นิยมนำไปใช้แก้ปัญหาหลัก ๆ 2 ปัญหา คือ
1. การสร้างต้นไม้ทอดข้ามน้อยที่สุด(Minimum Spanning Trees :MST)
1. เรียงลำดับเอดจ์ ตามน้ำหนัก
2. สร้างป่าที่ประกอบด้วยต้นไม้ว่างที่มีแต่โหนด และไม่มีเส้นเชื่อม
3. เลือกเอดจ์ที่มีน้ำหนักน้อยที่สุดและยังไม่เคยถูกเลือกเลย ถ้ามีน้ำหนักซ้ำกันหลายค่าให้สุ่มมา 1เส้น
4. พิจารณาเอดจ์ที่จะเลือก ถ้านำมาประกอบในต้นไม้ทอดข้ามน้อยที่สุดแล้วเกิด วงรอบ ให้ตัดทิ้งนอกนั้นให้นำมาประกอบเป็นเอดจ์ในต้นไม้ทอดข้ามน้อยที่สุด
5. ตรวจสอบเอดจ์ที่ต้องอ่านในกราฟ ถ้ายังอ่านไม่หมดให้ไปทำข้อ 3
2. การหาเส้นทางที่สั้นที่สุด (Shortest path) Dijkstra’s Algorithmหาเส้นทางที่สั้นที่สุดจากโหนดต้นทางไปโหนดใด ๆ ในกราฟ มีน้ำหนัก และน้ำหนักไม่เป็นลบข้อกำหนดให้ เซต S เก็บโหนดที่ผ่านได้และมีระยะทางห่างจากจุดเริ่มต้นสั้นที่สุดให้ W แทนโหนด นอกเซต Sให้ D แทนระยะทาง (distance) ที่สั้นที่สุดจากโหนดต้นทางไปโหนดใด ๆ ในกราฟ โดยวิถีนี้ประกอบด้วย โหนดในเชตให้ S ถ้าไม่มีวิถี ให้แทนด้วยค่าอินฟินีตี้ (Infinity) : ∞
Sorting
การเรียงลำดับ (sorting) เป็นการจัดให้เป็นระเบียบมีแบบแผน ช่วยให้การค้นหาสิ่งของหรือข้อมูล ซึ่งจะสามารถกระทำได้รวดเร็วและมีประสิทธิภาพ เช่น การค้นหาคำตามตัวอักษรไว้อย่างมีระบบและเป็นระเบียบ หรือ การค้นหาหมายเลขโทรศัพท์ในสมุดโทรศัพท์ ซึ่งมีการเรียงลำดับ ตามชื่อและชื่อสกุลของเจ้าของโทรศัพท์ไว้ ทำให้สามารถค้นหา หมายเลขโทรศัพท์ของคนที่ต้องการได้อย่างรวดเร็ว
วิธีการเรียงลำดับสามารถแบ่งออกเป็น 2 ประเภท คือ
(1)การเรียงลำดับแบบภายใน (internal sorting)เป็นการเรียงลำดับที่ข้อมูลทั้งหมดต้องอยู่ในหน่วยความจำหลัก เวลาที่ใช้ในการเรียงลำดับจะคำนึงถึงเวลาที่ใช้ในการเปรียบเทียบและเลื่อนข้อมูลภายในความจำหลัก
(2) การเรียงลำดับแบบภายนอก(external sorting) เป็นการเรียงลำดับข้อมูลที่เก็บอยู่ในหน่วยความจำสำรอง ซึ่งเป็นการเรียงลำดับข้อมูลในแฟ้มข้อมูล (file) เวลาที่ใช้ในการเรียงลำดับต้องคำนึงถึงเวลาที่เสียไประหว่างการถ่ายเทข้อมูลจากหน่วยความจำหลักและหน่วยความจำสำรองนอกเหนือจากเวลาที่ใช้ในการเรียงลำดับข้อมูลแบบภายในการเรียงลำดับแบบเลือก (selection sort)ทำการเลือกข้อมูลมาเก็บในตำแหน่งที่ ข้อมูลนั้นควรจะอยู่ทีละตัว โดยทำการค้นหาข้อมูลนั้นในแต่ละรอบแบบเรียงลำดับ
การเรียงลำดับแบบเลือกเป็นวิธีที่ง่าย แต่เสียเวลาในการจัดเรียงนาน โดยจะทำการเลือกข้อมูลมาเก็บไว้ตามตำแหน่งที่กำหนด คือ กำหนดให้เรียงข้อมูลจากค่าน้อยไปหาค่ามาก ก็จะทำการเลือกข้อมูลตัวที่มีค่าน้อยที่สุดมาอยู่ที่ตำแหน่งแรกสุด และค่าที่อยู่ตำแหน่งแรกก็จะมาอยู่แทนที่ค่าน้อยสุด แล้วทำการเลือกไปเรื่อยๆ จนครบทุกค่า ค่าที่ได้ก็จะเรียงจากน้อยไปหามาก
การเรียงลำดับแบบฟอง (Bubble Sort)
เป็นวิธีการเรียงลำดับที่มีการเปรียบเทียบข้อมูลในตำแหน่งที่อยู่ติดกัน1. ถ้าข้อมูลทั้งสองไม่อยู่ในลำดับที่ถูกต้องให้สลับตำแหน่งที่อยู่กัน2. ถ้าเป็นการเรียงลำดับจากน้อยไปมากให้นำข้อมูลตัวที่มีค่าน้อยกว่าอยู่ในตำแหน่งก่อนข้อมูลที่มีค่ามาก ถ้าเป็นการเรียงลำดับจากมากไปน้อยให้นำข้อมูล ตัวที่มีค่ามากกว่าอยู่ในตำแหน่งก่อนข้อมูลที่มีค่าน้อย
การเรียงลำดับแบบแทรก (insertion sort)
เป็นวิธีการเรียงลำดับที่ทำการเพิ่มสมาชิกใหม่เข้าไปในเซต ที่มีสมาชิกทุกตัวเรียงลำดับอยู่แล้ว และทำให้เซตใหม่ที่ได้นี้มีสมาชิกทุกตัวเรียงลำดับด้วย วิธีการเรียงลำดับจะ1. เริ่มต้นเปรียบเทียบจากข้อมูลในตำแหน่งที่ 1 กับ 2หรือข้อมูลในตำแหน่งสุดท้ายและรองสุดท้ายก็ได้ถ้าเป็นการเรียงลำดับจากน้อย ไปมาก2. จะต้องจัดให้ข้อมูลที่มีค่าน้อยอยู่ในตำแหน่งก่อนข้อมูลที่มีค่ามาก และถ้าเรียงจากมากไปน้อยก็จะจัดให้ข้อมูลที่มีค่ามากอยู่ในตำแหน่งก่อน
การเรียงลำดับแบบฐานเป็นวิธีที่พิจารณาเลขที่ละหลัก โดยจะพิจารณาเลขหลักหน่วยก่อน แล้วทำการจัดเรียงข้อมูลทีละตัวตามกลุ่มหมายเลข จากนั้นนำข้อมูลที่จัดเรียงในหลักหน่วยมาจัดเรียงในหลักสิยต่อไปเรื่อยๆจนครบทุกหลัก ก็จะได้ข้อมูลที่ต้องการ การเรียงลำดับแบบฐานไม่ซับซ้อน แต่ใช้เนื้อที่ในหน่วยความจำมาก

DTS 09-02/09/52

เอ็กซ์เพรสชันทรี (Expression Tree)
เป็นการนำเอาโครง สร้างทรีไปใช้เก็บนิพจน์ทางคณิตศาสตร์โดยเป็นไบนารีทรี ซึ่งแต่ละโหนดเก็บตัวดำเนินการ (Operator) และและตัวถูกดำเนินการ(Operand) ของนิพจน์คณิตศาสตร์นั้น ๆ ไว้ หรืออาจจะเก็บค่านิพจน์ทางตรรกะ (Logical Expression)นิพจน์เหล่านี้เมื่อแทนในทรีต้องคำนึงลำดับขั้นตอนในการคำนวณตาม ความสำคัญของเครื่องหมายด้วยโดยมีความสำคัญตามลำดับดังนี้
- ฟังก์ชัน
- วงเล็บ ( )
- ยกกำลัง
- เครื่องหมายหน้าเลขจำนวน
- คูณ หรือ หาร * /
- บวก หรือ ลบ + -
- ถ้ามีเครื่องหมายที่ระดับเดียวกันให้ทำจากซ้ายไปขวา
การ แทนนิพจน์ในเอ็กซ์เพรสชันทรี ตัวถูกดำเนินการจะเก็บอยู่ที่โหนดใบส่วนตัวดำเนินการจะเก็บในโหนดกิ่งหรือ โหนดที่ไม่ใช่โหนดใบเช่น นิพจน์ A + B สามารถแทนในเอ็กซ์เพรสชันทรีได้ดังนี้
ไบนารีเซิร์ชทรี (Binary Search Tree)
เป็นไบนารีทรีที่มีคุณสมบัติที่ว่าทุก ๆ โหนดในทรี ค่าของโหนดรากมีค่ามากกว่าค่าของทุกโหนดในทรีย่อยทางซ้าย และมีค่าน้อยกว่าหรือเท่ากับค่าของทุกโหนดในทรีย่อยทางขวา และในแต่ละทรีย่อยก็มีคุณสมบัติเช่นเดียวกัน ค่าข้อมูลในทรีย่อยทางซ้าย < ค่าข้อมูลที่โหนดราก < ค่าข้อมูลในทรีย่อยทางขวา
กราฟ(Graph)
กราฟ เป็นโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้นที่ประกอบด้วยกลุ่มของสิ่งสองสิ่งคือ1. โหนด (nodes) หรือ เวอร์เทกซ์ (vertexes)2. เส้นเชื่อมระหว่างโหนด เรียก เอ็จ (edges)
กราฟที่มีเอ็จเชื่อมระหว่างโหนดสองโหนด ถ้าเอ็จไม่มีลำดับความสัมพันธ์จะเรียกกราฟนั้นว่า กราฟแบบไม่มีทิศทาง (undirected graphs) และถ้ากราฟนั้นมีเอ็จที่มีลำดับความสัมพันธ์หรือมีทิศทางกำกับด้วยเรียกกราฟนั้นว่า กราฟแบบมีทิศทาง (directed graphs) บางครั้งเรียกว่า ไดกราฟ (digraph)โดยทั่ว ๆ ไปการเขียนกราฟเพื่อแสดงให้เห็นความสัมพันธ์ของสิ่งที่เราสนใจแทนโหนดด้วย จุด (pointes) หรือวงกลม (circles) ที่มีชื่อหรือข้อมูลกำกับ เพื่อบอกความแตกต่างของแต่ละโหนด และเอ็จแทนด้วยเส้นหรือเส้นโค้งเชื่อมต่อระหว่างโหนดสองโหนด ถ้าเป็นกราฟแบบมีทิศทางเส้นหรือเส้นโค้งต้องมีหัวลูกศรกำกับทิศทางของความสัมพันธ์ด้วย
** กราฟแบบไม่มีทิศทางเป็นเซตแบบจำกัดของโหนดและเอ็จ โดยเซตอาจจะว่างไม่มีโหนดหรือเอ็จเลยเป็นกราฟว่าง (empty graph) แต่ละเอ็จจะเชื่อมระหว่างโหนดสองโหนด หรือเชื่อมตัวเอง เอ็จไม่มีทิศทางกำกับ ลำดับของการเชื่อมต่อกันไม่สำคัญ นั่นคือไม่มีโหนดใดเป็นโหนดแรก (first node) หรือไม่มีโหนดเริ่มต้นไม่มีโหนดใดเป็นโหนดสิ้นสุด
**ส่วนกราฟแบบมีทิศทาง เป็นเซตแบบจำกัดของโหนดและเอ็จ โดยเซตอาจจะว่างไม่มีโหนดหรือเอ็จเลยเป็นกราฟว่าง (empty graph) แต่ละเอ็จจะเชื่อมระหว่างโหนดสองโหนด เอ็จมีทิศทางกำกับแสดงลำดับของการเชื่อมต่อกัน โดยมีโหนดเริ่มต้น (source node) และโหนดสิ้นสุด (target node)

วันจันทร์ที่ 31 สิงหาคม พ.ศ. 2552

DTS 08-26/08/52

สรุป

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









(ก) ต้นไม้ปกติในธรรมชาติ (ข) ต้นไม้ในวิชาโครงสร้างข้อมูล
รูปลักษณะของโครงสร้างต้นไม้

ทรี ประกอบด้วยโหนด (node) ซึ่งเป็นส่วนที่เก็บข้อมูล ในทรีหนึ่งทรีจะประกอบไปด้วยรูทโหนด (root node) เพียงหนึ่งโหนด แล้วรูทโหนดสามารถแตกโหนดออกเป็นโหนดย่อยๆ ได้อีกหลายโหนดเรียกว่าโหนดลูก (Child node) เมื่อมีโหนดลูกแล้ว โหนดลูกก็ยังสามารถแสดงเป็นโหนดพ่อแม่ (Parent Node) โดยการแตกโหนดออกเป็นโหนดย่อยๆได้อีก













Root Node จากรูป คือ โหนด A
Child Node หรือ โหนดลูก จากรูป B , C , D และ E เป็น โหนดลูกของ A
Parent Node หรือโหนดพ่อแม่ โหนด B ที่เป็นโหนดลูกของโหนด A ก็สามารถแตกออกเป็น
โหนดย่อยๆ ได้แก่ F และ G ดังนั้น B จึงเป็นโหนดพ่อแม่ของ F และ G ในทำนองเดียวกัน A
ก็เป็นโหนด พ่อแม่ของ B , C , D และ E
กิ่ง (Branch or Edge) เป็นเส้นที่เชื่อมต่อระหว่างโหนดพ่อแม่กับโหนดลูก
Brother Node หรือโหนดพี่น้อง คือ โหนดที่มีพ่อแม่เดียวกัน เช่น B , C , D , E เป็นโหนดพี่น้องกันเพราะมีโหนดพ่อแม่เดียวกัน คือ โหนด A และ F และ G เป็นโหนดพี่น้องกันโดยมี B เป็นโหนดพ่อแม่
Leaf Node คือ โหนดที่ไม่มีโหนดลูก จากรูปโหนดที่ไม่มีโหนดลูก ได้แก่ F G H I J K L M
Branch Node คือ โหนดที่ไม่ใช่ Leaf Node เช่น โหนด B C D E เรียกว่า Branch Node
Degree คือ จำนวนลูกของโหนด x เช่น degree ของ โหนด A = 4 ได้แก่ B C D E จำนวน degree ของโหนด B = 2 จำนวนdegree ของโหนด F = 0 เนื่องจากโหนด F ไม่มีโหนดลูก
Direct Descendant Node คือโหนดที่มาทีหลังทันที จากรูป B C D E เป็น direct descendant node ของโหนด A เพราะเป็นโหนดที่มาทีหลังทันที
Descendant Node คือ โหนดลูกของโหนด x และโหนดที่ทุกโหนดที่แตกจากโหนดลูกของโหนด x

ตัวอย่าง descendant ของโหนด A คือ ทุกโหนดที่เหลือในทรี
Direct Ancestor Node หรือโหนดที่มาก่อนทันที ตัวอย่าง Direct Ancestor ของโหนด H คือ โหนด C , Direct Ancestor ของโหนด C คือ โหนด A
Level หรือระดับ คือ หมายเลขแสดงระดับของโหนดในทรี ซึ่งรูทโหนดจะมีค่า Level = 0 ส่วนโหนดลูกของรูทโหนดก็จะมีค่า = 1 หากค่าโหนด x อยู่ในระดับ L โหนดลูกของ x ก็จะอยู่ในระดับ L + 1
Binary Tree มีลักษณะเหมือนกับ Tree ปกติแต่มีคุณสมบัติพิเศษ คือ “แต่ละโหนดจะมีโหนดลูกได้ไม่เกิน 2 โหนด” หรือพูดอีกนัยหนึ่งก็คือ แต่ละโหนดใน binary tree จะมีดีกรีได้ไม่เกิน 2ตัวอย่าง binary tree















การแปลงทรีทั่วไปเป็นแบบไบนารี ในทรีทั่วไปโหนดแต่ละโหนดจะมีกี่ SON ก็ได้ ส่วนไบนารีแต่ละโหนดจะมี SON ได้มากที่สุดเท่ากับ 2 SONs การแปลงต้นไม้ทั่วไปให้เป็นแบบไบนารีจะใช้หลักความจริงที่ว่า ในต้นไม้ทั่วไปแต่ละโหนดจะมี SON ที่อยู่ทางซ้ายสุด 1 SON และ SON โหนดนั้นจะมีพี่น้องถัดไป 1โหนด
เท่านั้น การแปลงนั้นแบ่งได้เป็น 2 ขั้นตอน คือ
ขั้นที่ 1 แปลงต้นไม้ทั่วไปโดยใช้หลักความสัมพันธ์ระหว่างโหนดเป็น leftmost son - next sibiling
ขั้นที่ 2 หมุนต้นไม้ที่แปลงแล้วไป 45 องศา จะได้ต้นไม้ไบนารีแบบปกติ การแปลงต้นไม้ทั่วไปเป็นแบบ
ไบนารีทรี การท่องไปในไบนารีทรี (traversing binary tree) เพื่อเข้าไปเยือนทุก ๆ โหนดในทรี ซึ่งวิธีการท่องเข้าไปต้องเป็นไปอย่างมีระบบแบบแผน สามารถเยือนโหนดทุก ๆ โหนด ๆ ละหนึ่งครั้ง วิธีการท่องไปนั้นมีด้วยกันหลายแบบแล้วแต่ว่าต้องการลำดับขั้นตอนการเยือนอย่างไรในการเยือนแต่ละครั้ง โหนดที่ถูกเยือนอาจเป็นโหนดแม่ (แทนด้วย N) ทรีย่อยทางซ้าย (แทนด้วย L) หรือทรีย่อยทางขวา (แทนด้วย R) มีวิธีการท่องเข้าไปในทรี 6 วิธี คือ NLR LNR LRN NRL RNL และ RLN แต่วิธีการท่องเข้าไปไบนารีทรีที่นิยมใช้กันมากเป็นการท่องจากซ้ายไปขวา 3 แบบแรกเท่านั้นคือ NLR LNR และ LRN ซึ่งลักษณะการนิยามเป็นนิยามแบบ รีเคอร์ซีฟ (recursive) ซึ่งขั้นตอนการท่องไปในแต่ละแบบมีดังนี้
การท่องไปแบบพรีออร์เดอร์ (preorder traversal)
เป็นการเดินเข้าไปเยือนโหนดต่าง ๆ ในทรีด้วยวิธี NLR มีขั้นตอนการเดินดังต่อไปนี้
(1) เยือนโหนดราก
(2) ท่องไปในทรีย่อยทางซ้ายแบบพรีออร์เดอร์
(3) ท่องไปในทรีย่อยทางขวาแบบพรีออร์เดอร์
การท่องไปแบบอินออร์เดอร์ (inorder traversal)
เป็นการเดินเข้าไปเยือนโหนดต่าง ๆ ในทรีด้วยวิธี LNR ซึ่งมีขั้นตอนการเดินดังต่อไปนี้
(1) ท่องไปในทรีย่อยทางซ้ายแบบอินออร์เดอร์
(2) เยือนโหนดราก
(3) ท่องไปในทรีย่อยทางขวาแบบอินออร์เดอร์
การท่องไปแบบโพสออร์เดอร์ (postorder traversal)
เป็นการเดินเข้าไปเยือนโหนดต่าง ๆ ในทรี ด้วยวิธี LRN ซึ่งมีขั้นตอนการเดินดังต่อไปนี้
(1) ท่องไปในทรีย่อยทางซ้ายแบบโพสออร์เดอร์
(2) ท่องไปในทรีย่อยทางขวาแบบโพสออร์เดอร์
(3) เยือนโหนดราก
ตัวอย่าง แสดงการท่องไปในไบนารีทรีแบบพรีออร์เดอร์ แบบอินออร์เดอร์ และแบบโพสออร์เดอร์















ท่องแบบพรีออร์เดอร์ (NLR) ผลลัพธ์จากการเยือนโหนดต่าง ๆ ดังนี้ ABDGCEHIF จากรูป แสดงเส้นทางการท่องแบบพรีออร์เดอร์















ท่องแบบอินออร์เดอร์ (LNR) ผลลัพธ์จากการเยือนโหนดต่าง ๆ ดังนี้ DGBAHEICF ในรูป แสดงเส้นทางการท่องแบบอินออร์เดอร์















ท่องแบบโพสออร์เดอร์ (LRN) ผลลัพธ์จากการเยือนโหนดต่าง ๆ ดังนี้ GDBHIEFCA ในรูปแสดงเส้นทางการท่องแบบโพสออร์เดอร์

วันเสาร์ที่ 29 สิงหาคม พ.ศ. 2552

DTS 07-05/08/52

สรุป
คิวเป็นโครงสร้างข้อมูลแบบลำดับ (Sequential) ลักษณะของคิวเราสามารถพบได้ในชีวิตประจำวัน เช่น การเข้าแถวตามคิวเพื่อรอรับบริการต่างๆ ลำดับการสั่งพิมพ์งาน เป็นต้น ซึ่งจะเห็นได้ว่าลักษณะของการทำงานจะเป็นแบบใครมาเข้าคิวก่อน จะได้รับบริการก่อน เรียกได้ว่าเป็นลักษณะการทำงานแบบ FIFO (First In , First Out) ลักษณะของคิว จะมีปลายสองข้าง ซึ่งข้างหนึ่งจะเป็นช่องทางสำหรับข้อมูลเข้าที่เรียกว่า REAR และอีกข้างหนึ่งซึ่งจะเป็นช่องทางสำหรับข้อมูลออก เรียกว่า FRONT







การเพิ่มข้อมูลเข้าไปในคิวการจะเพิ่มข้อมูลเข้าไปในคิว จะกระทำที่ตำแหน่ง REAR หรือท้ายคิว และก่อนที่จะเพิ่มข้อมูลจะต้องตรวจสอบก่อนว่าคิวเต็มหรือไม่ โดยการเปรียบเทียบค่า REAR ว่า เท่ากับค่า MAX QUEUE หรือไม่ หากว่าค่า REAR = MAX QUEUE แสดงว่าคิวเต็มไม่สามารถเพิ่มข้อมูลได้ แต่หากไม่เท่า แสดงว่าคิวยังมีที่ว่างสามารถเพิ่มข้อมูลได้ เมื่อเพิ่มข้อมูลเข้าไปแล้ว ค่า REAR ก็จะเป็นค่าตำแหน่งท้ายคิวใหม่








การนำข้อมูลออกจากคิวการนำข้อมูลออกจากคิวจะกระทำที่ตำแหน่ง FRONT หรือส่วนที่เป็นหัวของคิว โดยก่อนที่จะนำข้อมูลออกจากคิวจะต้องมีการตรวจสอบก่อนว่ามีข้อมูลอยู่ในคิวหรือไม่ หากไม่มีข้อมูลในคิวหรือว่าคิวว่าง ก็จะไม่สามารถนำข้อมูลออกจากคิวได้






การดำเนินการเกี่ยวกับคิวการดำเนินการเกี่ยวกับคิว ได้แก่
1. Create Queue การจัดหน่วยความจำให้แก่ Head Node ให้ค่า Pointer ทั้ง 2 ตัวมีค่าเป็น Null
2. Enqueue การเพิ่มข้อมูลเข้าไปในคิว
3. Dequeue การนำข้อมูลออกจากคิว
4. Queue Front เป็นการนำข้อมูลที่อยู่ส่วนต้นของคิวมาแสดง
5. Queue Rear เป็นการนำข้อมูลที่อยู่ส่วนท้ายของคิวมาแสดง
6. Empty Queue เป็นการตรวจสอบว่าคิวว่างหรือไม่
7. Full Queue เป็นการตรวจสอบว่าคิวเต็มหรือไม่
8. Queue Count เป็นการนับจำนวนสมาชิกที่อยู่ในคิว
9. Destroy Queue เป็นการลบข้อมูลทั้งหมดที่อยู่ในคิว

วันอาทิตย์ที่ 2 สิงหาคม พ.ศ. 2552

DTS 06-29/07/52

สรุป
การดำเนินการเกี่ยวกับสแตก ได้แก่ 1. Create Stack การจัดสรรความจำให้แก่ Head Node และส่งค่าตำแหน่งที่ชี้ไปยัง Head ของสแตกกลับมา 2. Push Stack การเพิ่มข้อมูลลงไปในสแตก 3. Pop Stack การนำข้อมูลบนสุดออกจากสแตก 4. Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสแตก5. Empty Stack เป็นการตรวจสอบการว่างของสแตก 6. Full Stack เป็นการตรวจสอบว่าสแตกเต็มหรือไม่ 7. Stack Count เป็นการนับจำนวนสมาชิกใน สแตก 8. Destroy Stack เป็นการลบข้อมูลทั้งหมดที่อยู่ในสแตก
การใช้ สแตกเพื่อแปลรูปนิพจน์ทางคณิตศาสตร์รูปแบบนิพจน์ทางคณิตศาสตร์

• นิพจน์ Infix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่ระหว่างตัวดำเนินการ (Operands)
เช่น A+B-C
• นิพจน์ Prefix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หน้าตัวดำเนินการ (Operands)
เช่น +-AB
• นิพจน์ Postfix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หลังตัวดำเนินการ (Operands)
เช่น AC*+
เราสามารถแปลงนิพจน์ Infix ให้เป็น Postfix ได้โดยอาศัยสแตกที่มีคุณสมบัติการเข้าหลังออกก่อนหรือ LIFO โดยมีอัลกอริทึมในการแปลงนิพจน์ ดังนี้

1. ถ้าข้อมูลเข้า (input) เป็นตัวถูกดำเนินการ (operand) ให้นำออกไปเป็นผลลัพธ์ (output)
2. ถ้าข้อมูลเข้าเป็นตัวดำเนินการ (operator) ให้ดำเนินการดังนี้
2.1 ถ้าสแตกว่าง ให้ push operator ลงในสแตก
2.2 ถ้าสแตกไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตก
2.3.ถ้า operator ที่เข้ามามีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตกให้ push ลงสแตก
2.4. ถ้า operator ที่เข้ามามีความสำคัญน้อยกว่าหรือเท่ากับ operator ที่อยู่ในตำแหน่ง TOP ของสแตก ให้ pop สแตกออกไปเป็นผลลัพธ์ แล้วทำการเปรียบเทียบ operator ที่เข้ามากับ operator ที่ตำแหน่ง TOP ต่อไป จะหยุดจนกว่า operator ที่เข้ามาจะมีความสำคัญมากกว่า operator ที่ตำแหน่ง TOP ของสแตก แล้วจึง push operator ที่เข้ามานั้นลงสแตก
3. ถ้าข้อมูลเข้าเป็นวงเล็บเปิด ให้ push ลงสแตก
4. ถ้าข้อมูลเข้าเป็นวงเล็บปิด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าจะถึงวงเล็บ เปิด จากนั้นทิ้งวงเล็บเปิดและปิดทิ้งไป
5. ถ้าข้อมูลเข้าหมด ให้ pop ข้อมูลออกจากสแตกไปเป็นผลลัพธ์จนกว่าสแตกจะว่าง

วันอังคารที่ 28 กรกฎาคม พ.ศ. 2552

DTS 05-22/07/52

สรุป
สแตค (Stack)
สแตคเป็นโครงสร้างข้อมูลที่มีลักษณะแบบลำดับ (sequential) คือการกระทำกับข้อมูลจะกระทำที่ปลายข้างเดียวกันที่ส่วนปลายสุดของสแตค การกระทำกับข้อมูลของสแตคประกอบไปด้วยการนำเข้าข้อมูลเข้า (PUSH) ที่ส่วนบนสุดของสแตค และการนำข้อมูลออก (POP) ที่ส่วนบนสุดของสแตคเช่นกัน ในการจะ Push ข้อมูลเข้าก็ต้องตรวจสอบด้วยว่าข้อมูลในสแตคเต็มหรือไม่ หากสแตคเต็มก็จะไม่สามารถ Push หรือนำข้อมูลเข้าได้ เช่นเดียวกับการ Pop ข้อมูลออกก็ต้องตรวจสอบด้วยว่ามีข้อมูลอยู่ในสแตคหรือไม่ หากไม่มีข้อมูลอยู่ในสแตคหรือสแตคว่าง (empty stack) ก็ไม่สามารถ pop ได้การนำข้อมูลเข้า-ออก จากสแตค (push , pop) จะมีลักษณะแบบเข้าหลัง ออกก่อน (LIFO : Last In , First Out) คือ ข้อมูลที่เข้าไปในสแตคลำดับหลังสุด จะถูกนำข้อมูลออกจากสแตคเป็นลำดับแรก ยกตัวอย่างการทำงานแบบ LIFO เช่น การวางจานซ้อนกัน รูปแสดงลักษณะของสแตค ที่ประกอบด้วยข้อมูล A , B , C , D และ E มี TOP ที่ชี้ที่สมาชิกตัวบนสุดของสแตค





















ตัวอย่างการทำงานแบบโครงสร้างข้อมูลแบบจัดเรียงกึ่งกลางสแตกที่สามารถเห็นได้ในชีวิตประจำวันทั่วไป ได้แก่

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

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


วันอังคารที่ 21 กรกฎาคม พ.ศ. 2552

DTS 04-15/07/52

สรุป

Linked List
เป็นการจัดเก็บชุดข้อมูลเชื่อมโยงต่อเนื่องกันไปตามลำดับ ซึ่งอาจอยู่ในลักษณะแบบเชิงเส้นตรง (linear) หรือ ไม่เป็นเส้นตรง (nonlinear) ก็ได้ ซึ่งในลิสต์จะประกอบไปด้วยข้อมูลที่เรียกว่าโหนด (node) ในหนึ่งโหนดจะประกอบด้วยส่วนของข้อมูลที่ต้องการจัดเก็บ เรียกว่าส่วน Info และส่วนที่เป็นพอยน์เตอร์ที่ชี้ไปยังโหนดถัดไป (Link) หรือชี้ไปยังโหนดอื่นๆที่อยู่ในลิสต์ หากไม่มีโหนดที่อยู่ถัดไป ส่วนที่เป็นพอยน์เตอร์หรือ Link จะเก็บค่า NULL หรือ NILL ใช้สัญลักษณ์ ^

โหนด (Node)







โครงสร้างแบบ Linked list แบ่งได้หลายแบบตามวิธีการชี้ไปยังโหนดต่างๆ เช่น Singly Linked list , Doubly Linked list , Multi-Linked list






การสร้าง Linked listวิธีสร้าง Linked list คือการนำข้อมูลที่จะจัดเก็บเข้า Linked list เพิ่มตรงโหนดตำแหน่งสุดท้ายของลิสต์ ฉะนั้นจึงต้องมี External พอยน์เตอร์ที่คอยชี้โหนดสุดท้ายของลิสต์ ในที่นี้ใช้ L (Last) ตัวอย่างการสร้าง Linked list จากลิสต์ L = 21 , 5 เริ่มจากการให้ H ชี้ทิ่โหนดตำแหน่งแรก และ L ชี้ทิ่โหนดตำแหน่งสุดท้าย






เพิ่มข้อมูล 5 เข้าไปใน list , L ชี้ไปยังโหนดที่เก็บข้อมูล 5







การเพิ่มข้อมูลโดยแทรกลงในลิสต์การเพิ่มข้อมูลจะทำการแทรกโหนด NEW หลังโหนด P ตัวอย่าง ทำการเพิ่มข้อมูลโหนด 16 ระหว่างโหนด 21 และ 5



















การลบข้อมูลใน Linked listการลบข้อมูลที่ต้น list เนื่องจากขั้นตอนของการลบข้อมูลที่ header นั้นจะมีปัญหาที่ยุ่งยากกว่าเมื่อ design ด้วย oop(java) เราสามารถที่จะแก้ปัญหานี้ได้โดยการใส่ header node ที่ว่าง ๆ ไว้ข้างหน้าของ linked list เพื่อที่จะทำหน้าที่เป็นชี้ว่าเป็นหัวโหนดโดยที่ไม่ต้องมี pointer คอยชี้ที่ header และเมื่อเราต้องการที่จะเปลี่ยนแปลงข้อมูลใด ๆ บนหัวสามารถที่จะทำได้โดยการแทรก node เข้าไปดังตัวอย่างของการแทรกข้อมูลข้างล่างการแทรกข้อมูลลงในโหนดที่ต้องการ











จากรูปมีขั้นตอนดังนี้

tmp.next = tmp.next.next;


ฟังก์ชัน iostream.h กับ stdio.h

เป็นการกำหนดค่าให้กับตัวแปรแล้วมีการนำค่าของตัวแปรมาบวกกันตามที่กำหนดไว้

iostream.h

#include
int main()
{ float a = 15.9,b = 11.5;
float *p,*q;
p = &a;
q = &b;
cout << "*p = " << *p << q =" ">
*p = *p + 5.5;
*q = *q + 10.5;
cout << " a = " <<>
cout << " b = " <<>
return 0;
}

stdio.h

#include
int main()
{
float a = 15.9,b = 11.5;
float *p,*q;
p = &a;
q = &b;
printf(">printf("*q = %f \n",*q);
*p = *p + 5.5;
*q = *q + 10.5;
printf(" a = %f \n",a);
printf(" b = %f\n",b);
return 0;
}








วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552

DTS 03-01/07/52

สรุป
Pointer เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่(Address ) ของตัวแปรที่อยู่ในหน่วยความจำรูปแบบเช่นการกำหนด address ของตัวแปร structure ให้กับตัวแปรพอยน์เตอร์จะใช้ ptvar = &struct_variable;
ตัวอย่าง

typedef struct
{
int acct_no;
char name[20];
}account;
Account customer,*p;
จากตัวอย่าง customer เป็นตัวแปร structure ประเภท account และ p เป็นพอยน์เตอร์ที่ชี้ตำแหน่งที่อยู่ของตัวแปรแบบ structure จะกำหนดเลขที่อยู่เริ่มต้นของ customer

ให้กับ p ได้โดย P= &customer;


แบบฝึกหัด


1.ให้นักศึกษากำหนดค่าของ Array 1 มิติ และ Array 2 มิติ
ตอบ Array 1 มิติ คือ float score[3];

และ Array 2 มิติ คือ int student[5][4];

2.ให้นักศึกษาหาค่าของ A[2] , A[6]
จากค่าA={2,8,16,24,9,7,3,8,}
ตอบ A[2] คือ 16
A[6] คือ 3

3.จากค่าของ int a [2][3] = {{6,5,4},{3,2,1}};
ให้นักศึกษาหาค่าของ a[1][0]และa[0][2]
ตอบ a[1][0] คือ 3
a[0][2] คือ 4

4.ให้นักศึกษากำหนด structure ที่มีค่าของข้อมูลจากน้อย 6 Records
ตอบ struct student

{
char code[11];
char name[15];
char lastname[15];
int mid;
int final;
float score;
float grade;
}stud;

5. ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวชนิด Array กับตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล
ตอบ array หมายถึง ตัวแปรชุดที่ใช้เก็บตัวแปรชนิดเดียวกันไว้ด้วยกัน เช่น เก็บ ข้อมูล charไว้กับ
char เก็บ int ไว้กับ int
ไม่สามารถเก็บข้อมูลต่างชนิดกันได้ เช่น char กับ int เรียก array อีกอย่างว่าหน่วยความจำแบ่งเป็นช่อง การกำหนดสมาชิกของ array จะเขียนภายในเครื่องหมาย [ ]
pointer หมายถึง ตัวเก็บตำแหน่งที่อยู่ของหน่วยความจำ (Address) หรือเรียกว่า ตัวชี้ตำแหน่งที่อยู่ สัญลักษณ์ของ pointer จะแทนด้วยเครื่องหมาย *

วันอังคารที่ 30 มิถุนายน พ.ศ. 2552

DTS 02-24/06/52

สรุป
ในการเรียนการสอนครั้งนี้ได้รับความรู้เรื่อง ArrayและStructure
Array คือ โครงสร้างข้อมูลที่เรียกว่า Linear List คล้ายกับเซตในคณิตศาสตร์ที่มีสมาชิกเป็นจำนวนคงที่มีรูปแบบข้อมูลเดียวกันใช้เนื้อที่ขนาดเดียวกันเรียงต่อเนื่องในหน่วยความจำหลัก
อาเรย์ 1 มิติ (One-Dimensional Array) เราสามารถสร้างตัวแปรอาเรย์ของข้อมูลชนิดต่างๆได้ไม่ว่าจะเป็นอาเรย์แบบ int, char, float ดังตัวอย่างต่อไปนี้void main(){int age [5];double grade [5];char s [5];....}ตัวแปรอาเรย์นั้นสามารถเก็บค่าได้หลายๆค่า โดยแต่ละค่าก็จะเหมือนกับเป็นตัวแปร 1 ตัว เช่นถ้าเราประกาศตัวแปร int age [5] ก็เหมือนกับว่าเรามีตัวแปร age ถึง 5 ตัว ซึ่งแต่ละตัวนี้เราเรียกว่าสมาชิกของอาเรย์ การอ้างถึงสมาชิกของอาเรย์จะต้องใช้หมายเลขลำดับ โดยเริ่มจาก 0,1,2,...ไปเรื่อยๆจนถึง” ขนาดของอาเรย์ลบด้วย 1” เช่นถ้าเราสร้างอาเรย์ int age [5] การอ้างถึงสมาชิกของอาเรย์จะใช้หมายเลข 0 ถึง 4
อาเรย์ 2 มิติ (Two-Dimensional Array) อาเรย์ 2 มิติจะเก็บข้อมูลไว้ในลักษณะของตาราง การสร้างอาเรย์ 2 มิตินั้นเราจะเขียนโค้ดภาษาซีดังนี้int a[3][3];int b[2][3];การนำค่าที่ต้องการเก็บในอาเรย์เราจะต้องอ้างถึงลำดับของสมาชิกช่องนั้นๆ ทั้งลำดับในแนวนอนและลำดับในแนวตั้ง หรือจะมองในลักษณะของคู่ลำดับก็ได้ดังรูปต่อไปนี้int a[3][3];a[0][0] a[1][0] a[2][0]a[0][1] a[1][1] a[2][1]a[0][2] a[1][2] a[2][2]การอ้างอิงสมาชิกของอาเรย์ 2 มิติ จะใช้การระบุเลขลำดับสองตัวเรียงกัน คือ [x][y] โดย x เป็นเลขที่บอกว่าอยู่ช่องที่เท่าไหร่ในแนวนอนและ y บอกว่าอยู่ช่องที่เท่าไหร่ในแนวตั้ง
Structure หรือโครงสร้างซึ่งมี ความหมายคือ กลุ่มตัวอย่างของข้อมูลที่มีชนิดเหมือนกันหรือต่างกันก็ได้ ซึ่งนำมารวมกลุ่มแล้วเรียกเป็่นชื่อเดียวกัน Structure มีประโยชน์มากในการสร้างและจัดการสร้างข้อมูลที่ซับซ้อน แต่ต่างจาก Array คือสมาชิกของ Structure เป็นข้อมูลคนละชนิดกันได้ ส่วนสมาชิกของ Array จะต้องเป็นข้อมูลชนิดเดียวกัน


ทำ Structure

#include

struct now

{

int day;

int month;

int year;

}check;

struct student

{

char univer[25];

int idn;

char name[10];

}data;

struct book

{

float idb;

char nbook[30];

int amount;

}bbook;

void main()

{

printf("Welcome in Library");

printf("\n\nDate dd/mm/yy:");

scanf("%d/%d/%d",&check.day,&check.month,&check.year);

printf("University:");

scanf("%s",&data.univer);

printf("ID student:");

scanf("%d",&data.idn);

printf("Name:");

scanf("%s%",&data.name);

printf("ID book:");

scanf("%f",&bbook.idb);

printf("Name book:");

scanf("%s",&bbook.nbook);

printf("Amount:");

scanf("%d",&bbook.amount);
{

printf("\n\n\nReport of customer");

printf("\nDate : %d/%d/%d \t",check.day,check.month,check.year);

printf("Date limited : %d/%d/%d\n",check.day,check.month+1,check.year);

printf("University : %s\n",data.univer);

printf("ID student : %d\n",data.idn);

printf("Name : %s\n",data.name);

printf("\nID book : %f\n",bbook.idb);

printf("Name book : %s\n",bbook.nbook);

printf("Amount : %d\n",bbook.amount);

}

}

DTS 01-17/06/52

สรุป
แนะนำในส่วนของเนื้อหารายวิชา และทบทวนการใช้โปรแกรมภาษาซี ทำให้ทราบถึงความหมายของโครงสร้างข้อมูลและเนื้อหาในบทเรียนนี้

ประวัติส่วนตัว



ชื่อ นางสาว ศรีประไพ ทองดอนมั่ง ชื่อเล่น เบญ

Miss Sriprapai Tongdonmung

รหัสนักศึกษา 50152792059

ปัจจุบันศึกษาอยู่ที่ : มหาวิทยาลัยราชภัฏสวนดุสิต

หลักสูตรการบริหารธุรกิจ (คอมพิวเตอร์ธุรกิจ)

คณะวิทยาการจัดการ

E-mail : u50152792059@gmail.com

Tel. : 086-069-8787