1 / 34

คำสั่งควบคุมแบบวนซ้ำ ( Repetition Statement ) ตอนที่ 1

บทที่ 6. คำสั่งควบคุมแบบวนซ้ำ ( Repetition Statement ) ตอนที่ 1. ดร. ธี ระ ยุทธ ทองเครือ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น. Loop คืออะไร. ลูป ( Loop) คือ โครงสร้างที่มีการย้อนกลับไปทำงานเดิม เมื่อเงื่อนไขที่กำหนดมีค่าเป็นจริง

amalia
Download Presentation

คำสั่งควบคุมแบบวนซ้ำ ( Repetition Statement ) ตอนที่ 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 6 คำสั่งควบคุมแบบวนซ้ำ(Repetition Statement)ตอนที่ 1 ดร.ธีระยุทธ ทองเครือ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยขอนแก่น

  2. Loop คืออะไร ลูป (Loop) คือ โครงสร้างที่มีการย้อนกลับไปทำงานเดิม เมื่อเงื่อนไขที่กำหนดมีค่าเป็นจริง ประโยชน์ของลูป คือ ช่วยให้ชุดคำสั่งที่มีการทำงานซ้ำๆกัน สามารถเขียนชุดคำสั่งเพียงครั้งเดียว

  3. การใช้คำสั่ง while ควบคุมลูป รูปแบบคำสั่งภาษาซี while (เงื่อนไข) { คำสั่ง; } No เงื่อนไข Yes คำสั่ง

  4. การใช้คำสั่ง while ควบคุมลูป ลำดับการทำงาน • ทดสอบนิพจน์เงื่อนไข ซึ่งจะได้ผลลัพธ์เป็นจริง หรือ เท็จ • หากนิพจน์เป็นจริง จะทำคำสั่งที่อยู่ภายใต้ while ที่อยู่ในวงเล็บปีกกา { } • หลังจากนั้นจะย้อนกลับไปตรวจสอบเงื่อนไขใน while • หากนิพจน์เป็นเท็จ จะไม่สนใจคำสั่งภายใต้ while จะข้ามไปยังคำสั่งหลังปีกกาปิดของ while แต่หาเป็นจริงจะทำคำสั่งภายใต้วงเว็บปีกกาอีกครั้ง while (เงื่อนไข){ คำสั่งที่1; คำสั่งที่2; } คำสั่งที่3; คำสั่งที่4; False True

  5. ประเภทของลูป Definite Loop(หรือ Counted Loop)คือ ลูปแบบจำกัดจำนวนรอบการทำงาน Infinite Loop คือ ลูปแบบไม่จำกัดจำนวนรอบการทำงาน

  6. ลูปแบบจำกัดจำนวนรอบ • Definite Loop ใช้ตัวแปรในการควบคุมจำนวนรอบของลูป ซึ่งเรียกว่า "Counter" รูปแบบคำสั่งภาษาซี กำหนดค่าเริ่มต้นให้ Counter while( ) { } เงื่อนไข ชุดคำสั่ง ปรับปรุงค่า Counter • การเขียนลูปแบบจำกัด • กำหนดค่าเริ่มต้นให้ Counter • กำหนดเงื่อนไขของลูปโดยใช้ตัวแปร Counter กับตัวดำเนินการเปรียบเทียบ • ปรับปรุงค่าของ Counter ภายในลูปเพื่อให้เงื่อนไขของลูปมีการเปลี่ยนแปลง

  7. ตัวอย่าง Start กำหนดค่าเริ่มต้น i = 0 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int i = 0; while (i < 5) { printf("I love you\n"); i++; } printf("JubuJubu (>_<)\n"); } ตรวจสอบเงื่อนไข No i < 5 Yes PUT "I love you" i = i + 1 ปรับปรุงค่าในตัวแปร PUT "JubuJubu(>_<)" End โปรแกรมบอกรักแฟนแบบจำกัด โดยแสดงข้อความบอกรัก 5 ครั้ง โดยใช้คำสั่ง while

  8. ตัวอย่าง 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int i = 0; while (i < 5) { printf("I love you\n"); i++; } printf("JubuJubu(>_<)\n"); } Output I love you 5 I love you 1 0 2 4 3 • i I love you I love you I love you JubuJubu(>_<)

  9. กิจกรรม #include <stdio.h> main() { int n=1, sum=0; while(n < 4) { sum += n; printf("Sum = %d\n", sum); n++; } printf("n = %d and sum = %d\n", n, sum); } Output

  10. ตัวอย่าง #include <stdio.h> main() { char ch= 'a'; while (ch<= 'z') { printf("%c ", ch); ch= ch+ 1; } printf("\n\n"); } โปรแกรมแสดงตัวอักษรจาก a ถึง z โดยใช้คำสั่ง while

  11. การใช้คำสั่ง for ควบคุมลูป รูปแบบคำสั่งภาษาซี for( ; ; ){ } ปรับปรุงค่า Counter กำหนดค่าเริ่มต้นให้ Counter เงื่อนไข ชุดคำสั่ง • การสร้างลูปแบบจำกัดจำนวนรอบสามารถใช้คำสั่ง นอกเหนือจาก while ได้ โดยใช้คำสั่ง for • คำสั่ง for 1 คำสั่ง จะบรรจุการทำงานไว้ 3 คำสั่ง ประกอบด้วย • คำสั่งกำหนดค่าเริ่มต้นให้ Counter • เงื่อนไขของลูป • คำสั่งปรับปรุงค่าในตัวแปรCounter

  12. การแปลงคำสั่ง while เป็นคำสั่ง for การใช้ลูปด้วยคำสั่ง while การใช้ลูปด้วยคำสั่ง for กำหนดค่าเริ่มต้นให้ Counter กำหนดค่าเริ่มต้นให้ Counter while( ) { } for( ; ; ){ } ปรับปรุงค่า Counter เงื่อนไข กำหนดค่าเริ่มต้นให้ Counter เงื่อนไข เงื่อนไข ชุดคำสั่ง ชุดคำสั่ง ชุดคำสั่ง ปรับปรุงค่า Counter ปรับปรุงค่า Counter

  13. ตัวอย่าง Start กำหนดค่าเริ่มต้น i = 0 1 2 3 4 5 6 7 8 9 #include <stdio.h> main() { int i; for (i=0; i<5; i++) { printf("I love you\n"); } printf("JubuJubu (>_<)\n"); } ตรวจสอบเงื่อนไข No i < 5 Yes PUT "I love you" i = i + 1 ปรับปรุงค่าในตัวแปร PUT "JubuJubu(>_<)" End โปรแกรมบอกรักแฟนแบบจำกัด โดยแสดงข้อความบอกรัก 5 ครั้ง โดยใช้คำสั่ง for

  14. ตัวอย่าง 1 2 3 4 5 6 7 8 9 #include <stdio.h> main() { int i; for (i=0; i<5; i++) { printf("I love you\n"); } printf("JubuJubu (>_<)\n"); } Output I love you 5 I love you 1 0 2 4 3 • i I love you I love you I love you JubuJubu(>_<)

  15. เปรียบเทียบคำสั่ง while และ for 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int i = 0; while (i < 5) { printf("I love you\n"); i++; } printf("JubuJubu (>_<)\n"); } 1 2 3 4 5 6 7 8 9 #include <stdio.h> main() { int i; for (i=0; i<5; i++) { printf("I love you\n"); } printf("JubuJubu (>_<)\n"); }

  16. กิจกรรม จงเขียนโปรแกรมเพื่อแสดงตัวเลข 20 ถึง 1 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 ใช้ลูป for ใช้ลูป while start #include <stdio.h> main() { …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ } #include <stdio.h> main() { …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ …………………………........ } number = 20 No • number > 0 Yes PUT number number = number-1 stop

  17. Step Value for(year=2010; year<=2100; year+=10) { printf("%d\n", year); } for(count=100; count>0; count--) { printf("%d ", count); } Step value คือ ช่วงของค่าตัวแปร Counter ในลูปแต่ละรอบ เช่น i++ มี Step value เป็น 1 ช่วงของ Step value อาจมากกว่า 1 ได้ เช่น นอกจากนี้ช่วงของ Step value อาจเป็นการลดค่าก็ได้ เช่น

  18. การใช้คำสั่ง do…while ควบคุมลูป รูปแบบคำสั่งภาษาซี do { คำสั่ง; } while(เงื่อนไข); คำสั่ง Yes เงื่อนไข No

  19. การใช้คำสั่ง do…while ควบคุมลูป ลำดับการทำงาน • ทำชุดคำสั่งในวงเล็บปีกกาหลัง do ก่อนจนเสร็จ • หลังจากนั้นจะทดสอบนิพจน์เงื่อนไข ในบรรทัดคำสั่ง while ซึ่งจะได้ผลลัพธ์เป็นจริง หรือ เท็จ • หากนิพจน์เป็นจริง จะย้อนกลับไปทำชุดคำสั่งในวงเล็บปีกกาหลัง do อีกครั้ง แต่ถ้าเป็นเท็จจะทำคำสั่งที่อยู่ถัดจากคำสั่ง while do { คำสั่งที่1; คำสั่งที่2; } while(เงื่อนไข); คำสั่งที่3; คำสั่งที่4; True False

  20. ตัวอย่าง Start กำหนดค่าเริ่มต้น i = 0 1 2 3 4 5 6 7 8 9 10 #include <stdio.h> main() { int i = 0; do { printf("I love you\n"); i++; } while (i < 5); printf("JubuJubu (>_<)\n"); } PUT "I love you" i = i + 1 ปรับปรุงค่าในตัวแปร Yes i < 5 ตรวจสอบเงื่อนไข No PUT "JubuJubu(>_<)" End โปรแกรมบอกรักแฟนแบบจำกัด โดยแสดงข้อความบอกรัก 5 ครั้ง โดยใช้คำสั่ง do…while

  21. การใส่ { } ในคำสั่งลูป while (เงื่อนไข) คำสั่ง; while (เงื่อนไข) { คำสั่งที่1; คำสั่งที่2; } do { คำสั่งที่1; คำสั่งที่2; } while(เงื่อนไข); do คำสั่ง; while(เงื่อนไข); คำสั่งเดียว ไม่ต้องใส่ { } ก็ได้ หลายคำสั่ง ให้ใส่ { } เสมอ for(…;…;…) คำสั่ง; for(…;…;…) { คำสั่งที่1; คำสั่งที่2; } กรณีที่คำสั่งภายในลูปมีเพียง 1 คำสั่ง ไม่ต้องใส่ปีกกาครอบก็ได้ แต่ถ้า 2 คำสั่งขึ้นไป ต้องใส่เสมอ

  22. การหยุด Loop ก่อนกำหนด • ในระหว่างที่มีการทำซ้ำในลูป สามารถสั่งให้ลูปหยุดได้ ซึ่งประกอบด้วย 2 คำสั่ง • คำสั่ง break คือ คำสั่งที่ใช้เมื่อต้องการหยุดการทำงานของลูปก่อนการทำงานปกติ • คำสั่ง continue คือ คำสั่งที่ใช้เมื่อต้องการให้หยุดการทำงานคำสั่งถัดไป แล้วกลับไปตรวจสอบเงื่อนไขของลูป

  23. คำสั่ง break 1 2 3 #include <stdio.h> main() { inti = 1; while(i<=5) { printf("OK\n"); i++; if(i==3) break; } printf("End at i=%d\n", i); } i OK OK End at i=3 หน้าจอ

  24. คำสั่ง continue 1 2 3 4 5 #include <stdio.h> main() { inti; for (i=1; i<=4; i++) { if(i==3) continue; printf("%d\n", i); } } i 1 2 4 หน้าจอ

  25. ลูปแบบไม่จำกัดจำนวนรอบลูปแบบไม่จำกัดจำนวนรอบ • Infinite Loop คือ ลูปที่ไม่ทราบจำนวนรอบของลูป • เงื่อนไขในการทำซ้ำอีกครั้งหรือไม่นั้น ขึ้นกับ "ค่าเฝ้าดู" (Sentinel value) • ตัวอย่างของลูปชนิดนี้ • ลูปควบคุมด้วยค่าเฝ้าดู (Sentinel-controlled loop) • ลูปตรวจสอบความถูกต้องของ input (Validate data)

  26. ลูปควบคุมด้วยค่าเฝ้าดูลูปควบคุมด้วยค่าเฝ้าดู 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> main() { intSENTINEL = -99; int sum = 0, score; printf("Enter first score (or %d to quit)> ", SENTINEL); scanf("%d", &score); while (score != SENTINEL) { sum += score; printf("Enter next score (%d to quit)> ", SENTINEL); scanf("%d", &score); // Get next score. } printf("\nSum of exam scores is %d\n", sum); } Debug

  27. การตรวจสอบความถูกต้องของ input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> main() { intLOW_MONTH = 1, HIGH_MONTH= 12; intmonth; printf("Enterbirthmonth > "); scanf("%d", &month); if (month< LOW_MONTH || month > HIGH_MONTH) { printf("Enterbirthmonth > "); scanf("%d", &month); } printf("\nYourbirthmonthis %d\n", month); } การใช้ if ตรวจสอบความถูกต้องไม่สามารถรับประกันได้ว่าผู้ใช้จะกรอกข้อมูลครั้งต่อไปได้ถูกต้องหรือไม่

  28. การตรวจสอบความถูกต้องของ input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> main() { intLOW_MONTH = 1, HIGH_MONTH= 12; intmonth; printf("Enterbirthmonth > "); scanf("%d", &month); while(month< LOW_MONTH || month > HIGH_MONTH) { printf("Enterbirthmonth > "); scanf("%d", &month); } printf("\nYourbirthmonthis %d\n", month); } เปลี่ยนจากคำสั่ง if เป็น while เพื่อให้เกิดการตรวจสอบค่าที่กรอกในครั้งถัดไปได้ Debug

  29. การใช้ลูปหาค่าผลรวม • การหาค่าผลรวม (Accumulate Total) จะใช้ตัวแปรในการสะสมค่า ซึ่งเรียกว่า Accumulator • Accumulator คล้ายกับ Counter ต่างกันที่ • Counter จะเพิ่มค่าทีละ 1 ในแต่ละรอบ • Accumulatorจะเพิ่มค่าอื่นในแต่ละรอบ

  30. ตัวอย่าง โปรแกรมรับข้อมูลเลขจำนวนเต็มจากผู้ใช้จำนวน 5 ค่า และหาว่าค่าเฉลี่ย ของเลขที่ป้อนเข้ามาเป็นเท่าใด 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> main() { int i, number, sum = 0; float average; for (i=0; i<5; i++) { printf("Enter number %d : ", i+1); scanf("%d", &number); sum += number; } average = sum / 5.0; printf("Sum is %d\n", sum); printf("Average is %.2f", average); } ตัวแปรที่เป็น Accumulator Debug

  31. Homework#6 Try to pick a number from 1 to 10 Enter a guess: 5 Enter a guess: 6 Enter a guess: 1 Enter a guess: 3 Enter a guess: 7 You got it after 5 tries ตัวอย่างการทำงาน ข้อ 1. จงเขียน Flowchart และโค้ดภาษาซี โปรแกรมทายตัวเลขที่กำหนด ซึ่งในที่นี้กำหนดให้เป็น 7 โดยวนลูปรับค่าตัวเลขจากผู้ใช้ไปเรื่อยๆ จนกระทั่งผู้ใช้ตอบถูก (คือ ตอบ 7) หลังจากนั้นสรุปว่าใช้จำนวนการทายตัวเลขกี่ครั้ง

  32. Homework#6 ข้อ 2. จงเขียนโค้ดภาษาซี โปรแกรมคิดราคาสินค้าที่แคชเชียร์ 7-11 โดยมี input คือ ราคาสินค้าแต่ละชิ้น (ใส่ได้ไม่จำกัดจำนวนชิ้น) ใส่ 0 เมื่อต้องการหยุดและหาผลรวมราคาสินค้า หลังจากนั้นใส่จำนวนเงินที่จ่าย และแสดงเงินทอนออกมา โปรแกรมจะคิดราคาสินค้าอีกครั้งถ้าผู้ใช้กดปุ่ม y แต่ถ้าหากต้องการออกจากโปรแกรมให้กดปุ่ม n ดูตัวอย่างการทำงานที่นี่ http://goo.gl/Zykz50

  33. Homework#6 Enter student name 1: John  Enter weight: 45 Enter student name 2: Bob  Enter weight: 72 Enter student name 3: Peter  Enter weight: 60 Enter student name 4: Robert  Enter weight: 63 Enter student name 5: Smith  Enter weight: 42 Minimum: Smith 42 Kg. Maximum: Bob 72 Kg. Average Weight: 56.40 Kg. ตัวอย่างการทำงาน *หมายเหตุ การกำหนดค่าให้กับ String ไม่สามารถใช้ max_name = "John"; ได้ ต้องใช้ strcpy(max_name, "John"); ข้อ 3. จงเขียน Flowchart และโค้ดภาษาซี เพื่อรับชื่อและน้ำหนักของนักศึกษาจำนวน 5 คน หลังจากนั้นจะสรุปชื่อนักศึกษาที่มีน้ำหนักสูงที่สุด น้อยที่สุด และค่าน้ำหนักเฉลี่ย

  34. การส่งงาน สร้าง Flowchart ด้วยโปรแกรม RAPTOR ส่งงานเป็นไฟล์ แทนการเขียนลงกระดาษ โดยใช้วิธีการส่งเช่นเดียวกับงานในแล็ป ส่งเฉพาะไฟล์ .c และ .rap เท่านั้น ไฟล์ .o และ .exe ห้ามส่งมา ตั้งชื่อไฟล์แต่ละข้อเรียงตามลำดับ prob1.rap, prob1.c prob2.rap, prob2.c prob3.rap, prob3.c หลังจากนั้น Zip เป็นไฟล์รหัสนักศึกษา Upload ส่งภายในวันพฤหัสที่ 2 ต.ค. 57 เวลา 23.00 น.

More Related