บทที่ 8

Download Report

Transcript บทที่ 8

Nested Loop
• ในบทก่อนหน้ านี ้เราได้ เรี ยนการเขียนโปรแกรมแบบที่ใช้ if ซ้ อนกัน
• ในทานองเดียวกันในงานที่ซบั ซ้ อน การทาซ ้าก็อาจจะต้ อง
implement ในรูปแบบของ loop ซ้ อนกัน
• การประมวลผลในลักษณะที่เป็ นตาราง loop ซ้ อน มันจะเกิดขึ ้นโดย
ธรรมชาติ
– Loop นอกเป็ นตัวควบคุม แถว ทัง้ หมด
– Loop ในเป็ นตัวควบคุม คอลัมน์ ในแต่ ละแถว
2
โจทย์
จงเขียนโปรแกรมรับค่า m และ n แล้ วแสดงผลลัพธ์ ดังตัวอย่าง
Input
Input
32
Output
**
**
**
25
Output
*****
*****
3
มองผลลัพธ์ในลักษณะของตาราง
จงเขียนโปรแกรมรับค่า m และ n แล้ วแสดงผลลัพธ์ ดังตัวอย่าง
Input1
32
*
*
*
Input2
25
*
*
*
*
*
*
*
*
*
*
*
*
*
4
Nested loop
• การเขียน loop ซ้ อน จะง่ายขึ ้นถ้ าเรามองผลลัพธ์ของโปรแกรมใน
ลักษณะตาราง
– จานวนแถว ใช้ loop นอกเป็ นตัวกาหนด
– จานวนคอลัมน์ ใช้ loop ในเป็ นตัวกาหนด
for(int i = 1 ; i < row ; i++) {
for(int j = 1 ; j < col ; j++ ) {
//คาสัง่ ในการทาซ ้า
}
}
5
โจทย์
จงเขียนโปรแกรมรับค่า m และ n แล้ วแสดงผลลัพธ์ ดังตัวอย่าง
Input
32
Output
**
**
**
จานวนแถว = 3
จานวนคอลัมน์ = 2
Loop นอกวนให้ ครบ 3 รอบ
Loop ในวนให้ ครบ 2 รอบ
แต่ละรอบวนปริน้ “*”
จานวนแถว และ จานวนคอลัมน์
ขึ้นอยูก่ บั ตัวแปร m และ n
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 2 ; j++ ) {
System.out.print(“*”);
} System.out.println();
}
6
ตัวอย่ าง : การแสดงผลสั ญลักษณ์ ต่าง ๆ ตามรู ปแบบที่
กาหนด
7
ตัวอย่าง 1
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
n
for(int i = 1 ;i <= n ;i++){
for(int j=1 ; j <= n; j++){
System.out.print(“A”);
}
System.out.println();
}
8
ตัวอย่าง 2
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
n
i
for(int i = 1 ;i <= n ;i++){
for(int j=1 ; j <= i; j++){
System.out.print(“A”);
}
System.out.println();
}
9
กิจกรรมที่ 1
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
n
i
10
ตัวอย่ าง : การแสดงผลค่ าของตัวแปร
11
ตัวอย่าง 3
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
i
for(int i = 1 ;i <= n ;i++){
for(int j=1 ; j <= i; j++){
System.out.print(j);
}System.out.println();
}
12
กิจกรรมที่ 2
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
i
13
ตัวอย่าง 4
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
i
for(int i = n ;i >= 1 ;i++){
for(int j=1 ; j <= i; j++){
System.out.print(i);
}System.out.println();
}
14
กิจกรรมที่ 3
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
i
15
กิจกรรมที่ 4
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
n
16
ตัวอย่ าง : การแสดงผลค่ าของสั ญลักษณ์ แบบมีทางเลือก
17
ตัวอย่าง 5
• เขียนโปรแกรมรับค่า n จากนันแสดงผลทั
้
งหมด
้
n บรรทัด
– ถ้ าเป็ นบรรทัดแรก หรื อ บรรทัดสุดท้ าย แสดง * จานวน n ตัว
– บรรทัดอื่น ๆ แสดง A จานวน n ตัว
for i from 1 to n
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
n
for j from 1 to n
if i = 1 or i = n
print *
else
print A
end if
end for
end for
18
ตัวอย่าง 6
• เขียนโปรแกรมรับค่า n จากนันแสดงผลทั
้
งหมด
้
n บรรทัด
– ถ้ าเป็ นบรรทัดคี่ แสดง ^ จานวน n ตัว
– ถ้ าเป็ นบรรทัดคู่ แสดง v จานวน n ตัว for i from 1 to n
for j from 1 to n
if i is odd
print ^
else
n
print v
จานวนแถว (i) ขึ ้นอยูก่ บั
end if
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
end for
end for
19
กิจกรรมที่ 5
• เขียนโปรแกรมรับค่า n จากนันแสดงผลทั
้
งหมด
้
n บรรทัด
– ถ้ าเป็ นบรรทัดคี่ แสดง [] จานวนเท่ากับ หมายเลขบรรทัด
– ถ้ าเป็ นบรรทัดคู่ แสดง () จานวนเท่ากับ หมายเลขบรรทัด
จานวนแถว (i) ขึ ้นอยูก่ บั
n
จานวนคอลัมน์ (j)ขึ ้นอยูก่ บั
i
20
ตัวอย่ าง : การใช้ หลายๆ LOOP ซ้ อน
21
ตัวอย่าง 7
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
i ช่ องว่ าง ตัวเลข
1
3
1
2
2
2
3
1
3
4
0
4
for(int i = 1 ;i <= n ;i++){
for(int j=1;j<=n -i;j++){
System.out.print(“ “);
}
for( ; j <=n ; j++){
System.out.print(i);
}
System.out.println();
}
22
ตัวอย่าง 8
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
i ช่ องว่ าง ตัวเลข
0
0
4
1
1
3
2
2
2
3
3
1
for(int i = 0 ;i < n ;i++){
for(int j=0;j<i;j++){
System.out.print(“ “);
}
for(j=i ; j <n ; j++){
System.out.print(n-i);
}
System.out.println();
}
23
กิจกรรมที่ 6
• เขียนโปรแกรมรับค่า n และแสดงผลลัพธ์ ดังนี ้
24
โจทย์
เขียนโปรแกรมรับจานวนเต็มบวก 1 จานวนและแสดงรูปดังตัวอย่าง
ต่อไปนี ้
Input
4
Output
*
***
*****
*******
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
ช่องว่าง ดอกจัน ดอกจัน ช่องว่าง
25
โจทย์
*
*
*
• ช่องว่าง
แถวที่ 1 ช่องว่าง 3 ดอกจัน 1
แถวที่ 2 ช่องว่าง 2 ดอกจัน 2
แถวที่ 3 ช่องว่าง 1 ดอกจัน 3
แถวที่ 4 ช่องว่าง 0 ดอกจัน 4
*
*
*
*
*
*
*
*
*
*
*
*
*
หมายเลขแถวส่งผลต่อจานวนดอกจัน
จานวนช่องว่าง = n - จานวนดอกจัน
26
โจทย์
• ช่องว่าง
แถวที่ 1 ช่องว่าง 3 ดอกจัน 1
แถวที่ 2 ช่องว่าง 2 ดอกจัน 2
แถวที่ 3 ช่องว่าง 1 ดอกจัน 3
แถวที่ 4 ช่องว่าง 0 ดอกจัน 4
จานวนดอกจัน = หมายเลขแถว
จานวนช่องว่าง = n - จานวนดอกจัน
for(int I =1 ; i<=n ; i++) {
for(int j = 1; j<=n-i;j++) {
System.out.print(“ ”);
}
for(; j<=n; j++) {
System.out.print(“*”);
}
}
27
โจทย์
• ดอกจัน (กลุม่ สุดท้ าย)
แถวที่ 1 ดอกจัน 0
แถวที่ 2 ดอกจัน 1
แถวที่ 3 ดอกจัน 2
*
แถวที่ 4 ดอกจัน 3
จานวนดอกจัน = หมายเลขแถว - 1
for(j = 1; j<=i-1 ; j++){
System.out.print(“*”);
}
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
28
โจทย์
for(int i =1 ; i<= n ; i++){
for(j=1 ; j <=n-i; j++){
System.out.print(" ");
}
for( ; j <=n ; j++){
System.out.print("*");
}
for(j=1 ; j<=i-1;j++){
System.out.print("*");
}
System.out.println();
}
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
29