Control Structure
Control Structure คืออะไร
Control Structure คือโครงสร้างที่ใช้ในการควบคุมการทำงานของโปรแกรม โดยใช้สำหรับการทำเงื่อนไขหรือการทำซ้ำเป็นหลัก Control Structure ที่จะพูดถึงได้แก่
-
Selection (Condition) การสร้างทางเลือกจากเงื่อนไขที่กำหนด ซึ่งจะประกอบด้วย
if
(ถ้า),else
(ถ้าไม่),switch
(ถ้าเท่ากับ) -
Iteration (Loop) การสร้าง block สำหรับการทำคำสั่งซ้ำตามเงื่อนไขที่กำหนด
for
(ทำซ้ำตามจำนวนที่กำหนด) และwhile
(ทำซ้ำขณะที่เงื่อนไขเป็นจริง) และdo-while
Control structure เป็นสำคัญในการเขียนโปรแกรมเพราะช่วยให้โปรแกรมสามารถทำงานตามเงื่อนไขที่เราต้องการได้ โดยการใช้ control structure จะช่วยให้เราสร้างทางเลือกและการทำซ้ำของโค้ดได้อย่างมีประสิทธิภาพ
เราจะมาลองดูตัวอย่างของ Condition และ Loop กัน
Condition (เงื่อนไข)
ในภาษา C++ เราสามารถใช้โครงสร้างทางเลือก (Selection) เพื่อสร้างทางเลือกในการควบคุมการทำงานของโปรแกรมได้ โดยใช้ keyword if
, else if
, และ else
ซึ่งรูปแบบการใช้งานของโครงสร้างเงื่อนไขในภาษา C++ จะมีลักษณะดังนี้
// เคสที่ 1 : ใช้ if อย่างเดียว
if (เงื่อนไข1) {
// ถ้าเงื่อนไข1 เป็นจริง จะทำงานที่นี่
}
// เคสที่ 2 : ใช้ else คู่กับ if
if (เงื่อนไข1) {
// ถ้าเงื่อนไข1 เป็นจริง จะทำงานที่นี่
}
else {
// ถ้าไม่เข้าเงื่อนไขใดเลย จะทำงานที่นี่
}
// เคสที่ 3 : ใช้ if else if
if (เงื่อนไข1) {
// ถ้าเงื่อนไข1 เป็นจริง จะทำงานที่นี่
}
else if (เงื่อนไข2) {
// ถ้าเงื่อนไข2 เป็นจริง จะทำงานที่นี่
}
else {
// ถ้าไม่เข้าเงื่อนไขใดเลย จะทำงานที่นี่
}
โดย เงื่อนไข นั้นคือการใส่ Operator ของ Relational Operators และ Logical Operators เพื่อเป็นการระบุเงื่อนไขร่วมกันออกมาได้
เครื่องหมายเปรียบเทียบ (Relational Operators)
เครื่องหมายเปร ียบเทียบใช้ในการเปรียบเทียบค่าของตัวแปรหรือค่าคงที่กัน เพื่อให้ได้ผลลัพธ์เป็นค่าจริง (true) หรือเท็จ (false) โดยเครื่องหมายเปรียบเทียบที่ใช้ได้ในภาษา C++ มีดังนี้
==
เท่ากับ!=
ไม่เท่ากับ>
มากกว่า<
น้อยกว่า>=
มากกว่าหรือเท่ากับ<=
น้อยกว่าหรือเท่ากับ
มาดู ตัวอย่างแรก กัน นี่คือพื้นฐานของการใช้ Relational Operator ทุกตัวโดยใช้ interger เป็นตัวหลักในการทำ condition ขึ้นมา
int a = 5;
int b = 3;
if (a == b) { // ไม่เป็นจริง (false)
cout << "a เท่ากับ b" << endl;
}
else { // เป็นจริง เนื่องจาก if condition ไม่เป็นจริง
cout << "a ไม่เท่ากับ b" << endl;
}
ผลลัพธ์ก็จะได้เป็นแบบนี้ออกมา
a ไม่เท่ากับ b
ตัวอย่างที่ 2 เราจะทำการสร้างตัวแปร number ขึ้นมา โดยสร้าง condition ไว้ตามนี้
#include <iostream>
using namespace std;
int main() {
int number = 20;
if (number < 0) { // ไม่เป็นจริง (false)
cout << "The number is negative." << endl;
} else if (number >= 0 && number <= 10) { // ไม่เป็นจริง (false)
cout << "The number is between 0 and 10." << endl;
} else if (number > 10 && number <= 20) { // เป็นจริง (true)
// ผลลัพธ์ก็จะหยุดอยู่แค่ตรงนี้
cout << "The number is between 11 and 20." << endl;
} else { // ไม่ทำแล้วเนื่องจาก else if โดยทำงานไปแล้ว
cout << "The number is greater than 20." << endl;
}
return 0;
}
ผลลัพธ์ก็จะได้เป็นแบบนี้ออกมา
The number is between 11 and 20.
ตัวอย่างการใช้งาน Condition กับ Input/Output
ในภาษา C++ เราสามารถใช้โครงสร้างทางเลือก (Selection) เพื่อรับค่า input จากผู้ใช้งานและแสดงผลลัพธ์ output ตามเงื่อนไขที่กำหนดได้ ตัวอย่างเช่น
ตัวอย่างที่ 1 ทำการรับอายุเป็น input ตัวเลขเข้ามาและทำการสร้าง condition ว่า
- หากอายุน้อยกว่า 18 ปี ให้แสดงคำว่า “คุณยังไม่สามารถเข้าร้านนี้ได้”
- หากอายุอยู่ระหว่าง 18-60 ให้แสดงคำว่า “คุณสามารถเข้าร้านนี้ได้”
- หากอายุมากกว่า 60 ปี ให้แสดงคำว่า “คุณเป็นผู้สูงอายุ ไม่สามารถเข้าร้านนี้ได้”
#include <iostream>
using namespace std;
int main() {
int age;
cout << "กรุณากรอกอายุของคุณ: ";
cin >> age;
if (age < 18) {
cout << "คุณยังไม่สามารถเข้าร้านนี้ได้" << endl;
}
else if (age >= 18 && age <= 60) {
cout << "คุณสามารถเข้าร้านนี้ได้" << endl;
}
else {
cout << "คุณเป็นผู้สูงอายุ ไม่สามารถเข้าร้านนี้ได้" << endl;
}
return 0;
}
ในตัวอย่างนี้ ผลลัพธ์ที่ได้จากโปรแกรมจะขึ้นอยู่กับค่าที่ผู้ใช้งานป้อนเข้ามา และโครงสร้างทางเลือก (Selection) จะทำงานเพื่อตรวจสอบเงื่อนไขและแสดงผลลัพธ์ที่เกี่ยวข้องกับเงื่อนไขนั้นๆ
กรุณากรอกอายุของคุณ: 43
คุณสามารถเข้าร้านนี้ได้
ตัวอย่างที่ 2 เป็นตัวอย่าง program สุด classic นั่นคือการตัดเกรดจากคะแนน โดยรับ input เป็นคะแนนเข้ามา และได้ผลลัพธ์เป็นเกรดออกมาได้
#include <iostream>
using namespace std;
int main() {
int score;
cout << "กรุณากรอกคะแนน: ";
cin >> score;
if (score >= 80 && score <= 100) {
cout << "เกรด A" << endl;
} else if (score >= 70 && score < 80) {
cout << "เกรด B" << endl;
} else if (score >= 60 && score < 70) {
cout << "เกรด C" << endl;
} else if (score >= 50 && score < 60) {
cout << "เกรด D" << endl;
} else if (score >= 0 && score < 50) {
cout << "เกรด F" << endl;
} else {
cout << "คะแนนไม่ถูกต้อง" << endl;
}
return 0;
}
ในโปรแกรมนี้ เราใช้โครงสร้างทางเลือก (Selection) เพื่อตรวจสอบคะแนนที่ผู้ใช้ป้อนเข้ามาและแสดงผลลัพธ์ที่เกี่ยวข้องกับคะแนนนั้น โดยใช้ระบบเกรดที่กำหนดดังนี้
- คะแนน 80-100: เกรด A
- คะแนน 70-79: เกรด B
- คะแนน 60-69: เกรด C
- คะแนน 50-59: เกรด D
- คะแนน 0-49: เกรด F
- คะแนนไม่ถูกต้อง: แสดงข้อความ "คะแนนไม่ถู กต้อง"
เมื่อลอง run program ขึ้นมาและลองใส่คะแนนก็จะสามารถเข้าเงื่อนไขตามคะแนนที่ใส่ไปได้ผลลัพธ์เป็นแต่ละเกรดออกมาได้
กรุณากรอกคะแนน: 63
เกรด C
เราใช้โครงสร้างเงื่อนไข (Selection) เพื่อตรวจสอบเงื่อนไขและแสดงผลลัพธ์ที่เกี่ยวข้องกับเงื่อนไขนั้น ผลลัพธ์ที่ได้จะขึ้นอยู่กับคะแนนที่ผู้ใช้ป้อนเข้ามาและเงื่อนไขที่กำหนดใน code
การใช้ Switch case
นอกเหนือจากการใช้ if
, else if
แล้วใน c++ ยังสามารถทำ condition ผ่านการใช้งาน switch case ได้ด้วยเช่นกัน switch
statement คือ ตัวที่ใช้สำหรับการแยกเคสของค่าตระกูล ตัวเลข (interger), ตัวอักษร (character) และ enumaration (เดี๋ยวเรากลับมาอธิบายอีกทีภายหลัง) เป็นอีกทางเลือกนอกเหนือจากการใช้ if-else ในกรณีที่เราเล่นกับหลาย condition แต่อยู่บนพื้นฐานของ “expression เพียงแค่อันเดียว” เราสามารถใช้ switch
case ในการรวม case และแยก case ออกตามผลลัพธ์ของ condition ได้
นี่คือโครงสร้างของ switch
case
switch (expression) {
case constant1:
// code to be executed if expression == constant1;
break; // optional
case constant2:
// code to be executed if expression == constant2;
break; // optional
// You can have any number of case statements.
default:
// code to be executed if expression doesn't match any case;
}
โดย
expression
คือสิ่งที่จะทำเพียงครั้งเดียว เป็น expression ที่ใช้สำหรับการเปรียบเทียบเพื่อส่งผลลัพธ์ต่อไปยังcase
case constantN:
แต่ละ case จ ะเป็นการใส่ value (ตรงตำแหน่ง consent หลัง case) เพื่อเป็นการเปรียบเทียบค่าใน expression ตัวนั้นออกมาว่าตรงกับ case นั้นหรือไม่ (ให้อารมณ์เหมือนelse if
แต่ไม่ต้องเขียน condition เพิ่มเนื่องจากใช้ condition คือ expression ที่ประกาศอันบนแล้วเรียบร้อย)break
คือ คำสั่งที่ถือว่าเป็น optional (แต่ส่วนใหญ่มักจะใส่กัน และภาษาสมัยใหม่หลายภาษาก็บังคับใส่หรือใส่ให้อัตโนมัติแล้ว) คือ คำสั่งสำหรับการออกจากการทำงานของ switch case เพื่อกันไม่ให้ไปทำคำสั่งต่อไป (case ด้านล่างๆ) เช่น หากเข้า case 1 ไป และ ไม่มี code break อยู่ ตัว program ก็จะลงไปทำ case 2 ต่อจนจบ program ไป (แทนที่จะเช็คแค่ case 1 แล้วจบลง)default
คือ คำสั่งที่ถือว่าเป็น optional เหมือนกัน ใช้ในกรณีที่เราอยาก handle case อื่นๆเพิ่มเติม (ที่ไม่ตกลงใน case ใดๆใน switch case เลย) เมื่อไม่มีการลง case ไหนใน switch case เลยมันก็จะลงมายังตำแหน่ง default ออกมาแทน (ให้อารมณ์เหมือนelse
ที่เปิ ดจบในif
และif else
)
และนี่คือตัวอย่างการใช้ switch case กับ Program สำหรับการแยกออกมาว่า วันนี้คือวันอะไรในสัปดาห์นี้โดย
- ทำการใส่
day
เป็นตัวแทนของวันที่ในสัปดาห์มา - และทำการ print ผ่าน
cout
ออกมาว่า วันที่ในสัปดาห์นี้ คือ วันที่ชื่อว่าอะไร ออกมา (เช่น 1 = Monday, 2 = Tuesday เป็นต้น)
#include <iostream>
using namespace std;
int main() {
int day = 4;
switch (day) {
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
case 7:
cout << "Sunday";
break;
default:
cout << "Invalid day";
}
return 0;
}
และนี่คือผลลัพธ์ของ code นี้
Thursday
จากตัวอย่างนี้ เรามีตัวแปร day
ที่เก็บเลข 4 เอาไว้ และได้รับ output ออกมาเป็น Thursday
ออกมา โดย switch
นั้นจะทำการ check ค่าที่อยู่ในตัวแปร day
มาเทียบกันในแต่ละ case ว่าตรงกับ case ไหนบ้าง และก็มาเจอว่า ตรงกับ case 4 ออกมาได้ (day == 4) ดังนั้น เมื่อตกลงที่ case 4:
code ก็จะดำเนินการภายใน case นั้น (print Thursday
ออกมา) และทำการ break
เพื่อจบการทำงาน switch case ลงนั่นเอง
Loop (การทำซ้ำ)
Loop (การทำซ้ำ) คือโครงสร้างที่ใช้ในการทำงานซ้ำๆ จนกว่าเงื่อนไขที่กำหนดจะเป็นเท็จ โดยหลักการทำงานของ Loop คือทำซ้ำเบื้องต้นก่อนที่จะตรวจสอบเงื่อนไข หากเงื่อนไขเป็นจริงจะทำงานภายใน Loop จนกว่าเงื่อนไขจะเป็นเท็จ แล้วจึงทำงานต่อไป
โครงสร้าง Loop ที่พูดถึงได้แก่
for
Loop คือโครงสร้างที่ใช้ในการทำซ้ำตามจำนวนที่กำหนดwhile
Loop คือโครงสร้างที่ใช้ในการทำซ้ำขณะที่เงื่อนไขเป็นจริงdo-while
Loop คือโครงสร้างที่ใช้ในการทำซ้ำขณะที่เงื่อนไขเป็นจริง แต่จะทำงานอย่างน้อย 1 ครั้ง
Control structure ที่เกี่ยวกับ Loop เป็นสิ่งสำคัญในการเขียนโปรแกรมเพราะช่วยให้เราสามารถทำซ้ำการทำงานของโปรแกรมได้ตามที่เราต้องการ โดยการใช้ Loop จะช่วยให้เราสามารถทำงานซ้ำได้อย่างมีประสิทธิภาพ
เราจะมาลองดูตัวอย่างของ Loop กัน
for
Loop
ในภาษา C++ เราสามารถใช้โครงสร้าง for
Loop ในการทำซ้ำตามจำนวนที่กำหนดได้ โดยรูปแบบการใช้งานของ for
Loop จะมีลักษณะดังนี้
for (เงื่อนไขเริ่มต้น; เงื่อนไขที่ต้องกา รให้ทำซ้ำ; การเปลี่ยนแปลงค่าตัวแปร) {
// ทำงานที่ต้องการซ้ำ
}
ตัวอย่างการใช้งาน:
for (int i = 0; i < 5; i++) {
cout << "ค่าของ i: " << i << endl;
}
ในตัวอย่างนี้ เราใช้ for
Loop เพื่อทำซ้ำการแสดงค่าของตัวแปร i
ตั้งแต่ 0 ถึง 4 โดยทำงานภายในบล็อกที่กำหนด ในแต่ละรอบของการทำซ้ำ code ภายในบล็อกจะถูกทำงานและค่าของ i
จะเปลี่ยนแปลงตามที่กำหนดในการเปลี่ยนแปลงค่าตัวแปร
while
Loop
ในภาษา C++ เราสามารถใช้โครงสร้าง while
Loop ในการทำซ้ำขณะที่เงื่อนไขเป็นจริงได้ โดยรูปแบบการใช้งานของ while
Loop จะมีลักษณะดังนี้
while (เงื่อนไขที่ต้องการให้ ทำซ้ำ) {
// ทำงานที่ต้องการซ้ำ
}
ตัวอย่างการใช้งาน:
int i = 0;
while (i < 5) {
cout << "ค่าของ i: " << i << endl;
i++;
}
ในตัวอย่างนี้ เราใช้ while
Loop เพื่อทำซ้ำการแสดงค่าของตัวแปร i
ตั้งแต่ 0 ถึง 4 โดยทำงานภายในบล็อกที่กำหนด โค้ดภายในบล็อกจะถูกทำงานและตรวจสอบเงื่อนไขที่กำหนดว่ายังเป็นจริงหรือไม่ ถ้าเงื่อนไขยังเป็นจริง โค้ดในบล็อกจะถูกทำซ้ำและค่าของ i
จะเปลี่ยนแปลงตามที่กำหนดในการเปลี่ยนแปลงค่าตัวแปร
do-while
Loop
ในภาษา C++ เราสามารถใช้โครงสร้าง do-while
Loop ในการทำซ้ำขณะที่เงื่อนไขเป็นจริง แต่จะทำงานอย่างน้อย 1 ครั้ง โดยรูปแบบการใช้งานของ do-while
Loop จะมีลักษณะดังนี้
do {
// ทำงานที่ต้องการซ้ำ
} while (เงื่อนไขที่ต้องการให้ทำซ้ำ);
ตัวอย่างการใช้งาน:
int i = 0;
do {
cout << "ค่าของ i: " << i << endl;
i++;
} while (i < 5);
ในตัวอย่างนี้ เราใช้ do-while
Loop เพื่อทำซ้ำการแสดงค่าของตัวแปร i
ตั้งแต่ 0 ถึง 4 โดยทำงานภายในบล็อกที่กำหนด โค้ดภายในบล็อกจะถูกทำงานและตรวจสอบเงื่อนไขที่กำหนดว่ายังเป็นจริงหรือไม่ โค้ดในบล็อกจะถูกทำซ้ำอย่างน้อย 1 ครั้งและค่าของ i
จะเปลี่ยนแปลงตามที่กำหนดในการเปลี่ยนแปลงค่าตัวแปร