ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Nested loop and its applications.
2
หลักการทำงานของ for loop
3
for loop mechanism i = 4 5 3 2 1 int i = 0;
for(i = 0; i < 5; println("in step : "+(++i))) println("in loop : "+i); println("out of loop i == " + i); i = 4 5 3 2 1 in loop : 0 in step : 1 in loop : 1 in step : 2 in loop : 2 in step : 3 in loop : 3 in step : 4 in loop : 4 in step : 5 out of loop i == 5
4
Nested for loop
5
4 บรรทัด 2 คอลัมน์ Nested for loop i = 2 i = 3 i = 4 i = 1 i = 0 j = 1
for(int i=0; i<4; i++) { for(int j=0; j<2; j++) print("["+i+""+j+"]"); } println(); [01] [11] [21] [31] [00] [10] [20] [30] i = 2 i = 3 i = 4 i = 1 i = 0 j = 1 j = 0 j = 2 4 บรรทัด 2 คอลัมน์
6
More nested for loop (มากกว่า 2 ชั้น)
for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) for(int k=0; k < 5; k++) print("["+i+","+j+","+k+"]"); } println(); กระทำจาก loop ด้านในก่อน แล้วจึงค่อยๆออกมาทำข้างนอกทีละชั้น
7
การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ
8
พื้นฐานของ output 2 มิติ
int row = 5; int column = 10; for(int i = 0; i<row; i++) { print("repeat once in each line :"); for(int j=0; j<column; j++) print("["+i+", "+j+"]"); } println("here comes new line");
9
ชั้นใน : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “ภายใน” บรรทัด (แกนนอน)
int row = 5; int column = 10; for(int i = 0; i<row; i++) { print("repeat once in each line :"); for(int j=0; j<column; j++) print("["+i+", "+j+"]"); } println("here comes new line"); repeat once in each line :[0, 0][0, 1][0, 2][0, 3][0, 4][0, 5][0, 6][0, 7][0, 8][0, 9]here comes new line repeat once in each line :[1, 0][1, 1][1, 2][1, 3][1, 4][1, 5][1, 6][1, 7][1, 8][1, 9]here comes new line repeat once in each line :[2, 0][2, 1][2, 2][2, 3][2, 4][2, 5][2, 6][2, 7][2, 8][2, 9]here comes new line repeat once in each line :[3, 0][3, 1][3, 2][3, 3][3, 4][3, 5][3, 6][3, 7][3, 8][3, 9]here comes new line repeat once in each line :[4, 0][4, 1][4, 2][4, 3][4, 4][4, 5][4, 6][4, 7][4, 8][4, 9]here comes new line ชั้นใน : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “ภายใน” บรรทัด (แกนนอน) ชั้นนอก : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “แต่ละ” บรรทัด (แกนตั้ง)
10
ตัวอย่างการใช้งาน
11
สี่เหลี่ยมมุมฉาก จากอักขระ *
ขนาด กว้าง 5 สูง 5 : for(int i=0; i<5; i++) { for(int j=0; j<5; j++) print("*"); } println(); ***** ขนาด กว้าง 10 สูง 5 : for(int i=0; i<5; i++) { for(int j=0; j<10; j++) print("*"); } println(); **********
12
สามเหลี่ยม จากอักขระ *
for(int i=0; i<5; i++) { for(int j=0; j<i; j++) print("*"); } println(); * ** *** **** for(int i=0; i<5; i++) { for(int j=0; j<i; j++) print("*"); } println(); for(int i=5-2; i>0; i--) for(int j=i; j>0;j--) * ** *** ****
13
การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ : กรณีศึกษา “ข้าวหลามตัด”
14
การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ : กรณีศึกษา “ข้าวหลามตัด”
n = 3 * *** ***** n = 4 * *** ***** ******* n = 5 * *** ***** ******* *********
15
สังเกต : จำนวนบรรทัด , จำนวนเว้นวรรค และจำนวน *
n = 5 * *** ***** ******* ********* n = 5 ####* ###*** ##***** #******* ********* สังเกต : จำนวนบรรทัด , จำนวนเว้นวรรค และจำนวน *
16
ที่ n = 5 แต่ละบรรทัด มีอะไรกันบ้าง??
####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: ที่ n = 5 แต่ละบรรทัด มีอะไรกันบ้าง??
17
จำนวนบรรทัด = 2n-1 (ในที่นี้คือ 9 บรรทัด จาก 2*5-1)
line Space count Asterisk count 4 1 3 2 5 7 9 6 8 ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: จากตาราง จะได้ว่า จำนวนบรรทัด = 2n-1 (ในที่นี้คือ 9 บรรทัด จาก 2*5-1) จำนวนเว้นวรรค = |n-i-1| (ใน for loop i เริ่มที่ 0 จึงต้อง -1 ออก) จำนวน * = จำนวนบรรทัด - จำนวนเว้นวรรคในบรรทัดนั้นๆ = (2n-1) - |n-i-1|
18
นำมาเขียนเป็นโปรแกรมได้ดังนี้ :
for(int i = 0; i < 2*n-1; i++) { for(int j=0; j < Math.abs(n-i-1);j++) print(" "); for(int j=0; j < (2*n-1) - 2*Math.abs(n-i-1);j++) print("*"); println(); } นอกจากนี้ ยังอาจสามารถสร้างได้โดยใช้วิธีคิดแบบอื่นๆอีกมากมาย ซึ่งก็ขึ้นอยู่กับความถนัดและประสบการณ์หรือความเคยชินของแต่ละคน หากผลลัพธ์ออกมาเหมือนกัน (ในที่นี้จะยังไม่สนใจถึงเรื่องประสิทธิภาพของโปรแกรม)
19
ลองมองมุมกลับ แล้วก็ปรับมุมมอง...
20
ข้าวหลามตัด : แบ่งส่วน
21
มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ!
line Space count Asterisk count 4 1 3 2 5 7 9 6 8 ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ!
22
มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ!
line Space count Asterisk count 4 1 3 2 5 7 9 6 8 ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ! - เหลือปัญหาสามเหลี่ยมหงาย และสามเหลี่ยมคว่ำ และไส้กลาง
23
อันดับแรก - ประกาศตัวแปรที่จะใช้งานก่อน :
int n = 5; int i = 0; ถัดมา - สามเหลี่ยมบน : for(i=0;i<n-1;i++) { for(int j=n-i-1; j>0;j--) print(" "); //เว้นวรรค เหมือนเดิมทุกประการ for(int j=0;j<2*i+1;j++) //จำนวน * เริ่มที่ 1 ในบรรทัดแรก และเพิ่มขึ้นทีละ 2 ในแต่ละบรรทัด print("*"); println(); } วนตั้งแต่ i = 0 ถึง i = 3 หลังจากจบการทำงานลูปนี้ i = 4 (จากการหลุดเงื่อนไข i<n-1 โดยคำสั่ง i++)
24
องค์ประกอบสำคัญ - ไส้กลาง :
//ไส้กลางมีจำนวน * เท่ากับ 2n-1 for(int mid=0; mid<2*n-1;mid++) print("*"); println(); สุดท้าย - สามเหลี่ยมล่าง : จากสามเหลี่ยมบน วนจาก 0 ถึง 3 ดังนั้น สามเหลี่ยมล่างต้องวนจาก 3 ไปสู่ 0 จากเดิม i = 4 จึงต้องลดค่าลงไป 1 ให้เหลือ 3 i--; for(;i>=0;i--) //ข้างในเหมือนสามเหลี่ยมบนเป๊ะๆ { for(int j=n-i-1; j>0;j--) print(" "); for(int j=0;j<2*i+1;j++) print("*"); println(); }
25
Code ฉบับเต็ม
26
public void run() { int n=5; int i = 0; for(i=0;i<n-1;i++) for(int j=n-i-1; j>0;j--) print(" "); //เว้นวรรค เหมือนเดิมทุกประการ for(int j=0;j<2*i+1;j++) //จำนวน * เริ่มที่ 1 ในบรรทัดแรก และเพิ่มขึ้นทีละ 2 ในแต่ละบรรทัด print("*"); println(); } //ไส้กลางมีจำนวน * เท่ากับ 2n-1 for(int mid=0; mid<2*n-1;mid++) i--; for(;i>=0;i--) //ข้างในเหมือนสามเหลี่ยมบนเป๊ะๆ print(" "); for(int j=0;j<2*i+1;j++)
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.