วันพุธที่ 11 กันยายน พ.ศ. 2556

บทที่ 6 การทำซ้ำ

การทำซ้ำ

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

 ถ้าหากเราต้องการเขียนโปรแกรมให้แสดงข้อความว่า Hello ‘ world 5 ครั้งถ้าเราเขียนแบบปกติเราอาจเขียนได้ว่า

#include"iostream.h"

int main()

{

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

 cout << "Hello ' s world" << endl;

return 0;

}

ซึ่งการเขียนแบบนี้ก็จะเป็นการแสดงข้อความว่า Hello ‘s world 5 ครั้ง

แต่ถ้าหากเราต้องการเขียนโปรแกรม ให้แสดง คำว่า Hello ‘s world 100 ครั้งเราคงต้องเสียเวลามาก ถ้าเราใช้วิธีนี้ เพราะฉะนั้นเราควรเขียนโปรแกรมโดยใช้ loop เช่น for  หรือ do while ถ้าหากเราเขียนโปรแกรมให้แสดงข้อความว่า Hello ‘s world 5 ครั้งโดยใช้ loop for โปรแกรม จะมี Source code ดังนี้

#include"iostream.h"

int main()

{

 int i;

 for(i=1;i<=5;i++)

 cout << "Hello ' s world" << endl;



 return 0;

}

ถ้าเขียนแบบนี้ก็จะได้การทำงานเหมือนกัน

}

For

การทำซ้ำโดยใช้ For

 มีรูปแบบ



for(< intilize>;<Condition>;<increment>) Statement



intilize   คือค่าเริ่มต้นของตัวแปรจะทำงานแค่ครั้งเดียว

Condition  เงื่อนไขที่ว่าเป็นจริงถึงจะทำจะตรวจสอบทุกครัง้ที่แต่ละรอบของการทำงาน

Inclement  ค่าของตัวแปรที่เพิ่มขึ้นหรือลดลงแต่ละครั้ง

Statement  จะทำตราบเท่าที่ Condition เป็น true

โปรแกรมที่ 6-1 ตัวอย่างการใช้ loop for

Source code

1:#include “iostream.h”

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;I++) cout << “Hello ‘ world”;

6: return 0;

7:}

Output

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

“Hello ‘ world”

บรรทัดที่ 5: for(i=1;I<=5;I++)มีความหมายว่า เป็นการวนลูปโดยที่ตัวแปร i มีค่าเริ่มต้นคือ 1

for(I=1;I<=5;I++) มีความหมายว่าจะวนลูปไปเรีอยๆตราบเท่าที่ ตัวแปร i ยังคงน้อยกว่าหรือเท่ากับ 5

for(I=1;I<=5;i++) ในแต่ละรอบให้ค่า i เพิ่มอีก 1

บรรทัดที่ 5:cout << “Hello ‘ world”; นี่คือ Statement ที่จะทำถ้าหากเงื่อนไขในCondition เป็นจริง


ใน C++ เราสามารถประกาศตัวแปร ในตอนเริ่มต้นได้เช่น

 for(int i=1; i<=5;i++)

จะเท่ากับ

 int i; for (i=1;I<=5;i++)



เราสามารถเขียนอีกอย่างได้ว่า

for(i=1;i<=5;i=i+1) cout << “Hello ‘ world”;

ก็จะมีการทำงานเหมือนกัน

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

for(i=1;i>=10;i--) cout << “Hello ‘ World”;

ถ้าเราเขียนแบบนี้โปรแกรมจะไม่ทำงาน เพราะค่า i ที่กำหนดให้ตอนเริ่มต้นมีค่า 1 แล้วในแต่ละรอบ

โปรแกรมจะเช็คว่า I >=10 จริงรึเปล่าซึ่งไม่สามารถเป็นจริงได้เพราะในแต่ละรอบค่า I จะลดลงที่ละ 1

loop แบบนี้เรียกว่า loop infinite คือ loop ที่ทำงานไปเรื่อยๆไม่มีที่สิ้นสุด

Loop For ที่มีหลาย Statement

มีรูปแบบ

 for(< intilize>;<Condition>;<increment>)

 {

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

}



เช่น

โปรแกรมที่ 6-2 ตัวอย่างการใช้ loop for ที่มีหลาย Statement

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=3;i++)

6: {

7: cout << "Hello" << endl;

8:  cout << "C++ is Easy" << endl;

9: }

10: return 0;

11:}

Output

Hello

C++ is Easy

Hello

C++ is Easy

Hello

C++ is Easy



บรรทัดที่ 5: เป็นการบอกว่านี่เป็นการทำงานลูป For เหมือนโปรแกรมที่ 5.1

บรรทัดที่ 6:เป็นวงเล็บ ปีกกาที่บอกถึงว่านี่เป็นส่วนเริ่มต้นของ ของ Statement

บรรทัดที่ 9:เป็นวงเล็บปีกกาที่บอกว่านี่เป็นส่วนจบของ Statement โปรแกรมจะทำงานในStatement  ตั้งแต่ บรรทัดที่ 6 จะ ถึง บรรทัด ที่ 9 ตามจำนวนรอบที่กำหนดไว้ตรง Loop For



หรือจะเขียนแบบนี้ก็ได้



for(I=1;I<=3;I++){cout << “Hello” << endl; cout << “C++ is Easy” << endl;}



แบบนี้ก็จะได้ผลรันเหมือนกัน และก็ถือว่าเป็น LoopFor ที่มีหลาย Statement ด้วย

การนำค่าตัวแปรที่ใช้ในการวน loop for มาใช้

 เราสามารถนำค่าตัวแปรที่ใช้ในการวนloop มาใช้ในloop มาได้ เช่นเราใช้ตัวแปร i ในการวน loop และ Statement ที่อยู่ใน loop เราก็นำค่าตัวแปร i มาใช้ เข่นใช้ในการกำหนดข้อมูลใช้ในการคำนวณ หรือใช้ในการแสดงผล แต่เราไม่ควรกับหนดค่าให้กับตัวแปรที่ใช้ในการวน loop ใน Statement ของ loop เพราะอาจจะทำให้ loop มีปัญหาและอาจเกิด loop infinite ได้



โปรแกรมที่6-3 ตัวอย่างการนำค่าตัวแปรที่ใช้ในการวน loop for มาใช้

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;i++)

6: cout << i << " " << i * 5 << endl;

7:

8: return 0;

9:}

Output

1 5

2 10

3 15

4 20

5 25



อธิบาย Source code

บรรทัดที่ 5: เป็นการใช้ loop for ที่ใช้ตัวแปร i โดยที่ให้ค่าตัวแปร i ตอนเริ่มต้นเท่ากับ 1 และเงื่อนไขที่จะทำตราบเท่าที่เป็นจริงคือ i <= 5 และในแต่ละรอบให้ ค่าตัวแปร i เพิ่มอีก 1

บรรทัดที่ 6: cout << i << " " << i * 5 << endl; เป็น Statement ที่จะทำตราบเท่าที่เงื่อนไขใน loop for เป็นจริง

โดย Statement นี้จะมีการทำงานคือ ในแต่ละรอบที่ loop for ทำงาน ให้แสดงค่าตัวแปร i และต่อด้วยข้อความว่างๆ1ช่อง(“ “) และต่อด้วย ให้แสดงค่าตัวแปร i * 5

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

การใช้ Statement ทีอยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop

 การใช้ Statement ทีอยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop จะก่อให้เกิดปัญหาได้ถ้าไม่จำเป็นไม่ควรทำ เช่น



โปรแกรมที่ 6-4 แสดงตัวอย่างการใช้ Statement ที่อยู่ใน loop กำหนดค่าให้กับตัวแปรที่ใช้ในการวน loop for

แล้วเกิดปัญหา loop infinite

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=5;i++)

6: {

7: i--;

8: cout << i << " " << i * 5 << endl;

9: }

10: return 0;

11:}

Output จะแสดงเลข 0 0 ไปเรื่อยๆไม่มีที่สิ้นสุด

อธิบาย Source code

บรรทัดที่ 5:เป็นการใช้ตัวแปร i ในการใช้ loop for โดยที่ค่าเริ่มต้นของตัวแปร i คือ 1 และเงื่อนไขที่จะทำตราบเท่าที่เป็นจริงคือ i <= 5 ซึ่งถ้าค่า i ไม่มีการเปลี่ยนแปลงคือเป็น 1 ตลอด loop นี้ก็จะทำงานไปเรื่อยๆไม่มีที่สิ้นสุดเราจึงต้องกำหนดให้ค่า i เพิ่มขึ้นทุกครั้งในการ วน loop คือ i++ ในเมื่อเรากำหนดแล้ว แล้วทำไม loop ยังทำงานไม่มีที่สิ้นสุดนั่นเป็นเพราะ ในบรรทัดที่ 7:i—เป็นการกำหนดให้ค่าตัวแปร i มีค่าลดลง 1 ซึ่ง Statement นี้จะทำงานทุกครั้งที่มีการวน loop เพราะฉะนั้นค่า i จะไม่สามารถเพิ่มขึ้นได้เลยก็จะ <=5 อยู่ตลอด เพราะว่าถึงแม้เราจะสั่งให้ i++ ในแต่ละรอบของการวน loop แต่ Statement ใน loop นั้นก็ไปลดค่า i ลงอีก จึงเป็นสาเหตุให้เกิด loop infinite



loop for ไม่จำเป็นต้องเพิ่ม หรือลดทีละ 1 เช่น

for(i=1;i<=30;i = i +5) cout << “Hello”;





ที่ยกตัวอย่างมาเป็นรูปแบบการใช้ For ในแบบพื้นฐานแต่ความจริงแล้ว

ภาษา C++ เป็นภาษาที่มีความยืดหยุ่นมากในความจริงแล้วการใช้ Loop For ไม่จำเป็นต้องมีรูปแบบอย่างที่ยกตัวอย่างมาก็ได้

for(< initialize>;<Condition>;<increment>)



 ในส่วน Initialize,  condition , increment ทั้ง 3 ส่วนนี้ไม่จำเป็นต้องมีก็ได้

 การใช้ loop for โดยไม่มีส่วนของ initialize

 ถ้าไม่มีส่วนของ initialize ก็จะไม่มีค่าเริ่มต้นของตัวแปร ที่ใช้ ในการวน loop ถ้าหากในส่วนของ condition คือ i <= 10 คือถ้าค่า i น้อยกว่าหรือเท่ากับ 10 Statement ใน loop ก็จะทำงาน แต่ถ้าค่า i เป็น 20 ตั้งแต่แรก Statement ใน loop ก็จะไม่ได้ทำงาน เลย สักรอบ เราสามารถไม่ไม่อะไรเลยในส่วนของ initialize ได้ โดยโปรแกรมจะนำค่าปัจจุบันของตัวแปรที่ใช้ในการวน loop มาใช้

ถ้าเราไม่ใส่อะไรเลยในส่วน Initialize เราก็ควรจะกำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวน loop ก่อน

โปรแกรมที่ 6-5 ตัวอย่างการใช้ for โดยไม่มี initialize

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: i = 1;

6: for( ;i<=10;i++)

7: cout << i << " Hello C++." << endl;

8:

9: return 0;

10:}

Output

1 Hello C++.

2 Hello C++.

3 Hello C++.

4 Hello C++.

5 Hello C++.

6 Hello C++.

7 Hello C++.

8 Hello C++.

9 Hello C++.

10 Hello C++.

อธิบาย Source code

บรรทัดที่ 4:เป็นการประกาศตัวแปร ประเภท int ชื่อ i และกำหนดค่าให้เท่ากับ 1 ในบรรทัดที่ 5

บรรทัดที่ 6 และ 7:

6: for( ;i<=10;i++)

7: cout << i << " Hello C++." << endl;

 ในที่นี้จะเห็นได้ว่า ใน loop for เราไม่ได้ใส่ Source code ในส่วนของ initlize เลยซึ่งการวน loop ก็ยังทำงานอยู่ โดย Statement ที่จะทำงาน คือ Statement ในบรรทัดที่ 7 คือให้แสดงค่าตัวแปร i และคำว่า “Hello C++” ส่วยสาเหตุที่โปรแกรมทำงาน 10 รอบก็เพราะว่า ในส่วนของ condition คือ i <= 10 ยังทำงานอยู่คือ Statement ในบรรทัดที่ 7 จะทำงานตราบเท่าที่ i ยังน้อยกว่า หรือ เท่ากับ 10 และในส่วนของ increment คือ

i++ ก็ยังทำงานอยู่คือในแต่ละรอบเราให้ค่าตัวแปร i เพิ่มอีก1

 การใช้ loop for โดยไม่มีส่วนของ condition และการใช้ break

 ส่วนของ condition จะเป็นการเช็คเงื่อนไขในแต่ละรอบว่าจะทำตราบเท่าที่เงื่อนไข ใน condition เป็นจริง เช่น i <= 10 ก็คือ ตราบเท่าที่ i ยังน้อยกว่า หรือเท่ากับ 10 ก็จะทำโดยที่เรามักจะเขียนโปรแกรมให้ตัวแปร i เพิ่มค่า ในแต่ละรอบในส่วน ของ increment เมือตัวแปร i มากกว่า 10 เมื่อไหร่ loop ก็จะหยุดทำ แต่ถ้าเราไม่มีส่วนของ condition แล้วเราจะออกจาก loop ได้อย่าง ไร

 ในC++ เราสามารถใช้ breakในการออกจาก loop ได้ เมื่อ Compiler มาเจอ Statement นี้ก็จะออกจาก loop เราสามารถใช้ break ร่วมกับ if ได้

 เช่น

 for(i = 1; i <= 10; i++)

 if ( i == 5) break;

 ถ้าเขียนแบบนี้เมื่อค่าตัวแปร i เท่ากับ 5 โปรแกรมก็จะออกจาก loop โดยที่จะไม่ทำถึง 10 รอบ

การใช้ break;ไม่จำเป็นต้องใช้กับ loop for ที่ไม่มีส่วนของ condition เท่านั้น loop for ทั่วไปก็สามารถใช้ break ได้

 จะมีข้อสังเกตุว่าถ้าเราใช้ loop for ที่ไม่มีส่วนของ condition และเราจะใช้ break ร่วมกับ if แทน เงื่อนไขใน if จะเป็นไปในทางตรงกันข้ามกับ condition

 เช่นถ้าในส่วนของ condition ถ้าเราต้องการเขียนให้ ทำงาน 10 รอบ เราอาจเขียนเป็น

 for(i=1; i <= 10 ; i ++)

 แต่ถ้าเราใช้ if ควรเขียนเป็น

  if(i > 10 ) break;

 เป็นเพราะว่า condition คือเงื่อนไขที่ถ้าเป็นจริง Statement ใน loop จะ ทำงาน

 แต่ การใช้ if ในกรณีนี้ส่วนใหญ่ เป็นเงื่อนไขที่ถ้าเป็นจริงจะออกจาก loop

โปรแกรมที่ 6-6 การใช้ loop for โดยไม่มีส่วนของ condition

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5:

6: for(i=1; ;i++)

7: {

8: if(i>10)break;

9:

10: cout << i << " Hello C++." << endl;

11: }

12:

13: return 0;

14:}

Output เหมือนโปรแกรมที่ 6-5

อธิบาย Source code

บรรทัดที่ 6:เราใช้ loop for โดยใช้ตัวแปร i ที่ไม่มีส่วนของ condition loop for ก็จะทำงานต่อไปเรื่อยๆไม่มีที่สิ้นสุด แต่สาเหตุที่ loop for นี้ทำงานแค่ 10 รอบเนื่องจาก ในบรรทัดที่ 8 เรามีการเช็คเงื่อนไขว่า ถ้าตัวแปร i > 10 จริง ให้ break; นั่นคือการ ออกจาก loop  และถึงแม้ loop นี้จะไม่มีในส่วน ของ condition แต่ส่วนของ initialize ยังมีอยู่ โดยเรากำหนดให้ตอนเริ่มต้นตัวแปร i เป็น 1 และในส่วนของ increment เราก็กำหนดให้ตัวแปร i เพิ่มค่าอีก 1 โดยที่เมื่อถึงรอบที่ 11 ตัวแปร i ก็จะมีค่า 11 และพอเจอ Statement ในบรรทัดที่ 8 : โปรแกรมก็จะทำการเช็คเงื่อนไขซึ่งในรอบที่ 1 ถึง รอบ ที่ 10 เงื่อนไขในบรรทัดที่ 8 จะเป็นเท็จ เพราะว่า ค่าตัวแปร i น้อยกว่า 10 แต่พอรอบที่ 11 เงื่อนไขในบรรทัดที่ 8 ที่เช็คจะเป็นจริง ก็จะทำงาน Statement break; ก็จะออกจาก loop

 การใช้ loop for โดยไม่มีส่วนของ increment

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

เช่น ถ้าเราเขียน Source code

  for (i = 1;i <= 10; )

  Statement ที่อยู่ใน loop for ก็จะทำงานไปเรื่อยๆเนื่องจากในส่วนของ condition เป็นจริงคือ i<=10 ถ้าเราไม่มีส่วนของ increment มาเพิ่มค่าตัวแปร i โปรแกรมก็จะทำงานวน loop อยู่อย่างนั้น ไม่สามารถออกจาก loop ได้

 ใน C++ อนุญาติให้เราไม่ต้องเขียน Source code ในส่วนของ increment ได้แต่เราก็ควรกำหนดค่าของตัวแปรที่ใช้ในการวน loop ให้เพิ่มขึ้นหรือลดลงเองในส่วนของ Statement ใน loop เพื่อป้องกัน ปัญหา loop infinite แต่การ กำหนดค่าให้กับตัวแปรที่ใช้ในการวนloop โดย Statement ใน loop อาจทำให้โปรแกรมมีปัญหาได้ถ้าไม่จำเป็นก็ไม่ควรทำ

 โปรแกรมที่ 6-7 ตัวอย่าง การใช้ loop for ที่ไม่มีส่วน increment

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5:

6: for(i=1;i<=10;)

7: {

8: cout << i << " Hello C++." << endl;

9: i++;

10: }

11:

12: return 0;

13:}

Output เหมือนโปรแกรมที่ 6-5

อธิบาย Source code

บรรทัดที่ 6: เป็นการใช้ loop for โดยไม่มีส่วนของ increment ซึ่งโปรแกรมก็จะทำการวน loop ไม่เรื่อยๆ เนื่องจาก เงื่อนไขใน condition เป็นจริง แต่โปรแกรมนี้จะมีการทำงานแค่ 10 รอบเนื่องจาก ในบรรทัดที่ 9:เราได้เขียน ให้ตัวแปร i เพิ่มค่าอีก 1 ในทุกๆรอบ พอถึงรอบที่ 10 หลังจากพิมพ์ข้อความ 10 Hello C++. แล้วค่าตัวแปร i ก็เพิ่มขึ้นอีก 1 แล้วก็จะไม่ทำการวน loop อีกแล้ว เนื่องจากในส่วนของ condition คือ i <= 10 ไม่เป็นจริงแล้ว โปรแกรมก็จะไม่ทำงาน ในส่วนของ Statement ที่อยู่ใน loop

โปรแกรมที่ 6-8 การใช้ loop for โดยไม่มีส่วนของ initialize , condition, increment

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: i = 1;

6: for(; ;)

7: {

8: if(i > 10)break;

9: cout << i << " Hello C++." << endl;

10: i++;

11: }

12:

13: return 0;

14:}

Output เหมือนโปรแกรมที่ 6-5

โปรแกรมนี้เป็นการใช้ loop for โดยที่ไม่มีส่วนของ initialize , condition, increment จะเห็นได้ว่าเราไม่ได้เขียน Source code อะไรไปเลยในแต่ละส่วน โปรแกรมก็ยังทำการวน loop ได้ 10 รอบ เนื่องจาก ใน Source code เราได้มีส่วนที่เขียน แล้วสามารถใช้แทน initialize , condition, increment แล้ว

บรรทัดที่ 5:เป็นการกำหนดให้ค่าตัวแปร i เท่ากับ 1 ซึ่งทำให้เราไม่จำเป็นต้องเขียนส่วนของ initialize

บรรทัดที่ 8:เป็นการเขียนโปรแกรมให้เช็คเงื่อนไขในแต่ละรอบว่า ถ้า i > 10 จริงให้ออกจาก loop นี่คือส่วนที่ทำให้เราไม่ต้องเขียน Source code ในส่วนของ condition

บรรทัดที่ 10:เป็นการกำหนดให้ค่าตัวแปร i เพิ่มขึ้นอีก 1 ทำให้เราไม่จำเป็นต้องเขียน Source code ในส่วนของ increment

 นอกจากนี้แล้วในส่วนของ initialize , condition, increment เรายังสามารถกำหนดรายละเอียดได้มากกว่านี้อีก

 initizlize เราสามารถกำหนดค่าในมากกว่า1ค่า เช่น i= 1,j=2

 condition เราสามารถมีเงื่อนไขที่สามารถนำมาเชื่อมกันได้เช่น i > 10 && j > 20

 increment สามารถมีตัวแปรได้มากกว่า1 ตัวในการเพิ่มหรือลดค่าในแต่ละครั้งรวมถึงตัวแปรที่ไม่ได้ใช้ในการวน loop เราก็สามารถกำหนดให้เพิ่มค่าหรือลดค่าในส่วนของ increment ได้

โปรแกรมที่ 6-9 การใช้ for ในการวน loop

Source code

#include "iostream.h"

int main()

{

 int i,x;

 for(i=1,x=2;i<=10 || x <=7;i +=x,x++)

 {

 cout << i << " " << x << endl;

 }

 return 0;

}

Output

1 2

3 3

6 4

10 5

15 6

21 7

บรรทัดที่ 4: ในโปรแกรมนี้มีความหมายว่า เป็นการใช้ Loop For โดยที่

 initilize ค่าเริ่มต้นมี 2 ตัวคือ I และ X โดยที่ I = 1 ,X = 2

 condition เงื่อนไขในการตรวจสอบว่าถ้าเป็นจริงจะทำคือ I<=10 หรือ X <=7

 increment ในแต่ละรอบค่า i = i +x ส่วน x = x + 1

 โปรแกรมนี้จะทำงานไปเรื่อยๆ ตราบเท่าที่ ค่า ตัวแปร i <= 10 หรือ x<= 7 ในแต่ละรอบก็จะพิมพ์ค่าตัวแปร i และ ตัวแปร x ทางจอถาพ และให้ค่าตัวแปร i จะเท่ากับ i + x และค่าตัวแปร x จะ เพิ่มที่ละ 1



การใช้ Loop For เขียนโปรแกรม

 ในที่นี่จะเป็นตัวอย่างโปรแกรมที่ใช้ loop for ในการเขียน

ตัวอย่างโปรแกรมที่ 6-10 ให้เขียนโปรแกรมที่จะทำการ รวมผลบวกที่ได้ ตั้งแต่ เลข 1 ถึง 100 โดยใช้ loop for
คำว่ารวมผลบวกที่ได้ในที่นี้หมายถึง 1 ถึง 4 จะมีค่าเท่ากับ 1+2+3+4 ได้เท่ากับ 10
 1 ถึง 6 1+2+3+4+5+6 ได้เท่ากับ 21 โปรแกรมนี้ให้ทำการบวกตั้งแต่ 1 ถึง 100

วิเคราะห์อัลกอริทึ่ม อย่างง่ายๆก่อน

1. โปรแกรมต้องการวน loop ร้อย รอบ ในที่นี้ให้ใช้ loop for

2.ถ้าเราจะหาค่าของผลรวมตั้งแต่ 1 to 100 เราอาจใช้ตัวแปรที่ใช้ในการเก็บค่าได้เช่น

 Total = Total +1+2+3…+100;

แต่ถ้าทำอย่างนั้น Source code จะยาวมากและอีกอย่างคือ โปรแกรมนี้ โจทย์บังคับให้ใช้ loop for

 โดยที่ค่าของ ตัวแปรที่ใช้ในการวน loop ในแต่ละรอบจะมีค่าตั้งแต่ 1 ถึง 100 เพราะฉะนั้นเราน่าจะเขียนโปรแกรมให้ ในแต่ละรอบค่าของตัวแปร จะเท่ากับค่าของตัวแปร บวกตัวแปรที่ใช้ในการวน loop

 เช่น

 (loop ที่จะทำงาน 3 ครั้ง)

 Total = Total + i;

 สมมุติว่า loop นี้ทำงาน 3 รอบ โดยที่ค่าของตัวแปรที่ใช้ในการวน loop คือ i จะมีค่า 1,2,3 ตามลำดับ

และค่าของตัวแปร Total มีค่าเท่ากับ 0

ในรอบแรกค่า i จะเท่ากับ 1

 Total = Total + 1  หรือมีค่าเท่ากับ Total = 0 + 1

ในรอบ 2 ค่า i จะเท่ากับ 2

 Total = Total + 2  หรือมีค่าเท่ากับ Total = 1 + 2

ในรอบ 3 ค่า i จะเท่ากับ 3

 Total = Total + 3  หรือมีค่าเท่ากับ Total = 3 + 3

หลังจากวน loop ครบ 3 รอบแล้ว

 Total จะเท่ากับ 6 ซึ่งเท่ากับ 1+2+3

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i,Total;

5: Total = 0;

6:

7: for(i=1;i<=100;i++)

8: Total = Total +i;

9:

10:  cout << Total;

11: return 0;

12:}

Output

5050

ในส่วนของการ อธิบาย Source code โปรแกรมนี้จะไม่มีเพราะได้ อธิบาย ไปในส่วนของการวิเคราะห์อัลกอริทึ่มแล้ว


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

รับ ค่า 3

แสดง

 3 * 1 = 3

 3 * 2 = 6

 3 * 3 = 9

 ไปจนถึง 12



วิเคราะห็โจทย์

1.จากโจทย์จะเห็นได้ เราต้องการรับเลขและแสดงสูตรคูณของแม่นั้นโดยที่ต้องแสดงทั้งหมด 12 รอบ เราควรใช้ Loop For เพื่อความสะดวกในการเขียนโปรแกรม

2. สิ่งที่ต้องแสดงในแต่ละรอบแบ่ง 5 ส่วนเช่นถ้าเป็นแม่ 3

  3 * 1 = 3

 3 * 2 = 6

ตำแหน่งที่ 1 เลข 3 ตัวแรกคือแม่ของสูตรคูณที่เรารับค่ามา

ตำแหน่งที่ 2 เครื่องหมาย * ในทุกๆรอบจะเป็นเครื่องหมายนี้อยู่แล้วไม่มีการเปลี่ยนแปลง

ตำแหน่งที่ 3 จำนวนรอบมีทั้งหมด 12 รอบจะเปลี่ยนไปทุกครั้งตั้งแต่ 1 ถึง 12

ตำแหน่งที่ 4 เครื่องหมาย = ในทุกๆรอบจะเป็นเครื่องหมายนี้อยู่แล้วไม่มีการเปลี่ยนแปลง

ตำแหน่งที่ 5 เลข 3 ตัวสุดท้าย คือผลคูณในแต่ละรอบได้มาจาก ตัวแปรที่เก็บค่าแม่ * จำนวนรอบ

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,Mae;

5: cout << "Please Enter your number :";

6: cin >> Mae;

7: for(i=1;i<=12;i++)

8: {

9: cout << Mae << " * " << i << " = " << Mae*i;

10: cout << endl;

11:

12: }

13:

14: return 0;

15:}

Output

Please Enter your number :5

5 * 1 = 5

5 * 2 = 10

5 * 3 = 15

5 * 4 = 20

5 * 5 = 25

5 * 6 = 30

5 * 7 = 35

5 * 8 = 40

5 * 9 = 45

5 * 10 = 50

5 * 11 = 55

5 * 12 = 60



อธิบาย Source code

บรรทัดที่ 4: เป็นการประกาศตัวแปรประเภท integer 2 ตัวคือ i และ Mae i ใช้ในการวน Loop ส่วน Mae ใข้ในการ เก็บค่าหมายเลขของแม่

บรรทัดที่ 5: เป็นการให้แสดงผลข้อความให้ผู้ใช้รู้ว่าต้องทำอะไร

บรรทัดที่ 6:เป็นการค่ามาเก็บไว้ในตัวแปร Mae

บรรทัดที่ 7: เป็นการบอกว่าให้มีการใช้ Loop For เพื่อทำงาน 12 รอบ

บรรทัดที่ 9: cout << Mae << " * " << i << " = " << Mae*i;

เป็นการพิมพ์ ตัวแปร Mae และ เครื่องหมาย * และ รอบที่ และเครื่องหมาย = และผลของการ

คำนวณ สมมุติว่า แม่ 5

 รอบที่ 1 5 * 1 = 5

 รอบที่ 2  5 * 2 = 10

บรรทัดที่ 11:เป็นการขึ้นบรรทัดใหม่ในการจบแต่ละรอบ



ตัวอย่างโปรแกรมที่ 6-12-1
ถ้าหากโจทย์ต้องการให้เราเขียนโปรแกรมที่มีการแสดงเลขโดยที่ต้องมีการจัดรูปแบบแบบนี้ด้วย

 1 2  3   4 5 6 7

 8  9  10  11  12  13  14

15 16  17  18  19  20  21

22 23  24  25  26  27  28

29 30  31  32  33  34  35



ถ้าหากตัวเลขมีแค่นี้เราอาจ จะ ใช้ วิธีพิมพ์ไปทั้งหมดแล้วใช้ cout แสดง ผลก็ได้ แต่ถ้าหากมีเลข เป็น ร้อยก็จะทำให้เสียเวลามากเพราะฉะนั้นเราน่าจะใช้วิธีการทำซ้ำมากกว่า



วิเคราะห์โจทย์ อย่างง่ายๆก่อน

1.โจทย์ต้องการ ให้แสดงเลข 1 –35

2.การจัดตำแหน่งควรจะมีรูปแบบสวยงาม

ไม่ควรให้เป็นแบบ นี้-à  8  9  10  11  12  13 14

15 16  17  18  19  20  21

3.ใน 1 บรรทัด แสดง แค่ 7 ตัว พอตัวต่อไปให้ขึ้นบรรทัดใหม่



วิธีการทำงานวิธีที่ 1
ในข้อ 1 ที่ทำงาน 35 ครั้ง เพื่อที่จะแสดงตัวเลขในที่นี้เราสามารถใช้ตัวแปรที่ใช้ในการวน loop แสดงค่าออกมาได้

ข้อ 2 เราใช้ Manipulater setw ในการแสดงผลที่หน้าจอได้ได้

ข้อ 3 นี่คือส่วนที่ยากที่สุดสำหรับโจทย์นี้ สำหรับคำที่ว่า “พอครบ 7 ตัวให้ขึ้นบรรทัดใหม่”

ถ้าเราจะเขียนโปรแกรมให้เช็คเงื่อนไข

if(ครบเจ็ดตัว) cout << endl;

เราไม่สามารถสั่งให้ compiler ทำงาน แบบนั้นได้ แต่เราสามารถสั่งให้ compiler เช็คเงื่อนไขบางอย่างได้ เช่นในแต่ละรอบของการ แสดงผลตัวเลขแต่ละตัว ให้มีตัวแปรที่ใช้การนับ (ในที่นี้สมมุติตัวแปร ชื่อ count ) ด้วยว่านี่เป็นตัวที่เท่าไหร่ โดยวิธีการคือให้ตัวแปร นั้นเพิ่มค่าทีละ 1

ส่วนในการเช็คเงื่อนไข ก็เช็คว่า ถ้าตัวแปรนั้นเท่ากับ 7 จริงก็ให้ขึ้นบรรทัดใหม่

 แล้วหลังจากที่ขึ้นบรรทัดใหม่แล้วก็ให้กำหนดค่าตัวแปร ที่ใช้ นับ ให้เท่ากับ 0

 สาเหตุที่ทำไมต้องกำหนดให้ตัวแปรที่ใช้นับ เป็น 0 เมื่อขึ้นบรรทัดใหม่เนื่องจากว่าถ้าหากว่ารอบการทำงานของโปรแกรมถึงรอบที่ 7 ตัวแปร count ก็จะเท่ากับ 7 ก็จะขึ้นบรรทัดใหม่แต่พอรอบการทำงานถึงรอบที่ 14 ตัวแปร count ก็จะเท่ากับ 14 โปรแกรมก็จะไม่ขึ้นบรรทัดใหม่เพราะเงื่อนไขของเราคือต้องเท่ากับ 7 ถึงขึ้นบรรทัดใหม่ อัลกอริทึ่มนี้ผู้เขียนคิดว่าน่าจะตรงกับความคิดของคนเรามากที่สุด

Source code

1:#include"iostream.h"

2:#include"iomanip.h"

3:int main()

4:{

5: int i,Count=0;

6: for(i=1;i<=35;i++)

7: {

8: cout << setw(3) << i;

9: Count++;

10:

11: if(Count ==7)

12: {

13: cout << endl;

14: Count =0;

15: }

16: }

17:

18: return 0;

19:}

Output เหมือนกับที่โจทย์ต้องการ

อธิบาย Source code

บรรทัดที่ 5:เป็นการประกาศตัวแปร ประเภท int ชื่อ i ใช้ในการวน loop และตัวแปร ชื่อ count ไว้ใช้ในการนับในแต่ละรอบโดยกำหนดค่าเริ่มต้นให้เป็น 0 ด้วย

บรรทัดที่ 6:เป็นการวน loop for โดยใช้ตัวแปร i โดยให้วน loop 35 รอบ

บรรทัดที่ 8: cout << setw(3) << i; เป็น Statement ที่อยู่ใน loop ที่จะทำงาน โดย Statement นี้จะพิมพ์ค่าตัวแปร i ออกทางจอภาพโดยมีการจัดตำแหน่งด้วย

บรรทัดที่ 9: Count++ เป็นการเพิ่มค่าให้กับตัวแปร Count อีกหนึ่งในแต่ละรอบเพื่อที่จะสามารถใช้นับได้ว่าเราพิมพ์ตัวเลขไปกี่ตัวแล้ว

บรรทัดที่ 11:เป็นการเช็คเงื่อนไขว่า ถ้าตัวแปร Count == 7 จริง คือได้มีการพิมพ์ตัวเลขครบ 7 ตัวแล้ว ให้ทำงาน Statement ในบรรทัดที่ 12 คือการขึ้นบรรทัดใหม่ และในบรรทัดที่ 13 เป็นการกำหนดค่าให้กับตัวแปร Count เป็น 0 ใหม่

โปรแกรมที่ 6-12-2

 โจทย์เหมือนกับโปรแกรมที่ 6-12-1 แต่เปลี่ยนตรงอัลกอริทึ่ม

 จากรูปแบบของการแสดงผลของโปรแกรมที่ 6-12-1 คือ

 1 2  3   4 5 6 7

 8  9  10  11  12  13  14

15 16  17  18  19  20  21

22 23  24  25  26  27  28

29 30  31  32  33  34  35

 จะมีข้อสังเกตุได้ว่าเราอาจไม่ต้องนับว่าในแต่ละบรรทัดมีเลขครบ 7 ตัวแล้วจึงขึ้นบรรทัดแต่เราอาจใช้วิธีให้ในแต่ละรอบของการทำงานคือการพิมพ์เลขออกมา ถ้าหากเลขนั้น คือเลข 7,14,21,28 ก็ให้ขึ้นบรรทัดใหม่ ตัวเลขชุดนี้ถ้านำไป %(หารเอาแต่ส่วน) กับ 7 จะได้ 0 เช่น

 7 % 7 จะได้ 0

 14 % 7 จะได้

เพราะฉะนั้นเราอาจเขียนโปรแกรมเพื่อที่จะทำการตรวจสอบการทำงานในแต่ละรอบได้ว่าถ้า จำนวนรอบ % 7 แล้วได้เท่ากับ 0 จริง ก็ให้ขึ้นบรรทัดใหม่

Source code

1:#include "iostream.h"

2:#include "iomanip.h"

3:int main()

4:{

5: int i;

6: for(i=1;i<=35;i++)

7:  {

8: cout << setw(3) << i;

9:

10: if(i % 7 ==0) cout << endl;

11:  }

12:

13:  return 0;

14:}

Output เหมือนที่โจทย์ต้องการ

บรรทัดที่ 6: โปรแกรมจะทำงาน 35 รอบ

บรรทัดที่ 8: ในแต่ละรอบโปรแกรมจะแสดงผลค่า i โดยที่เราใช้ Manipulater setw ในการจัดตำแหน่ง

บรรทัดที่ 10: โปรแกรมจะเช็คว่า ถ้าลำดับของรอบ % 7 ได้เท่ากับ 0(ครบ 7 รอบ) ให้ขึ้นบรรทัดใหม่



Loop For ที่ซ้อนกัน

 เราสามารถใช้ Loop For ซ้อนกันได้ในกรณีที่ต้องการให้มีการวน Loop ซ้อนกันโดยที่ รูปแบบการใช้ก็จะเหมือนรูปแบบปกติ ถ้ามีหลาย Statement ก็ต้อง มีวงเล็บ ปีกกาด้วย

รูปแบบ



 for(< intilize>;<Condition>;<increment>)

 {

statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ

 for(< intilize>;<Condition>;<increment>)

 {

 statement ที่ต้องการให้ทำในแต่ละรอบ

statement ที่ต้องการให้ทำในแต่ละรอบ



 }

}

โดยที่ Loop ที่อยู่ด้านนอก

โจทย์ที่5.3

ตัวอย่างเช่นโจทย์ต้องการให้แสดงผล



1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 9 10



เราอาจใช้ Loop For ที่ซ้อนกัน โดยให้ Loop แรกทำงาน 5 ครั้ง(มี 5 บรรทัด) Loop ที่ซ้อนอยู่ทำงาน 10 ครั้ง ในการพิมพ์ตัวเลข

โปรแกรมที่ 6-13 การใช้ loop for ซ้อนกัน

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,j;

5: for(i=1;i<=5;i++)

6: {

7: for(j=1;j<=10;j++)cout << j << " " ;

8:

9: cout << endl;

10: }

11:

12: return 0;

13:}

ผลรันจะเป็นเหมือนที่โจทย์ต้องการ

บรรทัดที่ 4:ประกาศตัวแปร i และ j เป็นตัวแปรประเภท integer เพื่อใช้ กับ Loop For

บรรทัดที่ 5:เป็นการบอกว่า Loop i จะทำงาน 5 ครั้ง

บรรทัดที่ 7: Loop j จะทำงาน 10 ครั้ง โดยแต่ละครั้งให้ แสดงผลค่า j และ “ “ ในการเว้นวรรคการที่ Loop jอยู่ใน Loop i มีความหมายว่า เมื่อ Loop i ทำงาน 1 ครั้ง Loop j ก็จะทำงาน 10 ครั้ง Loop i ทำงาน 5 ครั้ง Loop j

ก็จะทำงาน รวมแล้ว 50 ครั้ง

บรรทัดที่ 9: เป็นการให้ขึ้นบรรทัดใหม่เมื่อจบ Loop i แต่ละครั้ง Statement ในบรรทัดที่ 9 นี้จะไม่ถือว่าเป็น Statement ใน loop  j เนื่อง จาก loop j เป็น loop แบบมี Statement เดียว เพราะฉะนั้นในการทำงานในแต่ละรอบของ loop j คือจะทำงาน Statement cout << j << " " ; ในบรรทัดที่ 7 เท่านั้นแต่ไม่ได้ทำงาน Statement ในบรรทัดที่ 9 ด้วย



โจทย์ที่ 6-14

ต้องการโปรแกรมที่รับค่าด้านกว่างของรูปสี่เหลี่ยมจตุรัสแล้วแสดงจำนวนเสาที่ล้อมรอบเช่น

ด้านยาว 2

แสดงผล

**

**

ด้านยาว 4

****

* *

* *

****

ด้านยาว 6

******

* *

* *

* *

* *

******

วิเคราะห์โจทย์

 โปรแกรมนี้เราต้องรับค่าความยาวของด้านของรูปสี่เหลี่ยมจุตุรัส และเราก็ต้องแสดงภาพเสาที่ใช้ล้อมรอบรูปสี่เหลี่ยม ซึ่งในที่นี้เราควรเขียนโปรแกรมให้มีการใช้ loop for ที่ซ้อนกัน โดยที่ loop แรกจะทำงานเท่ากับความยาวของ ด้าน และloop ที่ 2 ที่ซ้อนอยู่ใน loop แรก ก็จะทำงาน เท่ากับ ความยาวของด้านของ รูปสี่เหลี่ยมจัตุรัสเพื่อที่จะแสดงตัวอักษร *

โปรแกรมที่ 6-14-1

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int Len,i,j;

5: cout << "Please enter Length:";

6: cin >> Len;

7: for(i=1;i<=Len;i++)

8: {

9: for(j=1;j<=Len;j++) cout << "*";

10:

11: cout << endl;

12: }

13: return 0;

14:

15:}

Output

Please enter Length:6

******

******

******

******

******

******

อธิบาย Source code

บรรทัดที่ 6:เป็นการรับค่าตัวแปร Len

บรรทัดที่ 7:เป็นการวน loop for โดยใช้ตัวแปร i จำนวนรอบของตัวแปรนี้ จะทำงานเท่ากับตัวแปร Len

บรรทัดที่ 9:เป็นการวน loop for โดยใช้ตัวแปร j จำนวนรอบของตัวแปรนี้ จะทำงานเท่ากับตัวแปร Len โดยที่ loop j อยู่ใน loop i เพราะฉะนั้น เมื่อ loop i ทำงาน 1 ครั้ง loop j ก็จะทำงานตามจำนวนของตัวแปร Len ถ้าตัวแปร Len เท่ากับ 6 เมื่อ loop  i ทำงาน 1 loop j ก็ต้องทำงาน 6 รอบ เพื่อที่จะดูเข้าใจง่ายให้คิดว่า

 i = แถว , j = คอลัมน์

 รอบแรก i = 1 j ก็เป็นรอบที่ 1

 i = 1 j  = 1

 *

 รอบต่อมา i ยังเป็นรอบที่ 1 j เป็นรอบที่ 2

 i = 1  j = 2

 **

 จนถึง i ยังเป็นรอบที่ 1 j เป็นรอบที่ 6

 i = 1 j = 6

 ******

 i เปลี่ยน เป็น รอบที่2 j จะต้องเริ่มรอบที่ 1 ใหม่

 i = 2 j = 1

 ******

 *

 i ยังเป็นรอบที่ 2 j ในรอบต่อมาจะเพิ่มเป็น 2 แล้ว

 i = 2 j = 2

 ******

 **

 จนถึง i เท่ากับ 2 แต่ j ไปถึงรอบที่ 6

 ******

 ******

 จนเมื่อไปถึงรอบที่ i เท่ากับ 6 และ j เท่ากับ 6

 ******

 ******

 ******

 ******

 ******

 ******

รวมแล้วloop j ทำงาน 36 รอบ

รู้สึกว่าโปรแกรมนี้ยังทำงานได้ไม่ตรงตามที่เราต้องการเท่าไหร่ เพราะที่เราต้องการคือแสดงแค่เสาที่ล้อมรอบเท่านั้นไม่จำเป็นต้องแสดงส่วนภายใน แต่โดยรวมๆแล้วโปรแกรมที่ 6-14-1 ก็ทำงานได้ดีพอสมควรเพียงแค่เรามาเปลี่ยนแปลงบางส่วนของโปรแกรมก็จะสามารถทำงานอย่างที่โจทย์ต้องการได้

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

 ****

 * *

 * *

 ****



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

เราไม่สามารถเขียน Code ว่า if(บริเวณส่วนตรงกลาง)  cout << “ “; แบบนี้ได้แต่เราสามารถเช็คได้ว่าบริเวณไหนคือบริเวณตรงกลางของรูปสี่เหลี่ยม นั่นคือ สมมุติความยาวของรูปสี่เหลี่ยมคือ 5 บริเวณตรงกลางคือบริเวณที่ แถว ต้องไม่เป็น 1 กับ 5 และ คอลัมน์ ต้องไม่เป็น 1 กับ 5 เพราะบริเวณ 1 กับ 5 คือบริเวณรอบๆรูป

ในขณะที่ ถ้าความยาวของรูปสี่เหลี่ยมคือ 6 บริเวณตรงกลางคือบริเวณที่ แถว ต้องไม่เป็น 1 กับ 6 และ คอลัมน์ ต้องไม่เป็น 1 กับ 6 เพราะฉะนั้นเราควรเช็คเงื่อนไข คือ

 สมมุติว่าความยาว 5

 12345

 1 *****

 2 * *

 3 * *

 4 * *

 5 *****

เราจะพิมพ์เครื่องหมาย * ต่อเมื่อ แถวต้องเป็น 1 หรือ ความยาว(5)

 หรือ

  คอลัมน์ต้องเป็น 1 หรือ ความยาว(5)

 ถ้าไม่ตรงกับเงื่อนไขนี้ให้พิมพ์ “ “ แทน

แบบนี้แทนที่จะเช็คจากค่าคงที่ และเงื่อนไขของเรายังไม่ส่วนของ คอลัมน์อีกด้วย เราจึงต้องเขียน Source code เป็น

 สำหรับการเช็คแถวเพียงอย่างเดียว

 if (i == 1 || i ==Len)

 สำหรับการเช็คคอลัมน์ด้วย

 if ((i == 1 || i == Len)) || (j ==1 || j == Len)) cout << “ “;

 else cout << “*”;

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int Len,i,j;

5: cout << "Please enter Length:";

6: cin >> Len;

7: for(i=1;i<=Len;i++)

8: {

9: for(j=1;j<=Len;j++)

10: if((i==1 || i==Len) || (j==1 || j==Len))cout << "*";

11: else cout << " ";

12:

13: cout << endl;

14: }

15: return 0;

16:

17:}

Output เหมือนอย่างที่โจทย์ต้องการ

อธิบาย Source code ในโปรแกรมนี้ไม่มีเพราะว่าได้อธิบายไปก่อนหน้านี้แล้ว



การใช้ continue กับ loop for

 การใช้ continue เป็นการใช้ที่จะเริ่มวนloop ต่อไปโดยที่ไม่ต้องทำงาน Statement ที่เหลือต่อ ถ้าหาก

เช่น

รอบที่ทำงานคือรอบที่ 5 และโปรแกรมมาเจอ Statement continue ก็จะเริ่มทำงานรอบที่ 6 โดย Statement ที่เหลือในรอบที่ 5 จะไม่ทำงาน



โปรแกรมที่ 6-15 การใช้ continue กับ loop for

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=10;i++)

6: {

7:  if(i==5)continue;

8:

9:  cout << i << endl;

10: }

11:

12: return 0;

13:}

Output

1

2

3

4

6

7

8

9

10

อธิบาย Source code

บรรทัดที่ 5: เป็นการใช้ loop for โดยใช้ตัวแปร i ที่จะทำงาน 10 รอบ โดยที่บรรทัดที่ 9 จะเป็นการแสดงค่า i

แต่ทำไมค่าตัวแปร i ที่แสดงไม่แสดงเลข 5 พอแสดงเลข 4 และก็แสดงเลข 6 เลย นั่นเป็นเพราะว่าในบรรทัดที่ 7

if(i==5)continue; เป็น การใช้ if ที่จะทำการเช็คเงื่อนไขว่า ค่าตัวแปร i ได้ เท่ากับ 5 หรือเปล่าถ้าเท่ากับ 5 ก็ให้ continue โปรแกรมก็จะไปทำงานในบรรทัดที่ 5 ใหม่แต่คราวนี้ตัวแปร i เป็น 6 แล้ว เท่ากับว่า Statement  ที่ใช้ในการแสดงค่า i ในการวน loop รอบที่ 5 ก็จะไม่มีการได้ทำ จะไปทำรอบที่ 6 เลย

 การใช้ continue เป็น Statement สุดท้ายที่อยู่ใน loop

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

โปรแกรมที่ 6-16 ตัวอย่างการใช้ continue เป็น Statement สุดท้าย  ใน loop

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i;

5: for(i=1;i<=10;i++)

6: {

7:

8: cout << i << endl;

9:

10: if(i==5)continue;

11: }

12:

13: return 0;

14:}

Output จะเป็น เลข 1 ถึง 10 โดยไม่มีการเว้นเลขไหนเลย

อธิบาย Source code

บรรทัดที่ 10:เป็นการเช็คเงื่อนไขว่า ถ้า i == 5 จริงให้ continue คือให้กลับไปทำงานบรรทัดที่ 5 และให้เริ่มต้น loop ใหม่ ใน รอบที่ 6 โดยที่ไม่ต้องทำงาน Statement ที่เหลือ อยู่ใน loop ที่ 5 แต่ทำไม Output ออกมาถึงมีเลข 5 ด้วย ไม่เหมือนโปรแกรมที่ 6-15 นั่นเป็นเพราะว่า การใช้ continue ในบรรทัดที่ 10 เป็นส่วนสุดท้ายของ Statement ใน loop ก่อนที่จะมาเจอ Statement continue โปรแกรมก็ได้ทำ Statement ในบรรทัดที่ 8 คือ พิมพ์ค่าตัวแปร i ไปแล้ว เพราะฉะนั้น การทำงานของ โปรแกรมจึงดูเหมือนไม่ได้มีการใช้ continue เลย

Loop while

เป็น Loop ที่มีการเช็คเงื่อนไขว่าถ้าเป็นจริงถึงจะทำงาน Source code ที่อยู่ใน loop ถ้าเป็นเท็จก็จะไม่ทำ loop while มีรูปแบบการใช้ดังนี้

While (condition) statement

Condition  เงื่อนไขที่ว่าเป็นจริงถึงจะทำจะตรวจสอบทุกครัง้ที่แต่ละรอบของการทำงาน

Statement   จะทำตราบเท่าที่ condition เป็น จริง

โปรแกรมที่ 6-17 ตัวอย่างการใช้ while loop

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i;

5: while(i!=1) cin >> i;

6:

7: return 0;

8:}

Output

5

6

7

8

1

บรรทัดที่ 5: ของโปรแกรมนี้จะทำการรับค่าจาก Keyboard ไปเรื่อย จนกว่า ค่า i จะเท่ากับ 1 จึงหยุดโปรแกรม ถ้า i ไม่เท่ากับ 1 ก็จะทำไปเรื่อยๆ



 Loop While ที่มีหลาย Statement

รูปแบบ

While (condition) statement

 {

 statement 1

 statement 2

}



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

โปรแกรมที่ 6-18-1

Source code

1:int main()

2:{

3: int i,Mae;

4: while(Mae != 0)

5: {

6: cout << "Please Enter your number :";

7: cin >> Mae;

8: for(i=1;i<=12;i++)

9: {

10: cout << Mae << " * " << i << " = " << Mae*i;

11: cout << endl;

12:

13: }

14: }

15:

16: return 0;

17:}

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

0 * 1= 0

0 * 2= 0

0 * 3= 0

0 * 4= 0

0 * 5= 0

0 * 6= 0

0 * 7= 0

0 * 8= 0

0 * 9= 0

0 * 10= 0

0 * 11= 0

0 * 12= 0

 สาเหตุที่โปรแกรมจะยังไม่หยุดโปรแกรมจะอธิบาย ในส่วน อธิบาย Source code

อธิบาย Source code

บรรทัดที่ 4: while(Mae != 0) มีความหมายว่าจะทำงานวน loop ไปเรื่อยๆตราบเท่าที่ ตัวแปร Mae != 0 ซึ่ง Source code ในส่วนที่จะทำการ วน loop คือ Source code ที่อยู่ระหว่างบรรทัดที่ 5 และ 14

บรรทัดที่ 6 และ บรรทัดที่ 7:เป็นการให้ผู้ใช้ป้อนข้อมูลแม่ที่ต้องการ

บรรทัดที่ 8 ถึงบรรทัดที่ 13:เป็นการแสดงผลสูตรคูณของแม่ ที่ผู้ใช้ป้อนเข้ามา

 สาเหตุที่ทำไมผู้ใช้ป้อนข้อมูล เลข 0 แล้วโปรแกรมยังไม่หยุดทำงานเนื่องจาก Source code ในส่วนของการรับข้อมูลตัวแปร Mae จะอยู่ในบรรทัดที่ 7 ซึ่งในบรรทัดที่ 7 ตัวแปร Mae จะเท่ากับ 0 แล้ว แต่ยังมี Source code ที่เหลือที่โปรแกรมต้องทำงานสำหรับ loop นี้คือ บรรทัดที่ 8 ถึง 13 โปรแกรมก็เลยแสดงผลสูตรคูณแม่ 0 แล้วพอเริ่มรอบใหม่  loop while ก็จะไม่ทำงานแล้วเพราะว่า ค่าตัวแปร Mae != 0

 จะเห็นได้ว่าถ้าเรากำหนดให้ตัวแปร Mae != 0 ซึ่งจะทำให้เงื่อนไขใน condition เป็นเท็จ โปรแกรมก็จะยังทำงาน Statement ที่เหลืออยู่ใน loop จากนั้นในรอบต่อไปถึงค่อยออกจาก loop

 ในเมื่อเรารู้แล้วว่า ถึงแม้ว่าเราจะป้อนค่าของตัวแปร Mae ให้เท่ากับ 0 โปรแกรมก็ยังจะทำงาน Statement ที่เหลืออยู่ เพราะฉะนั้น เราอาจจะใช้ เขียน โปรแกรมให้รับค่าตัวแปร Mae ให้เป็น Statement สุดท้ายของ loop ถ้าเราเขียนอย่างนี้แล้วเวลาเราป้อนข้อมูลตัวแปร Mae เท่ากับ 0 โปรแกรมก็ไม่เหลือ Statement อื่นให้ทำงานอีกแล้ว และก็จะเริ่ม วน loop รอบใหม่เลยแต่พอจะทำงานรอบใหม่เงื่อนไข ใน condition ก็เป็น เท็จ โปรแกรมก็จะออกจาก loop

 ถ้าเราเขียนโปรแกรมให้รับค่าตัวแปร Mae เป็น Statement สุดท้ายของ loop while โปรแกรมก็จะทำการแสดงผลสูตรคูณก่อน ก่อนที่จะรับค่า เพราะฉะนั้นเราควรเขียน Statement  ที่อยู่นอก loop ที่แยกออกมาต่างหากในการรับค่าตัวแปร Mae ครั้งแรก หลังจากนั้น โปรแกรมก็จะทำงาน Statement ทีอยู่ใน loop แสดงสูตรคูณ จากนั้นก็จะใช้ Statement รับค่าตัวแปร Mae ใน  loop while

โปรแกรมที่ 6-18-2 ตัวอย่างการใช้  loop while

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i,Mae;

5: cout << "Please Enter your number :";

6: cin >> Mae;

7:

8: while(Mae != 0)

9: {

10:

11: for(i=1;i<=12;i++)

12: {

13: cout << Mae << " * " << i << " = " << Mae*i;

14: cout << endl;

15:

16: }

17: cout << "Please Enter your number :";

18: cin >> Mae;

19: }

20:

21: return 0;

22:}

Output จะได้อย่างที่ต้องการแล้วล่ะ

อธิบาย Source code

บรรทัดที่ 5 กับ บรรทัดที่ 6:เป็นการให้ผู้ใช้ป้อนข้อมูลตัวแปร Mae ในครั้งแรกซึ่ง Source code ในส่วนนี้ไม่อยู่ใน loop

บรรทัดที่ 8: while(Mae != 0) มีความหมายว่าจะทำตราบเท่าที่ตัวแปร Mae != 0 ซึ่ง Source code ส่วนที่จะทำอยู่ระหว่างบรรทัดที่ 9 ถึง บรรทัดที่19

บรรทัดที่ 11 ถึง บรรทัดที่ 16 :เป็นการแสดงผลสูตรคูณที่อยู่ใน loop while จะเห็นได้ว่าใน loop while เราแสดงผล สูตรคูณก่อนที่จะทำการรับค่าตัวแปร Mae ในบรรทัดที่ 17 และ 18 นี่คือสาเหตุที่ต้องมีบรรทัดที่ 5 และ 6 ในการรับค่าตัวแปร Mae ในรอบแรก

บรรทัดที่ 17 และบรรทัดที่ 18: เป็นการรับค่าตัวแปร Mae ถ้าหากผู้ใช้ป้อนเลข 0 โปรแกรมก็จะทำงาน Statement ที่เหลืออยู่ใน loop นี้ ซึ่งในที่นี้ ไม่มี Statement อะไรแล้ว เพราะว่า Statement รับค่าตัวแปร Mae เป็น Statement สุดท้ายของ  while loop เราก็จะไม่ต้องเห็นโปรแกรมทำการแสดงผล สูตรคูณแม่ 0 แล้วล่ะ แล้วพอโปรแกรมจะทำงาน Statement ใหม่ ก็จะทำการเช็คเงื่อนไขใน condition เนื่องจาก เงื่อนไขเป็นเท็จก็จะออกจาก loop และออกจาก โปรแกรม

loop do

 loop do เป็น การวน loop ที่จะทำงาน Statement ใน loop ก่อน 1 รอบถึงจะตรวจสอบเงื่อนไขใน condition ถ้าเป็นจริงก็จะทำรอบต่อๆไป ถ้าเป็น เท็จก็จะไม่ทำ

loop do มีรูปแบบดังนี้

 do

 Statement;

 while(condition);

โปรแกรมที่ 6-19 ตัวอย่างการใช้ do loop

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i =0;

5:

6: do

7: i++;

8: while(i<10);

9:

10: cout << i;

11: return 0;

12:}

Output

10

อธิบาย Source code

โปรแกรมนี้เป็นตัวอย่างการใช้ loop do ในการทำซ้ำในการเพิ่มค่าให้กับตัวแปร i

บรรทัดที่ 4:ประกาศตัวแปร i และยังกำหนดค่าให้เท่ากับ 0

บรรทัดที่ 6:มีความหมายว่า เป็นการใช้ loop do

บรรทัดที่ 8:มีความหมายว่า loop do จะทำงานตราบเท่าที่ค่าตัวแปร i < 10 โดยที่ Statement ของ loop do ในที่นี้คือ Statement ในบรรทัดที่ 7 คือการเพิ่มค่าให้กับตัวแปร i ครั้งละ 1 พอรอบที่ 10 ตัวแปร i มีค่าไม่น้อยกว่า 10 แล้วก็จะไม่ทำอีก

โปรแกรมที่ 6-20 ตัวอย่างการใช้ loop do

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i =0;

5:

6: do

7: i++;

8: while(i >10);

9:

10: cout << i;

11: return 0;

12:}

Output

1

อธิบาย Source code

โปรแกรมนี้คล้ายโปรแกรมที่ 6-19 มากแต่จะต่างกันก็ตรงที่เงื่อนไขของ loop do ในบรรทัดที่ 8 จะเปลี่ยนเป็น i > 10 ซึ่งในบรรทัดที่ 4 เราประกาศและกำหนดค่าตัวแปร i ให้เท่ากับ 0 เงื่อนไขใน condition ก็จะเป็นเท็จ แต่ loop do ก็จะทำงาน Statement ใน loop ก่อน 1 รอบ ถึงแม้เงื่อนไขจะเป็นเท็จ Statement ที่ทำงาน ก็คือการเพิ่มค่าให้กับตัวแปร i อีก 1 ซึ่งทำให้เราได้ Output เท่ากับ 1

loop do ที่มีหลาย Statement

 เราสามารถเขียน โปรแกรมโดยใช้ loop do ที่มีหลาย Statement ได้โดยมีรูปแบบดังนี้

 do

 {

 Statement;

 Statement;

 }

 while(condition);

โปรแกรมที่ 6-21 ตัวอย่างการใช้ loop do เขียนโปรแกรมสูตรคูณ

Source code

1:#include "iostream.h"

2:int main()

3:{

4: int i=1,Mae;

5:

6: cout << "Please Enter your number :";

7: cin >> Mae;

8: do

9: {

10: cout << Mae << " * " << i << " = " << Mae*i;

11: cout << endl;

12: i++;

13: }

14: while(i<13);

15:

16:

17: return 0;

18:}

Output ได้เหมือนโปรแกรมที่ 6-11

อธิบาย Source code

บรรทัดที่ 8:มีความหมายว่าเป็นการใช้ loop do

บรรทัดที่ 14:มีความหมยว่า Statement ใน loop do จะทำงาน ตราบเท่าที่เงื่อนไข i < 13 เป็นจริง

บรรทัดที่ 12:นี่คือ Statement ใน loop do โดย Statement นี้จะทำการเพิ่มค่าตัวแปร i ให้เพิ่มอีก 1 ในแต่ละรอบ

โปรแกรมที่ 6-22 โปรแกรมนี้จะมีการทำงานโดยรับข้อมูลตัวเลขจากผู้ใช้และจะแสดงรูปสามเหลี่ยมโดยใช้เครื่องหมาย *

ถ้าตัวเลขคือ 2 แสดงผล

*

**

ถ้าตัวเลขคือ 3 แสดงผล

*

**

***

ถ้าตัวเลขคือ 5 แสดงผล

*

**

***

****

*****

วิเคราะห์โจทย์แบบง่ายๆก่อน

 โปรแกรมต้องการแสดงผลในลักษณะนี้เราอาจใช้ loop do ที่ซ้อนกันโดยให้ loop แรกแสดง แถว และ loop ที่ซ้อนอยู่แสดงเครื่องหมาย * ในแต่ละคอลัมน์

 ในแต่ละแถวจำนวนคอลัมน์ที่ต้องแสดงจะมีจำนวนเท่ากับลำดับของแถว เช่นถ้าผู้ใช้ป้อนข้อมูลเลข 5

  12345

1*

2**

3***

4****

5*****

 จะเห็นได้ว่าถ้าเป็นแถวที่ 1 ก็แสดงเครื่องหมาย * 1ครั้ง ถ้าเป็นแถวที่ 5 ก็แสดงเครื่องหมาย * 5 ครั้ง เพราะฉะนั้นเราควรเขียนโปรแกรมให้ loop ที่ซ้อนอยู่ที่มีหน้าที่แสดงเครื่องหมาย * ให้วน loop เท่ากับ การทำงานใน loop แรก

Source code

1:#include"iostream.h"

2:int main()

3:{

4: int i=0,col,j=0;

5: cout << "Please enter number:";

6: cin >> col;

7: do

8: {

9:

10: i++;

11: j =0;

12: do

13: {

14: cout << "*";

15: j++;

16: }while(j < i);

17:

18: cout << endl;

19:

20: }

21: while(i < col);

22: return 0;

23:}

Output

Please enter number:3

*

**

***

อธิบาย Source code

บรรทัดที่ 7 ถึง บรรทัดที่ 21:เป็นการใช้ loop do ที่จะทำงานไปเรื่อยๆ ถ้าตัวแปร i ยังน้อยกว่าตัวแปร col อยู่โดยที่บรรทัดที่ 10 เราได้ทำการเพิ่มค่าให้กับตัวแปร i อีก 1 ในแต่ละรอบ ถ้าหากตัวแปร i ไม่น้อยกว่าตัวแปร col โปรแกรมก็ยังจะทำงาน Source code ใน loop อยู่ 1 รอบ เพราะเราใช้ loop do

บรรทัดที่ 12 ถึง บรรทัดที่ 16:เป็นการใช้ loop do ที่จำทำงานไปเรื่อยๆ ตราบเท่าที่ตัวแปร j น้อยกว่าตัวแปร i โดยที่ในแต่ละรอบเราจะทำการเพิ่มค่าให้กับตัวแปร j อีก 1 ด้วย และ loop นี้มีหน้าที่การทำงานคือแสดงเครื่องหมาย * ถ้าหากตัวแปร j ไม่น้อยกว่าตัวแปร i โปรแกรมก็ยังจะทำงาน Source code ใน loop อยู่ 1 รอบ เพราะเราใช้ loop do

 ในที่นี้เพื่อความเข้าใจง่ายเราจะเรียก loop do อันแรกว่า loop i

 และ เราจะเรียก loop do ที่ซ้อนอยู่ใน loop i ว่า loop j

 ถ้าตัวแปร col = 3

 loop i ก็จะทำงาน 3 รอบคือ 3 บรรทัด

 และใน loop i แต่ละรอบก็จะมี loop j ที่ทำงาน เท่ากับ ตัวแปร i

 ในรอบแรกตัวแปร i เป็น 1

 loop  j ก็จะทำงาน 1 รอบคือแสดงผล

 *

 ในรอบที่ 2 ตัวแปร i เป็น 2

 loop j ก็จะทำงาน 2 รอบคือแสดงผล

 **

 ในรอบที่ 3 ตัวแปร i เป็น 3

 loop j ก็จะทำงาน 3 รอบคือแสดงผล

  ***

เมื่อรวมกันแล้วก็จะได้ Output อย่างที่เราต้องการ

วันอาทิตย์ที่ 21 กรกฎาคม พ.ศ. 2556

เทคนิคเกี่ยวกับการใช้ if .... else


ไม่ควรใช้ if (not...) then ... else
ผมว่ามันตลกนะ ถ้าแบบมีคนสั่งว่า "ถ้าไม่มีป้ายบอกทางว่าเลี้ยวซ้ายผ่านตลอด ให้หยุดรอสัญญาณไฟ นอกเหนือจากนั้นแล้วให้เลี้ยวซ้ายผ่านไป" ..

คือมันเป็นการใช้ปฎิเสธซ้อนปฎิเสธน่ะครับ ถ้าเป็นคนปรกติพูดเราก็จะพูดกันว่า "ถ้ามีป้ายบอกว่าเลี้ยวซ้ายผ่านตลอดก็เลี้ยวซ้ายผ่านไป แต่ถ้าไม่มีให้หยุดรอสัญญาณไฟ" มากกว่าใช่ไหมครับ

เวลาเขียนโปรแกรมก็เหมือนกัน ผมคิดว่าเราไม่ควรใช้ปฎิเสธซ้อนปฎิเสธครับ อย่างโค๊ดข้างล่างนี่
if(!recordAvailable())
    createNew();
else
    updatePresent();
เวลาเขียนก็ควรเป็นแบบนี้มากกว่า
if(recordAvailable())
    updatePresent();
else
    createNew();
ผมว่ามันอ่านง่ายกว่านะ

ใช้ if(not success) เพื่อออกจากโปรแกรม แทนที่จะใช้ if(sucess) แล้วทำต่อ
หลาย ๆ ฟังก์ชั่นจะคืนค่าเป็น error code กลับมา ถ้าเกิดว่าเราเขียนว่า if (success) แล้วทำต่อเนี่ยมันจะกลายเป็นการสร้าง  statement ย่อย ๆ เพิ่ม พอยิ่งพ่วงกันยาว ๆ แล้วมันก็จะยิ่งเพิ่มระดับของ statement  ไปเรื่อย ๆ จะทำให้โค๊ดอ่านยากครับ

อย่างเช่นโค๊ดแบบนี้
int init()
{
 if(initVideo() == SUCCESS)
 {
  if(initAudio() == SUCCESS)
  {
   if(initDatabase == SUCCESS)
   {
    return SUCCESS;
   }
  }
 }

 cleanUp();
 return FAILED;
}
เกิดมีสัก 10 ฟังก์ชั่นนี่ตายเลย แถมเขียนผิดไปสักระดับหนึ่งนี่ไล่หากันไปเถอะครับ เขียนแบบนี้แทนอ่านง่ายกว่าเยอะครับ
int init()
{
 if(initVideo() == FAILED)
 {
  cleanUp();
  return FAILED;
 }
 if(initAudio() == FAILED)
 {
  cleanUp();
  return FAILED;
 }
 if(initDatabase == FAILED)
 {
  cleanUp();
  return FAILED;
 }

 return SUCCESS;
}
credit: Wutipong Wongsakuldej

วันอังคารที่ 8 มกราคม พ.ศ. 2556

บทที่ 5 การเลือกทำ


การเลือกทำ

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

 1.Add
 2.Minus
 3.Multiple
 4.Divide
 Please Enter Choice :_ 
ถ้า เลือก 1 จะเป็นการบวก
ถ้า เลือก 2 จะเป็นการลบ
ถ้า เลือก 3 จะเป็นการคูณ
ถ้า เลือก 4 จะเป็นการหาร

หรือเลือกว่า จะ Save หรือ ไม่ Save ข้อมูล
 Save(Y/N)
ถ้า เลือก Y จะเป็นการ Save ข้อมูบ
ถ้า เลือก N จะไม่ Save

การเลือกทำโดยใช้ if
 if ความหมายตามพจนานุกรมคือ ถ้า
  ในC++ เราจะใช้ if ในการเลือกทำการเลือกทำแบบ if จะเป็นการทดสอบเงื่อนไขถ้าเป็นจริงจะทำ Statement ต่อจาก if จะทำงาน ถ้าเงื่อนไขเป็นเท็จ Statement ต่อจาก if จะไม่ทำ
มีรูปแบบ
 if(<condition>) Statement1;

codition คือเงื่อนไขหรือในการเปรียบเทียบมีอยู่ 2 ค่าคือ
 1.จริง
 2.ไม่จริง,เท็จ(ทั้ง 2 คำนี้มีความหมายเดียวกัน)
Statement คือคำสั่งที่จะทำ
ตัวอย่างรูปแบบ if
 if(<condition>) Statement1;
 Statement 2;
ถ้าเงื่อนไขใน condition เป็นจริง จะทำงาน Statement 1 แล้วต่อด้วย Statement 2
  เป็นไม่จริง จะทำงาน Statement 2 เลย จะไม่ทำงาน Statement1
ตัวอย่าง condition 
 เช่น 5 > 10 ค่าที่ให้จะเป็น ไม่จริง
  2 < 8 ค่าที่ให้จะเป็น จริง
ตัวอย่างโปรแกรมที่ 5-1
โปรแกรมนี้จะทำการรับค่าและตรวจสอบว่าค่าที่รับเข้ามาว่าเป็นจำนวนเต็มลบหรือไม่ถ้าไม่เป็นก็จบโปรแกรมถ้าเป็นก็แสดงผลคำว่า Minus
Source code
1:#include "iostream.h"
2:int main()
3:{
4:int i;
5:cout << "Enter Number :";
6:cin >> i;
7:if(i<0) cout << "Minus" ;
8:return 0;
9:}
Output
ลองรันครั้งแรกค่าที่ใส่คือ 9
Enter Number :-9
Minus
ลองรันครั้งที่ 2 ค่าที่ใส่คือ 25
Enter Number :25

อธิบาย Source code
บรรทัดที่ 6: จะเป็นการรับข้อมูลมาเก็บไว้ที่ตัวแปร i
บรรทัดที่ 7: จะเป็นการตรวจสอบเงื่อนไขว่าน้อยกว่า 0 จริงรึเปล่า
ถ้าน้อยกว่าจริงให้แสดงผลคำว่า “Minus” แล้วหลังจากที่แสดงผลคำว่า Minus เสร็จ โปรแกรมก็จะไปทำงาน
ที่บรรทัดที่ 8
ถ้าน้อยกว่าไม่จริง หรือ ไม่น้อยกว่า ก็ไม่ต้องทำให้ไปทำบรรทัดที่ 8 เลย
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 การใช้ if ไม่ต้องมีเครื่องหมาย ; หลังcondition
เช่นในโปรแกรมที่ 5-1
 if(i<0) cout << “Negative”;
เราไม่ต้องเขียนแบบนี้
 if(i<0);cout << “Negative”;
ถ้าเขียนแบบนี้ ไม่ว่าค่า i จะเป็นเท่าไหร่ Statement cout << “Negative”; ก็จะทำงาน เพราะว่ารูปแบบของ if ถ้าเขียนให้ดูง่ายหน่อยคือ
 if (condition) Statement1 ;
จะเห็นได้ว่าเรามีเนือที่ ระหว่าง condition กับ เครื่งอหมาย ; ไว้ใส่ Statement
ถ้าเราเขียน
 if(condition) ; Statement1;
Compiler จะมองดูว่าไม่เห็นมี Statement อะไรให้ทำเลย เพาะเราปล่อยให้ เนื้อที่ ระหว่างcondition กับเครือ่งหมาย ;เป็นว่างๆ และ Compiler จะมอง Statement1 ว่าเป็นStatement ที่อยู่หลังจาก if เพราะว่าเรามีเนื้อที่ไว้ใส่ Statement ระหว่าง condition กับเครื่องหมาย ; แต่เรากับไม่ยอมใส่ ไปใส่ Statement หลังเครื่องหมาย; แทน ในกรณีที่เงื่อนไขใน condition เป็นจริงหรือไม่จริง Compiler ก็จะไม่มีอะไรให้ทำเพราะเราไม่ได้ใส่Statement หลัง condition แต่เราไปใส่ หลังเครื่องหมาย ; แทน
 นี่เป็น 1 ในข้อผิดพลาดสำหรับคนที่เพิ่งเริ่มเรียน ภาษา C++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
การใช้ if ที่มีหลาย Statement
 เราสามารถใช้ if ที่มีหลาย Statement ได้ โดยที่ต้องมีวงเล็บปีกกาแล้วเราก็ใส่Statementที่ต้องการให้ทำงานอยู่ใน วงเล็บ ปีกกานั้น ถ้าเงื่อนไขเป็นจริง Statement ในวงเล็บปีกกาก็จะทำงาน ถ้าไม่จริงก็จะไม่ทำงานแล้ว โปรแกรมก็จะไปทำงานต่อหลังจาก block ของ วงเล็บปีกกานั้น
การใช้ if ที่มีหลาย Statement มีรูปแบบ
 if(<condition>)
{
Statement 1;
Statement 2;
 }
Statement3;
ถ้าหากเงื่อนไขใน condition เป็นจริง จะทำ งาน Statement 1 ,Statement 2 และจะออกไปทำงาน Statement 3
ถ้าหากเงื่อนไขใน condition เป็นไม่จริง จะไม่ทำงาน Statement1 และ Statement 2 จะข้ามไปทำงาน Statement 3 เลย
ตัวอย่างโปรแกรมที่ 5-2
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int i;
5: cout << "Enter number :";
6: cin >> i;
7: if(i>10)
8: {
9: cout << "i more than 10" << endl;
10: cout << "i = " << i;
11: }
12:
13: return 0;
14:}
Output
Enter number :65
i more than 10
i =65

Enter number :2
อธิบาย Source code
บรรทัดที่ 6:เป็นการรับข้อมูลทางคีย์บอร์ดมาเก็บไว้ที่ตัวแปร i
บรรทัดที่ 7:เป็นการเช็คเงื่อนไขว่า ตัวแปร i น้อยกว่า 10 จริงหรือเปล่าถ้าจริง โปรแกรมจะไปทำงานที่ Statement ที่อยู่ในวงเล็บปีกกา นั่นคือ บรรทัดที่ 9 กับ 10
 cout << "i more than 10" << endl;
 cout << "i = " << i;
2 Statement นี้อยู่ในวงเล็บปีกกา ก็จะทำงานเมื่อเงื่อนไขเป็นจริง ในครั้ง แรกที่เรารันเราลองใส่ข้อมูลเลข 65
ซึ่งพอโปรแกรมเช็คเงื่อนไขว่า i > 10 ปรากฎว่าเป็นจริง ก็จะทำงานบรรทัดที่ 9 กับ 10 หลังจากทำบรรทัดที่ 9 และ 10 เสร็จแล้วก็จะไปทำงาน Statement ที่ต่อจากวงเล็บปีกกาซึ่งก็คือบรรทัดที่ 13 
พอครั้งที่ 2 ที่เรารัน เราใส่ข้อมูลเป็นเลข 2 เมื่อโปรแกรมทำงาน แล้วพอเช็คเงื่อนไขแล้วปรากฎว่าไม่จริงก็จะไม่ทำบรรทัดที่ 9 และ 10 แต่จะไปทำ Statement ที่อยู่ต่อจากวงเล็บปีกกาก็คือบรรทัดที่ 13

โอเปอเรเตอร์เปรียบเทียบ
 ก่อนที่เราจะกล่าวถึงการเลือกทำในส่วนต่อไปเราควรมาศึกษาเรื่องโอเปอเรเตอร์เปรียบเทียบก่อน
 โอเปอเรเตอร์เปรียบเทียบเอาไว้ใช้เปรียบเทียบนิพจน์ทางคณิตศาสตร์ว่าเป็นจริงหรือเท็จ
ถ้านิพจน์เป็นจริง จะคืนค่าที่ไม่ใช่ 0 เช่น 1  แบบนี้จะถือว่าเป็น true
ถ้านิพจน์เป็นเท็จจะคืนค่า 0 เท่านั้น   แบบนี้จะถือว่าเป็น false
โดยมีดังนี้
 โอเปอเรเตอร์ ความหมาย
 > มากกว่า
 < น้อยกว่า
 >= มากกว่าหรือเท่ากับ
 <= น้อยกว่าหรือเท่ากับ
 == เท่ากับ
 != ไม่เท่ากับ
ตัวอย่างค่าที่ได้จาก โอเปอเรเตอร์เปรียบเทียบ
 นิพจน์ ค่าที่ได้
 5 > 7 false
 5 < 7 true
 5 <= 7  true
5 >= 7  false
5 == 7 false
5 != 7 true
โปรแกรมที่ 5-3 ตัวอย่างการใช้ โอเปอเรเตอร์เปรียบเทียบ
Source code
1:#include"iostream.h"
2:int main()
3:{
4: cout << "10 < 50  = " << (10 < 50) << endl;
5: cout << "10 > 50  = " << (10 > 50) << endl;
6: cout << "10 <= 50 = " << (10 <= 50) << endl;
7: cout << "10 >= 50 = " << (10 >= 50) << endl;
8: cout << "10 == 50 = " << (10 == 50) << endl;
9: cout << "10 != 50 = " << (10 != 50) << endl;
10: cout << "50 <= 50 = " << (50 <= 50) << endl;
11: cout << "50 >= 50 = " << (50 >= 50) << endl;
12: return 0;
11:}
Output
10 < 50 = 1
10 > 50 = 0
10 <= 50 = 1
10 >= 50 = 0
10 == 50 =0
10 != 50 =1
50 <= 50 = 1
50 >= 50 = 1
อธิบาย Source code
บรรทัดที่ 4:เป็นการสั่งให้พิมพ์ข้อความว่า “10 < 50 = “ แล้วก็ต่อด้วย ค่าที่ได้จาก โอเปอเรเตอร์เปรียบเทียบ ของ 10 < 50 ซึ่งค่าที่ได้คือ 1 ถือว่าเป็น true หรือเป็น จริง เพราะในทางคณิตศาสตร์จะถือว่า 10 น้อยกว่า 50

บรรทัดที่ 5:เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 10 > 50 ซึ่งค่าที่ได้คือ 0ถือว่าเป็น false หรือว่าเป็นเท็จ เพราะว่าในทางคณิตศาสตร์ 10 ต้องน้อยกว่า 50

บรรทัดที่ 6: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 10 <= 50 ซึ่งค่าที่ได้คือ 1ถือว่าเป็น true หรือว่าเป็นจริง เพราะว่าในทางคณิตศาสตร์ 10 ต้องน้อยกว่า 50 โอเปอเรเตอร์ <= มีความหมายว่าน้อยกว่าหรือเท่ากับ คือ น้อยกว่าก็ถือว่าเป็นจริง เท่ากับก็ถือว่าเป็นจริง กรณี ของ 10 คือน้อยกว่า

บรรทัดที่ 7: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 10 >= 50 ซึ่งค่าที่ได้คือ 0ถือว่าเป็น false หรือว่าเป็นเท็จ เพราะว่าในทางคณิตศาสตร์ 10 ต้องน้อยกว่า 50 โอเปอเรเตอร์ >= มีความหมายว่ามากกว่าหรือเท่ากับ คือ มากกว่าก็ถือว่าเป็นจริง เท่ากับก็ถือว่าเป็นจริง กรณี ของ 10 ไม่เป็นทั้ง 2 แบบเลยคือไม่น้อยกว่า 50 หรือ ไม่เท่ากับ 50 ด้วย เลยเป็นเท็จ

บรรทัดที่ 8: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 10 == 50 ซึ่งค่าที่ได้คือ 0ถือว่าเป็น false หรือว่าเป็นเท็จ เพราะว่าในทางคณิตศาสตร์ 10 ไม่เท่ากับ 50

บรรทัดที่ 9: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 10 != 50 ซึ่งค่าที่ได้คือ 1ถือว่าเป็น true หรือว่าเป็นจริง เพราะว่าในทางคณิตศาสตร์ 10 ไม่เท่ากับ 50

บรรทัดที่ 10: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 50 <= 50 ซึ่งค่าที่ได้คือ1 ถือว่าเป็น true หรือว่าเป็นจริง เพราะว่าในทางคณิตศาสตร์ 50 เท่ากับ 50 ซึ่งตรงกับเงื่อนไขอย่างใดอย่างหนึ่งของ โอเปอเรเตอร์เปรียบเทียบ <= คือ น้อยกว่าก็ถือว่าจริง หรือ เท่ากับก็ถือว่าจริง

บรรทัดที่ 11: เป็นการสั่งให้แสดงค่าที่ได้จากการเปรียบเทียบของ 50 >= 50 ซึ่งค่าที่ได้คือ1 ถือว่าเป็น true หรือว่าเป็นจริง เพราะว่าในทางคณิตศาสตร์ 50 เท่ากับ 50 ซึ่งตรงกับเงื่อนไขอย่างใดอย่างหนึ่งของ โอเปอเรเตอร์เปรียบเทียบ >= คือ มากกว่าก็ถือว่าจริง หรือ เท่ากับก็ถือว่าจริง
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
โอเปอเรเตอร์เปรียบเทียบเท่ากับ
ให้ใช้สัญลักษณ์ ==
ไม่ใช่ = ถ้าหากเราใช้สัญลักษณะ = จะเป็นการใช้โอเปอเรเตอร์กำหนดค่า
ซึ่งนี่เป็น 1 ในบรรดาข้อผิดพลาดที่มักจะเกิดขึ้นสำหรับผู้เริ่มเขียนโปรแกรมภาษา C++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
โอเปอเรเตอร์ตรรกะ
 นอกจากโอเปอเรเตอร์เปรียบเทียบแล้ว ยังมี โอเปอเรเตอร์ ตรรกะ อีก โดยที่โอเปอเรเตอร์ ตรรกะ จะทำการเชื่อม นิพจน์ที่ได้จากโอเปอเรเตอร์เปรียบเทียบ เช่น

นิพจน์ A 5 < 7  เป็นจริง 
นิพจน์ B 1==5 เป็นเท็จ
เมื่อ เราเชื่อม A กับ B เข้าด้วยกันจะได้จริงหรือ เท็จขึ้นอยู่กับ โอเปอเรเตอร์ ตรรกะ
 โอเปอเรเตอร์ตรรกะมีดังนี้
 โอเปอเรเตอร์ ความหมาย
 &&  และ(And)
 || หรือ(or)
 ! ไม่(Not)
โดยที่ โอเปอเรเตอร์ &&,|| จะถือว่าเป็น Binary โอเปอเรเตอร์ เพราะว่าใช้กับ 2 นิพจน์ เช่นA && B
แต่ โอเปอเรเตอร์ ! จะถือว่าเป็น Unary โอเปอเรเตอร์เพราะใช้กับนิพจน์เดียว เช่น !A
โอเปอเรเตอร์ &&
 โอเปอเรเตอร์ && ใน C++ จะมีความหมายตรงกับภาษาไทยว่า และ ซึ่งหมายถึงว่าต้องเอาด้วยเช่น A และ B มีความหมายว่าต้องเอา A,B ทั้ง 2 ตัว มีแค่ตัวไหนตัวหนึ่งไม่ได้ หรือ ไม่มีทั้ง 2 ตัวก็ไม่ได้
 ในกรณีที่เราใช้ตัวดำเนินการ && กับนิพจน์ 2 นิพจน์
 เช่น A && B
 ค่าจะเป็นจริงได้ต่อเมื่อ A และ B เป็น จริง ถ้า นอกเหนือจากนี้ให้ถือว่าเป็นเท็จ
 ตัวอย่างการใช้โอเปอเรเตอร์ && ค่าที่ได้
 True && True   True
 True && False  False
 False && True  False
 False && False  False
โอเปอเรเตอร์ ||
 โอเปอเรเตอร์ || ใน C++ตรงกับคำในภาษาไทยว่า หรือ เช่น A หรือ B มีความหมายว่า เอาA ,B ตัวไหนตัวหนึ่งก็ได้ ทั้ง 2 ตัวก็ได้ แต่ถ้าไม่มีทั้ง 2 ตัวเลยจะถือว่าไม่ได้
 ในกรณีที่เราใช้ตัวดำเนินการ || กับนิพจน์ 2 นิพจน์
 เช่น A || B
 ค่าจะเป็นจริงได้ต่อเมื่อ A หรือ B ตัวไหนตัวหนึ่งเป็น จริง ถ้า ทั้ง 2 ตัว เป็นจริงก็จะถือว่าเป็นจริง A|| B
จะเป็นเท็จได้ต่อเมื่อ A เป็น เท็จ B เป็นเท็จ
 ตัวอย่างการใช้โอเปอเรเตอร์ || ค่าที่ได้
 True || True   True
 True || False  True
 False || True  True
 False || False  False
โอเปอเรเตอร์ !
 โอเปอเรเตอร์ ! ตรงกับคำในภาษาไทยว่า ไม่ ใช้เปลี่ยนค่าของ นิพจน์ให้เป็นตรงกันข้าม เช่น ถ้า A เป็น
True  แล้ว !A จะเป็น False ถ้า A เป็น False !A ก็จะเป็น True

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
โอเปอเรเตอร์ ||(or) ไม่ใช่ตัวแอล ถ้าเราจะพิมพ์ตัวดำเนินการ or แล้วเราหาตำแหน่งบนคีย์บอร์ดไม่เจอให้เราหาตรงบริเวณด้านล่างปุ่ม enter และอยู่ทางด้านขวาของ shift โดยที่ตัวดำเนินการ || จะอยู่คีย์เดียวกับ backslash(\) ซึ่งปกติจะอยู่ด้านล่างของ enter หรือไม่ก็อยู่ด้านบนต่อจากปุ่ม backspace  ขึ้นอยู่กับประเภทของ คีย์บอร์ดที่ใช้ ถ้าเราพิมพ์ตัวโอเปอเรเตอร์ || โดยที่ยังไม่ได้เปลี่ยนเป็นภาษาอังกฤษ จะเท่ากับ ฅฅ ในภาษาไทย
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
โปรแกรมที่ 5-4 ตัวอย่างการใช้โอเปอเรเตอร์ตรรกะ
Source code
1:#include"iostream.h"
2:int main()
3:{
4: cout << "(10 > 50 || 10 < 50) =";
5: cout << (10 > 50 || 10 < 50);
6: cout << endl;
7:
8: cout << "(10 > 50 && 10 < 50) =";
9: cout << (10 > 50 && 10 < 50);
10: cout << endl;
11:
12: cout << "!(10 > 50 && 10 < 50) =";
13: cout << !(10 > 50 && 10 < 50);
14: cout << endl;
15:
16: cout << "(!(10 > 50) && 10 < 50) =";
17: cout << (!(10 > 50) && 10 < 50);
18: cout << endl;
20:
21: cout << "(!(10 > 50) && !(10 < 50)) =";
22: cout << (!(10 > 50) && !(10 < 50));
23: cout << endl;
24:
25: cout << "(!(!(10 > 50) && !(10 < 50)) || 10 < 50) =";
26: cout << (!(!(10 > 50) && !(10 < 50)) || 10 < 50);
27: cout << endl;
28: return 0;
29:}
Output
(10 > 50 || 10 < 50) = 1
(10 > 50 || 10 < 50) = 0
!( > 50 || 10 < 50) = 1
(!(10 > 50) || 10 < 50) = 1
(!(10 > 50) || !(10 < 50)) = 0
(!(!(10 > 50) || !(10 < 50)) || 10 < 50) = 1
อธิบาย Source code
บรรทัดที่ 4:เป็นการพิมพ์ข้อความว่า "(10 > 50 || 10 < 50) =” แล้วต่อด้วยผลที่ได้จาก(10 > 50 || 10 < 50) คำตอบที่ได้คือ 1 (True) สาเหตุที่ได้ True เพราะว่า ในที่นี้มี 2นิพจน์คือ
 10 > 50 นิพจน์นี้เป็น 0 (False)
 10 < 50  นิพจน์นี้เป็น 1 (True)
เมื่อเราใช้ โอเปอเรเตอร์ || เชื่อม 2 นิพจน์นี้ด้วยกัน จึงได้ 1(True) เนื่องจากว่า โอเปอเรเตอร์ || ที่ใช้ในการเชื่อมนิพจน์จะถือว่านิพจน์ใดนิพจน์หนึ่งเป็น 1(True) ค่าที่ได้ก็เป็น True
บรรทัดที่ 9:เป็นการพิมพ์ค่าของผลที่ได้จาก (10 > 50 && 10 < 50) ซึ่งคำตอบที่ได้คือ 0 (False) สาเหตุที่ได้ False เพราะว่า ในที่นี้ มี 2 นิพจน์คือ
 10 > 50 นิพจน์นี้เป็น 0 (False)
 10 < 50  นิพจน์นี้เป็น 1 (True)
เมื่อเราใช้ โอเปอเรเตอร์ && เชื่อม 2 นิพจน์นี้ด้วยกัน จึงได้ 0(False) เนื่องจากว่า โอเปอเรเตอร์ && ที่ใช้ในการเชื่อมนิพจน์จะถือว่าถ้านิพจน์ใดนิพจน์หนึ่งเป็น 0(False) ค่าที่ได้ก็เป็น0(False)
บรรทัดที่ 13:เป็นการสั่งให้แสดงผลค่าของ !(10 > 50 && 10 < 50) ค่าที่ได้เป็น 1(True)เนื่องจากในที่นี้มี 2 นิพจน์ ซึ่ง 2 นิพจน์ที่ว่านั่นจะหมือนกับในบรรทัดที่ 9 คือ 10 > 50 && 10 < 50 คำตอบที่ได้คือ 0(False) แล้วพอเราใช้ โอเปอเรเตอร์ ! ค่าที่ได้ก็จะเป็นตรงกันข้าม คือ เป็น 1(True)
บรรทัดที่ 17: เป็นการสั่งให้แสดงผลค่าของ  (!(10 > 50) && 10 < 50) ซึ่งคำตอบที่ได้คือ1(True) สาเหตุที่ได้ True เพราะว่า ในที่นี้มี 2 นิพจน์คือ
 !(10 > 50) นิพจน์นี้เป็น 1 (True)
 10 < 50 นิพจน์นี้เป็น 1 (True)
 สาเหตุที่นิพจน์แรกเป็น 1(True) เพราะว่า 
 10 > 50 ต้องเป็น 0(False) แต่พอเราใช้ โอเปอเรเตอร์ ! ก็จะเปลี่ยนเป็นตรงกันข้ามคือเป็น 1(True)
พอทั้ง 2 นิพจน์เป็น 1(True) แล้วพอเราใช้ โอเปอเรเตอร์ && เชื่อมกันก็จะถือว่าเป็น 1(True)
บรรทัดที่ 22: เป็นการสั่งให้แสดงผลค่าของ  (!(10 > 50) && !(10 < 50)) คำตอบที่ได้คือ0(False) สาเหตุที่คำตอบที่ได้คือ 0(False) เพราะว่าในที่นี้มี 2 นิพจน์
 !(10 > 50) นิพจน์นี้เป็น 1 (True)
 !(10 < 50) นิพจน์นี้เป็น 0 (False)
นิพน์ที่ 2 เป็น 0(False) เมื่อเราใช้ โอเปอเรเตอร์ && ในการเชื่อมทั้ง 2 นิพจน์เข้าด้วยกันจึงได้ 0(False)
บรรทัดที่ 25: เป็นการสั่งให้แสดงผลค่าของ  (!(!(10 > 50) && !(10 < 50)) || 10 < 50)คำตอบที่ได้คือ 1(True)
ในที่นี้จะมีการใช้โอเปอเรเตอร์ Binary  2 ครั้ง คือ
ครั้งแรก
 !(!(10 > 50) && !(10 < 50)) นิพจน์นี้เป็น 1(True)
สาเหตุที่นิพจน์นี้เป็น 1(True) เพราะว่า !(10 > 50) && !(10 < 50) เป็นนิพจน์ในบรรทัดที่22 ได้ 0(False) แล้วพอเราใช้ โอเปอเรเตอร์ ! ค่าที่ได้ก็จะเปลี่ยนไปเป็นตรงกันข้ามคือ1(True)
คร้งที่ 2 จะมีค่าเท่ากับ
 1(True) || 10 < 50  นิพจน์นี้เป็น 1(True) นี่คือคำตอบ
สาเหตุที่ทำไม การใช้ โอเปอเรเตอร์ Binary ครั้งที่ 2 ถึงมีค่าเท่ากับ 1(True) || 10 < 50เนื่องจากว่าในครั้งแรกเราได้ใช้ในการหาค่า !(!(10 > 50) && !(10 < 50)) แล้วและได้1(True) เพราะฉะนั้นเวลานำไปหาค่ากับ นิพจน์อื่นอีกให้เรานำค่าที่ได้ไป หาค่าได้เลย ในที่นี้ ได้ 1(True) เพราะว่า นิพจน์ทั้ง 2 ได้ 1(True) และเมื่อเรานำไปใช้กับโอเปอเรเตอร์ || คำตอบที่ก็คือ 1(True)

โปรแกรมที่ 5-5 ตัวอย่างการใช้ if กับโอเปอเรเตอร์ตรรกกะร่วมกับโอเปอเรเตอร์ความสัมพันธ์
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int A,B;
5: cout << "Enter number1 :";
6: cin >> A;
7: cout << "Enter number2 :";
8: cin >> B;
9: if(A<0 && B<0)
10: cout << "Both A and B is Nagative";
11:
12:
13: return 0;
14:}
Output
Output นี้เราจะลองใส่ค่า 3 คร้ง โดยที่ครั้งแรกเท่ากับ-9,5
Enter number1 :-9
Enter number2 :-5
Both A and B is Nagative
หลังจากที่รับค่าตัวแปรทั้ง 2 ตัว โปรแกรมจะแสดงข้อความ Both A and B is Nagative
ลองรันใหม่และลองใส่ค่าเท่ากับ 25,60
Enter number1 :25
Enter number2 :60
หลังจากใส่ค่าเสร็จก็จบโปรแกรม
ลองรันใหม่และลองใส่ค่าเท่ากับ -9,5

Enter number1 :-9
Enter number2 :5
หลังจากใส่ค่าเสร็จก็จบโปรแกรม
อธิบาย Source code
บรรทัดที่ 4 ถึง 8:เป็นการประกาศตัวแปร A และ B และให้รับค่าจากทางคีย์บอร์ด
บรรทัดที่ 9 :เป็นการใช้ if เช็คเงื่อนไข A<0 && B<0 ในที่นี้มี 2 นิพจน์คือ
 A < 0
 B < 0
โดยใช้โอเปอเรเตอร์ && ในการเชื่อมทั้ง 2 นิพจน์ เพราะฉะนั้นค่าจะเป็นจริงได้ต่อเมื่อทั้ง 2นิพจน์นี้เป็น จริง เมื่อเรารันครั้งแรกเราใส่ค่า A ให้เท่ากับ –9 และค่า B = -5
เมื่อโปรแกรมทำงานจนถึงบรรทัดที่ 9 และทำการเช็คเงื่อนไขปรากฎว่าเป็นจริงคือ
 A < 0 ในที่นี้มีความหมายเท่ากับ -9 < 0
B < 0 ในที่นี้มีความหมายเท่ากับ -5 < 0
นิพจน์ทั้ง 2 ตัวนี้เป็นจริง แล้วเมื่อเราทำการใช้โอเปอเรเตอร์ && ในการเชื่อมทั้ง 2 นิพจน์ ค่าที่ได้ก็จะเป็นจริงโปรแกรมจึงไปทำงานที่บรรทัดที่ 10 ซึ่งเป็นการพิมพ์คำว่า Both A and B is Nagative หลังจากนั้นจึงไปทำงานที่ Statement ที่ต่อจากนี้คือ บรรทัดที่ 13 เป็นการจบโปรแกรม
แต่เมื่อเรารันครั้งที่ 2 และ ครั้งที่ 3 ปรากฎว่า โปรแกรมไม่ได้ทำงานที่ บรรทัดที่ 10 เนื่องจากว่า เงื่อนไขที่โปรแกรมเช็คได้ไม่เป็นจริง
การใช้ else
 else ความหมายตามพจนานุกรมแปลว่า อื่นๆ, นอกจากนี้
ใน C++ else จะใช้ร่วมกับ if ไม่สามารถใช้เดี่ยวๆได้ เราสามารถใช้ else ร่วมกับ if ได้โดยมีรูปแบบดังนี้
 if (<condition>) Statement;
 else Statement;
 โดยที่หากเงื่อนไขใน condition เป็นจริง ก็จะทำ Statement ที่อยู่หลังจาก คอนดิชั่น เงื่อนไขใน condition ไม่เป็นจริง Statement ที่อยู่ต่อจาก else ก็จะทำต่องาน

โปรแกรมที่ 5-6 แสดงตัวอย่างการใช้ else
Source code
1:#include"iostream.h"
2:int main()
3:{
4: if(5 > 10)cout << "5 less than 10";
5: else cout << "5 not less than 10";
6: return 0;
7:}
Output
5 not less than 10
อธิบาย Source code
บรรทัดที่ 4:if(5 < 10)cout << “5 less than 10”; มีความหมายว่าใช้เช็คเงื่อนไขว่า 5 < 10 ถ้าเป็นจริงจะทำงาน Statement ต่อมาคือ cout << “5 less than 10”; ซึ่งในกรณีนี้ไม่เป็นจริง Output ที่ได้จึงแสดงข้อความว่า 5 not less than 10 ถ้าหากเงื่อนไขของ if เป็นจริง Compiler จะทำงาน Statement cout << “5 less than 10”;จากนั้นจึงไปทำงานบรรทัดที่ 6 สาเหตุที่ไม่ทำงานบรรทัดที่ 5 เนื่องจาก เมื่อ Compiler เห็น else แล้วก็จะข้ามการทำงาน Statement ที่อยู่หลัง else ไป
บรรทัดที่ 5:else cout <<"5 not less than 10";  else อยู่ต่อจาก if  ในบรรทัดที่ 4 ในที่นี้ถ้าหาก เงื่อนไขในบรรทัดที่ 4 ไม่เป็นจริง Statement ที่อยู่ต่อจาก else ก็จะทำงานในที่นี้เงื่อนไขในบรรทัดที่ 4 ไม่เป็นจริง Statement cout <<"5 less than 10";ในบรรทัดที่ 4 ที่อยู่ต่อจาก Condition ก็จะไม่ทำงาน จะมาทำงาน Statement cout <<"5 not less than 10"; ในบรรทัดที่ 5 ที่อยู่ต่อจากหลัง else
การใช้ else ที่มีหลาย Statement
 เราสามารถใช้ else ที่มีหลาย Statement ได้โดยมีรูปแบบดังนี้
 if (<condition>) Statement1;
 else
{
Statement2;
Statement3;
Statement4;
}
ถ้าเงื่อนไขใน condition เป็นจริงจะทำงาน Statement1
  เป็นไม่จริงจะทำงาน Statement 2, Statement 3, Statement 4
 โดยที่ Statement ที่อยู่ในวงเล็บปีกกาจะทำงานถ้าหากเงื่อนไขใน condition ไม่เป็นจริง หรือ เป็นเท็จ
นอกจากนี้การใช้ else ที่มีหลาย Statement ยังมีรูปแบบนี้ได้ด้วย
 if (<condition>)
{
Statement1;
Statement2;
Statement3;
}
 else
{
Statement4;
Statement5;
Statement6;
}
ในกรณีนี้ จะมีเป็นการใช้ทั้ง if และ else หลาย Statement
ถ้าเงื่อนไขใน condition เป็นจริงจะทำงาน Statement1, Statement2, Statement3
  เป็นไม่จริง Statement4, Statement5, Statement6

การใช้ if ขั้น advanced
 การใช้ if ที่ซ้อนกัน
 เราสามารถใช้ if ที่ซ้อนกันได้เช่น ในโปรแกรมที่มีลักษณะการทำงาน เช่น ที่ 2 เงื่อนไขที่ต้องการเช็ค โดยที่ให้เช็คเงื่อนไขแรกก่อนถ้าเป็นจริงก็ให้ไปเช็คเงื่อนไขที่ 2 ถ้าเป็นจริงก็จะทำงานอะไรซักอย่าง แต่ถ้าเงื่อนไขแรกไม่เป็นจริงก็ไม่ต้องไปเช็คเงื่อนไขที่ 2 และให้ข้ามสิ่งที่จะทำถ้าเงื่อนไขที่ 2 เป็นจริงไป
ตัวอย่างรูปแบบการใช้ if ที่ซ้อนกัน
 if (<condition>1)
{
 if (<condition>2) Statement;

 }
 Statement 2;
ตัวอย่างอีกแบบหนึ่ง
 if (<condition>1)
if (<condition>2)
 if(<condition>3) Statement 1;
 Statement 2;
ถ้าเงื่อนไขใน condition 1 เป็นจริง จะทำการเช็คเงื่อนไขใน condition 2
 ถ้าเงื่อนไขใน condition 2 เป็นจริง จะทำการเช็คเงื่อนไขใน condition 3
 ถ้าเงื่อนไขใน condition 3 เป็นจริงจะทำงาน Statement 1
  เป็นไม่จริงจะทำงาน Statement 2
   เป็นไม่จริง จะทำงาน Statement 2
 ถ้าไม่จริงจะทำงาน Statement 2
เราได้รู้มาแล้วว่า ถ้า เงื่อนไขใน condition เป็นไม่จริง โปรแกรมจะข้ามการทำงาน ที่อยู่หลังcondition ไป ไปทำงาน Statement ที่อยู่ต่อจาก นั้น แล้วทำไมรูปแบบตัวอย่างที่อยู่ข้างบน ถ้าเงื่อนไขที่อยู่ใน condition 1 เป็นไม่จริง ทำไมโปรแกรมไม่ข้ามการทำงาน if (<condition>2) แล้ว ไปทำงาน  if(<condition>3) Statement 1; สาเหตุก็เพราะว่า ifไม่ใช่ Statement
  รูปแบบการใช้ if คือ
 if (condition) Statement ;
 ถ้าเราเอา if มาใส่ไว้ในส่วน ที่ใส่ Statement เช่น
 if (condition1) if (condition2 ) Statement1;
 Compiler จะมองดูว่า if (condition2) Statemen1; คือสิ่งที่จะทำต่อเมื่อ เงื่อนไข ในcondition 1 เป็นจริง ใน กรณีที่ ซึ่งถ้าหาก เงื่อนไขใน condition 1 ไม่เป็นจริง อย่างรูปแบบตัวอย่างการใช้ if ที่ซ้อนกัน compiler ก็จะทำการข้าม if ที่ซ้อนกันอยู่ทั้งหมด ไม่ว่าจะมีกี่บรรทัด

ตัวอย่างโจทย์ การใช้ if ที่ซ้อนกัน 
ให้เขียนโปรแกรม ที่จะทำการับ ข้อมูล เพศ และอายุของผู้สมัครงานผ่านทางคีย์บอร์ด เงื่อนไขที่จะรับเข้าทำงานคือต้องเป็นเพศชาย และ อายุ มากกว่า 29 ปีถึงจะรับ ถ้าข้อมูลเพศและอายุ ไม่ตรงจากนี้ให้ไม่ต้องรับ และถ้ารับก็ให้แสดงคำว่า Receive ทางจอถาพถ้าไม่รับก็ไม่ต้องแสดง ในการกรอกข้อมูลเพศถ้าเป็นเพศชายให้กรอกตัว M ถ้าเป็น เพศ หญิง ให้กรอก ตัว F (ย่อมาจาก Male และ Female) ไม่ต้องกรอกคำว่า ชาย หรือ หญิง
 จากโจทย์นี้จะเห็นได้ว่ามี 2 เงื่อนไขที่ต้องเช็คว่าเป็นจริงคือ
 1.เป็นเพศชาย
 2.อายุมากกว่า 29 ปี
 จะต้องตรงทั้ง 2 เงื่อนไขในกรณีนี้ให้
เช็คเงื่อนไขแรกก่อนว่าเป็นผู้ชาย จริง จึงจะไปเช็คเงื่อนไขที่ 2
ถ้าเงื่อนไขที่ 2 จริง คืออายุมากกว่า29 จริง ก็ให้ รับ
 ไม่จริง ไม่ต้องรับ
เช่น คนแรก เพศชาย อายุ 40 อย่างนี้ถือว่า รับ
 ถ้าหากเงื่อนไขตรงแค่ข้อเดียว หรือ ไม่ตรงเลยซักข้อ ไม่ต้องรับ
 คนที่สอง เพศชาย อายุ 14 อย่างนี้ถือว่า ไม่รับ เพราะเงื่อนไขข้อแรกตรง แต่ข้อที่ 2 ไม่ตรง
 คนที่สาม เพศหญิง อายุ 35 อย่างนี้ถือว่า ไม่รับ เพราะเงื่อนไขข้อแรกไม่ตรง เงื่อนไขข้อที่ 2ก็ไม่ต้องเช็คแล้ว
โปรแกรมที่ 5-7 แสดงตัวอย่าง การใช้ if ที่ซ้อนกัน
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char Sex;
5: int Age;
6:
7: cout << "Please Enter your Sex (M/F):";
8: cin >> Sex;
9:
10: cout << "Please Enter you Age :";
11: cin >> Age;
12:
13: if(Sex =='M')
14: if(Age > 29)
15:  cout << "Receive";
16:
17: return 0;
18:}
Output
ลองรันครั้ง แรก ข้อมูลที่ใส่คือ เพศชาย อายุ 38
Please Enter your Sex (M/F):M
Please Enter you Age :38
Recrive
ลองรันครั้งที่ 2 ข้อมูลที่ใส่คือ เพศหญิง อายุ 12
Please Enter your Sex (M/F):F
Please Enter you Age :12
ในการรันครั้งแรก โปรแกรมแสดงข้อความ ว่า Receive แต่ การรันครั้งที่สอง หลังจากใส่ข้อมูลเสร็จ ก็ไม่มีอะไรเกิดขึ้น และจบโปรแกรมเลย
อธิบาย Source code
บรรทัดที่ 4 กับ บรรทัดที่ 5:เป็นการประกาศตัวแปรชื่อ Sex,Age โดยมีประเภทของตัวแปรเป็น char และ int ตามลำดับ ตัวแปรทั้ง 2 ตัวนี้ ใช้ เก็บข้อมูล เพศ และ อายุ โดยบรรทัดที่สั่งให้รับข้อมูลจากทางคีย์บอร์ดคือ บรรทัดที่ 8 และ 11 โดยที่บรรทัดที่ 7 และ 10 เป็นการสั่งให้พิมพ์ข้อความก่อนรับข้อมูล
บรรทัดที่ 13: เป็นการเช็คเงื่อนไข ว่า Sex == M หมายถึงว่า เพศต้องเป็น ชาย ถ้าหากเงื่อนไขนี้เป็นจริง
จะไปทำ บรรทัดที่ 14 ถ้าเงื่อนไขไม่เป็นจริงจะไปทำบรรทัดที่ 17 เลย เพราะว่าการใช้ ifซ้อนกัน ถ้าหากเงื่อนไขแรกไม่เป็นจริงก็จะไม่ทำในส่วนของเงื่อนไขต่อๆไป จะ ออก ไปทำStatement ที่ อยู่ถัดไปเลย ในกรณีนี้ บรรทัดที่ 17 เป็น Statement แรกต่อจาก การเช็คเงื่อนไขในบรรทัดที่ 14

บรรทัดที่ 14 คือเป็นการเช็คเงื่อนไข ว่า อายุต้องมากกว่า 29 ถ้าเงื่อนไขการที่โปรแกรมจะมาทำงานในบรรทัดที่ 14 ได้ต้องผ่านการเช็คเงื่อนไข ในบรรทัดที่ 13 ว่าเป็นจริงมาก่อนถึงจะมาทำงาน Statement นี้ได้ ถ้าหากเงื่อนไขในบรรทัดที่ 14 เป็นจริง ก็จะแสดงข้อความ ว่า“Receive” ในการรันครั้งที่ 2 โปรแกรมจะไม่ทำงาน บรรทัดที่ 14 เนื่องจาก การเช็คเงื่อนไขในบรรทัดที่ 13 ไม่เป็นจริง
 การใช้ else ซ้อนกัน
 การใช้ else ซ้อนกันเป็นการทำงานในของโปรแกรมใน ลักษณะประเภทที่ว่า ถ้าเงื่อนไขเป็นจริงให้ทำงานอย่าง หนึ่ง และถ้าไม่จริง ก็ให้เช็คเงื่อนไข อีกครั้ง ถ้าหากเงื่อนไขเป็นจริงถึงจะทำงาน รูปแบบของการใช้ else ซ้อนกันเช่น
 if (<condition>A1) Statement1;
 else
 {
 if(<condition>B1) Statement2
}
Statement3
ถ้าหาก condition A1 เป็นจริง จะทำงาน Statement 1 และจะออกไปทำงาน Statement3
  เป็นไม่จริง จะไปเช็คเงื่อนไขใน condition B1
 ถ้าเงื่อนไขใน condition B1 เป็นจริง จะทำงาน Statement 2 และจะออกไปทำงานStatement3
 ถ้าเงื่อนไขใน conditon B1 เป็นไม่จริง จะทำงาน Statement 3
หรือ แบบนี้ เป็นตัวอย่างอีกแบบหนึ่ง
 if (<condition>A1)
{
 if (<condition>A2) Statement1;
else Statement2;
 }
 else
 {
  if (<condition>B1) Statement3;
else Statement4;
}
Statement 5;
ถ้าหาก condition A1
เป็นจริง จะไปเช็คเงื่อนไขใน condition A2
 ถ้า condition A2 เป็นจริงจะทำ Statement 1 และจะออกไปทำ Statement 5
 ถ้า condition A2 เป็นไม่จริง จะทำ Statement 2 และจะออกไปทำ Statement 5
เป็นไม่จริง
 จะไปเช็คเงื่อนไขใน condition B1
 ถ้า condition B1 เป็นจริงจะทำ Statement 3 และจะออกไปทำ Statement 5
 ถ้า condition B1 เป็นไม่จริง จะทำ Statement 4 และจะออกไปทำ Statement 5


โปรแกรมที่ 5-8 ตัวอย่างการใช้ if ที่ซ้อนกัน อีกครั้ง
 โดยโจทย์คือ ให้เขียนโปรแกรมคำนวณเกรด ของนักเรียนโดยให้รับข้อมูลคะแนนทางคีย์บอร์ด และคำนวณออกมาเป็นเกรด โดยที่เงื่อนไขในการให้เกรดคือ
 คะแนนน้อยกว่า   50 เกรด F
 คะแนนอยู่ระหว่าง 50 ถึง  59 เกรด D
 คะแนนอยู่ระหว่าง 60 ถึง  69 เกรด C
 คะแนนอยู่ระหว่าง 70 ถึง  79 เกรด B
 คะแนนมากกว่า  79 เกรด A
ถ้าคะแนน 55 ได้เกรด D ถ้าคะแนน 92 ได้เกรด A ถ้าคะแนน –36 ได้เกรด F เพราะ ถือว่า น้อยกว่า 50 ถ้าได้คะแนน 200 ได้เกรด A เพราะมากกว่า 79
 ถ้าเราจะใช้ if ซ้อนกันเราอาจเขียนอัลกอริทึ่มตอนคำนวณเกรดได้ว่า
 1: เช็คว่าถ้าคะแนนน้อยกว่า  50  จริงทำบรรทัดที่ 2 ถ้าไม่จริงทำบรรทัดที่ 3
2 เกรดเท่ากับ F แล้วไปทำบรรทัดที่ 10
 3 เช็คว่าถ้าคะแนนน้อยกว่า 60  จริงทำบรรทัดที่ 4 ถ้าไม่จริงทำบรรทัดที่ 5 จากเงื่อนไข คะแนนต้องอยู่ระหว่าง 50 ถึง 59 เราไม่จำเป็นต้องเช็คว่า คะแนนถึง 50 คะแนนรึเปล่า เราเช็คแค่น้อยกว่า 60 ก็พอ เพราะว่า การที่โปรแกรมจะมาทำบรรทัดนี้ได้ต้องผ่าน การเช็คเงื่อนไขในบรรทัดที่ 1 แล้ว ว่าไม่น้อยกว่า 50
 4.เกรดเท่ากับ D แล้วไปทำบรรทัดที่ 10
 5. เช็คว่าถ้าคะแนนน้อยกว่า 70 จริงทำบรรทัด ที่ 6 ถ้าไม่จริงทำบรรทัดที่ 7 เหมือนการเช็คเงือนไขที่บรรทัดที่ 3 คือเราไม่ต้องเช็คว่า คะแนนถึง 60 รึเปล่า เช็คว่าน้อยกว่า 70 ก็พอ
 6.เกรดเท่ากับ C แล้วไปทำบรรทัดที่ 10
 7. เช็คว่าถ้าคะแนนน้อยกว่า 80 จริงทำบรรทัด ที่ 8 ถ้าไม่จริงทำบรรทัดที่ 9 เหมือนการเช็คเงือนไขที่บรรทัดที่ 3 คือเราไม่ต้องเช็คว่า คะแนนถึง 70 รึเปล่า เช็คว่าน้อยกว่า 80 ก็พอ
 8.เกรดเท่ากับ B แล้วไปทำบรรทัดที่ 10
 9. เกรดเท่ากับ A แล้วไปทำบรรทัดที่ 10
 10.พิมพ์ข้อมูลเกรด
 นี่เป็นตัวอย่าง 1 ในอัลกอริทึ่มที่ใช้ในการคำนวนเกรด จริงๆแล้วมีได้หลายวิธี และนี่คือSource code ของ อัลกอริทึ่มข้างบน
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Score;
5: char Grade;
6: cout << "Please enter score :";
7: cin >> Score;
8: if(Score < 50) Grade ='F';
9: else if(Score < 60) Grade ='D';
10:  else if(Score < 70) Grade ='C';
11:  else if(Score < 80) Grade ='B';
12: else Grade ='A';
13:
14: cout << "Your grade are :" << Grade;
15: return 0;
16:}
Output
รันครั้งแรกข้อมูลคะแนนที่ใส่คือ 47
Please enter score :47
Your grade are :F
รันครั้งที่ 2 ข้อมูลคะแนนที่ใส่คือ 68
Please enter score :68
Your grade are :C
รันครั้งที่ 3 ข้อมูลคะแนนที่ใส่คือ 150
Please enter score :150
Your grade are :A

อธิบาย Source code
บรรทัดที่ 4 ถึง 7 :เป็นการประกาศตัวแปรที่ใช้เก็บคะแนน และ เกรด และเป็นการสั่งให้รับข้อมูลคะแนนจากทางคีย์บอร์ด
บรรทัดที่ 8:เป็นการเช็คเงื่อนไข ว่าคะแนนน้อยกว่า 50 รึเปล่า เงื่อนไขที่เช็คนี้ตรงกับ บรรทัดที่ 1 ของอัลกอริทึ่มข้างบน ถ้าเงื่อนไขเป็นจริง จะทำงาน Statement Grade = ‘F’;ซึ่ง Statement นี้จะตรงกับบรรทัด ที่ 2 ของ อัลกอริทึ่มและก็จะไปทำงาน บรรทัดที่ 14 และถ้าเงื่อนไขไม่เป็นจริง โปรแกรมจะไปทำงานบรรทัดที่ 9 ซึ่ง บรรทัดที่ 9 นี้ตรงกับ อัลกอริทึ่มบรรทัดที่ 3
บรรทัดที่ 9:เป็นการเช็คเงื่อนไข ว่าคะแนนน้อยกว่า 60 รึเปล่า ถ้าน้อยกว่าจริงเกรดเท่ากับ Dและหลังจากทำงานเสร็จแล้วก็จะไปทำงาน บรรทัดที่ 14แต่ถ้าน้อยกว่าไม่จริง ให้ไปทำบรรทัดที่ 10

บรรทัดที่ 10: เป็นการเช็คเงื่อนไข ว่าคะแนนน้อยกว่า 70 รึเปล่า ถ้าน้อยกว่าจริงเกรดเท่ากับC และหลังจากทำงานเสร็จแล้วก็จะไปทำงาน บรรทัดที่ 14 แต่ถ้าน้อยกว่าไม่จริง ให้ไปทำบรรทัดที่ 11
บรรทัดที่ 11: เป็นการเช็คเงื่อนไข ว่าคะแนนน้อยกว่า 80 รึเปล่า ถ้าน้อยกว่าจริงเกรดเท่ากับB และหลังจากทำงานเสร็จแล้วก็จะไปทำงาน บรรทัดที่ 14 แต่ถ้าน้อยกว่าไม่จริง ให้ไปทำบรรทัดที่ 12
บรรทัดที่ 12:เป็นการกำหนดเกรดให้เท่ากับ A โดยที่เราไม่ต้องเช็คเงื่อนไขแล้วเพราะว่ากว่าCompiler จะทำงานมาถึงบรรทัดนี้ได้ต้องผ่านการตรวจสอบในบรรทัด ที่ 11 แล้ว ว่าน้อยกว่า80 ไม่จริง(คือต้องมากกว่าหรือเท่ากับ 80)แล้วไปทำบรรทัดที่ 14 คือการ แสดงผลเกรด เกรด
บรรทัดที่ 14:เป็นการแสดงผลเกรด Statement ในบรรทัดนี้จะเท่ากับ อัลกอริทึ่มในบรรทัดที่10
การใช้ โอเปอเรเตอร์ตรรกะ ในการเช็คเงื่อนไข
 อย่างเช่น โปรแกรมที่ 5-7 เราสามารถเปลี่ยนไปใช้ โอเปอเรเตอร์ตรรกะในการเขียนโปรแกรมได้
 โดยเงื่อนไขของโปรแกรมที่ 5-7 คือ
 1.เป็นเพศชาย
 2.อายุมากกว่า 29 ปี
 จะต้องตรงทั้ง 2 เงื่อนไขในกรณีนี้ให้ใช้ โอเปอเรเตอร์ && เพราะว่าต้องเป็นจริงทั้ง 2เงื่อนไข

โปรแกรมที่ 5-9 การใช้ โอเปอเรเตอร์ตรรกะ ในการเขียนโปรแกรมแทนการใช้ if ที่ซ้อนกัน
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char Sex;
5: int Age;
6:
7: cout << "Please Enter your Sex (M/F):";
8: cin >> Sex;
9:
10: cout << "Please Enter you Age :";
11: cin >> Age;
12:
13: if(Sex =='M' && Age > 29)cout << "Receive";
14: return 0;
15:}
โปรแกรมนี้จะทำงานได้เหมือนกับโปรแกรมที่ 5-7 แต่จะใช้ โอเปอเรเตอร์ตรรกะ แทน
อธิบาย Source code
บรรทัดที่ 13 :เป็นการเช็คเงื่อนไขว่า Sex == ‘M’  และ เงื่อนไข ว่า Age > 29 ถ้าทั้ง 2เงื่อนไขนี้เป็นจริงจะทำงาน Statement cout << “Receive” แล้วไปทำงาน บรรทัดที่ 14ถ้าเงื่อนไขไม่เป็นจริงจะทำงานบรรทัดที่ 14 เลย
 โปรแกรมที่ 5-8 เราสามารถวิเคราะห์อัลกอริที่มในส่วนของการคำนวณเกรดได้โดยไม่ต้องใช้if ที่ซ้อนกันก็ได้เช่น
 1.เช็คว่าคะแนน < 50 ถ้าจริงเกรดก็จะเท่ากับ F
 2.เช็คว่าคะแนน >= 50 และ < 60 ถ้าจริงเกรดก็จะเท่ากับ D
 3.เช็คว่าคะแนน >= 60 และ < 70 ถ้าจริงเกรดก็จะเท่ากับ C
 4.เช็คว่าคะแนน >= 70 และ < 80 ถ้าจริงเกรดก็จะเท่ากับ B
5.เช็คว่าคะแนน >= 80 และ  ถ้าจริงเกรดก็จะเท่ากับ A
 โดยขั้นตอนการทำงานของโปรแกรมจะทำตั้งแต่บรรทัดที่ 1 ถึง 5 ไม่ต้องมีการข้ามไปทำที่บรรทัดอื่นเพราะข้อมูลที่กรอกเข้าไปถ้าเป็นตัวเลขจะตรงกับเงื่อนไข บรรทัดใดบรรทัด 1 ใน5 บรรทัดนี้เท่านั้น
เช่น 
 คะแนนเท่ากับ 72 
 บรรทัดที่ 1 จะเช็คเงื่อนไขว่า < 50 ปรากฎว่าไม่เป็นจริงก็จะไม่ทำอะไร
 บรรทัดที่ 2 จะเช็คเงื่อนไขว่า >= 50 และ < 60ปรากฎว่าไม่เป็นจริงก็จะไม่ทำอะไร
 บรรทัดที่ 3 จะเช็คเงื่อนไขว่า >= 60 และ < 70 ปรากฎว่าไม่เป็นจริงก็จะไม่ทำอะไร
 บรรทัดที่ 4 จะเช็คเงื่อนไขว่า >= 70 และ < 80 ปรากฎว่าเป็นจริงก็จะ กำหนดเกรดให้เท่ากับ B
 บรรทัดที่ 5 จะเช็คเงื่อนไขว่า >= 80 ปรากฎว่าไม่เป็นจริงก็จะไม่ทำอะไร
เกรดจะได้เท่ากับ B โดยที่โปรแกรมจะทำงานทั้ง 5 บรรทัดแต่จะมีแค่บรรทัดเดียวเท่านั้นที่เงื่อนไขเป็นจริง
โปรแกรมที่ 5-10 การใช้ โอเปอเรเตอร์ตรรกะ ในการเขียนโปรแกรมแทนการใช้ if ที่ซ้อนกัน
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Score;
5: char Grade;
6: cout << "Please enter score :";
7: cin >> Score;
8: if(Score < 50) Grade ='F';
9: if(Score >=50 && Score < 60) Grade ='D';
10: if(Score >=60 && Score < 70) Grade ='C';
11: if(Score >=70 && Score < 80) Grade = 'B';
12: if(Score >= 80) Grade ='A';
13: cout << "Your grade are :" << Grade;
14:
15: return 0;
16:}
อธิบาย Source code
บรรทัดที่ 8 ถึง บรรทัดที่ 12:จะเป็นการเช็คเงื่อนไข ว่าคะแนนจะตรงตามเงื่อนไขใด โดยที่บรรทัดที่ 8 ของ Source code จะตรงกับ อัลกอริทึ่มบรรทัดที่ 1 เรียงลำดับไปเรื่อยๆ จนถึงบรรทัดที่ 12 จะตรงกับอัลกอริทึ่มบรรทัดที่ 5
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ในความเป็นจริงแล้วโปรแกรมที่ 5-10 จะมีประสิทธิภาพการทำงาน แย่กว่าโปรแกรมที่ 5-8เช่นถ้าเป็นโปรแกรมที่ 5-8ที่ใช้ if ซ้อนกัน ถ้าหากคะแนน เป็น 47 คะแนน ก็จะได้เกรด F แต่ถ้าโปรแกรมที่ 5-10 ไม่ว่าจะได้คะแนนเท่าไหร่ก็จะต้องเช็คเงื่อนไขทั้ง 5 บรรทัด ในที่นี้เพียงแต่ต้องการแสดงให้เห็นถึงการเขียนโปรแกรมอีกแบบหนึ่ง
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
การใช้ วงเล็บใน if ที่มีหลาย Statement
 ตัวอย่างการใช้ if ที่มีหลาย Statement
โปรแกรมที่ 5-11
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Choice;
5: int S1,S2;
6: cout << "Menu" << endl;
7: cout << "1.Rectangle " << endl;
8: cout << "2.Square " << endl;
9: cout << "Choose your choice";
10: cin >> Choice;
11:
12: if(Choice==1)
13: {
14: cout << "Please enter Length :" ;
15: cin >> S1;
16: cout << "Please enter width :";
17: cin >> S2;
18: cout << "Area:" << S1 * S2;
19: }
20: else
21: {
22: cout << "Please enter side:";
23: cin >> S1;
24: cout << "Area:" << S1 * S1;
25: }
26:
27: return 0;
28:}
Output
ลองรันครั้งแรก
Menu
1.Rectangle
2.Square
Choose your choice1
Please enter Length :50
Please enter width :20
Area:1000
ลองรันครั้งที่ 2
Menu
1.Rectangle
2.Square
Choose your choice2
Please enter side :50
Area:2500
อธิบาย Source code
บรรทัดที่ 6 ถึง บรรทัดที่ 10:เป็นส่วนของ Menu
บรรทัดที่ 12 ถึง 25:เป็นการเช็คเงื่อนไขว่าผู้ใช้ป้อนข้อมูลเลขอะไร ถ้าเป็นเลข 1 ก็จะทำการรับข้อมูลของความกว้างและความยาว และก็แสดงผลพื้นที่สี่เหลี่ยมผืนผ้า แต่ถ้าผู้ใช้ไม่ได้ป้อนเลข 1 ก็จะทำการรับข้อมูลความยาวของ ด้านและทำการคำนวณ พื้นที่สี่เหลี่ยมจัตุรัสและแสดงผล


โปรแกรมที่ 5-11 เรามีการใช้ วงเล็บใน if ดังนี้
if(Choice==1)
 {
 cout << "Please enter Length :" ;
 cin >> S1;
 cout << "Please enter width :";
 cin >> S2;
 cout << "Area:" << S1 * S2;
 }
 else
 {
 cout << "Please enter side:";
 cin >> S1;
 cout << "Area:" << S1 * S1;
 }
เราสามารถเขียนอีกแบบได้ว่า
if(Choice==1){
 cout << "Please enter Length :" ;
 cin >> S1;
 cout << "Please enter width :";
 cin >> S2;
 cout << "Area:" << S1 * S2;}
 else{
 cout << "Please enter side:";
 cin >> S1;
 cout << "Area:" << S1 * S1;}
หรือแบบนี้
if(Choice==1){cout << "Please enter Length :" ;
 cin >> S1;
  cout << "Please enter width :";
  cin >> S2;
  cout << "Area:" << S1 * S2;
  }
else   {cout << "Please enter side:";
  cin >> S1;
   cout << "Area:" << S1 * S1;
  }
หรือจะเขียนแบบไหนก็ได้ ขึ้นอยู่กับตามมาตรฐานของเรา แต่โดยปกติถ้าทำได้เราควรเขียนวงเล็บที่ใช้เปิด กับวงเล็บที่ใช้ ปิดให้ตรงกันเพื่อความดูง่าย
การใช้วงเล็บใน if ที่ซ้อนกัน
 ในกรณีที่โปรแกรมมีขนาดใหญ่บางครั้งเราควรใช้ วงเล็บใน if ที่ซ้อนกัน เพื่อให้โปรแกรมดูง่ายเผื่อว่าในกรณีที่เราจัดตำแหน่ง ระหว่าง if กับ else ไม่ตรงกันอาจทำให้โปรแกรมมีปัญหาโดยที่แก้ไขลำบากเช่น
ถ้าหากโปรแกรมที่ 5-7 เรามีการเปลี่ยนแปลงโจทย์คือ ถ้าหากเงื่อนไขเพศไม่ตรงตามที่ต้องการให้ ไม่ต้องรับข้อมูลอายุและขึ้นข้อความว่า “You are Female” ซึ่งเราอาจเขียนSource code ดังนี้
1:#include"iostream.h"
2:int main()
3:{
4: char Sex;
5: int Age;
6:
7: cout << "Please Enter your Sex (M/F):";
8: cin >> Sex;
9:
10: if(Sex =='M')
11: cout << "Please Enter you Age :";
12: cin >> Age;
13: if(Age > 29)
14:  cout << "Receive";
15: else
16: cout << "You are Female";
17:
18: return 0;
19:}
Output
ลองรันครั้งแรก ข้อมูลที่ใส่คือ เพศหญิง อายุ 34
Please Enter your Sex (M/F):F
34
Receive
โปรแกรมทำงานได้ไม่ตรงตามที่เราต้องการ เพราะที่เราต้องการคือ ถ้าเป็นเพศหญิง จริง เราต้องขึ้นข้อความว่า “You are Female.” แต่ในที่นี้ไม่แสดงข้อความและกลับมีการรับข้อมูล อายุโดยไม่แสดงข้อความว่า Please Enter you Age : และพอกรอกข้อมูลอายุเสร็จ โปรแกรมก็แสดงคำว่า Receive ทั้งๆที่เงื่อนไขไม่ตรง
ลองรันครั้งที่ 2 ข้อมูลที่ใส่คือ เพศ ชาย อายุ 12
Please Enter your Sex (M/F):M
Please Enter you Age :12
You are Female.
ทำไมถึงมีข้อความขึ้นว่า You are Female ทั้งๆที่เพศก็เป็นเพศชายแต่จะมี สิ่งที่ไม่ตรงก็คือ อายุ ไม่มากกว่า 29 ปี ซึ่งจริงๆแล้ว โปรแกรมควรจบโปรแกรมไปโดยที่ไม่ต้องมีข้อความ You are Female ขึ้นมาอีก สาเหตุที่โปรแกรมทำงานอย่างนี้จะอธิบาย ใน ส่วน อธิบาย Source code
อธิบาย Source code
บรรทัดที่ 10 ถึง บรรทัดที่ 16:มี Source code ดังนี้
10: if(Sex =='M')
11: cout << "Please Enter you Age :";
12: cin >> Age;
13: if(Age > 29)
14:  cout << "Receive";
15: else
16: cout << "You are Female";
ในการรันครั้งแรกข้อมูลที่ใส่คือ เพศ หญิง อายุ 34 ขั้นตอนการทำงานของโปรแกรมคือ
บรรทัดที่ 10:เช็คว่าเพศเป็นเพศ ชาย จริงหรือเปล่า ปรากฎว่า ไม่จริงแต่โปรแกรมจะไม่ไปทำงานบรรทัดที่ 12 สาเหตุเพราะว่า else ในบรรทัดที่ 15 Compiler จะมองดูว่า else ตัวนี้ใช้กับ if ในบรรทัดที่ 13 เพราะฉะนั้นโปรแกรมก็จะไม่คิดว่า else ในบรรทัดที่ 15 เป็น else ที่ใช้กับ if บรรทัดที่ 10
และเมื่อ if ในบรรทัดที่ 10 ตรวจสอบเงื่อนไขถ้าเป็นจริงจะทำบรรทัดที่ 11 แต่ถ้าไม่จริงจะทำบรรทัดที่ 12 เพราะ if ในบรรทัดที่ 10 Compiler จะมองดูว่า เป็น if ที่มี Statement เดียว นี่คือสาเหตุที่การทำงานรอบแรกถึงเป็นอย่างนั้น เพราะว่า Compiler จะทำการตรวจสอบเงื่อนไขว่า เป็นเพศชาย จริง หรือเปล่า เนื่องจากข้อมูลที่เรากรอกเป็นเพศหญิง ซึ่งไม่จริง โปรแกรมก็จะมาทำงานในบรรทัเที่ 12 คือรับอายุ และถ้าอายุ > 29 ก็จะแสดงข้อความว่าReceive และถ้า ไม่ > 29 ก็จะแสดงข้อความว่า “You are Female”; ซึ่งไม่ตรงกับที่เราต้องการ
 สาเหตุที่ทำไม Compiler ถึงมอง else ในบรรทัดที่ 16 เป็น else ที่ใช้กับ if ในบรรทัดที่ 13ก็เพราะว่า if ในบรรทัดที่ 10 เป็น if แบบไม่มี วงเล็บ คือ เป็น if แบบ Statement เดียว แล้วมี if มาซ้อนอีกอัน คือ if ในบรรทัด ที่ 13 แล้ว ก็มี else ในบรรทัดที่ 16 โปรแกรมเลยมองดูว่า else อันนั้น เป็น else ของ if ใน บรรทัดที่ 13
เพื่อที่จะได้ดูง่ายจะเขียนให้ดูแบบใหม่เป็นแบบนี้
10: if(Sex =='M')
11: cout << "Please Enter you Age :";
12: cin >> Age;
13: if(Age > 29)
14:  cout << "Receive";
15: else
16: cout << "You are Female";
การทำงานของโปรแกรมคือ ถ้าเช็คเงือนไขในบรรทัดที่ 10 ไม่เป็นจริง บรรทัดที่ 11 ก็จะไม่ทำ เพราะนี่คือสิ่งที่จะทำต่อเมื่อเงื่อนไข ใน บรรทัดที่ 10 เป็นจริง ซึ่งก็จะไม่ตรงตามที่เราต้องการ
ทางแก้ปัญหาในเรื่องนี้เราอาจนำ วง เล็บมาใช้กับ if โดยจะแสดงให้ดูใน โปรแกรมที่ 5-13
โปรแกรมที่ 5-13 การนำวงเล็บมาใช้ในการแก้ปัญหาเรื่อง if ที่ซ้อนกัน
Source code
1:#include”iostream.h”
2:int main()
3:{
4: char Sex;
5: int Age;
6:
7: cout << "Please Enter your Sex (M/F):";
8: cin >> Sex;
9:
10: if(Sex =='M')
11: { cout << "Please Enter you Age :";
12: cin >> Age;
13: if(Age > 29)
14:  cout << "Receive";}
15: else
16: cout << "You are Female";
17:
18: return 0;
19:}
Output
ลองรันครั้งแรกใส่ข้อมูล เพศ หญิง อายุ 40
Please Enter your Sex (M/F):F
You are Female
โปรแกรมจะแสดงข้อความว่า You are Female เลย หลังจากที่เราใส่ข้อมูลเพศว่าเป็น ผู้หญิง โดยที่จะไม่รับข้อมูล อายุ
ลองรันครั้งที่ 2 ใส่ข้อมูล เพศชาย อายุ 36
Please Enter your Sex (M/F):M
Please Enter you Age:36
Receive
อธิบาย Source code
โปรแกรมนี้จะมี Source code คล้ายกับโปรแกรม ที่ 5-12 มากแต่จะมีสิ่งที่แตกต่างกันก็คือ
ในบรรทัดที่ 11 มีการใส่วงเล็บ และบรรทัดที่ 14 ก็มีการใส่วงเล็บ
10: if(Sex =='M')
11: { cout << "Please Enter you Age :";
12: cin >> Age;
13: if(Age > 29)
14:  cout << "Receive";}
15: else
16: cout << "You are Female";
ในบรรทัด ที่ 11 และบรรทัดที่ 14 ซึ่งหมายความว่า
โปรแกรมจะทำการเช็คเงื่อนไขใน บรรทัดที่ 10
ถ้าเป็นจริงจะทำ ในส่วนของ บรรทัดที่ 11 ถึง 14 ก็คือ รับข้อมูลอายุ และเช็คว่าอายุ มากกว่า 29 หรือเปล่า ถ้าไม่มากกว่าก็จะไม่ทำอะไร แต่ถ้ามากกว่า ก็แสดงข้อความว่า“Receive”
ถ้าเป็นไม่จริงจะทำส่วนของบรรทัดที่ 16 คือ พิมพ์ข้อความว่า “You are Female”
การใช้ switch
 นอกจากการใช้ if แล้ว ใน C++ ยังมีการเขียนโปรแกรมที่จะมีการทำงานแบบเลือกทำอีกแบบหนึ่งคือ switch
 ถ้าหากเราเขียนโปรแกรมที่จะมีการคำนวณเลข 2 จำนวน โดยที่ให้ผู้ใช้ เลือกก่อนว่า ต้องการ ให้การคำนวณเป็นบวก,ลบ,คูณ,หาร โดย จะมี Menu แสดงให้ดูว่าถ้า เป็นบวก ก็ให้ เลข 1  ถ้าเป็นลบ ก็ให้ใส่ เลข 2 และหลังจากนั้นโปรแกรมก็จะรับค่าตัวเลขอีก 2 ตัว คือตัวเลขที่เราจะใช้ในการคำนวณ ถ้าเราไม่ใช้ switch แต่ใช้ if แทน ก็จะมี Source code แบบนี้
1:#include"iostream.h"
2:int main()
3:{
4: int choice,N1,N2;
5: cout << "Menu." << endl;
6: cout << "1.Add" << endl;
7: cout << "2.Substract" << endl;
8: cout << "3.Multiply" << endl;
9: cout << "4.Divide" << endl;
10:
11: cout << "Please enter choice :" ;
12: cin >> choice;
13:
14: cout << "Please enter Firstnumber :";
15: cin >> N1;
16:
17: cout << "Please enter Secondnumber : ";
18: cin >> N2;
19:
20: cout << "Result :";
21:
22: if(choice==1)cout << N1 + N2;
23: else if(choice==2)cout << N1 - N2;
24:  else if(choice==3)cout << N1 * N2;
25:   else cout << N1 / N2;
26:
27: return 0;
28:
29:}
Output
รันครั้งแรกลองใส่ข้อมูล Choice คือ 1 ข้อมูลจำนวนแรกคือ 50 ข้อมูลจำนวนที่ 2 คือ 30
Menu.
1.Add
2.Substract
3.Multiply
4.Divide
Please enter choice :1
Please enter Firstnumber :50
Please enter Secondnumber :30
Result :80
ลองรันครั้งที่ 2ใส่ข้อมูล Choice คือ 2ข้อมูลจำนวนแรกคือ 20 ข้อมูลจำนวนที่ 2 คือ 5
Menu.
1.Add
2.Substract
3.Multiply
4.Divide
Please enter choice :2
Please enter Firstnumber :20
Please enter Secondnumber :5
Result :15
อธิบาย Source code

บรรทัดที่ 4:เป็นการประกาศตัวแปรที่ใช้ในการเลือกโอเปอเรอเตอร์ ชื่อ Choice และตัวแปรที่ใช้เก็บข้อมูลจำนวน แรกชื่อ N1 และตัวแปรที่ใช้เก็บจำนวนที่ 2 ชื่อ N2 ทั้งหมดเป็น int
บรรทัดที่ 5 ถึง บรรทัดที่ 9:เป็นการแสดงผลMenu ของ โปรแกรม
บรรทัดที่ 11 ถึง บรรทัดที่ 18:เป็นการรับข้อมูลโอเปอเรเตอร์ที่ผู้ใช้ต้องการ โดยกำหนดให้ตัวแปร choice และรับข้อมูล N1,N2 บรรทัดที่ 20 เป็นการแสดงผลคำว่า “Result”
บรรทัดที่ 22 ถึง 25 เป็นการเช็คเงื่อนไขทีละลำดับว่าผู้ใช้ เลือก โอเปอเรอเตอร์ที่ต้องการว่าเป็นอะไร
22: if(choice==1)cout << N1 + N2;
23: else if(choice==2)cout << N1 - N2;
24:  else if(choice==3)cout << N1 * N2;
25:  else cout << N1 / N2;
 โดยที่จะทำการเช็คทีละอย่าง ว่า ถ้า choice == 1 จริงหมายถึงผู้ใช้เลือก บวก ให้แสดงผลการคำนวณของตัวแปร N1 + N2  
ถ้าหากเงื่อนไข choice == 1 ไม่จริงก็จะไปทำการเช็คดูว่า choice == 2 จริงหรือไม่ถ้าจริงก็จะทำการแสดงผลกาคำนวณของ N1 – N2 และถ้าเงื่อนไขเป็นไม่จริงก็จะทำการเช็คไปเรื่อยๆ นี่คือการเลือกทำโดยใช้ if
ในตัวอย่างต่อไปเรามาดูการเขียนโปรแกรมให้มีการทำงาน คล้ายโปรแกรมนี้ แต่ใช้ switchแทน
โปรแกรมที่ 5-15 แสดงตัวอย่างการใช้ switch
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int choice,N1,N2;
5: cout << "Menu." << endl;
6: cout << "1.Add" << endl;
7: cout << "2.Substract" << endl;
8: cout << "3.Multiply" << endl;
9: cout << "4.Divide" << endl;
10:
11: cout << "Please enter choice :" ;
12: cin >> choice;
13:
14: cout << "Please enter Firstnumber :";
15: cin >> N1;
16:
17: cout << "Please enter Secondnumber : ";
18: cin >> N2;
19:
20: cout << "Result :";
21:
22: switch(choice)
23: {
24: case 1:
25: cout << N1 + N2;
26: break;
27: case 2:
28: cout << N1 - N2;
29: break;
30: case 3:
31: cout << N1 * N2;
32: break;
33: case 4:
34: cout << N1 / N2;
35: 
36: }
37:
38: return 0;
39:
40:}
อธิบาย Source code
บรรทัดที่ 22: switch(choice) หมายความว่าเป็นการใช้ switch ตัวแปร ที่ชื่อ choice และวงเล็บปีกกาในบรรทัดที่ 23 ถึง 36 หมายถึงนี่คือ Source code ในส่วนของ switch โดยที่
บรรทัดที่ 24: case 1:มีความหมายว่า ถ้า ตัวแปร choice มีค่าเท่ากับ 1 ก็จะมาทำงานStatement ต่อจากนี้ และบรรทัดที่ 27 ,30,33 ก็จะมีการทำงานเหมือนกัน แต่เปลี่ยนเป็นcase 2 ,case 3,case 4 ตามลำดับ
บรรทัดที่ 26,29,32: Statement break; มีความหมายว่าให้ออกจาก switch ไม่จำเป็นต้องไปทำ Source code ในส่วน ของ switch ต่อแล้วนี่ สาเหตุที่บรรทัดที่ 35 ไม่มีการใช้ breakเพราะว่าไม่มี Statement อะไรที่อยู่ใน switch ที่จะทำงานต่อแล้ว รายละเอียดของการใช้break จะกล่าวถึงในส่วนต่อไป
รูปแบบพื้นฐานของการใช้ switch
switch(ตัวแปรที่เป็นประเภท int หรือ char)
{ case ค่าของตัวแปร:
  Statement;
  Statement;
 case ค่าของตัวแปร:
  Statement;
  Statement;
}
เช่นรูปแบบการใช้ switch โดยไม่มี break;
switch(i)
{
 case 1:
  Statement1;
  Statement2;
 case 2:
  Statement3;
  Statement4;
}
นี่เป็นการใช้ switch กับตัวแปร i
ถ้า ตัวแปร i มีค่าเป็น 2 Statement 3 กับ Statement4 ก็จะทำงาน
แต่ถ้าค่าตัวแปร i เป็น 1 Statement 1 กับ Statement 2 ก็จะทำงาน แล้ว ก็จะทำงานStatement 3 และ Statement 4 ต่อไปด้วย ถ้าหากเราไม่ใช้ break;  การใช้ switch ในC++ จะต่างจากพวก select case ใน Visual basic ,Pascal

การใช้ break
 การใช้ break มีไว้เพื่อออกจากการทำงาน ของ switch ถ้าเราไม่ใช้ break โปรแกรมก็จะทำงานต่อไปเรื่อยๆ
เช่นตัวอย่างรูปแบบการใช้ switch แบบมี break;
switch(i)
{
 case 1:
  Statement1;
  Statement2;
  break;
 case 2:
  Statement3;
  Statement4;
}
นี่เป็นการใช้ switch กับตัวแปร i
ถ้า ตัวแปร i มีค่าเป็น 2 Statement 3 กับ Statement4 ก็จะทำงาน
ถ้า ตัวแปร i มีค่าเป็น 1 Statement 1 กับ Statement2 ก็จะทำงาน โดยที่พอ โปรแกรมไปเจอ Statement break;ก็จะออกจาก switch ไปไม่ไปทำงาน Statement3 และStatement4

การใช้ default
 ในกรณีที่เราเขียนโปรแกรมแบบเลือกทำโดยใช้ switch เราสามารถเขียนโปรแกรมที่จะทำงาน ถ้าหากค่าของตัวแปรไม่ตรงกับ case ไหนเลยให้ทำงานได้ โดยเราจะใช้ default
รูปแบบตัวอย่างการใช้ default
switch(i)
{
 case 1:
  Statement1;
  Statement2;
  break;
 case 2:
   Statement3;
  Statement4;
  break;
 default:
   Statement5;
  Statement6;
}
ถ้าหากค่าตัวแปร i ไม่เป็น 1 หรือ 2 Statement5 กับ Steatement6 ก็จะทำงาน
การใช้ switch กับตัวแปร char ในส่วนของ case ก็ต้องมีเครื่องหมาย ‘ ‘ ล้อมรอบค่าของตัวแปรด้วยเช่น
 switch(i)
 {
choice ‘A’:
 choice ‘B’
 }

โปรแกรมที่ 5-16 ตัวอย่าง ตัวอย่าง การใช้ switchโดยใช้ ตัวแปร char
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char choice;
5: cout << "Menu." << endl;
6: cout << "T.triangle" << endl;
7: cout << "S.square" << endl;
8: cout << "R.Rectagle" << endl;
9: cout << "Please choose menu by char:";
10: cin >> choice;
11: cout << endl;
12: switch(choice)
13: {
14: case 'T':
15: cout << " * " << endl;
16: cout << " *** " << endl;
17: cout << " ***** " << endl;
18:  cout << "*******" ;
19: break;
20: case 'S':
21: cout << "* * * *" << endl;
22: cout << "* * * *" << endl;
23: cout << "* * * *" << endl;
24: cout << "* * * *" ;
25: break;
26:
27: default:
28: cout << "* * * * * * * * * *" << endl;
29: cout << "* * * * * * * * * *" << endl;
30: cout << "* * * * * * * * * *" << endl;
31: cout << "* * * * * * * * * *" << endl;
32: cout << "* * * * * * * * * *" << ;
33: }
34:
35:
36: return 0;
37:}
Output
รันครั้งแรกลองใส่ตัว T
Please choose menu by char:T
 *
 ***
 *****
*******
รันครั้งที่สองลองใส่ตัว S
Please choose menu by char:S
****
****
****
****
รันครั้งที่ 3 ลองใส่ตัว R
Please choose menu by char:R
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
อธิบาย Source code
บรรทัดที่ 4:เป็นการประกาศตัวแปร char ชื่อ choice ตัวแปรตัวนี้แหละที่เราจะใช้กับ switch
บรรทัดที่ 5 ถึง บรรทัดที่ 8:เป็นส่วนของ menu และบรรทัดที่ 9 เป็นการให้ผู้ใช้เลือกว่าจะทำรายการไหนโดยกรอกข้อมูลเป็นตัวอักษร ว่าเป็น T หรือ S หรือ R
บรรทัดที่ 12: เป็นการใช้ switch กับตัวแปร char
บรรทัดที่ 14:case ‘T’ บรรทัดนี้อยู่ในวงเล็บปีกกาของ switch ในบรรทัดที่ 12 ซึ่งหมายความว่าถ้าตัวแปร choice เท่ากับ ตัว อักษร ‘T’ ก็จะทำงาน Statement ในส่วนบรรทัดที่ 15 ถึง18 คือการแสดงรูปสามเหลี่ยมโดยใช้ตัวอักษร *  สาเหตุที่ทำงานถึงแค่บรรทัดที่ 18 ก็เพราะว่าในบรรทัดที่ 19 เรามี Statement break; เมื่อโปรแกรมมาเจอ Statement นี้ก็จะออกจากswitch และก็จะไม่ทำงานต่อ

บรรทัดที่ 20:case ‘S’ บรรทัดนี้ก็อยู่ในวงเล็บปีกกาของ switch เหมือน บรรทัดที่ 14 ซึ่งหมายความว่าถ้าตัวแปร choice เท่ากับ ตัว อักษร ‘S’ ก็จะทำงาน Statement ในส่วนบรรทัดที่ 21 ถึง 24 คือการแสดงรูปสี่เหลี่ยมจัตุรัสโดยใช้ตัวอักษร *  สาเหตุที่ทำงานถึงแค่บรรทัดที่ 24 ก็เพราะว่าในบรรทัดที่ 25 เรามี Statement break; เมื่อโปรแกรมมาเจอ Statement นี้ก็จะออกจาก switch และก็จะไม่ทำงานต่อ

บรรทัดที่ 27: default : บรรทัดนี้ก็อยู่ในวงเล็บปีกกาของ switch เหมือน บรรทัดที่ 14 default มีความหมายว่าถ้า ค่าของตัวแปรที่ใช้ switch ไม่ตรงกับเงื่อนไข ใน case ไหนเลยในที่นี้คือไม่ตรงกับ case ‘T’ หรือ case ‘S’ ก็จะมาทำงานในส่วนของ Statement ที่ต่อจากdefault คือ Statement ในบรรทัดที่ 28 และในโปรแกรมนี้จะทำงานถึง บรรทัดที่ 32 คือการแสดงรูปสี่เหลี่ยมผืนผ้าโดยใช้เครื่องหมาย *

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
สาเหตุที่บอกว่า โปรแกรมที่ 5-15 มีการทำงาน คล้าย โปรแกรม ที่5-14 แทนคำว่าเหมือนเนื่องจาก การทำงานของทั้ง 2 โปรแกรมนี้ไม่เหมือนกัน ในที่นี้ผู้เขียนไม่ได้กล่าวถึงว่าSource code ไม่เหมือนกัน เพระยังไงมันก็ไม่เหมือนกันอยู่แล้ว แต่สิ่งที่ไม่เหมือนกันคือ อัลกอริทึ่ม โปรแกรมที่ 5-14 จะทำการเช็คเงื่อนไขว่า choice == 1จริงหรือไม่ ถ้าไม่จริงก็จะเช็คว่า choice == 2 จริง หรือไม่ ไปเรื่อยๆ แต่พอเช็คถึง ว่า choice == 3 จริงหรือไม่ถ้าไม่จริงก็จะสรุปว่าผู้ใช้ กรอกข้อมูลตัวแปร choice = 4 ซึ่งจริงๆแล้วผู้ใช้อาจจะกรอกเลขอะไรก็ได้ที่ ไม่ใช่ 1 ถึง
 3 เช่น 5,8,22 ก็ได้ แต่ถ้าเป็นโปรแกรมที่ 5-15 ถ้าผู้ใช้ไม่ได้กรอกข้อมูลตัวแปร choice ให้เท่ากับ เลข 1 ถึง 4 ตัวใดตัวหนึ่ง โปรแกรมก็จะไม่แสดงผลของการคำนวณอะไรเลย
ถ้า หากเราอยากให้โปรแกรมที่ 5-15 มีการทำงานเหมือนโปรแกรมที่ 5-14 เราต้องเปลี่ยนSource code ตรง บรรทัด ที่ 33 จาก case 4:ให้เป็น
 default:
โปรแกรมก็จะทำงานเหมือนโปรแกรมที่ 5-14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
คอนดิชั่นแนลโอเปอเรเตอร์
 คอนดิชั่นแนลโอเปอเรเตอร์เป็น โอเปอเรเตอร์ที่จะทำการเช็คเงื่อนไขแล้วจะทำการส่งค่ากลับคืน หรือเราจะเขียนโปรแกรมให้ไม่ต้องส่งค่ากลับคืนแต่ให้มีการงาน บางอย่างก็ได้
 เช่นถ้าเราเขียน Source code โดยใช้ if ว่า
 if(i > 100) cout << “i > 100”;
 else cout << “i <= 100”;
 ถ้าค่า i มากกว่า 100 โปรแกรมก็จะแสดงข้อความ
 i > 100
 ถ้าค่า i น้อยกว่า 100 โปรแกรมก็จะแสดงข้อความ
 i < 100
 ถ้าหากเราจะเขียนโปรแกรมให้มีการทำงาน แบบนี้ เราสามารดใช้คอนดิชั่นแนลโอเปอเรเตอร์ ได้ เช่น
 i > 100? cout << “i > 100” : cout << “i <= 100”;
 ก็จะมีการทำงานเหมือนกัน
 โดยรูปแบบของ คอนดิชั่นแนลโอเปอเรเตอร์ แบบไม่มีการส่งค่ากลับมีดังนี้
 (expression) ? Statement1 :Satetment2;
 โดยค่าที่ได้จาก expression ถ้าเป็นจริง จะทำ Statement1
   ถ้าเป็นไม่จริง จะทำ Statemen2
 นอกจากนี้แล้วเรายังใช้ คอนดิชั่นแนลโอเปอเรเตอร์ในการส่งค่าคืนกลับได้โดยมีรูปแบบดังนี้
 Result = (expression)? ค่าที่ 1:ค่าที่ 2 ;
 โดยค่าที่ได้จาก expression ถ้าเป็นจริง Result จะเท่ากับ ค่าที่ 1
 ถ้าเป็นไม่จริง Result จะเท่ากับ ค่าที่ 2
 เช่น
 int i = 10,z =0;
 z = i > 5 ? 100: 200;
 Result คือ z
 expression คือ i > 5
 ค่าที่1 คือ 100
 ค่าที่ 2 คือ 200

 โปรแกรมจะทำการเช็คว่า i > 5 จริงหรือเท็จ ซึ่งถ้าเป็นจริง ตัวแปร z จะเท่ากับ 100
  ถ้าเป็นเท็จ ตัวแปร z จะเท่ากับ 200
 ในกรณีนี้เป็นจริงค่าตัวแปร z จะเท่ากับ 100
โปรแกรมที่ 5-17ตัวอย่างการใช้ คอนดิชั่นแนลโอเปอเรเตอร์
โดยโปรแกรมนี้จะทำการรับค่าตัวแปร i แล้ว เช็คว่าถ้า มากกว่า 100 จริงก็จะแสดงข้อความว่าi > 100 ถ้าไม่จริงก็จะแสดงข้อความว่า i < 100 จากนั้นก็เป็นการกำหนดค่าให้กับตัวแปร zถ้า i > 100 จริง z ก็จะเท่ากับ i ถ้าไม่จริง z ก็จะเท่ากับ –i
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int i;
5: int z;
6: cout << "Please enter i:";
7: cin >> i;
8:
9: i > 100? cout << "i > 100" : cout << "i <= 100";
10:
11: cout << endl;
12:
13: z = i > 100 ? i:-i;
14: cout << "z :" << z;
15:
16: return 0;
17:}
Output
ลองรันครั้งแรกค่าที่ใส่คือ 250
Please enter i:250
i > 100
z : 250
ลองรันครั้งที่ 2 ค่าที่ใส่คือ 40
Please enter i:40
i <= 100
z : -40
อธิบาย Source code
บรรทัดที่ 9: i > 100? cout << "i > 100" : cout << "i <= 100";
 เป็นการใช้ คอนดิชั่นแนลโอเปอเรเตอร์ แบบไม่มีการส่งค่ากลับ 
 expression คือ i > 100
 Statement1 คือ cout << "i > 100"
 Statement2 คือ cout << "i <= 100";
 โดยที่ โปรแกรมจะทำการเช็คเงือนไขใน expression ว่าถ้าเป็นจริง ก็จะทำงานStatement1
  ถ้าเป็นเท็จ ก็จะทำงาน Statement2
 ในการรันครั้งแรกค่า i คือ 250 ซึ่งเงื่อนไขใน expression เป็นจริง ก็จะทำงาน Statement 1คือแสดงข้อความ “i > 100”
 ในการรันครั้งที่ 2 ค่า i คือ 40 ซึ่งเงื่อนไขใน expression เป็นเท็จ ก็จะทำงาน Statement 2คือแสดงข้อความ “i <= 100”
บรรทัดที่ 13: z = i > 100 ? i:-i;
 เป็นการใช้ คอนดิชั่นแนลโอเปอเรเตอร์ แบบมีการส่งค่ากลับ
 Result คือ z
 expression คือ i > 100
 ค่าที่ 1 คือ i
 ค่าที่ 2 คือ –i
 โดยที่ โปรแกรมจะทำการเช็คเงือนไขใน expression ว่าถ้าเป็นจริง Result ก็จะเท่ากับ ค่าที่1
  ถ้าเป็นเท็จ Result ก็จะเท่ากับ ค่าที่ 2
  ในการรันครั้งแรกค่า i คือ 250 ซึ่งเงื่อนไขใน expression เป็นจริง ก็จะ ส่งค่าที่ 1 คือค่า iไปให้กับตัวแปร z
  ในการรันครั้งที่ 2 ค่า i คือ 40 ซึ่งเงื่อนไขใน expression เป็นเท็จ ก็จะส่งค่าที่ 2 คือค่า –iไปให้กับตัวแปร z
การใช้ คอนดิชั่นแนลโอเปอเรเตอร์ในบรรทัดที่ 9
 i > 100? cout << "i > 100" : cout << "i <= 100"; จะมีการทำงานเหมือนกับการเขียนโปรแกรมโดยใช้ if ดังนี้
 if(i > 100) cout << "i > 100" ;
else  cout << "i <= 100";
การใช้ คอนดิชั่นแนลโอเปอเรเตอร์ในบรรทัดที่ 13
z = i > 100 ? i:-i; จะมีการทำงานเหมือนกับการเขียนโปรแกรมโดยใช้ if ดังนี้
if( i > 100)z = i;
else z = -i;
โดยปกติเราไม่นิยมการนำคอนดิชั่นแนลโอเปอเรเตอร์มาใช้สักเท่าไหร่เนื่องจากเป็นการทำให้ Source code ดูยาก ในต่างประเทศเรียกการเขียน Source code แบบนี้ว่า for write only คือเพื่อเขียนให้โปรแกรมทำงานได้เท่านั้นไม่ได้มีไว้สำหรับ ให้คนอื่นอ่าน หรือ ให้ตัวเรากลับมาอ่านอีกในภายหลัง
ตัวอย่างโปรแกรมที่ใช้ if
โปรแกรมที่ 5-18 โจทย์คือ
 ให้เขียนโปรแกรมคิดค่าน้ำประปาของลูกค้า มีเงื่อนไขดังนี้
 ถ้าใช้น้ำต่ำกว่า 20 ยูนิตไม่เสียเงิน
 ถ้าใช้น้ำระหว่าง 20 ถึง 40 ยูนิต คิด ยูนิตละ 3 บาท
 ถ้าใช้น้ำระหว่าง 41 ถึง 60 ยูนิต คิด ยูนิตละ 4 บาท
 ถ้าใช้น้ำมากกว่า 60 ยูนิตคิด ยูนิตละ 6 บาท
 ทั้งนี้ผู้ใช้น้ำทุกท่านเสียค่าบริการทั่วไป 30 บาท และคิด VAT 7 %
 เงื่อนไขการคิดค่าน้ำให้คิดแบบก้าวหน้า
 คำว่าก้าวหน้า ในที่นี้หมายถึงให้คิดเป็น ส่วนๆ ไป เช่น
ถ้าใช้ 50 ยูนิต
 19 ยูนิตแรกไม่เสียเงิน เพราะต่ำกว่า 20 = 0 บาท
 ยูนิตที่ 20 ถึง 40 คิด ยูนิตละ 3 บาท = (40 – 19) * 3 = 63 บาท
 ยูนิตที่ 41 ถึง 50 คิด ยูนิตละ 4 บาท = (50 – 40) * 4 = 40 บาท
 รวมแล้วค่าน้ำที่ยังไม่รวมค่าบริการและ VAT = 0 + 63 +40 = 103 บาท
 ตัวอย่างการคิดค่าน้ำแบบก้าวหน้าที่ผิด
 50 ยูนิต = 50 * 4 = 200 บาท
Source code
1:#include"iostream.h"
2:int main()
3:{
4: int Unit;
5: int Cost;
6: float Total;
7: cout << "Please enter unit:";
8: cin >> Unit;
9:
10: if(Unit < 20)Cost = 0;
11: else if(Unit < 41) Cost = (Unit - 19) * 3;
12:  else if(Unit < 61) Cost = ((40 - 19) * 3) + ((Unit - 40) * 4);
13:  else Cost =((40 - 19) * 3) + ((60 - 40) * 4)+((Unit - 60)* 6);
14:
15: Total = Cost+30;
16: Total = Total + (Total *.07);
17: cout << "Total cost = " << Total;
18: return 0;
19:}
Output
ในรอบแรก ลองใส่ข้อมูล ยูนิต เท่ากับ 50
Please enter unit:50
Total cost =142.31
ในรอบที่ 2 ลองใส่ข้อมูล ยูนิต เท่ากับ 70
Please enter unit:70
Total cost =249.31
อธิบาย Source code
บรรทัดที่ 4,5,6 :เป็นการประกาศตัวแปร ที่ใช้ ในการเก็บ ยูนิตและตัวแปร ที่ใช้ในการคำนวณค่าน้ำที่ยังไม่รวมค่าธรรมเนียมและภาษี ชื่อ Cost ทั้ง 2 ตัวเป็น int และยังมีการประกาศตัวแปร ประเภท float ชื่อ Total ใช้เก็บผลรวมของค่าน้ำทั้งหมด
บรรทัดที่ 10 ถึง 13 :เป็นการใช้ if ในการเช็คเงื่อนไขของค่า น้ำ โดยที่ การเช็คเงื่อนไขจะแบ่งเป็นส่วนๆ
 ในบรรทัดที่ 10 : ถ้าค่าน้ำน้อยกว่า 20 ยูนิต ก็ไม่ต้องเสียเงินให้ Cost = 0
 บรรทัดที่ 11 :ถ้าค่าน้ำน้อยกว่า 41 ยูนิต Cost จะเท่ากับ จำนวนยูนิต – 19 และนำค่าที่ได้ *ด้วย 3
 บรรทัดที่ 12: ถ้าค่าน้ำน้อยกว่า 61 ยูนิต Cost จะเท่ากับ 
(40 – 19 ) *  3)
 +
(Unit – 41 * 4)
ที่ต้องเอา 40 – 19 * 3 นั้นเป็นการคำนวณค่าน้ำของหน่วยที่ 20 ถึง 40 จากนั้นจึงจะนำ Unit ไปลบออกจาก 41 ได้เท่าไหร่ก็ให้นำมาคูณ 4 แล้วบวกเข้าด้วยกัน
บรรทัดที่ 13:บรรทัดนี้ก็จะมีการทำงาน คล้ายกับ บรรทัดที่ 12
บรรทัดที่ 15:เป็นการบวกค่าธรรมเนียม
บรรทัดที่ 16:เป็นการคิดภาษี
โปรแกรมที่ 5-19 ตัวอย่างการใช้ if
 ให้เขียนโปรแกรมคำนวนภาษี โดยใหรับข้อมูลสถานภาพสมรส(S = โสด,M =สมรส),จำนวนบุตร(ถ้าเป็น โสดไม่ต้องรับ),เงินเดือนต่อเดือน แล้วคำนวณภาษีเงินได้
- Year income ได้จากเงินเดือน * 12
- หักส่วนลดของตัวเอง 30000 และถ้า สมรสให้หักของคู่สมรสด้วย อีก 30000
- หักส่วนลดบุตรได้ไม่เกิด 3 คน คนละ 10000
- หลังจากหักส่วนลดแล้วให้นำเงินได้สุทธิมาคิดภาษี
- เงินได้สุทธิ 10000 ถึง 50000 คิดภาษี 4 %
- เงินได้สุทธิ 50001 ถึง 150000 คิดภาษี 7 %
- เงินได้สุทธิมากกว่า 150000 คิดภาษี 10 %
- การคิดภาษีให้คิดตามอัตราก้าวหน้า
Source code
1:#include"iostream.h"
2:int main()
3:{
4: char Status;
5: int Children;
6: float Salary;
7: float YearInCome=0;
8: float Vat;
9: cout << "Please enter status (S or M):";
10: cin >> Status;
11: if(Status =='M')
12: {
13: cout << "Please enter children:";
14: cin >> Children;
15: }
16:
17: cout << "Please enter salary:";
18: cin >> Salary;
19: YearInCome = Salary * 12;
20:
21: if(Status =='M')
22: {
23:
24: YearInCome -= 60000;
25: if(Children > 3)Children = 3;
26: YearInCome -= Children * 10000;
27: }
28: else
29: {
30: YearInCome -= 30000;
31: }
32:
33:  if(YearInCome < 10000) Vat = 0;
34:  else if(YearInCome < 50001) Vat = (YearInCome - 9999) * .04;
35:  else if(YearInCome < 150001) Vat = 1600.04+((YearInCome - 50000)* .07);
36:  else Vat =1600.04+ 146500 +((YearInCome –150000) * 0.1);
37:
38:
39: cout << "Vat :" << Vat;
40: return 0;
41:}
Output
ลองรันครั้งแรกใส่ข้อมูล สถานภาพ สมรส จำนวนบุตร 6 คน เงินเดือน 10000
Please enter Status (S or M):M
Please enter children :6
Please enter salary :10000
Vat :800.04
ลองรันครั้งที่ 2 ใส่ข้อมูล สถานภาพ โสด เงินเดีอน 60000
Please enter Status (S or M):S
Please enter salary :60000
Vat :217100
อธิบาย Source code
บรรทัดที่ 4 ถึง 8 :เป็นการประกาศตัวแปร จำนวน 5 ตัวมีดังนี้
  Status  เป็นตัวแปรประเภท char เอาไว้ใช้เก็บสถานภาพสมรส
Children เป็นตัวแปรประเภท int เอาไว้ใช้เก็บ จำนวนบุตร
 Salary  เป็นตัวแปรประเภท float เอาไว้ใช้เก็บเงินเดือน
 YearInCome เป็นตัวแปรประเภท float เอาไว้ใช้เก็บรายได้ทั้งปี
Vat  เอาไว้ใช้เก็บภาษี
บรรทัดที่ 11:เป็นการเช็ค สถานภาพการสมรส ถ้าสมรสแล้ว ก็ให้รับจำนวนบุตรด้วย
บรรทัดที่ 21 ถึง 31:เป็นการเช็คเงื่อนไขสถารภาพสมรส ถ้าสมรสแล้วก็ให้หัก 60000 และ ก็หักจากจำนวนบุตรได้อีก คนละ 10000 โดยถ้ามีบุตรมากกว่า 3 คนก็กำหนดให้เป็น 3 คนแทน ถ้ายังไม่สมรส ก็ให้หักได้ 30000
บรรทัดที่ 33 ถึง 36: ในส่วนนี้จะเป็นการคำนวนภาษี โดยที่
 บรรทัดที่ 33:จะเป็นการเช็คเงื่อนไขว่าถ้ารายได้ทั้งปี น้อยกว่า 10000 จริงก็ให้ภาษีเป็น 0
 บรรทัดที่ 34: จะเป็นการเช็คเงื่อนไขว่าถ้ารายได้ทั้งปี น้อยกว่า 50001 จริงก็ให้ภาษีเป็น เท่ากับจำนวนรายได้ทั้งปี – 9999 จากนั้นนำค่าที่ได้มาคูณด้วย 0.04 สาเหตุที่ต้องมาลบ9999 ออกก็เพราะจำนวนเงินตั้งแต่ 1 ถึง 9999 จะไม่เสียภาษี
 บรรทัดที่ 35: จะเป็นการเช็คเงื่อนไขว่าถ้ารายได้ทั้งปี น้อยกว่า 150001 จริงก็ให้ภาษีเป็น เท่ากับจำนวนรายได้ทั้งปี 50000 จากนั้นนำค่าที่ได้มาคูณด้วย 0.07 และก็บวกด้วย 1600.04 สาเหตุที่ต้องมาบวกด้วยบ 1600.04 เพาะว่า 1600.04 จะเท่ากับ (50001-9999)*0.05 นี่เป็นจำนวนภาษีของลำดับชั้นก่อนหน้านี้
 บรรทัดที่ 36:ก็จะมีการคิดภาษีคล้าย บรรทัดที่ 35 แต่เปลี่ยนเป็นให้
 นำรายได้ทั้งปี – 150000 จากนั้นก็นำค่าที่ได้ * .1 แลก็นำมาบวกกับ 1600.04 และ146500 สาเหตุที่ต้องนำมาบวก ก็เพราะตัวเลขทั้ง 2 ตัวเป็นภาษีของ ลำดับชั้นก่อนหน้านี้