รายการบล็อก

วันอังคารที่ 27 กุมภาพันธ์ พ.ศ. 2561

หน่วยที่ 7 โครงสร้างควบคุมแบบทำซ้ำ

หน่วยที่ 7
 โครงสร้างควบคุมแบบทำซ้ำ

หัวเรื่อง(Topics)
     7.1 คำสั่ง While
     7.2 คำสั่ง do...While
     7.3 คำสั่ง for
     7.4 การทำซ้ำแบบซอนกัน (Nested loop)

แนวคิดสำคัญ (Main Idea)
    การเขียนโปรแกมแบบทำซ้ำหรือที่เรียกว่าลูป (Loop)  เป็นการกระทำในหนึ่งกระบวนการหลายครั้งโดยมีเงื่อนไขควบคุม ซึ่งหน่วยนี้จะขอกล่าวถึงคำสั่งที่เป็นโครงสร้างแบบทำซ้ำ 4 รูปแบบ คื่อคำสั่งที่ทำซ้ำแบบ While คำสั่งทำซ้ำแบบ do...While คำสั่งทำซ้ำแบบ for และคำสั่งทำซ้ำแบบซ้อน ซึ่งการเลือกใช้โครงสร้างแบบทำซ้ำแต่ละรูปแบบขึ้นอยู่กับลักษณะของงานและผลลัพท์ที่ต้องการ
     คำสั่ง While เป็นคำสั่งโครงสร้างแบบทำซ้ำที่จะมีการทดสอบเงื่อนไขก่อนทำคำสั่งในลูป ซึ่งถ้าเงื่อนไขที่อยู่หลัง While เป็นจริง จะทำคำสั่งในลูปและย้อนกลับมาทดสอบเงื่อนไขที่อยู่หลัง While ไปเรื่อยๆ จนกว่าเงื่อนไขที่อยู่หลัง While เป็นเท็จ จึงจะออกนอนลูป
     คำสั่ง do...While เป็นคำสั่งโครงสร้างแบบทซ้ำที่จะมีการทำคำสั่งในลูปก่อนทดสอบเงื่อนไข โดยหากเงื่อนไขที่อยู่หลัง While เป็นจริงจะทำคำสั่งในลูป และวนรอบและตรวจสอบเงื่อนไขไปเรื่อยๆจนกว่าเงื่อนไขที่อยู่หลัง While จะเป็นเท็จ
     คำสั่ง for เป็นคำสั่งโครงสร้างแบบทำซ้ำที่จะมีการทดสอบเงื่อนไขก่อนทำคำสั่งในลูป โดยหากเงื่อนไขเป็นจริง จะทำคำสั่งในลูปไปเรื่อยๆ จนกว่าเงื่อนไขเป็นเท็จ จึงจะออกนอกรูป
     การทำซ้ำแบบซ้อนกัน (Nested loop) เป็นคำสั่งโครงสร้างแบบทำซ้ำแบบลูปซ้อนลูป โดยจะมีการทำงานเริ่มจากลูป for ที่อยู่ภายนอกก่อน จากนั้นจึงจะเข้าทำงานลูป for ที่อยู่ภายในโดยทุก ๆ ค่าของลูป for นอก จะทำซ้ำคำสั่งภายในลูป for ในให้ครบทุกรอบก่อน จึงจะออกมาทำลูป for นอก

สมรรถนะย่อย (Element of Competency)
     1. แสดงความรู้เกี่ยวกับโครงสร้างควบคุมแบบทำซ้ำ
     2. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำ

จุดประสงค์เชิงพฤติกรรม (Behavioral Objectives)
     1. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง While ได้ถูกต้อง
     2. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง do...While ได้ถูกต้อง
     3. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำด้วยคำสั่ง for ได้ถูกต้อง
     4. เขียนโปรแกรมโครงสร้างควบคุมแบบทำซ้ำแบบซ้อนกัน ได้ถูกต้อง

คำสั่ง While
การใช้คำสั่ง While loop
คำสั่งวนซ้ำที่ง่ายที่สุดในภาษา Java คือ คำสั่ง While loop โดยมันมีรูปแบบในการใช้งานดังนี้
while ( expression ) {
    // statements
}
ในการใช้งานคำสั่ง while สำหรับการสร้าง while loop และ expression คือเงื่อนไขที่จะให้โปรแกรมทำงานใน loop ถ้าหากเงื่อนไขเป็นจริงโปรแกรมจะทำงานในบล็อคคำสั่งวงเล็บปีกกา { } เมื่อเงือนไขเป็นเท็จโปรแกรมจะออกจากลูปจะทำงานคำสั่งต่อไปหลัง while
มาดูตัวอย่างการใช้ While loop ในภาษา Java กับการนับเลขอย่างง่าย
public class WhileLoop {
    public static void main(String[] args) {      
        int i = 1;
       
        while ( i <= 10 ) {
            System.out.print (i  + ", ");
            ++i;
        }    
       
        System.out.println("End");
    }
}
ในโปรแกรม นั้นเราได้ประกาศตัวแปร i มาใช้ในการนับ ในเงือนไขของ while เราได้ตรวจสอบว่าถ้าหาก i น้อยกว่าหรือเท่ากับ 10 while ( i <= 10 ) โปรแกรมจะทำงานใน loop และแสดงค่า i ออกมา แต่ละรอบเราจะทำการเพิ่มค่าของ i ด้วยคำสั่ง ++i; เพื่อป้องกันไม่ให้ลูปทำงานตลอดไป (Infinity loop) จนกว่าเงือนไขไม่เป็นจริง โปรแกรมได้ออกนอกลูปและทำคำสั่งต่อมา
1,  2, 3, 4, 5, 6, 7, 8, 9, 10, End
ข้างล่างนี้เป็นผลลัพธ์ของโปรแกรม คุณจะเห็นว่ามันวิเศษไปเลย เราสามารถทำให้มันแสดงผลได้ 10 ครั้งเพียงแค่เขียนโปรแกรมไม่กี่บรรทัด แน่นอนคุณจะทำให้มันแสดงถึง 100 ก็ยังได้ เพียงแค่เปลี่ยนเงือนไขในเป็น while ( i <= 100 ) แค่นั้นเอง

คำสั่ง do...While
การใช้คำสั่ง Do-While loop
คำสั่งวนซ้ำอีกชนิดหนึ่งคือ คำสั่ง do-while loop ซึ่งคำสั่งนี้จะทำงานแตกต่างคำสั่ง while loop เล็กน้อยคือ มันจะทำงานก่อนอย่างน้อย 1 ครั้งหลังจากนั้นจะตรวจสอบเงื่อนไขอยู่ด้านท้ายของ loop มันมีรูปแบบการใช้งานดังนี้
do {
    // statements
} while ( expression );
ต่อไปมาดูตัวอย่างการใช้งานคำสั่ง do-while loop ในภาษา Java เราจะเขียนโปรแกรมในการตรวจสอบตัวเลข ว่าเป็นจำนวนคี่หรือคู่ (odd or even number)
import java.util.Scanner;

public class DoWhileLoop {
    public static void main(String[] args) {      
        Scanner reader  = new Scanner(System.in);
        int number;
       
        System.out.println("\tDetermine odd/even program");
       
        do {
            System.out.print("Enter odd number to exit loop: ");
            number = reader.nextInt();
           
            if (number % 2 == 0) {
                System.out.println("You entered " + number + ", it's even.");
            } else {
                System.out.println("You entered " + number + ", it's odd.");
            }
           
        } while (number % 2 == 0);
       
        System.out.println("Exited loop.");
       
    }
}
ในตัวอย่างโปรแกรมจะถามให้ผู้ใช้กรอกตัวเลขคี่ (odd number) เพื่ออกจากลูป โปรแกรมจะทำงานในลูปเรื่อยๆ ถ้าหากเขายังคงกรอกเลขคู่ (even number) โดย number % 2 == 0 เป็น expression เพื่อตรวจสอบว่าตัวเลขเป็นเลขคู่หรือไม่ โดยการใช้ตัวดำเนินการ Mod เลขคู่คือเลขที่หารด้วย 2 แล้วมีเศษเป็น 0
คุณอาจจะเห็นว่าโปรแกรมของเราอาจจะซับซ้อน เช่น การใช้คำสั่ง If ซ้อนข้างใน เพราะการทำเช่นนี้มันจะทำให้คุณจดจำและมองเห็นวิธีการนำไปประยุกต์ใช้ได้ดีขึ้น
 Determine odd/even program
Enter odd number to exit loop: 2
You entered 2, it's even.
Enter odd number to exit loop: 4
You entered 4, it's even.
Enter odd number to exit loop: 8
You entered 8, it's even.
Enter odd number to exit loop: 0
You entered 0, it's even.
Enter odd number to exit loop: 3
You entered 3, it's odd.
Exited loop.
และนี่คือผลลัพธ์ของโปรแกรม โปรแกรมจะออกจากลูปเมื่อผู้ใช้กรอกเลขคี่ ซึ่งก็คือ 3 สำหรับตัวอย่าง

 คำสั่ง for
การใช้คำสั่ง For loop
คุณได้เรียนรู้คำสั่งลูปพื้นฐานไปแล้ว ต่อไปเราจะให้คุณรู้จักกับ For loop ซึ่งเป็น loop ที่นิยมใช้กันเป็นจำนวนมาก เพราะว่า Foor loop มักจะใช้กับ Loop ที่ทราบจำนวนการวนซ้ำที่แน่นอน และมันอำนวยความสะดวกในการประกาศตัวแปรเริ่มต้น กำหนดเงือนไข และเพิ่มลดค่าไว้ที่เดียวกัน ซึ่งตัวแปรเหล่านี้สามารถใช้ได้เพียงแค่ใน Loop scope เท่านั้น
การใช้คำสั่ง For loop ในภาษา Java นั้นมีรูปแบบดังนี้
for (initial; condition; update) {
    // Statements
}
สำหรับรูปแบบของ for loop นั้นจะมีการกำหนดส่วนประกอบ 3 ส่วนคือ initial คือการประกาศส่วนเริ่มต้นของลูป เช่น กำหนดค่าให้กับตัวแปร condition คือการกำหนดเงือนไขที่จะให้ทำงานในลูป และ update เป็นการอัพเดทค่าหลังจากจบแต่ละลูป ซึ่งจะเห็นว่ามันรวมกันที่ส่วนหัวของ for ซึ่งง่ายต่อการใช้งาน
ต่อไปมาดูตัวอย่าง การใช้ For loop ในภาษา Java ตัวอย่างนี้ เราจะใช้ตัวอย่างเดียวกันกับ While loop คือแสดงเลข 1 - 10
public class ForLoop {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("Loop " + i);
        }
        System.out.println("End of loop");
    }
}
จากตัวอย่างนั้นจะได้ผลลัพธ์เช่นกันกับ while loop ในตัวอย่างก่อนหน้า คุณจะเห็นว่ามันง่ายและสะดวกกว่าในการใช้ นอกจากนี้ For loop ยังนิยมใช้กับข้อมูลแบบอาเรย์ คุณจะได้เรียนในบทต่อไป

การทำซ้ำแบบซ้อนกัน (Nested loop)
Nested For loop
เช่นเดียวกัน คำสั่ง loop ทุกชนิดสามารถที่จะซ้อนกันได้ ซึ่งเราเรียกว่า Nested loop ต่อไปมาดูตัวอย่างการใช้คำสั่ง For loop ซ้อนกัน โดยเราจะสร้างแมทริกขนาด 2 มิติ ที่แต่ละค่าเป็นค่าของ i และ j คูณกัน
public class ForLoop {
    public static void main(String[] args) {
        int width = 6;
        int height = 6;
       
        System.out.println("\tMatrix program");
        for (int i = 1; i <= height ; i++) {
            for (int j = 1; j <= width ; j++) {
                System.out.print("\t" + (i * j));
            }
            System.out.println();
        }
    }
}
ในตัวอย่าง เราได้สร้าง For loop สองอันที่ซ้อนกันอยู่ โดยลูปข้างนอก (outer loop) จะทำการวนตามจำนวนในตัวแปร height และลูปข้างใน (inner loop) จะทำการวนตามจำนวน widthผลลัพธ์ตัวเลขที่ได้นั้นเกิดจาก ค่าของ i * j และเราใช้ Tab (\t) เพื่อทำให้มันสวยงาม
 Matrix program
 1 2 3 4 5 6
 2 4 6 8 10 12
 3 6 9 12 15 18
 4 8 12 16 20 24
 5 10 15 20 25 30
 6 12 18 24 30 36
และนี่เป็นผลลัพธ์ของโปรแกรม Nested for loop
ในการเขียนโปรแกรมทำงานกับ Loop นั้นจะมีคำสั่งสองชนิดที่คุณมักจะต้องใช้ควบคุมการทำงานของ Loop ในกรณีพิเศษ โดยคำสั่งเหล่านั้นคือ Continue และ Break


ไม่มีความคิดเห็น:

แสดงความคิดเห็น

จุดประสงค์รายวิชา

พื้นฐานการเขียนโปรแกรมคอมพิวเตอร์รหัสวิชา  2204-200 6 จุดประสงค์รายวิชา เพื่อให้    1. มีความรู้ความเข้าใจเกี่ยวกับหลักการเขียนโปรแ...