Nested loop and its applications.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
Advertisements

Suphot Sawattiwong Lab I-II Suphot Sawattiwong
The InetAddress Class.
คำสั่ง while และ คำสั่ง do..while
Control Statement for while do-while.
Lecture 4: ทางเลือก, เงื่อนไขของทางเลือก
Lecture 9: การวนซ้ำแบบมีโครงสร้างการวนซ้ำซ้อนกัน
Lecture 6: ทางเลือกแบบมีโครงสร้างซ้อนใน
Array.
LAB # 4 Computer Programming 1 1. พิจารณาโปรแกรมต่อไปนี้
LAB # 4.
บทที่ 5 การทำงานแบบวนซ้ำ
CE 112 บทที่ 5 การทำซ้ำในภาษา C
Lab 8: คำสั่ง Do-While อ.ณัฐพงศ์ พยัฆคิน.
อ.อรวรรณ เชาวลิต For คำสั่งวนซ้ำ อ.อรวรรณ เชาวลิต
ครั้งที่ 7 Composition.
2.3.2 Contrast Stretching Contrast
การสืบทอด (Inheritance)
Repetitive Or Iterative
Relational Operators by Accords (IT SMART CLUB 2006) by Accords 1.
คำสั่งควบคุมเงื่อนไข และการทำงานเป็นรอบ
สุพจน์ สวัตติวงศ์ gamepad.pigcanfly.com
รูปแบบ if-else if if (เงื่อนไข1) {
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
อาร์เรย์ หรือแถวลำดับ (Array)
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 3 มิถุนายน 2550 Method of Class มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 8 อาร์เรย์.
JAVA PROGRAMMING PART IV.
โครงสร้างควบคุมการทำงาน
คำสั่ง for ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
คำสั่งควบคุมการ ทำงาน การเขียนโปรแกรมโดยปกติ มีทั้งให้ทำงาน เป็นลำดับ ที่ละคำสั่ง บางครั้งมีการให้เปลี่ยน ลำดับในการทำคำสั่ง เพื่อให้การเขียน โปรแกรมมีประสิทธิภาพสูงสุด.
The ServerSocket Class ใช้ในการจัดทำเครื่องที่เป็นการบริการ ใช้ในการจัดทำเครื่องที่เป็นการบริการ โดยจะมี ช่วงชีวิตดังนี้ โดยจะมี ช่วงชีวิตดังนี้
Method of Class อ.สุพจน์ สิงหัษฐิต
การเขียนโปรแกรม JAVA ขั้นพื้นฐาน
#include #define N 5 void main() { inti, X[N]; for (i=0; i < N; i++) { /* รับข้อมูล */ printf(“Enter number : ”); scanf(“%d”, &X[i] ); } for (i=0; i
หลักการเขียนโปรแกรม ( )
บทที่ 2 การแสดงผลและรับข้อมูล
LOOPLOOP. LOOP คืออะไร ? - วงรอบการทำงาน - ทำงานแบบซ้ำๆ ไปเรื่อยๆตามเงื่อนไข เช่น - การแพ๊คของ 50 ชิ้นใส่กล่อง ทำไปเรื่อยๆ จนกว่า ของจะหมด - ตีดอทไปเรื่อยๆ.
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
Chapter 6 Repetition Structure[1] ผู้สอน อ. ยืนยง กันทะเนตร สาขาวิชาเทคโนโลยี คอมพิวเตอร์เคลื่อนที่ ng.
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
การทำงานแบบวนซ้ำ (Iteration).
Chapter 6 Abstract Class and Interface
การทำซ้ำ (for).
Nested loop.
Colpitts Oscillator Circuits
นางสาวสรัญญา ชื่นเย็น (พี่ออย) เจ้าหน้าที่ศูนย์นวัตกรรมการจัดการ อ.ก้องภู นิมานันท์ อาจารย์ที่ปรึกษา 1.น.ส.นพรัตน์ ปฏิกรณ์ (คุ๊กกี้) นายบุรินทร์
เปิดประชุมเวลา น. รายชื่อผู้เข้าประชุม.
REVENUE MANAGEMENT Presented by LM 10 ONLINE LOTTO.
โครงสร้างการทำงานแบบวนซ้ำ
บทที่ 6 การเขียนโปรแกรมแบบมีเงื่อนไข
WEEK5-2: 14 SEP 2017 Input / Output Selection Statement
Control Statements.
การขออนุมัติดำเนินโครงการ ภายใต้ข้อบังคับฯ 2559
รูปแบบและขั้นตอนการเขียนเอกสารประกอบการสอน
ตั้งชื่อ wed Site เช่น Kruhwk คู่มือ GROU.PS กรอกmail.
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop) Part2
หน่วยที่ 9 เครื่องโทรศัพท์.
Data Structures and Algorithms 2/2561
Algorithms Analysis Sanchai Yeewiyom
การเขียนโปรแกรมภาษา Java (ต่อ)
การจัดทำแผนปฏิบัติการ ระดับหน่วยงานกรมอนามัย ประจำปีงบประมาณ พ.ศ.2560
การวิเคราะห์ข้อมูลเรื่องข้าว เพื่อการทบทวนประเด็นยุทธศาสตร์
เงินนอกงบประมาณ โครงการพัฒนาศักยภาพบุคลากรตามเกณฑ์ประเมินผลการปฏิบัติงาน ด้านบัญชีในระบบ GFMIS (กระทรวงสาธารณสุข) นายธราธิป หนูเจริญ นักวิชาการคลังชำนาญการ.
ใบสำเนางานนำเสนอ:

Nested loop and its applications.

หลักการทำงานของ for loop

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

Nested for loop

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 คอลัมน์

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 ด้านในก่อน แล้วจึงค่อยๆออกมาทำข้างนอกทีละชั้น

การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ

พื้นฐานของ 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");

ชั้นใน : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “ภายใน” บรรทัด (แกนนอน) 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 ชั้นใน : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “ภายใน” บรรทัด (แกนนอน) ชั้นนอก : กำหนดความเปลี่ยนแปลงที่เกิดขึ้น “แต่ละ” บรรทัด (แกนตั้ง)

ตัวอย่างการใช้งาน

สี่เหลี่ยมมุมฉาก จากอักขระ * ขนาด กว้าง 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(); **********

สามเหลี่ยม จากอักขระ * 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--)   * ** *** ****

การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ : กรณีศึกษา “ข้าวหลามตัด”

การประยุกต์ใช้ for loop สร้างเป็นรูปต่างๆ : กรณีศึกษา “ข้าวหลามตัด” n = 3 * *** ***** n = 4 * *** ***** ******* n = 5 * *** ***** ******* *********

สังเกต : จำนวนบรรทัด , จำนวนเว้นวรรค และจำนวน * n = 5 * *** ***** ******* ********* n = 5 ####* ###*** ##***** #******* ********* สังเกต : จำนวนบรรทัด , จำนวนเว้นวรรค และจำนวน *

ที่ n = 5 แต่ละบรรทัด มีอะไรกันบ้าง?? ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: ที่ n = 5 แต่ละบรรทัด มีอะไรกันบ้าง??

จำนวนบรรทัด = 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|

นำมาเขียนเป็นโปรแกรมได้ดังนี้ : 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(); } นอกจากนี้ ยังอาจสามารถสร้างได้โดยใช้วิธีคิดแบบอื่นๆอีกมากมาย ซึ่งก็ขึ้นอยู่กับความถนัดและประสบการณ์หรือความเคยชินของแต่ละคน หากผลลัพธ์ออกมาเหมือนกัน (ในที่นี้จะยังไม่สนใจถึงเรื่องประสิทธิภาพของโปรแกรม)

ลองมองมุมกลับ แล้วก็ปรับมุมมอง...

ข้าวหลามตัด : แบ่งส่วน

มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ! line Space count Asterisk count 4 1 3 2 5 7 9 6 8 ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ!

มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ! line Space count Asterisk count 4 1 3 2 5 7 9 6 8 ####* ###*** ##***** #******* ********* 0: 1: 2: 3: 4: 5: 6: 7: 8: มองลำบากหรือไม่?? ลองแบ่งปัญหาข้าวหลามตัดออกเป็นปัญหาย่อย ๆ ดูสิ! - เหลือปัญหาสามเหลี่ยมหงาย และสามเหลี่ยมคว่ำ และไส้กลาง

อันดับแรก - ประกาศตัวแปรที่จะใช้งานก่อน : 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++)

องค์ประกอบสำคัญ - ไส้กลาง : //ไส้กลางมีจำนวน * เท่ากับ 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(); }

Code ฉบับเต็ม

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++)