ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
ได้พิมพ์โดยPhawta Limthongkul ได้เปลี่ยน 10 ปีที่แล้ว
2
886201 หลักการโปรแกรม 1 Lecture 7: การทำซ้ำ (while, do-while)
3
การทำซ้ำ (loop) • สมมุติว่าต้องการพิมพ์คำว่า Hello ออกทาง หน้าจอ 100 ครั้ง วนซ้ำ 100 ครั้ง { cout << “Hello” << endl; } cout << “Hello” << endl; … cout << “Hello” << endl; นิสิตอยากจะเขียน คำสั่ง cout 100 บรรทัด หรือ จะใช้ คำสั่งทำซ้ำ ?
4
การทำซ้ำ (loop) คำสั่งการ ทำซ้ำ ในภาษา C++ while- do do- while for
5
ส่วนประกอบของคำสั่งแบบวนซ้ำ • ส่วนของการตรวจสอบ (loop test) เป็นเงื่อนไขเพื่อทดสอบว่าจะทำวนซ้ำอีก หรือไม่ • ส่วนของการทำวนซ้ำ (loop body) เป็นชุดคำสั่งที่จะถูกดำเนินการ
6
การสร้าง loop • ระบุส่วนของการทำงานที่ต้องทำซ้ำ (loop body) • ระบุเงื่อนไข (loop test) ที่จะ • ทำซ้ำ หรือ • เลิกทำซ้ำ • ระบุชนิดของ loop ที่จะใช้ • Pre-test loop • Post-test loop
7
Pre-test Loop Post-test Loop test body T F test body T F while loopdo-while loop
8
while loop while (condition) { statements } ตราบใดก็ตามที่ เงื่อนไขเป็นจริง ให้ ทำงานคำสั่งที่อยู่ ภายใต้ปีกกาของ คำสั่ง while
9
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; }
10
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 1 <= 5 เป็นจริง ดังนั้นทำงานตามคำสั่งที่ อยู่ในปีกกาของ while จึงแสดงค่า i = 1 ออก ทางหน้าจอ จากนั้นเพิ่ม ค่า i ขึ้น 1 ดังนั้นก่อนจบการทำงาน รอบแรกค่า i จึงมีค่าเป็น 2 1
11
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 2 <= 5 เป็นจริง ดังนั้นทำงานตามคำสั่งที่ อยู่ในปีกกาของ while จึงแสดงค่า i = 2 ออก ทางหน้าจอ จากนั้นเพิ่ม ค่า i ขึ้น 1 ดังนั้นก่อนจบการทำงาน รอบที่สองค่า i จึงมีค่า เป็น 3 1 2
12
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 3 <= 5 เป็นจริง ดังนั้นทำงานตามคำสั่งที่ อยู่ในปีกกาของ while จึงแสดงค่า i = 3 ออก ทางหน้าจอ จากนั้นเพิ่ม ค่า i ขึ้น 1 ดังนั้นก่อนจบการทำงาน รอบที่สามค่า i จึงมีค่า เป็น 4 1 2 3
13
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 4 <= 5 เป็นจริง ดังนั้นทำงานตามคำสั่งที่ อยู่ในปีกกาของ while จึงแสดงค่า i = 4 ออก ทางหน้าจอ จากนั้นเพิ่ม ค่า i ขึ้น 1 ดังนั้นก่อนจบการทำงาน รอบที่สี่ค่า i จึงมีค่าเป็น 5 1 2 3 4
14
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 5 <= 5 เป็นจริง ดังนั้นทำงานตามคำสั่งที่ อยู่ในปีกกาของ while จึงแสดงค่า i = 5 ออก ทางหน้าจอ จากนั้นเพิ่ม ค่า i ขึ้น 1 ดังนั้นก่อนจบการทำงาน รอบที่ห้าค่า i จึงมีค่าเป็น 6 1 2 3 4 5
15
while loop to hand-traceWhat is the output? i = 1; while (i <= 5) { cout << i << " "; i++; } เปรียบเทียบเงื่อนไข 6 <= 5 เป็นเท็จ ดังนั้นจึงสิ้นสุดการ ทำงานของ loop 1 2 3 4 5
16
while loopThe output i = 1; while (i <= 5) { cout << i << " "; i++; } 1 2 3 4 5
17
while loop to hand-traceWhat is the output? i = 5; while (i > 0) { cout << i << " "; i--; }
18
while loopThe output i = 5; while (i > 0) { cout << i << " "; i--; } 5 4 3 2 1
19
while loop to hand-trace What is the output? i = 5; while (i > 0) { cout << i << " "; i++; }
20
while loop The output never ends i = 5; while (i > 0) { cout << i << " "; i++; } 55 65 6 75 6 7 85 6 7 8 9 5 6 7 8 9 10 5 6 7 8 9 10 115 6 7 8 9 10 11...
21
while loop to hand-traceWhat is the output? i = 5; while (i > 5) { cout << i << " "; i--; }
22
i = 5; while (i > 5) { cout << i << " "; i--; } ในการตรวจสอบเงื่อนไข จะพบว่า i > 5 เป็น เท็จ ดังนั้นจึงไม่มีการทำงานใน loop ( ตัวอย่าง ข้างต้นจึงไม่มีผลลัพธ์ ) while loopThere is (correctly) no output
23
while loop to hand-trace What is the output? i = 5; while (i < 0) { cout << i << " "; i--; }
24
while loop Again, there is no output i = 5; while (i < 0) { cout << i << " "; i--; } ในการตรวจสอบเงื่อนไข จะพบว่า i < 0 เป็น เท็จ ดังนั้นจึงไม่มีการทำงานใน loop ( ตัวอย่าง ข้างต้นจึงไม่มีผลลัพธ์ )
25
while loop to hand-trace What is the output? i = 5; while (i > 0); { cout << i << " "; i--; }
26
; while loop There is no output! i = 5; while (i > 0) ; { cout << i << " "; i--; } เครื่องหมาย semicolon ( ; ) ที่ปิดท้าย คำสั่ง while หมายถึง loop นี้ไม่มีส่วน ของ body จะวนเช็คเงื่อนไข i > 0 ไม่รู้จบ ( ค่า i ไม่ มีการเปลี่ยนแปลง )
27
Example: หาผลรวมของเลข 1 ถึง 10 sum = 0; i = 1; while ( i <= 10 ) { sum += i; i++; } cout << sum << endl; i=i+1 sum = sum+i i = 1 sum = 0 T F i<=10
28
Example: พิมพ์เลขคี่ระหว่าง 1 ถึง 10 i = 1 print i i+=2 T F i < 10 i = 1; while ( i < 10 ) { cout << i << “ ”; i = i+2; }
29
Example: รับข้อมูลคะแนนแล้วแสดงว่าผ่าน หรือตก โดยมีเงื่อนไขว่าจะหยุดทำเมื่อข้อมูล ที่รับเข้ามาไม่อยู่ในช่วง 0 - 100 F T print “Pass” print “Fail” score > 50 read score T F 0<=score <=100 cin >> score; while ( score >= 0 && score <= 100 ) { if ( score > 50 ) cout << “Pass\n”; else cout << “Fail\n”; cin >> score; }
30
do-while loop do { statements } while (condition); ทำงานคำสั่งที่อยู่ ภายใต้ปีกกาของ คำสั่ง do-while ก่อนอย่างน้อย 1 รอบ แล้วพิจารณา เงื่อนไข ถ้าเงื่อนไข เป็นจริง ให้วนทำ คำสั่งที่อยู่ภายใต้ ปีกกาของคำสั่ง do-while จนกว่า เงื่อนไขจะเป็นเท็จ จึงจะจบการทำงาน และออกจาก loop
31
Example: หาผลรวมของเลข 1 ถึง 10 i = 0 sum = 0 sum=sum+i i=i+1 F i<10 T sum = 0; i = 0; do { i++; sum += i; } while ( i < 10 ); cout << sum << endl;
32
Example: พิมพ์เลขคี่ระหว่าง 1 ถึง 10 i = 1; do { cout << i << “ ”; i += 2; } while ( i < 10 ); i = 1 i=i+2 print i T F i < 10
33
Example: วนรับคะแนน 10 ค่าแล้วหา ค่าสูงสุด T score>max read score max = score max = 0, num=0 num=num+1 F num<10 T print max F float max, score; int num; max = 0.0; num=0; do { cin >> score; if ( score > max ) max = score; num++; } while ( num < 10 ); cout << “max = ” << max;
34
ตัวอย่างโปรแกรม เพิ่มเติม
35
ตัวอย่างโปรแกรมหาค่าเฉลี่ย int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl;
36
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; Suppose input contains: 1 5 3 1 6 listSize 4
37
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed Suppose input contains: 1 5 3 1 6 4 listSize 0
38
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum Suppose input contains: 1 5 3 1 6 4 listSize 0 0
39
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum Suppose input contains: 1 5 3 1 6 4 listSize 0 0
40
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 0 0 --
41
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 0 0 1
42
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 0 0 1 1
43
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 0 1 1 1
44
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 1 1 1
45
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 1 1 --
46
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 1 1 5
47
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 1 1 5 6
48
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 1 6 5 2
49
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 2 6 5 6
50
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 2 6 -- 2
51
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 2 6 3 2
52
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 2 6 3 9
53
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 2 9 3 3
54
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 9 3 3
55
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 9 -- 3
56
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 9 1 3
57
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 9 1 10
58
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 10 1 4
59
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum value Suppose input contains: 1 5 3 1 6 4 listSize 3 10 1 4
60
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum Suppose input contains: 1 5 3 1 6 4 listSize 3 10 average 2.5 4
61
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; numberProcessed sum average Suppose input contains: 1 5 3 1 6 4 listSize 3 10 2.5 4
62
Execution Trace int listSize = 4; int numberProcessed = 0; double sum = 0; while (numberProcessed < listSize) { double value; cin >> value; sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; Suppose input contains: 1 5 3 1 6 Stays in stream until extracted
63
Better Way of Averaging int numberProcessed = 0; double sum = 0; double value; while ( cin >> value ) { sum += value; ++numberProcessed; } double average = sum / numberProcessed ; cout << "Average: " << average << endl; What if list is empty? The value of the input operation corresponds to true only if a successful extraction was made
64
Even Better Way of Averaging int numberProcessed = 0; double sum = 0; double value; while ( cin >> value ) { sum += value; ++numberProcessed; } if ( numberProcessed > 0 ) { double average = sum / numberProcessed ; cout << "Average: " << average << endl; } else { cout << "No list to average" << endl; }
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.