คำสั่งควบคุม

ในบทก่อนหน้า คุณได้เรียนพื้นฐานของภาษา C++ ไปแล้ว ในบทนี้ คุณจะได้เรียนเกี่ยวกับการควบคุมโปรแกรมโดยการใช้คำสั่งควบคุม อย่างเช่น if, if else, switch, for, while, do while คำสั่งเหล่านี้ใช้เพื่อควบคุมโปรแกรมเพื่อให้ไปในทิศทางที่เราต้องการ

คำสั่ง if, if else, และ switch ถูกใช้เพื่อควบคุมโปรแกรมโดยมีเงื่อนไขเป็น Expression กำหนดเงื่อนไข คำสั่งวนซ้ำ เช่น for, while, และ do while ถูกใช้เพื่อทำซ้ำส่วนของโค้ดตามเงื่อนไขของ Expression จนกว่าเงื่อนไขจะเป็นเท็จ

คำสั่ง if

คำสั่ง If เป็นคำสั่งที่เป็นพื้นฐานที่สุดสำหรับควบคุมการทำงานในภาษา C++ คำสั่ง If ถูกใช้เพื่อควบคุมโปรแกรมกับเงื่อนไขที่กำหนด โค้ดในบล็อคของ คำสั่ง If จะทำงานถ้าเงื่อนไขตรงหรือเป็นจริง เรามักจะใช้คำสั่ง If ในกรณีที่โปรแกรมนั้นต้องทำงานภายใต้เงื่อนไขบางอย่าง นี่เป็นรูปแบบของการใช้งานคำสั่ง If ในภาษา C++

if (expression)
{
    // statements
}

ในรูปแบบการทำงานของคำสั่ง if นั้นจะทำการตรวจสอบเงื่อนไขที่สร้างจาก expression ภายในบล็อคของคำสั่งนั้นจะล้อมรอบด้วยวงเล็บปีกกา {...} ภายในบล็อคนั้นสามารถประกอบไปด้วยตั้งแต่หนึ่งถึงหลายคำสั่ง นี่เป็นตัวอย่างการใช้งานคำสั่ง if ในภาษา C++

#include <iostream>

using namespace std;

int main()
{
    int n = 10;
    if (n == 10)
    {
        cout << "n is 10";
    }
    return 0;
}

ในตัวอย่างนี้ เราได้ใช้คำสั่ง if เพื่อตรวจสอบว่าตัวแปร n มีค่าเท่ากับ 10 หรือไม่ ถ้าตรงกับเงื่อนไขหรือเงื่อนไขเป็นจริง โปรแกรมจะทำงานในบล็อคของ if คือ cout << "n is 10" ซึ่งเป็นการแสดงผลข้อความว่า "n มีค่าเป็น 10"

คำสั่ง If else

คำสั่ง If else นั้นคล้ายกับคำสั่ง if คำสั่ง if else นั้นใช้จะใช้สำหรับการสร้างเงื่อนไขแบบหลายทางเลือก และมันจะต้องเริ่มต้นด้วยคำสั่ง if เสมอ และนอกจากนี้ยังมีคำสั่ง else clause เพื่อทำในเงื่อนไขที่นอกเหลือจากเงื่อนไขอื่นทั้งหมด มาดูตัวอย่าง

#include <iostream>

using namespace std;

int main()
{
    int n = -1;
    if (n < 0)
    {
        cout << "Negative number.";
    }
    else if (n > 0)
    {
        cout << "Positive number.";
    }
    else
    {
        cout << "Zero number";
    }
    return 0;
}

ในตัวอย่าง คำสั่ง if สามารถมีเงื่อนได้หลายอันโดยการใช้ else if สำหรับสร้างเงื่อนไขที่สองเป็นต้นไป และในเงื่อนไขสุดท้ายคือ else ซึ่งมันจะทำงานเมื่อไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้า ในโค้ด เรามีตัวแปร n ซึ่งมีข้อมูลเป็นแบบ Integer โปรแกรมของเรานั้นจะตรวจสอบว่า n เป็นจำนวนเต็มบวก เต็มลบ หรือศูนย์

มากไปกว่านั้น เราสามารถมีได้หลายเงื่อนไขย่อยๆ โดยการใช้ตัวดำเนินการตรรกะสำหรับการเชื่อม Expression เข้าด้วยกัน

#include <iostream>

using namespace std;

int main()
{
    int a = 12;
    int b = 5;
    if (a > 10 && b % 2 == 0)
    {
        cout << "a is greater than 10 and b is even number.";
    }
    else
    {
        cout << "Other condition";
    }
    return 0;
}

ในตัวอย่างนั้นใช้หลายเงื่อนไขและผลลัพธ์ของโปรแกรมจะเป็น "Other condition" เพราะว่า a นั้นมากกว่า 10 แต่ b นั้นไม่เป็นจำนวนคู่ คุณสามารถเพิ่มเงื่อนไขได้อีกตามที่คุณต้องการ

ตัวอย่างการใช้งานคำสั่งเลือกเงื่อนไขในภาษา C++

หลังจากคุณได้รู้จักกับคำสั่งควบคุมแบบเลือกเงื่อนไขในแบบต่างๆ แล้ว เพื่อให้คุณเข้าใจมากขึ้น ต่อไปจะเป็นตัวอย่างของโปรแกรมคำนวณเกรดจากคะแนน โดยเราจะใช้คำสั่งทั้งหมดที่คุณเพิ่งได้เรียนรู้มา เช่น คำสั่ง if else-if และ else

#include <iostream>

using namespace std;

int main()
{
    int score = 0;
    string name;
    char grade;

    cout << "Enter you name: ";
    cin >> name;
    cout << "Enter your score (0 - 100): ";
    cin >> score;

    if (score >= 0 && score <= 100)
    {

        if (score >= 80)
        {
            grade = 'S';
        }
        else if (score >= 70)
        {
            grade = 'A';
        }
        else if (score >= 60)
        {
            grade = 'B';
        }
        else
        {
            grade = 'C';
        }

        cout << "Hello " << name << endl;
        cout << "You got grade " << grade << endl;

    }
    else
    {
        cout << name << ", you entered an invalid score." << endl;
        cout << "Please try again." << endl;
    }

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมในการคำนวณเกรดที่ได้รับจากคะแนน โดยโปรแกรมจะถามชื่อและคะแนนของผู้ใช้และรับค่านั้นมาทางคีย์บอร์ด โปรแกรมของเราจะทำการคำนวณเกรดและแจ้งให้ทราบ ในส่วนแรกของโปรแกรมนั้นเป็นการรับชื่อและคะแนนมาเก็บไว้ในตัวแปร name และ score ตามลำดับ

if (score >= 0 && score <= 100)
{

    ...

}
else
{
    cout << name << ", you entered an invalid score." << endl;
    cout << "Please try again." << endl;
}

ในการทำงานของโปรแกรม เราได้ทำการตรวจสอบคะแนนด้วยคำสั่ง if ถ้าหากคะแนนนั้นอยู่ระหว่าง 0 ถึง 100 เราจะทำการคำนวณเกรด และถ้าหากไม่ใช้โปรแกรมจะทำงานในบล็อคของคำสั่ง else และบอกว่ากรอกคะแนนไม่ถูกต้อง

if (score >= 80)
{
    grade = 'S';
}
else if (score >= 70)
{
    grade = 'A';
}
else if (score >= 60)
{
    grade = 'B';
}
else
{
    grade = 'C';
}

การใช้งานคำสั่ง if นั้นสามารถซ้อนกันได้ ดังนั้นในคำสั่ง if ภายในจะทำงานก็ต่อเมื่อเงื่อนไขของ if บล็อคนอกเป็นจริง คือคะแนนที่กรอกเข้ามานั้นอยู่ระหว่าง 0 ถึง 100 เราได้สร้างเงื่อนไขแบบหลายทางเลือกสำหรับตรวจสอบเกรดด้วยคำสั่ง else if ซึ่งมีสามเงื่อนไข และในคำสั่ง else นั้นจะทำงานในกรณีที่โปรแกรมไม่ตรงกับทั้งสามเงื่อนไขก่อนหน้าเลย

Enter you name: Mateo
Enter your score (0 - 100): 85
Hello Mateo
You got grade S

นี่เป็นผลลัพธ์การทำงานของโปรแกรม จะเห็นว่าคะแนน 85 ที่กรอกเข้ามานั้นทำให้เงื่อนไข if ครั้งแรกเป็นจริง และทำงานภายในคำสั่ง If ภายในก็ตรงเป็นเงื่อนไขแรก ทำให้ได้เกรด S

Enter you name: Mateo
Enter your score (0 - 100): 105
Mateo, you entered an invalid score.
Please try again.

หลังจากนั้นเราได้รันโปรแกรมอีกครั้ง และกรอกคะแนนเป็น 105 ทำให้เงื่อนไขในคำสั่ง If ด้านนอกไม่เป็นจริง และโปรแกรมทำงานในบล็อคของคำสั่ง else

คำสั่ง Switch case

คำสั่ง switch-case นั้นคล้ายกับ คำสั่ง If-else เป้าหมายของมันเพื่อตรวจสอบกับค่าคงที่ นี่เป็นตัวอย่างการใช้คำสั่ง switch

#include <iostream>

using namespace std;

int main()
{
    int n = 1;
    switch (n)
    {
    case 1:
        cout << "n is 1";
        break;
    case 2:
        cout << "n is 2";
        break;
    default:
        cout << "Unknown n";
    }
    return 0;
}

switch expression สามารถมีได้แค่หนึ่งค่าเพื่อประเมิน คำสั่ง case เป็นคำสั่งเงื่อนไขเพื่อเปรียบเทียบค่า ในตัวอย่าง case 1: จะทำงานเมื่อ n มีค่าเท่ากับ 1 หลังจากคำสั่งด้านล่างเราต้องใส่คำสั่ง break เพื่อหยุดสำหรับแต่ละ case ไม่เช่นนั้นโปรแกรมจะทำงานไปจนกว่าจะพบคำสั่ง break หรือสิ้นสุดบล็อคคำสั่งของ switch และคำสั่ง default นั้นเป็นทางเลือกเมื่อโปรแกรมไม่ตรงกับเงื่อนไขใดๆ ก่อนหน้าเช่นเดียวกับคำสั่ง else

ในตัวอย่าง มันสามารถถูกเขียนโดยการใช้คำสั่ง if-else ได้ดังด้านล่างนี้

#include <iostream>

using namespace std;

int main()
{
    int n = 1;
    if (n == 1)
    {
        cout << "n is 1";
    }
    else if (n == 2)
    {
        cout << "n is 2";
    }
    else
    {
        cout << "Unknown n";
    }
    return 0;
}

ในตัวอย่าง คุณจะเห็นว่าการใช้งานคำสั่ง switch นั้นสามารถที่จะแทนที่ด้วยคำสั่ง if ได้ แต่อย่างก็ตามคำสั่ง switch นั้นยังมักจะถูกใช้กับการเปรียบเทียบที่ง่ายและรวดเร็ว ดังนั้น switch นั้นจึงใช้ได้เพียงกับข้อมูลประเภท Integer หรือ Char เท่านั้น ในขณะที่ if นั้นสามารถใช้กับข้อมูลทุกแบบ

คำสั่ง while loop

ลูปที่ง่ายและพื้นฐานที่สุดในภาษา C++ นั้นคือ while loop เราใช้คำสั่งลูปสำหรับวนซ้ำให้โปรแกรมสามารถทำงานเดิมซ้ำๆ ได้ ซึ่งมีรูปแบบการใช้งานคือ

while (expression)
{
    statements
}

คำสั่ง while loop ใช้เพื่อทำสั่งโค้ดของโปรแกรมในขณะที่ Expression เป็นจริง true และมันจะสิ้นสุดการทำงานเมื่อ Expression เป็นเท็จ false และออกจาก while loop และทำคำสั่งอื่นต่อไป

#include <iostream>

using namespace std;

int main()
{
    int n = 1;
    while (n <= 10)
    {
        cout << n << ",";
        n++;
    }
    cout << " end loop";
    return 0;
}

ในตัวอย่าง โปรแกรมจะนับจาก 1 ถึง 10 เราได้ประกาศตัวแปร n และกำหนดค่าให้เป็น 1 ก่อนที่มันจะเข้าไปในทำงานใน while loop และคำสั่ง while loop จะทำการตรวจสอบ Expression และเข้าสู่ถ้าเงื่อนไขยังคงเป็นจริง และแสดงค่า n ออกทางจอภาพและเพิ่มค่า n ขึ้น 1 จนกว่า n จะเพิ่มไปถึง 10 ซึ่งจะทำให้ Expression เป็นเท็จ และโปรแกรมจะออกจาก loop และทำสั่งอื่นต่อไป

และนี่เป็นผลลัพธ์เมื่อรันโปรแกรม

1,2,3,4,5,6,7,8,9,10, end loop

คำสั่ง do while loop

ลูปที่คล้ายกับ while loop คือ do while ลูป มันมีรูปแบบดังนี้

do
{
    statements
}
while (condition);

มันทำงานเหมือน while loop ยกเว้นในการเปรียบเทียบเงื่อนไขจะทำตอนท้ายหลังจากสิ้นสุดคำสั่งในลูป นั่นหมายความว่า do while loop จะต้องทำงานอย่างน้อยหนึ่งรอบแน่นอน มันมักจะใช้กับโปรแกรมที่จำเป็นต้องรับค่าจากผู้ใช้ก่อนที่จะทำอย่างอื่นต่อไป มาดูตัวอย่างที่ง่ายๆ

#include <iostream>
using namespace std;
int main()
{
    char ch;
    do
    {
        cout << "Enter 'n' to exit loop: ";
        cin >> ch;
    }
    while (ch != 'n');
    cout << "Exit from the loop.";
    return 0;
}

โปรแกรมข้างบนต้องการรับค่าจากผู้ใช้ expression ของมันต้องการตัวอักษร 'n' เพื่อออกจากลูป นี่คือผลลัพธ์ของโปรแกรมเมื่อได้ทดสอบ คุณสามารถลองดูได้เช่นกัน

Enter 'n' to exit loop: a
Enter 'n' to exit loop: b
Enter 'n' to exit loop: c
Enter 'n' to exit loop: n
Exit from the loop.

คำสั่ง for loop

for loop เป็นลูปที่มีการวนรอบเป็นจำนวนที่แน่นอน รูปแบบของมันคือ

for (initialize; condition; increase)
{
    statements
}

for loop เป็นลูปที่สามารถวนรอบตามตัวเลขที่กำหนดได้ มันทำงานเหมือน while loop มันจะวนซ้ำจนกว่า expression จะเป็นเท็จ นอกจากนั้น เรายังสามารถประกาศตัวแปรเริ่มต้น สร้าง expression เพิ่มและลดค่าก่อนที่ลูปจะเริ่ม

ตัวอย่างการนับตัวเลขโดยการใช้ for loop

#include <iostream>

using namespace std;

int main()
{
    for (int n = 1; n <= 10; n++)
    {
        cout << n << ",";
    }
    cout << " end loop";
    return 0;
}

และนี่เป็นผลลัพธ์เมื่อเรารันโปรแกรม ซึ่งมันเป็นโปรแกรมเดียวกันกับตัวอย่างของ while loop ก่อนหน้า

1,2,3,4,5,6,7,8,9,10, end loop

คำสั่ง break

คำสั่ง break ใช้สำหรับเพื่อจบการทำงานของลูปในทันที และมันไม่สนใจว่า expression จะเป็นจริงหรือไม่ เมื่อพบกับคำสั่ง break โปรแกรมจะออกนอกลูปและทำงานบรรทัดต่อไปหลังจากลูปทันที เรามักจะใช้คำสั่งนี้สำหรับการออกจากลูปโดยเงือนไขพิเศษ

#include <iostream>

using namespace std;

int main()
{
    for (int n = 1; n <= 10; n++)
    {
        if (n == 5)
            break;
        cout << n << ",";
    }
    cout << " end loop";
    return 0;
}

จากตัวอย่างข้างบน เป็นโปรแกรมในการแสดงตัวเลข 1 ถึง 10 แต่ในตอนนี้ โปรแกรมจะออกจากลูปเมื่อ n มีค่าเท่ากับ 5 เพราะว่าเราได้สร้างเงื่อนไขเมื่อ n มีค่าเท่ากับ 5 ให้คำสั่ง break ทำงาน คำสั่ง break สามารถใช้กับลูป เช่น for, while, do while, switch และอื่นๆ และผลลัพธ์การทำงานจะเป็นดังนี้

1,2,3,4, end loop

คำสั่ง continue

ไม่เหมือนคำสั่ง break คำสั่ง continue ถูกใช้เพื่อข้ามการทำงานในรอบปัจจุบัน ซึ่งจะไม่ทำคำสั่งหลังจากมันและไปเริ่มรอบถัดไปในทันที มาดูตัวอย่างการใช้งาน continue ในภาษา C++

#include <iostream>

using namespace std;

int main()
{
    for (int n = 1; n <= 10; n++)
    {
        if (n % 2 == 0)
            continue;
        cout << n << ",";
    }
    cout << " end loop";
    return 0;
}

ในตัวอย่าง เราได้เขียนโปรแกรมในการแสดงตัวเลขจาก 1 ถึง 10 เช่นเดิม แต่โปรแกรมจะข้ามลูปถ้า n เป็นตัวเลขคู่ เราได้ใช้คำสั่ง If ในการสร้างเงื่อนไขว่าถ้าหากเป็นเลขคู่นั้นให้ทำงานคำสั่ง continue ทำให้คำสั่ง cout ที่อยู่หลังคำสั่ง continue ถูกข้ามการทำงานไป และโปรแกรมแสดงผลเพียงเลขคี่

1, 3, 5, 7, 9, end loop

ตัวอย่างการใช้งานคำสั่งวนซ้ำในภาษา C++

หลังจากคุณได้เรียนรู้และทราบการทำงานของคำสั่งวนซ้ำประเภทต่างๆ แล้ว ต่อไปจะเป็นตัวอย่างการใช้งานคำสั่งต่างๆ รวมกัน เราจะเขียนโปรแกรมช่วยการทอนเงินของผู้ขาย โดยที่จะทอนเหรียญที่มีค่ามากที่สุดก่อน นี่เป็นโค้ดของโปรแกรม

#include <iostream>

using namespace std;

int main()
{
    const int SIZE = 8;
    int coin[SIZE] = {1000, 500, 100, 50, 20, 10, 5, 1};
    int count[SIZE] = {0, 0, 0, 0, 0, 0, 0, 0};

    int money;
    cout << "Enter money: ";
    cin >> money;

    for (int i = 0; i < SIZE; i++)
    {
        count[i] = money / coin[i];
        money %= coin[i];
    }

    cout << "Your change" << endl;

    for (int i = 0; i < SIZE; i++)
    {
        if (count[i] == 0)
        {
            continue;
        }
        cout << coin[i] << " => " << count[i] << endl;
    }

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมในการทอนเงินจากการซื้อของ โดยโปรแกรมจะให้กรอกจำนวนเงินที่ต้องการจะทอนและบอกว่าต้องทอนเงินเหรียญและธนบัตรขนาดต่างๆ อย่างละเท่าไร ในส่วนแรกของโปรแกรมเราได้กำหนดประเภทของเหรียญและธนบัตรในตัวแปรอาเรย์ coin และตัวแปรอาเรย์ count สำหรับนับเหรียญและธนบัตรแต่ละประเภท และโปรแกรมของเราเริ่มทำงานจากการรับจำนวนเงินทอนเก็บในตัวแปร money

for (int i = 0; i < SIZE; i++)
{
    count[i] = money / coin[i];
    money %= coin[i];
}

ต่อมาเราได้ใช้คำสั่ง for loop ในการวนรอบอาเรย์ coin โดยวนจากประเภทที่มากที่สุดก่อน และเพื่อหาจำนวนเงินที่ต้องทอนของแต่ละประเภทว่าต้องทอนเท่าไหร่ โดยจะนำจำนวนเงินทั้งหมดหารด้วยประเภทของเงินและเก็บไว้ในตัวแปร count หลังจากนั้นเราลบจำนวนเงินนั้นออกไปโดยการใช้ดำเนินการ mod

for (int i = 0; i < SIZE; i++)
{
    if (count[i] == 0)
    {
        continue;
    }
    cout << coin[i] << " => " << count[i] << endl;
}

หลังจากการหาจำนวนเงินแต่ละประเภทที่ต้องทอนเสร็จสิ้นแล้ว เราใช้คำสั่ง for loop ในการวนเพื่อแสดงผลว่าจะต้องทอนเงินแต่ละประเภทเท่าไหร่ และเราใช้คำสั่ง continue ในการข้ามการแสดงผลประเภทของเงินที่ไม่มีการทอนไป

Enter money: 465
Your change
100 => 4
50 => 1
10 => 1
5 => 1

นี่เป็นผลลัพธ์การทำงานของโปรแกรม เมื่อเรากรอกจำนวนเงินเป็น 465 โปรแกรมจะบอกว่าต้องทอนธนบัตรประเภท 100 จำนวน 4 ใบและ 50 จำนวน 1 ใบ และทอนเหรียญ 10 และเหรียญ 5 อย่างละ 1

ในบทนี้ เราได้ครอบคลุมเนื้อหาพื้นฐานของคำสั่งควบคุมโปรแกรม ซึ่งเป็นเครื่องมีที่มีประโยชน์เพื่อช่วยให้เราควบคุมโปรแกรมให้เป็นไปตามที่ต้องการได้ และคุณได้เห็นตัวอย่างการนำไปประยุกต์ใช้ในการเขียนโปรแกรมกับการแก้ปัญหาจริง ซึ่งคุณสามารถสร้างโปรแกรมอะไรก็ได้เพื่อมาช่วยให้คุณสามารถทำงานได้ง่ายขึ้น