46
ตัวดาเนินการเหล่านีส้ ามารถเขียนอยใู่ นรปู ของนพิ จน์เพือ่ การเปรียบเทียบค่า โดยผลลพั ธ์ทไี่ ด้ จะเป็นค่าตรรกะท่ี
เปน็ จรงิ (True) หรือเป็นเท็จ (false) อย่างใดอย่างหนงึ่ ซง่ึ ค่าตรรกะดังกลา่ วจะเปน็ ขอ้ มลู ชนดิ เลขจานวนเตม็
โดยท่ี 1 คอื จริง และ 0 คือ เทจ็
ตัวอยา่ ง : ตวั แปร i, j และ k ถูกกาหนดชนดิ ขอ้ มูลเป็นเลขจานวนเตม็ และมีค่า 1, 2, และ 3 ตามลาดบั จาก
นิพจนต์ รรกะของตวั แปรเหลา่ น้ี ผลการตรวจสอบจะเป็น ดังน้ี คือ
นิพจน์ ผลการเปรยี บเทยี บ คา่
i < j true 1
(i + j)>=k true 1
(j +k) > (i + 5) false 0
k != 3 false 0
j ==2 true 1
นอกจากนี้ ยงั มีตัวดาเนินการแบบตรรกะ ซ้ึงประกอบด้วย ความหมาย
ตัวเนินการ และ(and)
&& หรอื (or)
|| ไมใ่ ช่ (not)
!
ตัวดา้ เนนิ การระดับบติ (Bit wise Operator)
ในภาษา C ไดผ้ นวกตัวดาเนินการระดบั บิตในการจัดการขอ้ มูลภายในได้เช่นเดยี วกบั การโปรแกรม
ภาษาระดับตา่ อยา่ งภาษาแอสเชมบลี โดยประกอบด้วยตัวดาเนินการชนิดตา่ งๆ ดงั นี้
ตัวดา้ เนนิ การ ความหมาย
& บิตไวส์ AND
| บติ ไวส์ OR
^ บิตไวส์ XOR (exclusive OR)
~ คอมพลีเมนต์
>> เลอื่ นบิตไปทางขวา
<< เล่ือนบิตไปทางซ้าย
47
ตวั ดา้ เนินการก้าหนดคา่ (Assignment operator)
ในภาษา C มีหลายวิธดี ้วยกันในการกาหนกค่าใหก้ บั ตวั แปร ซึ่งปกตติ วั ดาเนนิ การกาหนดค่ามกั จะ
ใช้เคร่ืองหมาย = และการกาหนดค่านิพจน์กจ็ ะใชเ้ ครื่องหมาย + เช่นกัน สาหรับรปู แบบของตัวดาเนินการ
กาหนดค่า สามารถเขยี นไดต้ ามรูปแบบดงั นี้
รปู แบบ : variable_name = expression
โดย : variable_name หมายถงึ ชือ่ ตัวแปร
expression หมายถึง นิพจน์ซง่ึ สามารถเปน็ ค่าคงท่ี ตัวแปร รวมถึงสูตรทางคณิตศาสตรท์ ี่ซบั ซ้อน
ตัวอยา่ ง : การกาหนดค่านิพจนด์ ้วยตัวดาเนนิ การกาหนดค่า
a = 3;
x = y;
delta = 0.001;
sum = a + b;
area = length * width;
ตวั ด้าเนินการเง่อื นไข (Conditional Operator)
ตัวดาเนนิ การเงื่อนไข จะนามาใชเ้ พอ่ื ทดสอบคา่ นพิ จน์ทางตรรกะว่าจรงิ หรือเท็จ โดยมีรูปแบบดังน้ี คือ
รปู แบบ : expression 1 ? expression 2 : expression 3
โดย : expression 1 หมายถึง นพิ จน์เง่อื นไข
expression 2 หมายถึง ค่าที่ได้ กรณเี ปน็ จริง
expression 3 หมายถงึ ค่าทไ่ี ด้ กรณเี ป็นเท็จ
ตัวด้าเนนิ การบอกขนาดชนิดขอ้ มูล (Size of Operator)
ตวั ดาเนินการประเภทนี้ จะทาให้เราทราบวา่ ชนิดข้อมูลแต่ละชนิดท่มี ีอย่ใู นเคร่อื งมีขนาดเทา่ ใด ทงั้ น้ี
ชนดิ ขอ้ มูลจะมขี นาดเทา่ ใดน้ัน จะสามารถทราบได้จากตวั ดาเนินการ sizeof ซงึ่ มรี ูปแบบการเขยี นดงั นี้
รปู แบบ : sizeof (expression)
โดย : expression หมายถงึ ชนดิ ขอ้ มลู หรือตวั แปร
48
ลา้ ดบั ความส้าคญั ของตัวดา้ เนินการ (Operator of Precedence)
ในการเขยี นโปรแกรมเพื่อใช้งาน จาเปน็ ต้องเกีย่ วขอ้ งกบั นพิ จน์คณติ ศาสตร์ และสูตรคานวณตา่ งๆ
ไม่มากก็นอ้ ย และสิ่งต่างๆเหลา่ นี้จาเป็นต้องใช้ตัวดาเนินการ เขา้ ไปประกอบใชง้ าน และตัวดาเนินการแตล่ ะตัว
ต่างกม็ ีลาดับความสาคญั ของการทางานก่อนหลงั แตกตา่ งกันไป ดงั นั้น จึงจาเป็นต้องศกึ ษาถงึ ลาดบั การทางานของ
ตัวดาเนินการ ดงั น้ี
ท่ี ตวั ดา้ เนนิ การ ความหมาย ลา้ ดบั การค้านวณ
ซ้ายไปขวา
1 () Parenthesized expression
ขวาไปซ้าย
[ ] Array subscript
ซา้ ยไปขวา
. Member selection by object ซ้ายไปขวา
ซ้ายไปขวา
-> Member selection by pointer ซา้ ยไปขวา
2 +- U nary + and - ซา้ ยไปขวา
ซ้ายไปขวา
++ -- Prefix increment and prefix decrements ซา้ ยไปขวา
ซ้ายไปขวา
! ~ Logical NOT and bit wise complement ซา้ ยไปขวา
ซ้ายไปขวา
& Address-of ขวาไปซ้าย
sizeof Size of expression or type
(type) Explicit cast to type such as (int) or (double)
3 */% Multiplication and division and modulus
4 +- Addition and Subtraction
5 << >> Bit wise shift left and bit wise shift right
6 < <= Less than and less than or equal to
> >= Greater than and greater than or equal to
7 == != Equal to and not equal to
8& Bit wise AND
9^ Bit wise Exclusive OR
10 | Bit wise OR
11 && Logical AND
12 || Logical OR
13 ?: Conditional operator
49
14 = Assignment ขวาไปซ้าย
+= -= addition assignment and subtraction assignment ซา้ ยไปขวา
*= /= Multiplication assignment and division assignment
%=
Modulus assignment
<<= >>= Bit wise shift left assignment and bit wise shift right
&= |= assignment
^= Bit wise AND assignment and bit wise OR assignment
15 , Bit wise Exclusive OR assignment
Comma operator
อา้ งอิง https://sites.google.com/a/atsamat.ac.th/krudit/data-of-operator/operator-and-expression
ชนดิ ของขอ้ ผิดพลาดในการเขียนโปรแกรม
ขอ้ ผิดพลาดในการเขียนโปรแกรมเราเรียกว่า Bugs โดยท่ัวไปความผดิ พลาดสามรถแบ่งได้เปน็ 3 ชนดิ ใหญๆ่ คือ
1. Syntax Error
- เปน็ ความผดิ พลาดที่สามารถตรวจพบในขณะ compile
- เปน็ ความผิดพลาดทางไวยากรณ์ภาษา จากการเขียนคาส่ังไมส่ มบูรณ์ มีการตกหล่น หรือผดิ พลาด ซ่ึง
compiler ตรวจพบและจะแสดงขา่ วสารวา่ ผิดพลาดเกดิ ทบี่ รรทัดไหน ผิดเกย่ี วกบั อะไร
2. Run-Time-Error
- เป็นความผิดพลาดที่เกิดขึ้นขณะในปฏิบัติการ (Run) เช่น การหารค่าด้วย 0 โดยโปรแกรมจะหยุด
การประมวลผลทนั ที
3. Logic Error
- เป็นความผดิ พลาดของผลลพั ธ์ ซึ่งมีผลมาจากอัลกอริทึมในการแก้ปัญหาโปรแกรม
อา้ งอิง https://codeprogrammer-cplusplus.blogspot.com/2013/11/level-13.html
50
แบบทดสอบ หน่วยที่ 5
การใชก้ ระบวนการเขยี นโปรแกรม
คา้ สง่ั : จงเติมคา้ ลงในช่องว่างเพื่อให้โปรแกรมสมบรู ณ์
การใช้งานคาสง่ั printf() ข้ันสูง ให้พิจารณาโปรแกรมทไี่ ม่สมบูรณ์ต่อไปนี้โดยใหผ้ ู้เรยี นเติมสว่ นท่ีเว้นไว้ (a) (b) (c)
(d) (e) (f) เพ่ือให้โปรแกรมคานวณหาพ้ืนทข่ี องสี่เหล่ียม ที่มีดา้ นยาวเป็น 10 และมีด้านกว้างเป็น 7 ซ่ึงสี่เหล่ียมน้ี
จะมพี ื้นทที่ ั้งหมด 70 ตารางหน่วย (สตู รพื้นทสี่ ่ีเหล่ียม คอื ดา้ นยาว X ด้านกว้าง)
#include<stdio.h>
int main()
{
unsigned int wide = _____ (A) _____, height = _____ (B) _____, area;
area = _____ (C) _____;
printf("Area of rectangle with wide = %d and height =%d is %d is %d\n", _____ (D) _____,
_____ (E) _____, _____ (F)) _____;
}
51
เฉลยแบบทดสอบ หนว่ ยที่ 5
การใช้กระบวนการเขยี นโปรแกรม
A: 7
B: 10
C: wide*height
D: wide
E: height
F: area
52
หน่วยที่ 6
ค้าส่ังการคา้ นวณ เงื่อนไขกรณี และการท้าซ้า
คา้ ส่ังการทา้ ซ้า
คาสั่ง 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;
}
53
ในตัวอย่างน้ี เราได้ใช้คาสั่ง 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 เปน็ จานวนเตม็ บวก เต็มลบ หรือศนู ย์
54
มากไปกว่าน้ัน เราสามารถมีได้หลายเง่ือนไขย่อยๆ โดยการใชต้ ัวดาเนินการตรรกะสาหรับการเชือ่ ม 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;
55
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;
}
56
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
{
57
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";
58
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";
59
}
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 และเข้าสู่ถ้าเง่ือนไข
60
ยังคงเป็นจริง และแสดงค่า 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;
}
61
โปรแกรมข้างบนต้องการรับค่าจากผู้ใช้ 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
62
ค้าสงั่ 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++)
63
{
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];
64
}
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;
65
}
หลังจากการหาจานวนเงินแต่ละประเภทท่ีต้องทอนเสร็จสิ้นแล้ว เราใช้คาส่ัง for loop ในการวนเพ่ือ
แสดงผลว่าจะต้องทอนเงินแตล่ ะประเภทเท่าไหร่ และเราใช้คาสั่ง continue ในการข้ามการแสดงผลประเภทของ
เงินท่ไี มม่ กี ารทอนไป
Enter money: 465
Your change
100 => 4
50 => 1
10 => 1
5 => 1
นี่เป็นผลลัพธ์การทางานของโปรแกรม เม่ือเรากรอกจานวนเงินเป็น 465 โปรแกรมจะบอกว่าต้องทอน
ธนบัตรประเภท 100 จานวน 4 ใบและ 50 จานวน 1 ใบ และทอนเหรียญ 10 และเหรยี ญ 5 อยา่ งละ 1
66
แบบทดสอบ หนว่ ยท่ี 6
คา้ สัง่ การค้านวณ เงอ่ื นไขกรณี และการท้าซ้า
ค้าส่ัง : จงเตมิ สว่ นของโปรแกรมที่ขาดหายไป
int main()
{
char member; float price;
printf("Please input your price : ");
scanf("%f", &price);
...(A)...//แสดงข้อความ "Are you my member? :" ทางหนา้ จอ
...(B)...//รบั input เปน็ char
if(...(C)...)//กรณไี ม่เปน็ สมาชิก
...(D)...//แสดงขอ้ ความแจ้งราคาสินค้าพรอ้ มทั้งแสดงคาขอบคณุ
...(E)...//กรณีเป็นสมาชิก
...(F)...//ต้องการใช้คาสงั่ หลายคาสั่งในกรณีเดยี วกนั ตอ้ งใส่เคร่อื งหมายอะไรเร่มตน้
...(G)...//แสดงข้อความแจง้ สว่ นลดของราคาสนิ คา้
...(H)...//แสดงขอ้ ความแจ้งราคาสินค้าหลงั ลดพรอ้ มทง้ั แสดงคาขอบคุณ
...(I)...//เม่ือเริม่ ตน้ เคร่ืองหมายไปแลว้ ก็ต้องเปดิ ท้ายดว้ ยเครือ่ งหมายอะไร
67
เฉลยแบบทดสอบ หน่วยท่ี 6
คา้ สัง่ การค้านวณ เง่ือนไขกรณี และการทา้ ซา้
A: printf("Are you my member? :");
B: scanf("%c", &member);
C: member != Y
D: printf("Your price is %f bath. Thank you.",price);
E: else
F: {
G: printf("Your discount is %d bath.", price*(10/100));
H: printf("Your price is %d. Thank you.",price-price*(10/100));
I: }
68
หนว่ ยที่ 7
การออกแบบและเขยี นโปรแกรมอยา่ งงา่ ย
การค้านวณหาพื้นที่ของสามเหล่ยี ม โดยรับค่าความสงู ของสามเหลี่ยม (HEIGHT) และค่าของฐานสามเหลย่ี ม
(BASE)
#include <stdio.h>
float AreaTriangle(float h, float b) {
return (h * b) / 2;
}
void main() {
float h;
float b;
float ans;
printf("Enter height : ");
scanf("%f", &h);
printf("Enter base : ");
scanf("%f", &b);
ans = AreaTriangle(h, b);
printf("Area = %f\n", ans);
}
69
การพิมพ์แมส่ ตู รคูณ แม่ 2 ถงึ 25
#include <stdio.h>
void main() {
int i;
int num;
printf("Enter (2-25) : ");
scanf("%d", &num);
for (i = 1; i <= 12; i++) {
printf("%d x %d = %d\n", num, i, num * i);
}
}
70
การตดั เกรด A – F ด้วยคา้ สง่ั IF
#include <stdio.h>
void main() {
int i;
int num;
printf("Enter score : ");
scanf("%d", &num);
if (num < 50)
printf("Grade F\n");
else if (num < 60)
printf("Grade D\n");
else if (num < 70)
printf("Grade C\n");
else if (num < 80)
printf("Grade B\n");
else if (num <= 100)
printf("Grade A\n");
}
อ้างองิ https://blog.phaisarn.com/node/1405#A---F-if
71
การประยกุ ตใ์ ช้งานโปรแกรมด้วยภาษาซี
ภาษาซีเป็นภาษาระดับสูงท่ีสามารถทางานแบบภาษาระดับต่า(assembly language)ได้ ด้วยลักษณะการใช้
งานของภาษาและตัวแปลภาษาที่มีความสามารถแปลงโปรแกรมได้อย่างมีประสิทธิภาพ การประยุกต์ใช้งาน
ภาษาซีเพ่ือเขียนโปรแกรมจึงสามารถทาได้อย่างหลากหลายเช่น การคานวณทางคณิตศาสตร์ การจัดการ
แฟ้มข้อมูล การเขียนโปรแกรมระบบปฏิบัติการ การควบคุมอุปกรณ์ต่อพ่วงกับคอมพิวเตอร์ หรือใช้สร้าง
โปรแกรมประยุกต์อื่นๆ ทั้งน้ีต้องมีการพิจารณาถึงฟังก์ชันการใช้งานของภาษาและตัวแปลภาษาด้วย การเขียน
โปรแกรมด้วยภาษาซี ไม่เพียงต้องรู้รูปแบบภาษา(syntax) เท่านั้น แต่จาเป็นต้องรขู้ ้ันตอนการสรา้ งโปรแกรมด้วย
เพ่อื ให้โปรแกรมสามารถทางานได้ครบตามความต้องการอย่างถกู ตอ้ ง
ขนั้ ตอนการพัฒนาโปรแกรม
สามารถแบ่งขน้ั ตอนต่างๆ ไดเ้ ปน็
1. การระบคุ วามต้องการใช้งาน เป็นขั้นตอนการอธบิ ายลักษณะของงานที่ต้องการนาโปรแกรมใช้
2. การระบุรายละเอียดการทางานของโปรแกรม เป็นขั้นตอนท่ีอธิบายว่าจะใชโ้ ปรแกรมไปทาอะไรบ้างใน
งานทีไ่ ด้ระบุความต้องการน้ัน
3. การออกแบบโปรแกรม เป็นข้ันตอนท่ีนารายละเอียดการทางานของโปรแกรมมาออกแบบโดยการ
เขียนalgorithms หรือ ลักษณะขอ้ มลู ท่จี ะต้องใช้ในโปรแกรม
4. การเขียนโปรแกรม เป็นขั้นตอนท่ีนาการออกแบบโปรแกรมไว้มาเขยี นเป็นคาสั่งในภาษาคอมพิวเตอร์
เพอื่ สร้างเปน็ โปรแกรมท่สี มบรู ณ์
5. การทดสอบโปรแกรม เปน็ ข้นั ตอนเพ่อื ทดสอบโปรแกรมเพ่อื หาขอ้ ผิดพลาด และหนา้ ทีข่ องโปรแกรม
6. การแกไ้ ขโปรแกรม เป็นข้ันตอนท่ใี ช้แกไ้ ขส่วนผิดพลาดจากการทดสอบให้ถกู ต้อง และนาไปทดสอบอีก
ครั้ง
7. การนาโปรแกรมไปใช้งาน เป็นขั้นตอนการนาโปรแกรมท่ีผ่านจากการทดสอบแล้วไปใช้งานยัง
ระบบงานที่ต้องการ
8. การบารงุ รักษาโปรแกรม เป็นขั้นตอนการนาโปรแกรมท่ีมขี อ้ ผดิ พลาดทีพ่ บจากการใชง้ านจริงไปแก้ไข
1.9 การปรับปรุงและเปล่ียนแปลงโปรแกรม เป็นข้ันตอนการนาโปรแกรมที่ผ่านการใช้งานแล้ว และ
ต้องการเปลี่ยนแปลงบางอย่าง เช่น เพิ่มเติมหน้าท่ี , เปล่ียนข้ันตอนวิธีของโปรแกรมเพ่ือเพมิ่ ประสิทธิภาพการ
ทางาน เป็นตน้
อา้ งอิง http://pichpizza.blogspot.com/2014/12/blog-post_70.html
72
แบบทดสอบ หน่วยท่ี 7
การออกแบบและเขยี นโปรแกรมอย่างงา่ ย
คา้ ส่งั : จงเขียนโปรแกรม Character Type check
ใหน้ กั เรียนเขยี นโปรแกรมสาหรับตรวจสอบว่าตวั อกั ษรทพี่ ิมพ์เข้ามาเป็นตัวอกั ษรชนิดใด
ตวั อักษรชนดิ ตวั พมิ พใ์ หญ่(Upper case letter)
ตัวพมิ พเ์ ลก็ (Lower case letter) ตวั เลข(Digit) หรืออนื่ ๆ
ตัวอยา่ ง
Input Char : p Output : Lower case Letter.
Input Char : A Output : Upper case Letter.
Input Char : 9 Output : Digit.
Input Char : $ Output : Other.
73
เฉลยแบบทดสอบ หนว่ ยที่ 7
การออกแบบและเขยี นโปรแกรมอย่างง่าย
#include<stdio.h>
int main()
{
char ch;
scanf("%c",&ch);
if((ch>='A')&&(ch<='Z'))
printf("Upper case letter");
else if((ch>='a')&&(ch<='z'))
printf("Lower case letter");
else if((ch>='0')&&(ch<='9'))
printf("Digit");
else
printf("Others");
}
74
เอกสารอ้างอิง
หลักการเขียน http://www.bankhai.ac.th/dev_c/step_develop_program.html
โปรแกรม
การวิเคราะหง์ าน https://sites.google.com/site/programmingm42/hlak-5-khx-ni-kar-wikheraah-
(job analysis) payha
สัญลักษณ์ Flowchart http://share.olanlab.com/th/it/blog/view/211
ซโู ดโคด้ https://programpasac.weebly.com/35953641365036043650358836573604.html
(Pseudocode)
การแก้ปัญหาดว้ ย https://skjproject.wordpress.com/หลักการพัฒนาโปรแกรม/กระบวนการแกป้ ญั หา--
อัลกอรทิ ึม algorithm/
(Algorithm)
การประกาศควั แปร http://marcuscode.com/lang/c/variables-and-types
Input-output กบั http://marcuscode.com/lang/c/input-output
ประเภทข้อมลู
อาเรยใ์ นภาษา C http://marcuscode.com/lang/c/arrays
พอนยเ์ ตอร์ http://marcuscode.com/lang/c/pointers
ตัวดาเนนิ การและ https://sites.google.com/a/atsamat.ac.th/krudit/data-of-operator/operator-
นิพจน์ and-expression
ชนดิ ของขอ้ ผดิ พลาด https://codeprogrammer-cplusplus.blogspot.com/2013/11/level-13.html
ในการเขียนโปรแกรม
ตัวอย่างโปรแกรม https://blog.phaisarn.com/node/1405#A---F-if
การประยกุ ต์ใชง้ าน http://pichpizza.blogspot.com/2014/12/blog-post_70.html
โปรแกรมด้วยภาษาซี