Week 6 การทำซ้ำโดย for loop
Agenda for Statement ตัวดำเนินการสำหรับกำหนดค่าแบบย่อ การใช้งาน break และ continue ในคาบเรียนนี้ จะเป็นวิธีการใช้งาน Loop ต่อจากคาบก่อน นั่นก็คือ การใช้งาน for Loop และ การใช้งาน break และ continue
for Statement
for Statement ในการเขียนโปรแกรม เมื่อต้องการให้มีการประมวลผลซ้ำ (Loop) โดยที่เราทราบจำนวนของการทำซ้ำ เราสามารถใช้ for Loop แทน while Loop ได้ ตัวอย่าง เช่น ทำการคำนวณค่าเฉลี่ยของกลุ่มตัวเลขจำนวน 10 ค่า เมื่อมีการกำหนดหรือทราบเงื่อนไขของการทำซ้ำใน Loop ที่ทราบจำนวนของการทำซ้ำ หรือรู้ว่าต้องการทำซ้ำกี่ครั้ง สามารถใช้งาน for Statement ได้ แต่ก็ยังสามารถใช้งาน while และ do while ได้อยู่เช่นกัน
Syntax for (expression1; expression2; expression3) { statement 1; … statement n; } เมื่อ expression1: การกำหนดค่าเริ่มต้นตัวแปรที่ใช้ในการคุมการวนรอบ expression2: เงื่อนไขของการวนรอบ expression3: การเปลี่ยนแปลงค่าของตัวแปรควบคุมแต่ละรอบ รูปแบบของการใช้งาน for Loop จะมีการกำหนดค่าเริ่มต้นของตัวแปรควบคุมการทำซ้ำ เงื่อนไขของการทำซ้ำ และการเปลี่ยนแปลงค่าของตัวแปรที่ควบคุมการทำซ้ำอยู่ในคำสั่ง for (expresssion1; expression2; expression3) เลย จะแตกต่างจาก while และ do while ที่ ใน while(condition) จะมีเพียงเงื่อนไขที่จะทำซ้ำเท่านั้น ส่วนค่าเริ่มต้นและการเปลี่ยนแปลงค่าของตัวแปควบคุมการทำซ้ำ จะอยู่ที่อื่น เช่น การกำหนดค่าเริ่มต้นจะอยู่ ภายนอก ก่อนเข้า Loop หรือ การเปลี่ยนแปลงค่าของตัวแปลอยู่ภายใน Statement ที่อยู่ในลูป เป็นต้น
Syntax สามารถเปรียบเทียบกับการใช้ while ได้ดังนี้ expression1; statement1; … statementn; expression3; }
Flowchart ตัวอย่าง สำหรับ for (counter = 1; counter <=10; counter = counter+1) { statement; } Entry counter = 1 counter <= 10 False True Flowchart นี้จะเป็นตัวอย่างเมื่อ ตัวแปรสำหรับควบคุมการทำซ้ำคือ counter ลำดับการทำงานคือ เริ่มต้นการทำงานของ Loop ตัวแปร counter จะถูกตั้งค่าให้เท่ากับ 1 จากนั้นจะมีการทดสอบว่า ค่า counter นั้นน้อยกว่าหรือเท่ากับ 10 หรือไม่ หาก เป็นจริง ก็จะทำงาน ตาม statement ภายใน และ เพิ่มค่าให้ counter ไปอีก 1 แล้วจะย้อนกลับมาทดสอบเงื่อนไขใหม่ statement counter = counter + 1 Exit
Example โปรแกรม นับ 1 ถึง 10 และแสดงผลการนับออกมาทีละตัว โดยใช้ for Loop ให้ดูเปรียบเทียบกับโปรแกรมเดียวกันเมื่อใช้ while Loop และ do while Loop จากคาบก่อน ตัวอย่างนี้ จะเป็นโปรแกรมที่ทำงานเช่นเดียวกับ ตัวอย่างในคาบก่อน คือ พิมพ์ตัวเลขตั้งแต่ 1 ถึง 10 แต่เปลี่ยนไปใช้ for Loop
Example #include <stdio.h> int main() { int counter; printf(“Print counter from 1 to 10\n”); for (counter = 1; counter <=10; counter = counter + 1) { printf(“%d ”, counter); } return 0; จะเห็นได้ว่า การกำหนดค่าให้ ตัวแปร counter เงื่อนไขการทำซ้ำ การเปลี่ยนแปลงค่าของตัวแปร counter จะอยู่ในคำสั่ง for (counter = 1; counter <=10; counter = counter + 1) ทั้งหมด Print counter from 1 to 10 1 2 3 4 5 6 7 8 9 10 ตัวอย่าง Output จากการทำงาน
ตัวดำเนินการสำหรับกำหนดค่าแบบย่อ
ตัวดำเนินการสำหรับกำหนดค่าแบบย่อ ในการเพิ่มค่าของตัวแปรควบคุมแต่ละรอบ หรือส่วนสุดท้ายของคำสั่งใน while, do while, for เราสามารถใช้ตัวดำเนินการสำหรับกำหนดค่า (Assignment Operator) แบบย่อได้ ดังตาราง1 เมื่อกำหนดให้ c = 3, d = 5, e = 4, f = 6, g = 12 ตัวดำเนินการ ตัวอย่างการใช้งาน ความหมาย การกำหนดท่าที่ได้ += c += 7 c = c + 7 c ให้เท่ากับ 10 -= d -= 4 d = d – 4 d ให้เท่ากับ 1 *= e *= 5 e = e * 5 e ให้เท่ากับ 20 /= f /= 3 f = f / 3 f ให้เท่ากับ 2 %= g %= 9 g = g % 9 g ให้เท่ากับ 3 ตาราง1 ตัวอย่างการใช้งานตัวดำเนินการสำหรับกำหนดค่าแบบย่อ
ตัวดำเนินการสำหรับการกำหนดค่าแบบย่อ นอกการจากนั้น ยังมีตัวดำเนินการ ++ และ – สำหรับเพิ่มและลดค่าทีละ 1 การใช้งานมีสองแบบ คือ วางข้างหน้า และ วางข้างหลังตัวแปร หากวางข้างหน้าตัวแปร ตัวแปรจะถูกเพิ่มหรือลดค่าก่อน จะถูกนำค่าไปใช้งาน หากวางข้างหลังตัวแปร ตัวแปรจะถูกค่าไปใช้งานก่อน แล้วจึงถูกเพิ่มหรือลดค่า ดังแสดงในตาราง2 ตัวดำเนินการ ตัวอย่างการใช้งาน ความหมาย ++ ++a เพิ่มค่า a ขึ้น 1 แล้วจึงนำค่า a ไปใช้ a++ ใช้ค่า a ปัจจุบัน แล้วเพิ่มค่า a ขึ้น 1 -- --b ลดค่า b ลง 1 แล้วจึงนำค่า b ไปใช้ b-- ใช้ค่า b ปัจจุบัน แล้วลดค่า b ลง 1 ตาราง2 ตัวอย่างการใช้งานตัวดำเนินการสำหรับการเพิ่มและลดค่าครั้งละหนึ่ง
ตัวดำเนินการสำหรับการกำหนดค่าแบบย่อ ตาราง3 ลำดับการทำงานของตัวดำเนินการต่างๆ ว่าทำงานจากซ้ายไปขวาหรือขวาไปซ้าย ตัวดำเนินการ ลำดับการทำงานในขั้นเดียวกัน ++ -- + - ! ขวามาซ้าย * / % ซ้ายมาขวา + - < <= > >= == != && || ? : = += -= *= /= %= , ตาราง3 ลำดับการทำงาน
การใช้งาน break และ continue
การใช้ break และ continue การใช้งาน โดยทั่วไปจะนำไปไว้ในลูป และใช้ break หรือ continue โดยใช้ if เพื่อช่วยในการตรวจสอบเงื่อนไข คำสั่ง break จะทำให้ Loop หยุดการทำงานและโปรแกรมออกจาก Loop ไป คำสั่ง continue จะทำให้ Loop ข้ามการทำงานของ Statement ที่เหลือ แต่จะกลับเริ่มต้นการทำงานของ Loop ในรอบถัดไป คือไปเริ่มต้นที่การตรวจสอบเงื่อนไขของ Loop ใหม่เลย
break การใช้งาน break ในประโยคคำสั่งทำซ้ำ while, do while, for หรือ switch จะทำให้ออกจากประโยคคำสั่งทำซ้ำทันที จะใช้ break เพื่อให้โปรแกรมกระโดดข้ามไปทำงานในส่วนที่เหลือที่อยู่นอก Loop ทันที ตัวอย่าง เป็นการเขียนโปรแกรม แสดง counter โดยใช้ for loop หาก counter มีค่าเท่ากับ 5 จะต้องออกจาก for loop ทันที
Example ตัวอย่าง output จากการทำงาน #include <stdio.h> int main() { int x; for (x = 1; x <= 10; x++) { if (x == 5) { /* if x is 5, terminate loop */ break; } printf(“%d”, x); printf(“\nBroke out of loop at x == %d\n, x); return (0); ในตัวอย่าง จะมีการใช้งาน break ภายในเงื่อนไขว่า หาก ตัวแปร x มีค่าเท่ากับ 5 ให้ break ออกไปจาก Loop ทันที 1 2 3 4 Broke out of loop at x == 5 ตัวอย่าง output จากการทำงาน
continue การใช้งาน continue ในประโยคคำสั่งทำซ้ำ while, do while, for จะมีผลทำให้การทำงานกระโดดข้ามคำสั่งที่เหลืออยู่ใน ศLoop แล้วกลับไปเริ่มทำงานในรอบต่อไปใหม่ทันที สำหรับ while และ do while เงื่อนไขของการวนรอบ จะถูกทดสอบทันที สำหรับ for ตัวแปรนับจะถูก ลด/เพิ่ม ค่า แล้วทำการทดสอบเงื่อนไขการวนรอบ ตัวอย่าง เป็นการเขียนโปรแกรมแสดง counter โดยใช้ while loop แต่เมื่อ counter มีค่าเท่ากับ 5 จะให้กระโดดข้ามคำสั่ง printf ออกไป แล้วไปเพิ่ม counter จาก การทำงานของ while loop ทันที
Example ตัวอย่าง output จากการทำงาน #include <stdio.h> int main() { int x; for (x = 1; x <= 10; x++) { if (x == 5) { /* if x is 5, skip remaining code in loop body*/ continue; } printf(“%d”, x); printf (“\n Used continue to skip printing the value 5\n); return (0); ในตัวอย่างนี้ จะมีการใช้งาน continue เมื่อตัวแปร x มีค่าเท่ากับ 5 นั่นก็คือหมายความว่า เมื่อตัวแปร x มีค่าเท่ากับ 5 คำสั่ง printf(“%d”, x) จะถูกข้ามไป นั่นเอง และ Loop จะเริ่มการทำงานถัดไปก็คือ เพิ่มค่าตัวแปร x และทดสอบดูว่า ยังน้อยกว่าหรือเท่ากับ 10 หรือไม่ 1 2 3 4 6 7 8 9 10 Used continue to skip printing the value 5 ตัวอย่าง output จากการทำงาน