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