งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

อัลกอริทึ่มทำงานวนซ้ำ

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "อัลกอริทึ่มทำงานวนซ้ำ"— ใบสำเนางานนำเสนอ:

1 อัลกอริทึ่มทำงานวนซ้ำ
หลักการเขียนโปรแกรมคอมพิวเตอร์

2 เนื้อหา ทบทวนการไหลของโปรแกรม โปรแกรมที่ทำงานแบบวนซ้ำ ลูปแบบ while
ลูปแบบ do..while ลูปแบบ For

3 การไหลของโปรแกรมแบบต่าง ๆ
โปรแกรมอย่างง่าย มีการไหลจากบนลงล่าง Statement1 Statement2 Statementn END START Statement3 START END Statement โปรแกรมที่มีคำสั่งเดียว โปรแกรมที่มีหลายคำสั่ง

4 การไหลของโปรแกรมแบบต่าง ๆ
โปรแกรมแบบมีเงื่อนไข START END Statement condition true false START END Statementf condition true false Statementt คำสั่ง if คำสั่ง if..else

5 การวนซ้ำ กิจกรรมหลายอย่างมีลักษณะการทำงานแบบซ้ำไปมา
ตัวอย่างในชีวิตประจำวัน ก้าวไปข้างหน้า 10 ก้าว ขยี้ผ้าจนกว่าจะสะอาด เรียนวิชาคอมพิวเตอร์จนกว่าจะผ่าน ตัวอย่างในการเขียนโปรแกรม วนรับตัวเลขมา 10 ตัวเพื่อหาค่าเฉลี่ย

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

7 ตัวอย่าง: หาผลรวมของตัวเลข 3 ตัว
เกิดโจทย์เปลี่ยนเป็นหาผลรวมของเลข 100 ตัว? หรือกี่ตัวก็ได้จนกว่าผู้ใช้จะป้อนเลขลบ Start Set sum=0 Print “Enter a value” Input n Compute Sum=sum+n stop 1st number 2nd number 3rd number

8 หาผลรวมตัวเลข: โฟลว์ชาร์ต
START sum = 0, i = 1 i  num false true n sum = sum + n i = i + 1 sum END

9 ลูปแบบ while ทำ statement ตราบเท่าที่ condition เป็นจริง
ทำ stmt1,…,stmtN ตราบเท่าที่ condition เป็นจริง START while (condition) statement; condition false true Statement while (condition) { stmt1; stmt2; : stmtN; } END

10 หาผลรวมตัวเลข: โปรแกรม
EX1. ให้เขียนโปรแกรมหาผลรวมตัวเลขโดยใช้ลูป while และให้รับค่าจำนวนลูป (num) จากผู้ใช้

11 หาผลรวมตัวเลข: โฟลว์ชาร์ต
START เงื่อนไขที่เปรียบเทียบระหว่างตัวนับรอบ กับ ค่าควบคุม loop sum = 0, i = 1 ค่าควบคุม loop num i  num false true n ตัวนับรอบ ซึ่งจะเดินเข้าหา ค่าควบคุม loop เสมอ sum = sum + n i = i + 1 sum END

12 ลับสมอง เขียนโฟลว์ชาร์ตและโปรแกรมภาษา C เพื่อคำนวณค่า sum โดยที่ sum นิยามจากสูตร โดยที่ค่า N รับมาจากผู้ใช้ เช่นถ้า N = 3, sum = = 14 ตัวอย่างผลลัพธ์ #include <stdio.h> #include <conio.h> void main() { int sum = 0, i = 1, N; printf("Enter N: "); scanf(“%d”,&N); while ( i <= N ) { sum = sum + i*i; i = i+1; } printf("The sum is %d.",sum); ??? ??? Enter N: 3 The sum is 14

13 ลูปแบบดักค่า ที่ผ่านมาเป็นตัวอย่างของลูปวนนับ (counter loop)
จำนวนครั้งที่วนซ้ำขึ้นอยู่กับค่าที่กำหนดไว้แล้ว ทำอย่างไรหากเราไม่ทราบจำนวนล่วงหน้า ใช้ลูปแบบดักค่า (sentinel loop) นิยามค่าที่ใช้ดัก เพื่อให้โปรแกรมหลุดออกจากลูป ตัวอย่าง ตัวดัก Enter a number, or -1 to quit: 3 Enter a number, or -1 to quit: 10 Enter a number, or -1 to quit: 15 Enter a number, or -1 to quit: -1 The sum is 28

14 หาผลรวมตัวเลข: โฟลว์ชาร์ต
START เงื่อนไขที่เปรียบเทียบค่าที่รับเข้ามา กับค่าที่ใช้ดัก (ในตัวอย่างนี้คือ -1) เพื่อให้ออกจาก loop sum = 0 ค่าที่ใช้ในการหา output และใช้สำหรับควบคุม loop num num <> -1 false true sum = sum + num num sum END

15 ลูปแบบ do...while ทำ stmt1...stmtN ตราบเท่าที่เงื่อนไขยังเป็นจริง
START do { stmt1; stmt2; : stmtN; } while (condition); true Statement Statement condition false END

16 หาผลรวมตัวเลข: โฟลว์ชาร์ต
START sum = 0, i = 1 ค่าควบคุม loop num n ตัวนับรอบ ซึ่งจะเดินเข้าหา ค่าควบคุม loop เสมอ sum = sum + n true i = i + 1 true i  num เงื่อนไขที่เปรียบเทียบระหว่างตัวนับรอบ กับ ค่าควบคุม loop false sum END

17 ลูปแบบ do...while เปรียบเทียบการทำงานของส่วนของโปรแกรมทั้งสองแบบ
โปรแกรมที่ 1 โปรแกรมที่ 2 a = 5 do { a=a+1 print a } While (a<5) a = 5 While (a<5) { a=a+1 print a }

18 สรุป การเขียนโปรแกรมแบบวนซ้ำ ลูปวนนับ ลูปดักค่า โครงสร้างลูปแบบ while
โครงสร้างลูปแบบ do..while

19 แบบฝึกหัด 6.1 จงเขียนผังงานแสดงเลขคู่ที่อยู่ภายใน ออกทางจอภาพโดยใช้โครงสร้างการวนซ้ำแบบ while…structure จงเขียนผังงานหาผลรวม และหาค่าเฉลี่ยของข้อมูลตัวเลขทศนิยมชุดหนึ่ง จำนวน 100 ตัว โดยใช้โครงสร้างการวนซ้ำแบบ while…structure จากโจทย์ข้อ 2 ให้เขียนด้วยโครงสร้างแบบ do/while…structure จากโจทย์ข้อ 1 แก้ไขโปรแกรมให้สามารถแสดงเลขคู่ได้ไม่จำกัดรอบ จนกว่าผู้ใช้จะกรอกตัวเลข -1

20 แบบฝึกหัด 6.1 1....... 2...... 3. ตรวจสอบว่า a <= 10 ใช่หรือไม่
- ใช่ - ทำ คำสั่งนี้... - วนกลับไปทำข้อ 3 - ไม่ใช่ ทำข้อ 4... 4. ... 3. ทำ คำสั่งนี้... 4. ตรวจสอบว่า a <= 10 ใช่หรือไม่ - ใช่ วนกลับไปทำข้อ 3 ... - ไม่ใช่ ทำข้อ 5

21 จงเขียนผังงานหาผลรวม และหาค่าเฉลี่ยของข้อมูลตัวเลขทศนิยมชุดหนึ่ง จำนวน 100 ตัว
START 1. กำหนดให้ i = 1, sum = 0 2. ตรวจสอบ i <= 100 ใช่หรือไม่ - ใช่ - รับค่าตัวเลขเก็บใน n - sum = sum+n - i = i+1 - วนกลับไปทำข้อ 2 - ไม่ใช่ ทำข้อ 3 3. avg = sum/100 4. แสดงค่า sum 5. แสดงค่า avg Let sum = 0 and i = 1 false i  100 true n Increment sum by n Increment i by 1 avg = sum / 100 sum, avg END

22 การวนซ้ำโดยใช้โครงสร้าง for

23 คำสั่ง for สะดวกสำหรับการนับรอบของลูป การดำเนินการที่เกี่ยวข้อง
ทำ init_stmt หนึ่งครั้ง ตรวจสอบ condition; ถ้าเป็นจริงให้ทำงานใน loop body ทำ update_stmt, แล้วทำงานในขั้นตอนที่ 2 for (init_stmt; condition; update_stmt) statement; for (init_stmt; condition; update_stmt){ statement1; statement2; : statementN; }

24 คำสั่ง for: ผังการทำงาน
START END false condition true Initialize counter Update counter Statement

25 for vs. while คำสั่ง: พิมพ์เลข 1,2,...,10 ออกหน้าจอ for loop
#include <stdio.h> #include <conio.h> void main() { int i; i = 1; while (i <= 10) { printf(“%d”,i); i++; } while loop #include <stdio.h> #include <conio.h> void main() { int i; for (i = 1; i <= 10; i++) { printf(“%d”,i); } for loop

26 ทดสอบ: พิมพ์ดาว เขียนโปรแกรมเพื่อพิมพ์ดาวจำนวน N ดวง เมื่อ N กำหนดโดยผู้ใช้ ตัวอย่าง #include <stdio.h>; #include <conio.h>; void main() { int i,N; printf("Enter N: "); scanf(“%d“,N); for (i = 1; i <= N; i++) { printf("*"); } printf(“\n”); Enter N: 3 *** Enter N: 8 ******** ? ? ? ???

27 ตัวอย่าง แสดงค่า 0,2,4,...,20 แสดงค่า 1,3,5,...,19
แสดงค่า 15,12,9,...,0 for (i = 0; i <= 20; i += 2) printf(“%d”,i); for (i = 1; i <= 19; i += 2) printf(“%d”,i); ? ? ? for (i = 15; i >= 0; i -= 3) printf(“%d”,i); ? ? ?

28 ลูปหลายชั้น โปรแกรมที่มีความซับซ้อนมากขึ้นอาจมีความต้องการใช้ลูปหลายชั้น คล้ายกันกับคำสั่ง if ตัวอย่าง #include <stdio.h>; #include <conio.h>; void main() { int sum = 0, i, j, N; printf("Enter N: "); scanf(“%d“,N); for (i = 1; i <= N; i++) { for (j = 1; j <= i; j++) { sum = sum + j; } printf("Sum is %d", sum); Outer Loop Inner Loop

29 ตัวอย่าง: พิมพ์ดาวอีกครั้ง!
เพิ่มเติมจากโปรแกรมพิมพ์ดาวเดิม ตัวอย่าง Enter N: 3 * ** *** #include <stdio.h>; #include <conio.h>; void main() { int i, j, N; printf(“Enter N:”); scanf(“%d”,&N); for (i = 1; i <= N; i++) { for (j = 1; j <= i; j++) { printf("*"); } printf(“\n”); Enter N: 5 * ** *** **** *****

30 แบบฝึกหัด 6.2 จงเขียนโปรแกรมเพื่อรับตัวเลขอินพุท N จากผู้ใช้และแสดงตัวเลขทั้งหมดที่เป็นตัวประกอบของ N (นำไปหาร N แล้วลงตัว)

31 แบบฝึกหัด 6.3 จงเขียนโปรแกรมเพื่อรับตัวเลขอินพุท N จากผู้ใช้และแสดงตัวเลขทั้งหมดที่เป็นตัวประกอบของ N (นำไปหาร N แล้วลงตัว)

32 หาค่าเฉลี่ยของเลข 100 จำนวนที่รับเข้ามาโดยใช้ loop แบบ for
Increment sum by n END START Let sum = 0 and i = 1 n sum, avg avg = sum / 100 For i=1 to 100 step 1


ดาวน์โหลด ppt อัลกอริทึ่มทำงานวนซ้ำ

งานนำเสนอที่คล้ายกัน


Ads by Google