204-201Data Structure and Algorithm ธัชตะวัน ชนะกูล
Intro-Data Structure and Algorithm! จะรู้ได้อย่างไรว่า โปรแกรมที่เขียน มีประสิทธิภาพเป็นอย่างไร? Program 2:ก่อนอื่นขอให้มาดูตัวอย่างง่าย ๆ เกี่ยวกับการกำหนดค่าให้กับ วิธีคิด : หาที่ฝากข้อมูลเก่า เก็บไว้ก่อนตัวแปรดังตัวอย่างต่อไปนี้ โดยให้เครื่องหมาย = หมายถึงการกำหนดค่า และก่อนเริ่มทำงาน ให้ค่า ขั้นตอนที่ 1: xold = x ต่างจากโปรแกรมแรก 2 ขั้นตอนที่ 2: yold = y อย่าง คือ x = 5 มีความหมายคือ ให้ตัวแปร x เก็บค่า 5 ขั้นตอนที่ 3: y = xold y = 2 มีความหมายคือ ให้ตัวแปร y เก็บค่า 2 ขั้นตอนที่ 4: x = yold 1.ขั้นตอนการทำงานจาก 2Program1: ต้องการสลับค่า x และ y โดยให้ x เก็บค่า 2 และ y เก็บ ขั้นตอนที่ 5: stop เป็น 4 (ไม่รวม Stop)ค่า 5ขั้นตอนที่ 1: x = y 2.การใช้เนื้อที่หน่วยความขั้นตอนที่ 2: y = x จำขั้นตอนที่ 3: stop i
Program 3: Program: 2 แก้นิดหน่อย ให้เป็น Program: 4วิธีคิด : ถ้าไม่ใช้หน่วยความจำเพิ่มเลยล่ะ จะเป็นไปได้ไหม ขั้นตอนที่ 1: z = xขั้นตอนที่ 1: x = x + y ขั้นตอนที่ 2: x = yขั้นตอนที่ 2: y = y - x ขั้นตอนที่ 3: y = zขั้นตอนที่ 3: x = x + y ขั้นตอนที่ 4: stopขั้นตอนที่ 4: y = -yขั้นตอนที่ 5: stop $ สรุปได้ว่า โปรแกรมที่ 4 ดีกว่าโปรแกรมที่ 2 ทั้งด้านความเร็ว และการใช้ตัวแปรในหน่วยความจำ ส่วนโปรแกรมที่ 3 จะดีกว่าโปรแกรมที่ 2 ในด้านการใช้เนื้อที่ในหน่วย ความจำจำนวนครั้ง VS การใช้หน่วยความจำ ถ้าเปรียบเทียบความสำคัญของจำนวนขั้นตอนเทียบกับเนื้อที่ในหน่วยความจำที่ใช้แล้ว จำนวนขั้นตอนที่น้อยจะมีความสำคัญกว่าการใช้หน่วยความจำ เพราะการมีขั้นตอนน้อยจะทำให้การทำงานของโปรแกรมเร็วขึ้น ii
โครงสร้างข้อมูล (Data Structure) โครงสร้างข้อมูลแบบเชิงเส้น $ โครงสร้างข้อมูลแบบเชิงเส้น (linear data structures) เป็น หน่วยข้อมูลย่อยๆ ที่ถูกจัดวางในรูปแบบที่เหมาะสม แล้ว ชนิดข้อมูลที่ความสัมพันธ์ของข้อมูลเรียงต่อเนื่องกัน โดยข้อมูลตัวกำหนดลักษณะความสัมพันธ์และความเชื่อมโยงทางตรรกะเพื่อ ที่ 2 อยู่ต่อจาก ข้อมูลตัวที่ 1 ข้อมูลตัวที่ 3 อยู่ต่อจากข้อมูลตัวที่ 2การนำมาประยุกต์ใช้งานในโปรแกรม และข้อมูลตัวที่ n อยู่ต่อจากข้อมูลตัวที่ n - 1 ตัวอย่างโครงสร้างข้อมูลแบบเชิงเส้น เช่น$ การรวมประเภทข้อมูลเข้าไว้ด้วยกันจนกระทั่งกลายเป็นกลุ่มของ ❖ลิสต์ (list)ประเภทข้อมูล และมีการกำหนดคำนิยามของความสัมพันธ์ภายในกลุ่มข้อมูลไว้อย่างชัดเจน ❖อาร์เรย์ (array)$ wiki - a way of storing data in a computer so that it can be used effi-cientlyโครงสร้างข้อมูลทางตรรกะ! โครงสร้างข้อมูลทางตรรกะ (Logical data structures) เป็นโครงสร้างข้อมูลที่เกิดจากจินตนาการของผู้ใช้เพื่อใช้แก้ปัญหาในโปรแกรมที่สร้างขึ้น จำแนกได้เป็น 2 ประเภท ❖สแตก (stack) ❖คิว (queue) ❖ดีคิว (deque) ❖สตริง (string) iii
โครงสร้างข้อมูลแบบไม่เชิงเส้น$ โครงสร้างข้อมูลแบบไม่ใช่เชิงเส้น (Non-linear data struc-tures) เป็นชนิดข้อมูลที่ข้อมูลแต่ละตัวสามารถมีความสัมพันธ์กับข้อมูลอื่นได้หลายตัวตัวอย่างโครงสร้างข้อมูลแบบไม่ใช่เชิงเส้น❖ทรี (tree)❖กราฟ (graph) iv
Chapter 1Algorithmวัตถุประสงค์1.บอกขั้นตอนการพัฒนาโปรแกรมได้2.บอกความหมายของอัลกอริทึมและซูโดโค้ดได้3.สามารถเขียนอัลกริทึมและซูโดโค้ดได้
Section 1นิยามอัลกอริธึม! สิ่งสำคัญในการเขียนโปรแกรมก็คือ ควรมีหลักวิธีคิดที่ดีรวมถึงโปรแกรมต้องได้รับการออกแบบอย่างมีแบบแผนก่อนที่จะดำเนินในขั้นตอนการเขียนโปรแกรมต่อไป โดยกระบวนการที่ได้รับการออกแบบอย่างมีแบบแผนในที่นี้ก็คืออัลกอริธึม นั่นเอง! หากพูดโดยง่าย อัลกอริธึม ก็ไม่ได้แตกต่างไปจากการทำอาหาร ที่แต่ละคนสามารถปฏิบัติตาม ขั้นตอนการปรุงตามแต่ละเมนูที่ตำราแนะนำมา รวมถึงเครื่องปรุง อุปกรณ์ ผู้เรียนที่ศึกษาก็จะสามารถปรุงอาหารตามตำราและก็จะได้อาหารชนิดที่ต้องการทุกคนดังนั้น! อัลกอริธึม (Algorithm) หมายถึง ลำดับขั้นตอนวิธีในการทำงานของโปรแกรมเพื่อแก้ปัญหาปัญหาหนึ่ง ซึ่งถ้าปฏิบัติตามขั้นตอนอย่างถูกต้องแล้ว จะต้องสามารถช่วยแก้ปัญหาหรือประมวลผลตามความต้องการได้สำเร็จ สำหรับในการเขียนอธิบายอัลกอริธึมนั้น เราสามารถคิดอัลกอริธึมเพื่อมาแก้ปัญหาได้หลายแบบ 6
ตัวอย่างอัลกอริธึม(Algorithm) การต้มไข่ไก่ Algorithm 1 Vs Algorithm 2วัตถุดิบ : ไข่ไก่!ผลลัพธ์: ไข่ต้มสุก ! ผลที่ได้เหมือนกันคือ ไข่ต้ม ! ผลลัพธ์ Algorithm 1 สามารถทานได้เลย ส่วน ! Algorithm 2 ต้องปอกก่อนทาน ! สรุปคือ เราได้ผลลัพธ์ตามที่โจทย์ต้องการคือ ไข่ต้ม Algorithm 3 คุณยังไม่ได้ไข่ต้ม.........................เพราะ คุณยังไม่ได้ใส่ไข่ต้มลงไปนั้นเอง 7
Section 2 เราลองนำขั้นตอนการต้มไข่มาวิเคราะห์ ต้มน้ำให้เดือด!=> ! การกระทำ(Process)การวิเคราะห์ปัญหา ใส่ไข่! ! =>! การป้อนข้อมูล(Input) รอ 10 นาที! =>! การกระทำ(Process)! การพิจารณา ดับไฟ! ! =>! การกระทำ(Process)ขั้นตอนการทำงานเป็นการนำเข้าป้อนเข้าระบบถือเป็น Input ปอกไข่! ! =>! การกระทำ(Process)ขั้นตอนเกี่ยวกับการกระทำ(กริยา) ถือเป็น Process ผลลัพธ์ ! ! => ! ไข่ต้มสุก (Output)ขั้นตอนการนำข้อมูลออกจากระบบ แสดงผล ถือเป็น Output 8
ตัวอย่าง ต้องการคำนวณหาพื้นที่ของสามเหลี่ยมรูปหนึ่ง ตัวอย่าง อัลกอริธึมเพื่อทำการบวกราคาโดยใช้เครื่องคิดเลข1. วิเคราะห์ผลลัพธ์! : พื้นที่สามเหลี่ยม กำหนดวัตถุประสงค์ 1. วิเคราะห์ผลลัพธ์ : ยอดรวมราคาการคำนวณหาพื้นที่สามเหลี่ยม 2. กำหนดข้อมูลเข้า(Input)รูปแบบผลลัพธ์!(Output)! ! ยอดเงิน! พื้นที่สามเหลี่ยม = …………… 3. ขั้นตอนการประมวลผล (Process)2.กำหนดข้อมูลเข้า (Input)! ! ! ขั้นที่ 1 พิมพ์ยอดเงิน! ความยาวฐาน ! ขั้นที่ 2 กดเครื่องหมาย! ความสูง ! ขั้นที่ 3 วนการทำงาน3. ขั้นตอนการประมวลผล (Process) ! ขั้นที่ 4 กดเครื่องหมาย =! ขั้นที่ 1 ป้อนความยาวฐาน! ขั้นที่ 2 ป้อนความสูง ! ขั้นที่ 5 คำนวณยอดรวมราคา! ขั้นที่ 3 คำนวณพื้นที่สามเหลี่ยม จากสูตร 9
! ตัวอย่าง โยนเหรียญเสี่ยงทายเพื่อตัดสินใจว่าจะกิน ตัวอย่าง ต้องการหายอดรวมราคาสินค้าที่ซื้อ ! 1. วิเคราะห์ผลลัพธ์ : ราคาสินค้าทั้งหมดขนมปังหรือผลไม้ โดยมีเงื่อนไขว่า ถ้าออกหัวกินขนมปัง ถ้า ! 2. กำหนดข้อมูลเข้า(Input) :ออกก้อยกินผลไม้ ! ! ราคาสินค้าต่อชิ้น! 1. วิเคราะห์ผลลัพธ์ : กินอะไร(ผลไม้/ขนมปัง) ! ! จำนวนสินค้าที่ซื้อ! 2. กำหนดข้อมูลเข้า(Input) : ผลการโยน ! 3. ขั้นตอนการประมวลผล (Process)! 3. ขั้นตอนการประมวลผล (Process) ! ! ขั้นที่ 1 รับจำนวนสินค้าที่ซื้อ! ! ขั้นที่ 1 ดูเหรียญ! =>! รับข้อมูล ! ! ขั้นที่ 2 รับราคาสินค้าต่อชิ้น! ! ขั้นที่ 2 ถ้าออกหัว! => ไปขั้นตอนที่ 4 ! ! ขั้นที่ 3 ราคาสินค้า = นำราคาต่อชิ้น * จำนวนที่ซื้อ! ! ขั้นที่ 3 ถ้าออกก้อย! => ! ไปขั้นตอนที่ 6 ! ! ขั้นที่ 4 หากมีสินค้าอีกก็กลับไปที่ข้อ 1! ! ขั้นที่ 4 กินขนมปัง! => ! ไปขั้นตอนที่ 6 ! ! ขั้นที่ 5 นำราคาสินค้าในข้อที่ 3 มาบวกกัน! ! ขั้นที่ 5 กินผลไม้! => ไปขั้นตอนที่ 6 !!! ! ขั้นที่ 6 หยุด !! 10
Section 3การออกแบบอัลกอริธึม! ในการเขียนอธิบายอัลกอริธึมนั้น เราสามารถคิดอัลกอ Algorithm ต้มมาม่าริธึมเพื่อมาแก้ปัญหาได้หลายแบบ ซึ่งในแต่ละแบบเครื่องคอมพิวเตอร์ก็จะใช้ในหน่วยความจำ และเวลาในการ อัลกอริธึมที่ดีจะประกอบด้วยคุณสมบัติต่างๆดังนี้ประมวลผลไม่เท่ากัน ดังนั้น การจะเปรียบเทียบว่าโปรแกรม 1. อัลกอริธึมที่ดีต้องมีความถูกต้อง (Correctness)คอมพิวเตอร์ใครเก่งกว่ากันนั้นจึงใช้การเปรียบเทียบและ 2. อัลกอริธึมที่ดีต้องง่ายต่อการอ่าน(Readability)ประสิทธิภาพของอัลกอริธึมนั่นเอง 3. อัลกอริธึมที่ดีต้องสามารถปรับปรุงได้ง่ายต่ออนาคต(Ease of modification)! อัลกอริธึมของใครใช้เวลาในการประมวลผลและหน่วย 4. อัลกอริธึมที่ดีสามารถนำกลับมาใช้ใหม่ได้(Reusability)ความจำน้อยกว่า ถือว่าอัลกอริธึมนั้นฉลาดกว่าอีกอัลอกริธึม 5.อัลกอริธึมที่ดีต้องมีประสิทธิภาพ (Efficiency)! ประสิทธิภาพของอัลกอริธึม 11! จะพิจารณาอยู่ 2 ส่วนหลักๆ ดังนี้! 1. หน่วยความจำ(Memory) ที่จะต้องใช้ในการประมวล! 2. เวลา(Time) ที่ใช้ในการประมวลผล
! การควบคุมการทำงานของโปรแกรม (Program Con- ตัวอย่าง Flow Chart และ Pseudo Codetrol Flow)! การควบคุมการทำงานของโปรแกรม เป็นเครื่องมือที่ผู้พัฒนาโปรแกรมใช้ในการแสดงลำดับการทำงานของโปรแกรมหรือใช้อธิบายอัลกอริธึม ให้เป็นระบบและง่ายต่อความเข้าใจ โดยโครงสร้างอาจจะอยู่ในรูปแบบดังนี้คือ! 1. ผังงาน (Flowchart) ซึ่งเป็น Flow Diagram ชนิดหนึ่งสำหรับใช้อธิบายขั้นตอนการทำงานของโปรแกรมในลักษณะรูปภาพ! 2. รหัสเทียม (Pseudo code) จะมีสัญลักษณ์คล้ายกับภาษาอังกฤษ ก้ำกึ่งระหว่าภาษาอังกฤษกับภาษาคอมพิวเตอร์ใช้ในการอธิบายลักษณะโครงสร้างของข้อมูล และการทำงานของอัลกอริธึมที่เราเขียนขึ้น ! 12
! สัญลักษณ์ในผังงาน (Flow Chart) ! ประโยชน์ของผังงาน 1. ลำดับขั้นตอนการทำงานของโปรแกรม และสามารถนำไปเขียนโปรแกรมได้โดยไม่สับสน$ 2. ตรวจสอบความถูกต้อง และแก้ไขโปรแกรมได้ง่ายเมื่อเกิดข้อผิดพลาด$ 3. การปรับปรุง เปลี่ยนแปลง แก้ไข ทำได้อย่างสะดวกและรวดเร็ว$ 4. ทำให้ผู้อื่นสามารถศึกษาการทำงานของโปรแกรมได้อย่างง่าย และรวดเร็วมากขึ้น 13
ตัวอย่างผังงาน การถอนเงินจาก ATM ! วิธีการเขียนผังงานที่ดี ! 1. ใช้สัญลักษณ์ตามที่กำหนดไว้ ! 2. ใช้ลูกศรแสดงทิศทางการไหลของข้อมูลจากบนลงล่าง หรือจากซ้ายไปขวา ! 3. คำอธิบายในภาพสัญลักษณ์ผังงานควรสั้นกะทัดรัด และเข้าใจง่าย ! 4. ทุกแผนภาพต้องมีลูกศรแสดงทิศทางเข้า - ออก ! 5. ไม่ควรโยงเส้นเชื่อมผังงานที่อยู่ไกลมาก ๆ ควรใช้ สัญลักษณ์จุดเชื่อมต่อแทน ! 6. ผังงานควรมีการทดสอบความถูกต้องของการทำงาน ก่อนนำไปเขียนโปรแกรมจริง ! โครงสร้างพื้นฐานที่ใช้ในการเขียนโปรแกรม ! 1. โครงสร้างแบบลำดับ (Sequence Structure) ❖ ทำงานตามลำดับ ❖ ทำงานจากบนลงล่าง (จุดเริ่มต้นถึงสิ้นสุด) ❖ มีจุดเริ่มต้นจุดเดียว – จุดสิ้นสุดจุดเดียว ❖ อาจเรียกใช้โมดูลอื่นได้ 14
! Flowchart โครงสร้างแบบลำดับ ! ตัวอย่าง โปรแกรมรับข้อมูลจำนวนสินค้าและราคาสินค้า ภาพแสดง Flowchart การรับ จำนวนสินค้าและราคาสินค้า! ภาพแสดงการเขียนอัลกอริธึมและรหัสเทียงการรับสินค้าและราคา 15
! 2. โครงสร้างแบบเลือก (Selection Structure) ! ตัวอย่าง โครงสร้าง IF….THEN ❖ มีเงื่อนไขที่ต้องตัดสินใจเลือกการทำงาน ❖ ผลลัพธ์ของเงื่อนไขคือ จริง หรือ เท็จ เท่านั้น! ! ถ้าได้คะแนนสอบ 50 คะแนนขึ้นไป ให้พิมพ์ข้อความ ความ ‘You pass’ถ้าได้คะแนนต่ำกว่า 50 คะแนน ให้จบการ! 2.1 Flowchart แบบหนึ่งทางเลือก หรือ โครงสร้าง ทำงานIF….THENเป็นโครงสร้างที่ทดสอบเงื่อนไข แล้วเลือกว่าจะทำหรือไม่ทำก่อนที่จะไปทำงานอื่นต่อไปรหัสเทียม Pseudo code ภาพแสดง Flowchart และ อัลกอริธึมของคะแนนสอบโดยใช้ If IF $ <เงื่อนไข> THEN … (คำสั่งA เมื่อตรวจสอบว่าเงื่อนไขเป็นจริง)… 16
2.2 แบบ 2 ทางเลือก ! ตัวอย่าง โปรแกรมแสดงผลการสอบทางหน้าจอแบบ 2 ทางเลือก หรือ โครงสร้าง IF…THEN...ELSE ! ถ้าได้คะแนนสอบ 50 คะแนนขึ้นไป ให้พิมพ์ข้อความว่า ‘Pass’ ! ถ้าได้คะแนนต่ำกว่า 50 คะแนน ให้พิมพ์ข้อความว่า ‘Fail’ ภาพ Flowchart แบบ 2 ทาง เลือก ของผลการสอบรหัสเทียม Pseudo codeIF $ <เงื่อนไข> THEN….. (คำสั่งB)…..ELSE$ ...… (คำสั่งA)...…END IF ภาพแสดงการเขียนอัลกอริธึมและรหัสเทียงโดยใช้ if-else 17
! 2.3 แบบหลายทางเลือก หรือ โครงสร้าง ELSE…IF ภาพ Flowchart แสดงการ คิดผลการสอบแบบหลาย ทางเลือก! ตัวอย่าง โปรแกรมประมวลผลการเรียน! คะแนนสอบสูงกว่า 80 คะแนน ได้เกรด A !! คะแนนสอบ 70-79 คะแนนขึ้นไป ได้เกรด B! คะแนนสอบ 60-69 คะแนนขึ้นไป ได้เกรด C! คะแนนสอบ 50-59 คะแนนขึ้นไป ได้เกรด D! คะแนนสอบต่ำกว่า 50 คะแนน ได้เกรด F ภาพแสดงอัลกอริธีมและรหัสเทียมของการคิดเกรดใช้ if-else if 18
! 3. โครงสร้างแบบทำซ้ำหรือวนรอบ (Repetition or ตัวอย่าง โปรแกรมแสดงเลข 1-5Looping Structure) ภาพ Flowchart แสดงเลข 1-5 ❖ การวนซ้ำแบบทดสอบเงื่อนไขก่อน หรือ While โดยใช้ While ❖ มีเงื่อนไขในการหยุดการทำงาน ❖ ตรวจเงื่อนไขก่อนการทำงานทุกครั้ง ถ้าใช่ตามที่ เงื่อนไขต้องการ จะให้ทำงานต่อไป ❖ อาจไม่ได้ทำเลยแม้แต่ครั้งเดียว ภาพแสดงอัลกอริธึมและรหัสเทียงการแสดงเลข 1-5 ใช้ While 19
! 3.1 การวนซ้ำแบบทดสอบเงื่อนไขทีหลัง หรือ ชนิด Do- ตัวอย่าง แสดงแสดงค่าตัวเลขตั้งแต่เลข 1 ถึงเลข 5While ภาพ Flowchart แสดงเลข 1-5 ❖ มีเงื่อนไขในการหยุดการทำงาน โดยใช้ Do-While ❖ ได้ทำงานอย่างน้อย 1 ครั้ง ❖ หลังจากนั้นในแต่ละครั้งจะมีตรวจสอบเงื่อนไข ❖ ถ้าเงื่อนไขเป็นจริงก็จะวนรอบทำงานต่อ ถ้าเป็นเท็จ ออกจากลูป! ภาพแสดงอัลกอริธึมและรหัสเทียมแสดงเลข 1-5 ใช้ Do-While 20
! 3.2 การวนซ้ำแบบวนซ้ำแน่นอน ! ตัวอย่าง จงเขียนผังงานแสดงการทำงานของการแสดง ค่าตัวเลขตั้งแต่เลข 1 ถึงเลข 10 ❖ งานที่ต้องทำซ้ำเป็นจำนวนรอบที่แน่นอน ❖ ไม่มีเงื่อนไขในการหยุดการทำงาน ภาพ Flowchart แสดงเลข 1-10 ❖ หยุดทำงานเมื่อทำครบเป็นจำนวนรอบที่ต้องการ โดยใช้ For ❖ มีตัวนับ (Counter) คอยควบคุมจำนวนรอบ ภาพแสดงอัลกอริธีมและรหัสเทียงแสดงเลข 1-10 โดยใช้ For 21
แบบฝึกหัด1. จงเขียน Algorithm, Pseudo code, Flowchart ของโปรแกรมที่ 3. จงเขียน Flowchart สำหรับวนรอบรับค่าตัวเลข และในระหว่างรับกำหนดให้ต่อไปนี้ ให้หาผลรวมของตัวเลขที่รับเข้ามา โปรแกรมจะหยุดรับค่าเมื่อใส่ ตัวเลข -999 และจะแสดงผลรวมของตัวเลขทั้งหมดที่รับเข้ามาและ! 1.1 โปรแกรมคำนวณหาค่า y ของสมการ y = x^2 + 2x +10 หยุดทำงาน! 1.2 โปรแกรมแสดงยอดขาย ถ้าซื้อสินค้ามากกว่า 1000 บาทมี 4. จงเขียน Algorithm แบบทำงานซ้ำมา 2 ตัวอย่างส่วนลดให้ 100 บาท 22! 1.3 โปรแกรมแสดงยอดขายของร้านค้าแห่งหนึ่งมีนโยบาย ลดราคาให้ลูกค้า ถ้าเป็นชายจะลดให้ 50 บาท แต่ถ้าเป็นหญิง จะลดให้100 บาท1.4 โปรแกรมแสดงขนาดของการใช้ยาตามอายุของผู้ใช้! อายุมากกว่า 10 ปี แสดงข้อความรับประทานครั้งละ 3 ช้อนชา! อายุ 6-10 ปี แสดงข้อความรับประทานครั้งละ 2 ช้อนชา! อายุ 2-5 ปี แสดงข้อความรับประทานครั้งละ 1 ช้อนชา! เด็กอายุต่ำกว่า 1 ปี ห้ามรับประทาน2. จงเขียน Flowchart สำหรับวนรอบรับค่าตัวเลข แล้วแสดงค่าตัวเลขที่รับเข้ามาออกทางจอภาพ โดยที่เมื่อรับค่าตัวเลขเป็น -999 จะสิ้นสุดการวนรอบและจบโปรแกรม
23
Chapter 2 วัตถุประสงค์ 1.เข้าใจการวัดประสิทธิภาพของอัลกอริธึม 2.เข้าใจสภาวะของอัลกอริธึม
Section 1ประสิทธิภาพของอัลกอริธึม! ในการเขียนโปรแกรมคอมพิวเตอร์สิ่งที่สำคัญที่สุดที่จะ ดำเนินการแก้ไขกับส่วนใดได้บ้าง และส่งผลกระทบต่อกันหรือต้องคำนึงถึง คือ ผลลัพธ์ของการประมวลผลโดยจะต้องมี ไม่ อย่างไร!ความถูกต้อง แม่นยำ สามารถแก้ปัญหาได้ตรงตามที่ตั้งใจไว้ ! การประเมินประสิทธิภาพของอัลกอริธึม! ลักษณะสำคัญของโปรแกรมคอมพิวเตอร์ที่ดีไม่ควรใช้เวลาในการประมวลผลนานจนเกินไป ซึ่งการที่จะทำให้ ! การประเมินประสิทธิภาพของอัลกอริธึมแบ่งออกเป็น 2โปรแกรมคอมพิวเตอร์ลดเวลาในการประมวลผลลงได้นั้น จะ วิธี คือ การวิเคราะห์และวัดผล ดังนี้ต้องออกแบบอัลกอริธึมให้มีประสิทธิภาพ ! 1. การวิเคราะห์ประสิทธิภาพของอัลกอริธึม (Perform-! ประสิทธิภาพของอัลกอริธึม จะพิจารณาอยู่ 2 ส่วนหลัก ๆ ance Analysis) จะใช้วิธีการวิเคราะห์วิธีการทำงานของอัลกอได้แก่ ริธึม ❖ หน่วยความจำ (Memory) ที่จะต้องใช้ในการประมวล ! 2. การวัดประสิทธิภาพของอัลกอริธึม (Performance ผล Measurement) เป็นการวัดผลจากการทดลองจริง ❖ เวลา (Time) ที่จะต้องใช้ในการประมวลผล ! การวิเคราะห์ประสิทธิภาพของอัลกอริธึม! โดยทั้ง 2 สิ่งนี้มักถูกใช้เป็นตัวตัดสินประสิทธิภาพขอ ! การวิเคราะห์ประสิทธิภาพของอัลกอริธึมแบ่งออกเป็น 2งอัลกอริธึมว่ามีประสิทธิภาพมากหรือน้อยเพียงใด ดังนั้น ถ้า ส่วน ดังนี้จำเป็นจะต้องดำเนินการแก้ไขปรับปรุงเพื่อเพิ่มประสิทธิภาพของอัลกอริทึม จำเป็นจะต้องพิจารณาก่อนว่าจะสามารถ ! 1. การวิเคราะห์หน่วยความจำที่ต้องใช้ในการประมวล ผล (Space Complexity) 25
! 2. การวิเคราะห์เวลาที่ต้องใช้ในการประมวลผล (Time ! องค์ประกอบของ Space ComplexityComplexity) ! การวิเคราะห์ Space Complexity ประกอบด้วย 3 ส่วน! การวิเคราะห์ Space Complexity คือ Instruction Space, Data Space และ Environment Stack Space ดังนี้! การวิเคราะห์ Space Complexity ของอัลกอริทึมคือการวิเคราะห์ว่าจะต้องใช้หน่วยความจำทั้งหมดเท่าไรในการประ ! 1) Instruction Spaceมวลผลอัลกอริทึมนั้น สาเหตุที่ต้องทราบจำนวนของหน่วยความจำที่จะต้องใช้นั้นมีเหตุผลดังนี้ ! คือ จำนวนของหน่วยความจำที่คอมไพเลอร์จำเป็นต้อง ใช้ขณะทำการคอมไพล์โปรแกรม ซึ่งจำนวนหน่วยความจำที่ ❖ ทำให้ทราบว่าอัลกอริทึมนั้นสามารถรองรับจำนวน ต้องใช้จะขึ้นอยู่กับคอมไพเลอร์แต่ละประเภท ข้อมูลที่ส่งเข้ามาประมวลผล (Input Data) ได้มากที่สุด เท่าใด เพื่อให้อัลกอริทึมนั้นสามารถประมวลผลได้อยู่ ! 2) Data Space ❖ กรณีที่ต้องประมวลผลบนเครื่องคอมพิวเตอร์ที่ใช้งาน ! คือ จำนวนหน่วยความจำที่ต้องใช้สำหรับเก็บค่าคงที่ ร่วมกันหลายคนในเครือข่าย จำเป็นจะต้องทราบขนาด และตัวแปรทั้งหมดที่ต้องใช้ในการประมวลผลโปรแกรม ซึ่ง ของหน่วยความจำที่จะต้องใช้ในการประมวลผลอัลกอ Data Space แบ่งออกเป็น 2 ประเภท คือ ริธึม เพื่อไม่ให้กระทบกับการทำงานของคนอื่น ❖หน่วยความจำแบบ static คือ จำนวนของหน่วยความ ❖ เพื่อเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติดตั้ง จำที่ต้องใช้อย่างแน่นอน ไม่มีการเปลี่ยนแปลง ประกอบ โปรแกรมที่พัฒนาขึ้นได้อย่างเหมาะสม เพื่อถ้านำไปติด ด้วยหน่วยความจำที่ใช้เก็บค่าคงที่และตัวแปรประเภท ตั้งที่เครื่องที่มีหน่วยความจำไม่เพียงพอ โปรแกรมก็จะไม่ array ทำงาน ❖หน่วยความจำแบบ dynamic คือ จำนวนของหน่วย ความจำที่ใช้ในการประมวลผลสามารถเปลี่ยนแปลงได้ และจะทราบจำนวนหน่วยความจำที่จะใช้ก็ต่อเมื่อ โปรแกรมกำลังทำงานอย 26
! 3) Environment Stack Space ! ในตัวอย่างนี้มีตัวแปรที่ใช้ 1 ตัวคือ n ซึ่งเป็นตัวแปรชนิด! คือ หน่วยความจำที่ต้องใช้ในการเก็บผลลัพธ์ของข้อมูล integer แต่ลักษณะการทำงานเป็นแบบ recursive ดังนั้นเอาไว้ เพื่อรอเวลาที่จะนำผลลัพธ์นั้นกลับไปประมวลผลอีกครั้ง หน่วยความจำส่วนใหญ่จะไปขึ้นอยู่กับความลึกของการทำ re-หน่วยความจำประเภทนี้จะเกิดขึ้นเมื่อมีการร้องขอให้นำมาใช้ cursive ซึ่งจะเห็นว่า การประมวลผลของคำสั่ง if จะมีอยู่ด้วยเท่านั้น กัน 2 แบบ คือ เมื่อ n = 0 และเมื่อ n มีค่าใดๆ ดังนั้น ความ! 4) เทคนิคการเขียนโปรแกรมคอมพิวเตอร์ที่ต้องร้องขอ ลึกของการทำ recursive จะมีค่าเท่ากับ 1 (กรณีเมื่อ n = 0)พื้นที่ในหน่วยความจำประเภทนี้มาใช้ก็คือ การทำ Recursive หรือมีค่าเท่ากับ n (เมื่อ n เป็นค่าใดๆ) เท่านั้นโดยหน่วยความจำที่ต้องใช้ก็จะขึ้นอยู่กับความลึกของการทำRecursive ด้วย ยิ่งลึกมากก็จะยิ่งใช้หน่วยความจำมากขึ้น ! สรุปออกมาได้ว่า ความลึกของการทำ Recursive คือตามไปด้วย ค่าที่มากที่สุดระหว่าง 1 กับ n สามารถแทนได้ด้วยสัญลักษณ์ตัวอย่างการวิเคราะห์ Space Complexity Max {1, n}! จากตัวอย่าง ตัวแปรที่ใช้จะมีอยู่ด้วยกัน 3 ตัวแปร ! ขั้นต่อไปจะพิจารณาว่า แต่ละครั้งที่มีการเรียกใช้ฟังก์ชันประกอบด้วย num1, num2 และ temp ซึ่งเป็นตัวแปรชนิด in- Factorial จะต้องใช้หน่วยความจำในการเก็บข้อมูลเท่าไร ซึ่งteger ทั้งหมด โดยจะใช้หน่วยความจำในการเก็บตัวแปร จากตัวอย่างจะต้องใช้หน่วยความจำทั้งสิ้น 4 bytes (สำหรับประเภท integer ตัวแปรละ 2 bytes ดังนั้น จะต้องใช้หน่วย เก็บ address 2 bytes และตัวแปรชนิด integer อีก 2 bytes)ความจำทั้งสิ้น 3x2 = 6 bytes ทำให้สามารถสรุปได้ว่า ต้องใช้หน่วยความจำสำหรับอัลกอ ริธึมที่ 2 ทั้งหมดเท่ากับ 4xMax{1, n} bytes 27
! การวิเคราะห์ Time Complexity ❖ถ้าใช้คอมไพเลอร์ตัวเดียวกัน code ที่สั้นกว่า ย่อมใช้ เวลาในการประมวลผลได้น้อยกว่า! Time Complexity คือ เวลาที่เครื่องคอมพิวเตอร์ต้องใช้ในการประมวลผลอัลกอริธึม เหตุผลที่ควรทราบเวลาที่ต้องใช้ ! เวลาในการประมวลผลของโปรแกรมมีหลายประการด้วยกัน ยกตัวอย่างเช่น ❖ Compile Time คือ เวลาที่ใช้ในการตรวจสอบ ❖ ทำให้สามารถประมาณเวลาทั้งหมดที่ต้องใช้ใน ไวยากรณ์ (syntax) ของ code ว่าเขียนได้ถูกต้องหรือไม่ โปรแกรม ถ้ามีข้อผิดพลาดเกิดขึ้นคอมไพเลอร์จะแจ้งเตือนให้ทราบ ❖ สามารถมุ่งประเด็นการแก้ไขไปที่อัลกอริธึมที่ใช้เวลา ❖ Run Time หรือ Execution Time คือ เวลาที่เครื่อง ในการประมวลผลนานๆ ทำให้ไม่ต้องแก้ไขทั้งโปรแกรม คอมพิวเตอร์ใช้ในการประมวลผล ❖ โปรแกรมคอมพิวเตอร์ที่ทำงานแบบ Interactive เวลา ! การนับตัวดำเนินการ ที่ใช้ในการประมวลผลแต่ละขั้นตอนจะเป็นสิ่งสำคัญ เพราะผู้ใช้ไม่ควรรอการประมวลผลเป็นเวลานานในการ ! ในการวิเคราะห์ Time Complexity วิธีที่มักใช้กันบ่อยๆ Interactive แต่ละครั้ง คือ การนับตัวดำเนินการ (Operation count) ในอัลกอริธึม โดยพิจารณาลักษณะของตัวดำเนินการควบคู่ไปด้วย สามารถ ❖ สามารถเลือกคุณลักษณะของคอมพิวเตอร์ที่จะใช้ติด สรุปออกมาได้เป็นหลักคร่าวๆ ดังนี้ ตั้งโปรแกรมที่พัฒนาขึ้นได้อย่างเหมาะสม! หลักในการพิจารณาอย่างคร่าวๆ ถึงเวลาที่ต้องใช้ในการประมวลผล เช่น ❖ โปรแกรมจะสามารถประมวลผลได้เร็วกว่า เมื่ออยู่บน เครื่องคอมพิวเตอร์ที่มีความเร็วในการประมวลผลสูงกว่า 28
! 1) แบบ Linear Loops ถ้าให้ f(n) แทนประสิทธิภาพ และ n แทนจำนวนรอบการ ทำงาน สามารถเขียนเป็นสมการวัดประสิทธิภาพของอัลกอ! อัลกอริ`m7มมีการทำงานแบบวนรอบ (Loop) โดยแต่ละ ริธึมแบบ Linear loop ได้ดังนี้loop จะมีการเพิ่มหรือลดค่าในปริมาณที่คงที่ เช่นเพิ่มค่าตัวแปรขึ้นทีละหนึ่งในแต่ละรอบ เช่นถ้าให้ f(n) แทนประสิทธิภาพ และ n แทนจำนวนรอบการ 3) แบบ Nested Loopsทำงาน สามารถเขียนเป็นสมการวัดประสิทธิภาพของอัลกอริธึมแบบ Linear loop ได้ดังนี คือ ลักษณะของอัลกอริธึมที่มี loop ซ้อนอยู่ภายใน loop โดย ประสิทธิภาพของอัลกอริธึมก็จะมีค่าเท่ากับจำนวน loop ทั้งหมดที่จะต้องประมวลผล ซึ่งหาได้จากการเอาจำนวน loop ที่ซ้อนกันมาคูณกัน2) แบบ Logarithmic Loopsอัลกอริธึมจะทำงานแบบ Loop โดยการทำงานภายในแต่ละloop จะเพิ่มหรือลดค่าเป็นเท่าตัว เช่น คูณเพิ่มค่าตัวแปรขึ้นทีละ 2 เท่าในแต่ละรอบ 29
สภาวะประสิทธิภาพของอัลกอริธึม ❖Best-case ! คือ การวิเคราะห์อัลกอริทึมเมื่อข้อมูลที่เข้ามาประมวลผล! ลักษณะของกลุ่มข้อมูลที่เข้ามาประมวลผล สามารถที่จะ ส่งผลให้อัลกอริทึมมีประสิทธิภาพดีที่สุด และใช้เวลาในการแบ่งประสิทธิภาพของอัลกอริทึมออกเป็น 3 สภาวะด้วยกัน ซึ่ง ประมวลผลน้อยที่สุดด้วยในการวิเคราะห์ประสิทธิภาพของอัลกอริทึมเราจะต้องมีการระบุด้วยว่า ค่าผลลัพธ์ที่เราได้จากการวิเคราะห์นั้น พิจารณา ❖Worst-caseเมื่ออัลกอริธึมอยู่ในสภาวะใด ซึ่งแบ่งออกเป็น ! คือ การวิเคราะห์อัลกอริทึมเมื่อข้อมูลที่เข้ามาประมวลผล ส่งผลให้อัลกอริทึมมีประสิทธิภาพแย่ที่สุด และใช้เวลาในการ 30
ประมวลผลนานที่สุดด้วย ซึ่งกรณีนี้ค่าที่ได้จากการวิเคราะห์ ! ฟังก์ชันการเติบโตทางเวลา (Growth in Run Time)ต้องมีค่ามากที่สุดเมื่อเทียบกับกรณีอื่น ! ค่าฟังก์ชันที่ใช้อธิบายถึงพฤติกรรมแนวโน้มการเติบโต ❖Average-case ทางเวลาของอัลกอริธึม หรือฟังก์ชันเติบโตทางเวลา (Growth in Run Time) นั้น เป็นค่าฟังก์ชันทางคณิตศาสตร์ที่แสดงถึง! คือ การวิเคราะห์อัลกอริทึมเมื่อข้อมูลที่เข้ามาประมวลผล ความสัมพันธ์ระหว่างปริมาณข้อมูลที่กำลังประมวลผล กับส่งผลให้อัลกอริทึมโดยเฉลี่ยมีค่าประมาณที่สามารถระบุได้ เวลาที่ต้องใช้ในการประมวลผลข้อมูลนั้นให้เสร็จว่ามีความ สัมพันธ์กันอย่างไร โดยการคำนวณหาค่า Run Time ของอัล! โดยส่วนใหญ่มักนิยมเปรียบเทียบประสิทธิภาพของอัล กอริธึมหนึ่ง ๆ เราสามารถหาได้จากการคำนวณ Stepกอริทึมในสภาวะ Worst-case เนื่องจากเป็นสภาวะที่ใช้ Countsหน่วยความจำมากที่สุดและใช้เวลาในการประมวลผลนานที่สุด จึงถือเป็นอีกสิ่งหนึ่งที่ใช้รับประกันได้ว่า อัลกอริธึมนั้นๆ ! การคำนวณ Step Counts จะพิจารณาหางานทั้งหมดที่จะไม่ทำงานแย่ไปกว่าค่านี้อีกแล้ว ใช้ในการรับประกัน อัลกอริธึมนั้นต้องทำ นั่นคือ หาว่าจะต้องประมวลผลคำสั่งประสิทธิภาพของอัลกอริธึม ทั้งหมดที่อยู่ภายในอัลกอริธึมเป็นจำนวนรวมทั้งสิ้นกี่ครั้ง ตัวอย่างการคำนวณค่า Step Countsสัญลักษณ์ Asymptotic! สัญลักษณ์ Asymptotic คือ ฟังก์ชันของเวลาที่ใช้ในการประมวลผลอัลกอริธึมนั้น ๆ โดยพิจารณาค่าเมื่ออัลกอริธึมนั้นมีปริมาณข้อมูลมาก ๆ สมมติให้มีค่าเป็นอนันต์ (Infinity)แล้วพิจารณาว่า ต้องใช้เวลาในการประมวลผลมีขอบเขตของแนวโน้มการเติบโตทางเวลา (Growth in Run Time) เป็นอย่างไร ซึ่งเขียนแทนออกมาเป็นฟังก์ชันทางคณิตศาสตร์ หรืออาจกล่าวได้ว่า เพื่อเป็นการอธิบายให้เห็นภาพรวมของพฤติกรรมทางเวลาของอัลกอริธึมนั้นๆ 31
! สัญลักษณ์ Big-Oh หรือ O ( )! สัญลักษณ์ Big-Oh เป็นการอธิบายถึงขอบเขตบนของฟังก์ชันการเติบโตทางเวลา (Upper-bound function)สำหรับอัลกอริธึมหนึ่ง ๆ ว่าเวลาที่ใช้ในการประมวลผลสูงสุดไม่ว่า N จะมีค่าเป็นเท่าไรก็ตาม จะใช้เวลาไม่เกินเวลาที่คำนวณได้จากฟังก์ชันนี้ สัญลักษณ์ที่ใช้สื่อความหมายคือ O () Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do tempor incididunt ut labore et dolore magna aliqua. 32
Section 2แบบฝึกหัด1.จงเรียงลำดับฟังก์ชันการทำงานต่อไปนี้ตามอัตราการเจริญ 7.สมมติให้แต่ละโปรแกรมใช้เวลาในการทำงานดังนี้เติบโต2.จงเปรียบเทียบอัตราการเจริญเติบโตของ จงแสดง BigO ของแต่ละโปรแกรมพร้อมทั้งเรียงลำดับ3.จงหาค่า BigO ของ ประสิทธิภาพของโปรแกรมจากดีสุดไปช้าสุด4. จงหาค่า BigO ของ 1005. จงหาค่า BigO ของ 100N + 16. จงหาค่า BigO ของ 20nlogn +5N 33
Chapter 3Array Structure วัตถุประสงค์ 1. บอกคุณสมบัติโครงสร้างข้อมูลแบบอาร์เรย์ได้ 2. สามารถอ้างอิงตำแหน่งสมาชิกและคำนวณหา สมาชิกในอาร์เรย์ได้ 3. เข้าใจหลักการเก็บอาร์เรย์ในหน่วยความจำ 4. สามารถคำนวณหาแอดเดรสในหน่วยความจำ ของอาร์เรย์ได้
นิยามโครงสร้างอาร์เรย์ (Array)! อาร์เรย์(Array) เป็นโครงสร้างข้อมูลที่ใช้เก็บข้อมูลชนิดเดียวกัน เป็นกลุ่มหรือชุดที่เรียงติดต่อกันเป็นแถว มีขอบเขตจำกัดและมีขนาดคงที่# ข้อมูลชนิดเดียวกัน คือ ข้อมูลทุกตัวที่อยู่ในอาร์เรย์จะต้องเป็นข้อมูลชนิดเดียวกันเท่านั้น เช่นถ้าเป็นอาร์เรย์ชนิดจำนวนเต็ม ข้อมูลทุกตัวในอาร์เรย์ก็ต้องเป็นชนิดจำนวนเต็ม ไม่สามารถเก็บข้อมูลต่างชนิดกันได้ xxxv
หากในการเขียนโปรแกรมต้องการ # ดังนั้นหากต้องการเก็บค่าใหม่จึงต้องกำจัดค่าเดิมทิ้ง ตัวแปร 1 ตัวมาเก็บค่าจำนวนเต็ม 1 ก่อน แต่ตัวแปรอาร์เรย์นั้นเปรียบเสมือนการนำกล่องมาเรียง จำนวน เราสามารถประกาศตัวแปร ต่อกันเป็นชุด ทำให้เก็บค่าได้จำนวนมาก โดยในการเก็บหรือ เป็น int x ; โดยที่ ตัวแปรตัวนี้จะเก็บ การเข้าถึงนั้นต้องอ้างอิงจากลำดับของกล่อง ค่าได้เพียง 1 ค่าเท่านั้น ซึ่งหาก # นอกจากนั้นแล้วอะเรย์ยังแตกต่างจากตัวแปรเรื่อง ต้องการตัวแปรมาเก็บจำนวนเต็ม 50 ตำแหน่งที่อยู่ หากสร้างตัวแปรมา 3 ตัว คือ int a, b, c; ตัวแปรจำนวนจะต้องทำการประกาศตัวแปรเลย 50 ตัว เช่น int x1, x2 ทั้ง 3 จะอยู่กระจัดกระจายซึ่งอาจไม่ได้เรียงติดกันในหน่วย,x3, x4, x5.........X50; ซึ่งเป็นการยุ่งยากในการเขียนโปรแกรม ความจำ แต่ถ้าเป็นตัวแปรอะเรย์ int a[]=new int[3]; แต่ละ กล่องของอะเรย์ a นี้จะเรียงติดกัน# ถ้าหากตัวแปร 1 ตัวเปรียบเสมือนกล่องๆหนึ่ง โดยที่กล่องนี้จะมีขนาดเล็กหรือใหญ่นั้นจะขึ้นอยู่กับชนิดของข้อมูล ภาพแสดงการเก็บ Array ในหน่วยความจำหรือ Data Type ของตัวแปร และมีเงื่อนไขว่ากล่องหนึ่งสามารถเก็บค่าได้เพียงค่าเดียวเท่านั้น#ภาพแสดง Array ซึ่งเปรียบเสมือนกล่อง xxxvi
Section 1อาร์เรย์ 1 มิติ (One Dimension Array)! มีการจัดเก็บข้อมูลในลักษณะต่อเนื่องกันเป็นแถว ซึ่งจะ เท่ากับ 5 อีลีเมนต์ ซึ่งการประกาศตัวแปรนี้จะจองหน่วยความนำเสนอในมุมมองแบบแนวตั้งแลแนวนอนก็ได้สัญลักษณ์ที่ใช้ จำเท่ากับ 2 byte * 5 = 10 byteคือ array_name[size] อาร์เรย์ grades! รูปแบบทั่วไปของโครงสร้างข้อมูลอาร์เรย์ 1 มิติ อาร์เรย์ name! รูปแบบ ArrayName [L:U] ในการเข้าถึงแต่ละอีลีเมนต์สามารถกระทำได้โดยการระบุค่า ดัชนี (Index)! โดย ArrayName คือ ชื่อของอาร์เรย์ 37! L คือ ขอบเขตล่างสุด (Lower Bound)! U คือ ขอบเขตบนสุด (Upper Bound)! การประกาศอาร์เรย์ 1 มิติ ในภาษา Visual Basic! Dim grades (5) as integer เป็นการประกาศตัวแปรแบบอาร์เรย์ 1 มิติชื่อ grade ให้เป็นข้อมูลแบบตัวเลขโดยมีขนาดเท่ากับ 5 อีลีเมนต์ ซึ่งการประกาศตัวแปรนี้จะจองหน่วยความจำเท่ากับ 2 byte * 5 = 10 byte! Dim name (5) as String เป็นการประกาศตัวแปรแบบอาร์เรย์ 1 มิติชื่อ name ให้เป็นข้อมูลแบบอักษรโดยมีขนาด
! grades(0) อ้างถึงค่า grades แรกที่เก็บใน grades ar- grades (0) = 98;ray คือ A grades (i) = grades(0) - 11;! grades(4) อ้างถึงค่า grades ลำดับที่ห้าที่เก็บใน grades (2) = 2 * (grades(0) - 6);grades array F grades (3) = 79;! name(2) อ้างถึงค่า name ลำดับที่สามที่เก็บใน David grades (4) = (grades(2) + grades(3) - 3 / 2;! total = grades(0) + grades(1) + grades(2) + grades(3) ภาพแสดงการเก็บข้อมูลในลักษณะของ Array ! ค่าตัวเลขอีลีเมนต์ไม่จำเป็นต้องเป็นตัวเลขโดยตรง อาจ เป็นตัวแปร หรือพจน์ของการกระทำที่ได้เป็นจำนวนเต็มก็ได้! ในการอ้างอิงข้อมูลในอาร์เรย์ ค่าดัชนีที่ใช้ในการอ้างอิง เช่นจะเริ่มต้นที่ 0 เสมอทั้งนี้เพื่อให้การเข้าถึงข้อมูลมีความรวดเร็วขึ้น จากรูป จะเห็นว่าค่าดัชนีจะเป็นตัวอ้างอิงถึงข้อมูลแต่ละอีลี $เมนต์การเข้าถึงข้อมูลสามารถทำได้โดยการเลื่อนตำแหน่ง ! grades(i)ของค่าดัชนีเพื่อไปยังอีลีเมนต์ต่างๆ ที่ต้องการ โดยเริ่มต้อง ! grades(2 * i)จากตำแหน่งแรก จากตัวอย่างจะเป็นการเลื่อนตำแหน่งไปที่อี ! grades(j - i)ลีเมนต์ตัวที่ 3 นั่นเอง! ตัวแปรอาร์เรย์สามารถใช้งานได้เหมือนกับตัวแปรทั่วไป !ตัวอย่างการใช้งานตัวแปร grades ที่เป็นอาร์เรย์ของจำนวนเต็ม 5 ตัว เช่น ! ประโยชน์ที่เห็นได้ชัดอีกอย่างของการใช้พจน์ของ จำนวนเต็มแทนการกำหนดค่าคงที่คือการใช้ร่วมกับการวนลูป for เช่น total = grades(1) + grades(2) + grades(3) + grades(4)+ grades(5) ! เปลี่ยนเป็น !! 38
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143