ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยBanlue Tangwongsan ได้เปลี่ยน 10 ปีที่แล้ว
1
Week 5 การทำซ้ำโดย while loop และ do while loop
2
Outline Loop while Statement do-while Statement Mini Debugging Lab
การใช้ Loop ในภาษา C สามารถทำได้โดยใช้คำสั่ง “while”, “do while” และ “for” ใน คาบเรียนนี้ จะเรียน “while” และ “do while” ก่อน และเรียน “for” ในคาบถัดไป
3
Loop ในการเขียนโปรแกรม จะมีการประมวลผลซ้ำ (Loop หรือ Iterate) เพื่อให้ โปรแกรมทำงานตาม Statement หรือการประมวลผล ที่กำหนดไว้ ซ้ำมากกว่า 1 ครั้ง โดยไม่จำเป็นที่จะต้องเขียน Statement นั้น ซ้ำไปซ้ำมาในโค้ด การทำงานจะทำงานตาม Statement ไปจนหมด แล้ว ถ้าหาก เงื่อนไขที่กำหนดไว้ให้ทำซ้ำ ยังเป็นจริง โปรแกรมจะวนกลับไปทำงานตาม Statement อีกรอบ จนกว่า เงื่อนไขที่กำหนดไว้จะเป็นเท็จ
4
ส่วนประกอบของการ iteration
มีอยู่ 3 ประเภท Initialization คือ การกำหนดค่าเริ่มต้นของตัวแปรที่จะเป็นเงื่อนไขในการ iteration เช่น x = 1 Testing คือ การทดสอบว่า เงื่อนไขที่ทำการ Iteration นั้นยังเป็นจริงหรือไม่ จะมีการทำ Iteration ไปเรื่อยๆ หากเงื่อนไขยังเป็นจริง เช่น x > 99 Incrementing เป็นการเปลี่ยนแปลงค่าของตัวแปรที่ใช้เป็นเงื่อนไขในการ Iteration เช่น x = x + 1 การทำงานของ Loop จะมีการกำหนดเงื่อนไขที่จะให้ โปรแกรมทำงานซ้ำ และ เงื่อนไขที่จะทำให้โปรแกรมหยุดการทำงานซ้ำ โดยทั่วไป สามารถใช้ตัวแปรมาช่วยในการกำหนดเงื่อนไขดังกล่าวได้ เช่น กำหนดให้ตัวแปร x เป็นจำนวนครั้ง จะทำเงื่อนไขเดิมซ้ำเรื่อยๆ หากจำนวนครั้งยังน้อยกว่า 10 หรือ x < 10 นั่นเอง และ ทุกครั้งที่ทำงานจะต้องมีการเพิ่มค่าของตัวแปร x เข้าไป ดังนั้น ส่วนประกอบของการทำซ้ำ หรือ Iteration จึงประกอบไปด้วย 3 ส่วน คือ Initialization เพื่อกำหนดค่าเริ่มต้นของตัวแปรที่ใช้ทดสอบ Testing ดูว่าค่าของตัวแปรนั้นยังอยู่ในเงื่อนไขที่ให้ทำซ้ำอยู่หรือไม่ เปลี่ยนแปลงค่าของตัวแปรที่ใช้ทดสอบ
5
ประเภทของ Iteration Statement
คือ วิธีการทำให้โปรแกรมทำงานเป็น Loop ได้ ในภาษา C มีอยู่ 4 ชนิดด้วยกัน while statement do-while statement for statement break and continue statement วิธีการมีอยู่ 4 ประเภท while do while for break และ continue สำหรับประเภทที่ 4 break และ continue จะเป็นคำสั่งที่สามารถใช้ร่วมกับ 1-3 เพื่อกำหนดเงื่อนไขให้ Loop หยุดทำงาน หรือให้ Loop ทำงานต่อไป
6
while statement
7
while Statement มีการตรวจสอบเงื่อนไขก่อน หากเงื่อนไขเป็นจริง โปรแกรมจะเริ่มทำตาม Statement ที่กำหนดไว้ แล้วกลับไปเริ่มต้นใหม่ จนกว่าเงื่อนไขจะเป็นไม่เป็นจริง ถึงจะหยุดการทำงาน แล้วออกไปจาก Loop การใช้ while จะแตกต่างกับ do while จะมีลักษณะการใช้งานคล้ายๆ กัน แต่แตกต่างกันตรงที่ว่า while จะมีการตรวจสอบเงื่อนไขก่อน ถึงจะเริ่มทำในครั้งแรก และยังจะตรวจสอบเงื่อนไขสำหรับตอบต่อๆ ไปอีกด้วย แต่ do while จะเริ่มทำทำงานตามคำสั่งก่อน 1 ครั้ง จากนั้นถึงจะตรวจสอบเงื่อนไงสำหรับรอบต่อ ๆไป
8
Syntax while (condition) { statement1; statement2; ... statementN; }
จะเริ่มต้นด้วยการกำหนดเงื่อนไข ที่จะให้ทำงานเป็น Loop ก่อนเสมอ และภายใน statement ใน Loop ควรจะมี statement ที่ทำการเปลี่ยนแปลงค่าตัวแปรที่ใช้ตรวจสอบ มิเช่นนั้น Loop อาจทำงานไม่หยุด
9
Flowchart Entry Statement 2 True Statement 1 False Exit expr
จาก Flowchart จะพบว่า เริ่มต้น จะต้องมีการทดสอบ เงื่อนไข (Condition) จาก Expression (expr) เสมอ ว่าเป็นจริงหรือไม่ False Exit
10
Example Example 1 พิมพ์เลข 1 ถึง 10 โดยใช้ while loop Example 2 เลือกการทำงานจากตัวเลข Menu ที่กำหนดไว้ หากเลือกตัวเลขนอกเหนือที่กำหนดไว้ จะต้อง ใส่ตัวเลขที่เลือกใหม่
11
Example 1 #include <stdio.h> void main() { int count; count = 1; printf(“Print count from 1 to 10\n”); while (count <= 10) { printf(“%d ”, count); count++; } printf(“\n”); ในตัวอย่างนี้ จะพิมพ์ตัวเลขตั้งแต่ 1 ถึง 10 เงื่อนไขที่ให้ loop ทำงานคือ ตราบใด ที่ ตัวแปร count น้อยกว่าหรือเท่ากับ 10 ให้ทำงานต่อไปเรื่อยๆ while (count <= 10) โดยที่ ตัวแปร count จะมีค่าเริ่มต้นเท่ากับ 1 และภายใน Loop จะมีการเปลี่ยนแปลงค่าของตัวแปร count คือ ทุกๆ รอบการทำงาน ตัวแปร count จะมีค่าเพิ่มขึ้นมา 1 count++ Print count from 1 to 10 ตัวอย่าง Output จากการทำงาน
12
Example 2 #include <stdio.h> int main() { int a; /* initatialize value of a so that it can enter the loop */ a = 4; while (a != 1 && a !=2 && a !=3) { printf("1. Check spelling\n"); printf("2. Correct spelling errors\n"); printf("3. Display spelling errors\n"); printf("Enter your choice (1-3): "); scanf(“\n%d", &a); /* read selection from keyboard */ switch(a) { case 1: printf("Check spelling\n"); break; case 2: printf("Correct spelling errors\n"); case 3: printf("Display spelling errors\n"); default: /* do nothing */ } จากตัวอย่างนี้ ผู้ใช้จะต้องเลือกตัวเลือกที่มาจาก 1 และ 2 และ 3 หากผู้ใช้ใส่ตัวเลือกนอกเหนือจาก 1 และ 2 และ 3 Loop จะทำการรับค่าซ้ำไปเรื่อยๆ จนกว่าผู้ใช้จะใส่ตัวเลขให้ตรงเงื่อนไข สิ่งที่ทำซ้ำใน Loop คือ การแสดงผลตัวเลือกในเมนูออกมาทุกครั้ง และรับค่าจากผู้ใช้ เนื่องจากการใช้งาน while loop จะต้องการตรวจสอบเงื่อนไขก่อนมีเงื่อนไข จึงต้องมีการกำหนดค่าตัวแปร a ที่ใช้ในการตรวจสอบเงื่อนไข ให้มีค่าเริ่มต้นที่จะสามารถทำให้ Loop เริ่มทำงานนั่นเอง นั่นก็คือ Loop จะทำงานได้เมื่อ ตัวแปร a ไม่ค่าไม่เท่ากับ 1 และ 2 และ 3 ดังนั้นตัวแปร a จะถูกกำหนดให้เป็นค่าใดๆ ก็ได้ที่นอกเหนือไปจาก 1 และ 2 และ 3 Note ในคำสั่ง scanf จะใช้ scanf(“\n%d", &a); มีการใส่ \n เข้ามา เนื่องจากการใส่ค่าลงไป จะกดตัวอักษรและ Enter แต่โปรแกรมจะทำการอ่านค่าตัวอักษร ในรอบแรกและรอบถัดไปจะอ่านค่า Enter ทำให้ในการทำงานรอบที่สองโปรแกรมไม่รอรับค่า ละเพื่อให้การทำงานในรอบต่อๆ ไปสามารถทำได้ จะมีการใช่ \n เพื่อให้โปรแกรมทิ้งค่า Enter ไปแล้วรอรับอักษรรอบใหม่ ซึ่งสามารถใช้คำสั่ง getchar แทนได้
13
Example 2 1. Check spelling 2. Correct spelling errors
3. Display spelling errors Enter your choice (1-3): 5 Enter your choice (1-3): 1 Check spelling ตัวอย่าง Output จากการทำงาน
14
do while Statement
15
do while Statement จะแตกต่างจาก while Statement โดยที่ โปรแกรมจะเริ่มทำงานตาม Statement ที่ระบุไว้เลย โดยไม่มีการเช็ค Condition ก่อน จากนั้นเมื่อทำงานเสร็จแล้วถึงจะเช็คเงื่อนไข หากเงื่อนไขเป็นจริง จะทำการทำซ้ำ แต่หากเงื่อนไขเป็นเท็จจะจบการทำงานแล้วออกจาก Loop ข้อแตกต่างของ do while จาก while คือ do while จะเริ่มทำงานครั้งแรกโดยไม่ตรวจสอบเงื่อนไขเลย แต่จะเริ่มตรวจสอบเงื่อนไขสำหรับรอบครั้งถัดไป
16
Syntax do { statement1; statement2; ... statementN; } while (condition); รูปแบบการใช้งาน จะแตกต่างจาก while ตรงที่ว่า คำสั่ง while (condition) จะย้ายจากบรรทัดบนสุดไปอยู่บรรทัดท้ายสุด
17
Flowchart Entry Statement 1 Statement 2 True False Exit expr
จาก Flowchart พบว่า ในรอบแรกจะเริ่มทำงานตาม Statement ใน Loop เลย โดยไม่มีการตรวจสอบเงื่อนไขก่อน False Exit
18
Example Example 1 พิมพ์เลข 1 ถึง 10 โดยใช้ while Loop Example 2 เลือกการทำงานจากตัวเลข Menu ที่กำหนดไว้ หากเลือกตัวเลขนอกเหนือที่กำหนดไว้ จะต้อง ใส่ตัวเลขที่เลือกใหม่
19
Example 1 /* print count from 1 to 10 */ #include <stdio.h> void main() { int count; count = 1; printf(“Print count from 1 to 10\n”); do { printf(“%d ”, count); count++; } while (count <=10); printf(“\n”); } สิ่งที่เปลี่ยนแปลงไปคือ ใช้ do while เข้ามาแทน while แต่ผลที่ได้รับยังเหมือนกัน Print count from 1 to 10 ตัวอย่าง output จากการทำงาน
20
Example 2 #include <stdio.h> void main() { int a; do { printf("1. Check spelling\n"); printf("2. Correct spelling errors\n"); printf("3. Display spelling errors\n"); printf("Enter your choice (1-3): "); scanf(“\n%d", &a); /* read selection from keyboard */ switch(a) { case 1: printf("Check spelling\n"); break; case 2: printf("Correct spelling errors\n"); case 3: printf("Display spelling errors\n"); default: /* do nothing */ } } while (a != 1 && a != 2 && a !=3); สิ่งที่แตกต่างจากการใช้ do while ก็คือ โปรแกรมจะเริ่มทำงานใน Loop โดยไม่มีการตรวจสอบเงื่อนไขก่อน ดังนั้น จึงไม่จำเป็นต้องกำหนดค่าให้ ตัวแปรตั้งแต่แรก เนื่องจากว่า ใน Loop จะมีคำสั่งที่ใช้รับค่าของตัวแปร a เข้ามาจากผู้ใช้อยู่แล้ว (ตัวอย่างที่ 1 ไม่มีการรับค่าจากผู้ใช้ จึงต้องมีการกำหนดค่าเริ่มต้นให้ตัวแปร count)
21
Example 2 1. Check spelling 2. Correct spelling errors
3. Display spelling errors Enter your choice (1-3): 5 Enter your choice (1-3): 1 Check spelling ตัวอย่าง output จากการทำงาน
22
Null Statement เราสามารถใช้งาน Empty Statement (Null Statement) ใน while Statement ได้ โดยใช้ ; ต่อท้าย หรือ ในบรรทัดใหม่ เนื่องจากมีการทำงาน ได้ทำไปแล้วในเงื่อนไขของ while จึงไม่จำเป็นต้องมีการทำงานอีกใน loop ตัวอย่าง while ((c = getchar()) == ‘ ’) ; หรือ while ((c = getchar()) == ‘ ’) ; ทำงานเหมือน while ((c = getchar()) == ‘ ’) { /* do nothing */ } การใช้งาน์ Null Statement คือหมายความว่าภายใน Loop จะไม่มีคำสั่งให้ทำงานอะไรอยู่เลย แต่ สิ่งที่ต้องการคือ ต้องการให้ Loop วนซ้ำไปเรื่อย ๆ จนกว่าเงื่อนไขจะเป็นเท็จ เช่น ในตัวอย่างนี้ จะมีการรับค่าตัวอักษรจากผู้ใช้ผ่านคำสั่ง getchar() ไปเก็บที่ตัวแปร c โดย ที่หากผู้ใช้ป้อนตัวอักษรที่เป็น Space เข้ามา โปรแกรมก็จะยังดำเนินการซ้ำให้ผู้ใช้ ใส่ตัวอักษรเข้ามาใหม่เรื่อยๆ จนกว่า ผู้ใช้จะป้อนตัวอักษรที่ไม่ใช่ Space เข้ามา
23
Null Statement นั่นคือ blank character ใน input stream จะถูกข้าม (เมื่อตัว input stream เป็น blank character จะเข้า loop ได้ แล้วจะไม่ทำอะไร แต่จะไปรับ ค่า input ใหม่อีกครั้ง เรื่อยๆ จนกว่าจะไม่ใช่ blank character) หากต้องการให้ white space ถูกข้ามไป สามารถใช้ code ดังนี้ while ((c = getchar()) == ‘ ’ || c == ‘\n’ || c == ‘\t’); ในส่
24
Mini Debugging ปัญหาที่พบได้บ่อยจากการใช้ Loop แนวทางการแก้ไข
Infinity Loop คือ โปรแกรมทำงานตาม Statement ไปเรื่อยๆ โดยไม่สามารถออกจาก Loop ได้ โปรแกรม ไม่สามารถทำงาน ใน Loop ได้ แนวทางการแก้ไข ตรวจสอบ Condition ที่กำหนด ว่า เป็น จริง หรือ เป็น เท็จ เสมอ หรือไม่ ตรวจสอบค่าของตัวแปรที่ใช้งาน ว่ามีการเปลี่ยนแปลงค่าได้หรือไม่ ตรวจสอบ ว่า ค่าของตัวแปรที่ใช้ในเงื่อนไข สามารถทำให้ Condition เป็น จริง หรือ เท็จได้หรือไม่
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.