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

บทที่ 3 เริ่มต้นกับ C++


ในบทนี้จะกล่าวถึงตัวอย่างการเขียนโปรแกรมภาษา C++  เช่นการ แสดงผลข้อความที่หน้าจอ การแสดงผลการคำนวณเลขคณิต การจัดรูปแบบการแสดงผล โดยที่จะมีการกล่าวถึง การใช้ ตัวแปร และ Function ด้วย ตัวแปรจะมีกล่าวถึงโดยละเอียดอีกทีในบทที่ 4 ส่วนFunction จะมีในบทที่ 9
ตัวอย่าง โปรแกรมในภาษา C++
ในตัวอย่างนี้เราจะเขียนโปรแกรม ทีมีการทำงานให้มีการแสดง คำว่า Hello World ที่จอภาพ
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ในส่วนของ Source code ภาษา C++ ในหนังสือเล่มนี้จะมีหมายเลขของบรรทัดพร้อมทั้งเครื่อง หมาย : เพื่อบอกว่าเป็นบรรทัดที่เท่าไหล่ ในตอนเขียน Code จริงๆไม่ต้องใส่หมายเลขและเครื่องหมาย : ลงไป Source code ในส่วนที่อธิบายไปแล้ว จนเป็นที่รู้กันแล้วว่าคืออะไร จะไม่อธิบายอีก
 เช่น Code ในหนังสือเป็น
1: #include <iostream.h>
ให้เขียนเป็น
#include <iostream.h>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
โปรแกรมที่ 3-1 แสดงตัวอย่างโปรแกรมภาษา C++
Source code

1: #include >iostream.h>

2: main()

3: {

4:  cout << "Hello 's world ";

5:  return 0;

6: }

Output

Hello ‘s World

อธิบาย Source code
บรรทัดที่ 1: เป็นการ include library File ชื่อ iostream.h เข้ามาเพื่อเราจะได้ใช้ โอเปอเรเตอร์ cout ได้ โดย การใช้เครื่องหมาย “#”(เครื่องหมายชาร์ป หรือ นัมเบอร์) แล้วต่อด้วย คำว่า include แล้วก็ ชื่อ File ที่ต้องการ include โดยต้องให้ชื่อ File อยู่ระหว่างเครื่องหมาย<> โดยปกติ Compiler จะเตรียม Header File ที่จำเป็นมาให้อยู่แล้ว และเราก็สามารถสร้างHeader File ขึ้นมาใหม่ได้ด้วย ใน 1 โปรแกรมสามารถ include Header File ได้หลาย File
บรรทัดที่ 2: เป็นการบอกว่านี่คือฟังก์ชั่นชื่อ main ใน C++ Functionแรกที่จะทำงานคือฟังก์ชั่น main
Function ใน C++ จะต้องมีเครื่อง หมาย () ต่อท้ายจากชื่อ Function และจะต้องมีวงเล็บปีกกาที่แสดงรายละเอียดของ Function โดยที่รายละเอียดของ Function จะ อยู่ระหว่างเครื่อง หมาย “{“ และ ”}”
บรรทัดที่ 3: เป็น การใช้สัญลักษณ์ “{“ เพื่อเป็นการบอกว่าเป็นการเริ่มต้น Function
บรรทัดที่ 4: เป็นการใช้ โอเปอเรเตอร์ cout(ออกเสียงว่า ซีเอ้า) ส่งคำว่า “Hello ‘s World “ไปแสดงผลที่หน้าจอ โดยต้องมี “<<” (ออกเสียงว่า พุททู)ก่อนStringที่ต้องการส่งออกไปด้วย 
บรรทัดที่ 5: เป็นการส่งค่า 0 กลับไป(Function ใน C++ควรจะมีการส่งค่ากลับไป)
บรรทัดที่ 6:เป็น การใช้สัญลักษณ์ “{“ เพื่อเป็นการบอกว่าเป็นการจบ Function
ในการ include file เราสามารถใช้ เครื่อง “” แทนได้ เช่น โปรแกรมที่ 3-1 บรรทัดที่ 1สามารถเขียนได้อีกแบบคือ
#include “iostream.h”
ในหนังสือเล่มนี้จะใช้ เครื่องหมาย <>ในการ include file  
ความแตกต่างระหว่าง  <HeaderFile.h> และ <HeaderFile>
 ใน Website ของต่างประเทศมีหลาย Web ที่บอกว่าในการที่เราจะ include Header fileต่างๆ เราควรที่จะไม่กำหนดนามสกุลของ File นั้นเพื่อความเป็นมาตรฐาน เช่น
 เราควรที่จะใช้
include<iostream>
 แทนที่จะใช้
 include<iosteam.h>
 ซึ่งตรงนี้นี่ผู้เขียนไม่เห็นด้วยอย่างมากเพราะจากเท่าที่ทดลองจากหลายๆ Compiler ได้มีCompiler บางตัวไม่สนับสนุนการ include Header file ที่ไม่ได้ใส่นามสกุลด้วย เพราะฉะนั้นในหนังสือเล่มนี้การ include file ก็จะต้องมีการใส่นามสกุลของ file ด้วย
++++++++++++++++++++++++++++++
ในกรณีที่ใช้ Compiler Borland C++ 5.0 for Win หรือ ใช้ Turbo C++ 3.0 for Dos เราอาจจะไม่เห็นคำว่า Hello ‘s World ขึ้นที่จอภาพ เมื่อเราสั่งRun โปรแกรมแล้ว ถ้าโปรแกรมไม่มี Error แล้วกลับมาที่หน้าจอ Source code เลยโดยที่เรายังไม่เห็นว่ามีอะไร แสดงว่า เป็นไปได้ว่า Compiler ได้ทำงาน พิมพ์ ข้อความเสร็จสิ้นตามที่เราสั่งแล้ว จึงกลับมาหน้าจอSource code ทำให้เราไม่สามารถเห็นได้ว่าโปรแกรมมีการพิมพ์อะไรไปบ้าง วิธีแก้ปัญหาคือ ให้เราสั่งให้หน้าจอรับการกด Keyboard โดยใช้ getch() ก่อน บรรทัด return 0 และให้เราทำการ include Header file ชื่อ conio.h ดังตัวอย่างข้างล่าง
1:include <iostream.h>
2:include <conio.h>
3: int main()
4: {
5: cout << “Hello ‘s world “;
6: getch()
7: return 0;
8:  }

ถ้าหากใครใช้ Compiler ที่มีลักษณะการทำงานแบบนี้ ให้ใช้ วิธีในการแก้ปัญหา รวมถึงโปรแกรม อื่นๆ ต่อจากนนี้ด้วย
ส่วนในกรณีที่ใช้ Compiler Visual C++ 6.0 ในการเขียนโปรแกรม ภาษา C++ เมือโปรแกรมทำงานเสร็จแล้วจะมีคำว่า Press any key to continue ต่อท้ายด้วยดังรูปที่ 3-1

รูปที่ 3-1

ซึ่งลักษณะการทำงานจะไม่เหมือน Compiler ทั่วๆไป ถ้าหากมันทำให้เราเห็นว่ามันทำให้ดูส่วนของการแสดงผลไม่ค่อยถนัดเราอาจ จะ พิมพ์คำว่า cout << endl; ก่อนบรรทัด return 0;
#include <iostream.h>
1:int main()
2:{
3: cout << "Hello 's world";
4: cout << endl;
5: return 0;
6:}

รูปที่ 3-1-2

ซึ่งวิธีนี้อาจทำให้เรามองรายละเอียดของ สิ่งที่โปรแกรมพิมพ์ออกมาที่หน้าจอได้ง่ายขึ้น ส่วนการใช้ cout และ endl จะกล่าวถึงในส่วนต่อไปของบทนี้
+++++++++++++++++++++++++++++

เราสามารถทำให้ Function main ไม่มีการส่งค่ากลับไปได้ดังนี้
โปรแกรมที่ 3-2 ตัวอย่างFunction main ที่ไม่มีการส่งค่ากลับ
Source code
1: #include<iostream.h>
2: void main()
3: {
4: 
5:  cout << "Hello 's World";
6: 
7: }
บรรทัดที่ 2 :เป็นการบอกว่า Function นี้จะไม่มีการส่งค่ากลับ โดยใช้ คำว่า void นำหน้า
ชื่อ Function
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
จริงๆแล้ว ตามมาตรฐานFunction main ควรจะส่งค่ากลับเป็น integer ไม่ควรจะส่งเป็น voidหรืออย่างอื่น function main ที่ส่งค่ากลับเป็น void หรือ ไม่ส่งค่าจะใช้ได้เฉพาะบางCompiler เท่านั้น โปรแกรมที่ 3-2 เมื่อโช้ Compiler  Visual C++  หรือ ใช้ Borland C++ 5.0 จะทำงานได้ แต่เมื่อใช้  Compiler Turbo C++ 4.5 for win ของ บริษัท Borlandทำการ Compile จะมีข้อความ Error ว่า
“main must have a return type of int in function main”
ดังรูปที่ 3-2

รูปที่ 3-2



ด้วยเหตุนี้ในหนังสือเล่มนี้ Function main จะส่งค่ากลับเป็น integer
++++++++++++++++++++++++++++++++++++++++++++++++++


ภาษา C++ เป็นภาษาที่มีความยืดหยุ่นในการเขียนมาก โปรแกรมที่ 3-2 เราสามารถเขียนอีกแบบได้อย่างนี่
1: #include <iostream.h>
2: void main(){ cout << “Hello ‘s World “; }
 ถ้าเขียนในลักษณะนี้โปรแกรมจะมีการทำงานเหมือน เหมือน โปรแกรมที่ 3-2 ทุกอย่างแต่จะมีการเขียน Code ไม่เหมือนกัน คือ ทั้งหมดจะไปทำที่บรรทัดที่ 2 บรรทัดเดียวเนื่องจากโปรแกรมจะไม่มีการนับ ช่องว่างในโปรแกรม 

ถ้าหากเราเขียน Code แบบนี้
cout << “Hello ‘s World”;
กับแบบนี้
cout << “Hello ‘s World”;
ก็จะมีการทำงานเหมือนกัน เพราะ C++ จะไม่นับช่องว่างที่อยู่ระหว่าง Statement แต่ถ้าหากเราเขียน Code ว่า
cout << “Hello ‘s World”;
กับ
cout << “Hello ‘s World”;
จะมีการทำงานแตกต่างกันเพราะว่าช่องว่างถ้าอยู่ในเครื่องหมายคำพูด ก็จะถือว่าเป็นส่วนหนึ่งของข้อความ

คอมเมนต์ในโปรแกรม

 คอมเมนต์(comment)เป็นส่วนของโปรแกรมที่ใช้อธิบายถึงความหมายของโปรแกรม คอมไพเลอร์จะไม่ทำการคอมไพล์ในส่วนของ คอมเมนต์ เราควรเขียน คอมเมนต์ให้มากๆในกรณีที่มีการทำงานเป็นทีม หรือ เพื่อว่าเราต้องการให้โปรแกรมเมอร์คนอื่นมาอ่าน Code ของเรารู้เรื่อง
คอมเมนต์มีวิธีการใช้ 2 วิธี
 1.ใช้เครื่องหมาย // ส่วนของโปรแกรมที่เริ่มจากเครื่องหมาย // ไปจนจบบรรทัดจะเป็นคอมเมนต์ คอมเมนต์แบบนี้ใช้ได้ทีละบรรทัดถ้าอยากใช้ 3 บรรทัด ก็ต้องทำ 3 ครั้ง
 2.ใช้เครื่องหมาย /* */ ส่วนของโปรแกรมที่อยู่ระหว่างเครื่องหมาย /* และ */ จะเป็นคอมเมนต์ คอมเมนต์แบบนี้สามารถใช้ แค่ครึ่งบรรทัด หรือ หลายๆบรรทัดก็ได้

 ตัวอย่างการใช้ คอมเมนต์ในการอธิบายโปรแกรม

#include <iostream.h> // นี่คือคอมเมนต์แบบที่1
int main()
{ /*
 นี่คือคอมเมนต์แบบที่ 2
 */
cout << “Hello ‘s World “;
return 0;
}
เราควรจะเขียน Comment อธิบายส่วนของโปรแกรมว่าโปรแกรมนี้มีไว้ทำอะไร ใครเป็นคนเขียน สร้างขึ้นเมื่อไหร่เพื่อให้คนอื่นที่มาดู Source code ของเราได้เข้าใจ หรือ ให้ตัวเราเองเข้าใจ เพราะเวลาเราเขียน โปรแกรม เมื่อเวลาผ่านไป ซัก 4-5 เดือน แล้วรับกลับมาเขียนใหม่ถ้าไม่มีการเขียน Comment ไว้ก่อน มักจะจำไม่ได้ แล้วว่าตรงนี้หมายถึงอะไร  
ตัวอย่าง การเขียน Comment อีกแบบหนึ่ง ที่เขียนไว้ส่วนบนของ โปรแกรม
/*+++++++++++++(Comment top of Program)+++++++++++++++++++
 Program Name: 3-3.cpp
 Author : Krirk
 Description : Display “Hello ‘s World”
 Create  : 31/1/2001
 Update : 1. 1/2/2001 return 0
++++++++++++++++++++++++++++++++++++++++++++++*/
#include<iostream.h>
int main()
{
 // (Comment in Program)Print "Hello 's World" to monitor
 cout << "Hello 's World";

}
ที่อยู่ในวงเล็บคำว่า (Comment top of Program) กับ (Comment in Program) ไม่จำเป็นต้องเขียน แต่ในที่นี้เขียนเพื่อเป็นตัวอย่างว่า ส่วนในคือ Comment top of Program หรือComment in Program
นอกจากนั้นแล้วในการเขียนโปรแกรมคอมเมนต์ยังมีวิธีใช้อีกแบบหนึ่งคือเวลาที่โปรแกรมเรามีข้อผิดพลาดแล้วเรายังไม่อยากลบบรรทัดนั้นเพื่อแก้ไข เพราะยังไม่แน่ใจว่าบรรทัดนั้นคือข้อผิดพลาดหรือเปล่าเราก็ทำเป็น คอมเมนต์ก่อนก็ได้เพื่อที่จะให้ คอมไพเลอร์ไม่คอมไพล์บรรทัดนั้นจนกว่าจะแน่ใจแล้วว่าบรรทัดนั้นเป็นบรรทัดที่มีข้อผิดพลาดจริงๆ จึงค่อยลบบรรทัดนั้นออก
เช่น

1: #include <iostream.h>
2: void main()
3: {
4: cout >> “Hello ‘s World “;
5: }

เมื่อเราคอมไพล์แล้วโปรแกรมจะแจ้งว่ามีข้อผิดพลาดถ้าเราไม่แน่ใจว่าเป็นบรรทัดที่ 4 รึเปล่าเราควรเขียน คอมเมนต์ในบรรทัดที่เราต้องการจะทำให้บรรทัดที่ 4 ไม่ถูกนำไปคอมไพล์ แล้วหลังจากนั้นให้ลองแก้ไขโปรแกรมดู ในที่นี้จะใช้วิธีเพิ่มบรรทัดที่ 5 เข้าไปเมื่อลองคอมไพล์แล้วผ่านจึงตัดบรรทัดที่ 4 ออกไป

1: #include <iostream.h>
2: void main()
3: {
4: // cout >> “Hello ‘s World “;
5: cout << “Hello ‘s World “;
6: }

ที่เห็นนี่เป็นการยกตัวอย่าง ความจริงแล้ว วิธีนี้เป็นวิธีที่เหมาะกับ Code ที่มีรายละเอียดยุ่งยากมากๆ นอกจากนั้น แล้วในการเขียนโปรแกรมที่มีจำนวนบรรทัด เยอะ หลาย พัน บรรทัดในกรณีที่โปรแกรมยังมีปัญหาอยู่โดยที่ เรายังแก้ไขไม่ได้ และจะไปทำที่อืนก่อนเราอาจจะมีการเขียน Comment ที่บอกว่าในขณะนี้ code ตรงส่วนนั้นยังมีปัญหาอยู่ เพื่อว่าเราจะมา Searchหา ข้อความนันได้ โดยที่ตกลงกับคนใน Team ก่อนว่า ข้อความที่ว่านั้นคืออะไร เช่นข้อความนั้นคือ incorrect แล้ว Sourec code ที่มีปัญหาคือ บรรทัดที่ 4
#include<iostream.h>
int main()
{
 cout >> "Hello 's World";
 return 0;
}
ให้เราเพิ่ม Comment ว่า incorrect เหนือ บรรทัด ที่4แล้วบรรทัดที่ 4 เราอาจจะทำเป็นComment ด้วยก็ได้
#include<iostream.h>
int main()
{
  //incorrect
 //cout >> "Hello 's World";
 return 0;

}
 สมมุติว่าโปรแกรมนี้มีขนาด หลายหมื่นบรรทัด ตอนนี้ถ้าหากเราไปแก้ไขโปรแกรมที่ส่วนอื่นจนเสร็จแล้ว
แล้วเราจะอยากกลับมาทำในส่วนที่ยังมีปัญหาอยู่ ก็ให้ Search คำว่า incorrect โปรแกรมก็จะไปยังบรรทัดที่มีปัญหาให้

การแสดงผลข้อมูลและการรับข้อมูล

 ใน c++ การแสดงผลข้อมูลมักจะใช้ โอเปอเรเตอร์ cout(ซีเอ้าส่วนการรับข้อมูล จะใข้cin(ซีอิน)
cout มีรูปแบบการใช้ดังนี้

 cout << (ข้อความหรือตัวแปรที่ต้องการแสดงผล)
 ข้อความที่ต้องการแสดงผลถ้าเป็นตัวแปรไม่ต้องใส่เครื่องหมายคำพูด แต่ถ้าเป็นข้อความไม่ต้องใส่
เช่น  

cout << “Hello”;
โปรแกรมจะแสดงคำว่า Hello

chr Name= “Krirk”
 cout << Name;
เรากำหนดให้ตัวแปรชื่อ Name มีค่าเท่ากับ “Krirk” แล้วเมื่อเราสั่งให้โปรแกรมแสดงตัวแปรName โปรแกรมจะแสดงคำว่า Krirk โดยที่ใน Code เราไม่ต้องมีเครื่องหมายคำพูดล้อมรอบ ตัวแปร Name (รายละเอียดของตัวแปรจะมีในบที่ 4)
การใช้ cout ในการแสดงผลการคำนวณ
ถ้าเราใช้ cout กับ Statement ที่เป็นการคำนวณหรือตัวเลข โปรแกรมจะแสดงตัวเลขนั้นหรือนำตัวเลขนั้นมาคำนวณก่อนที่จะแสดงผล
เช่น
cout << 5;
โปรแกรมจะแสดงข้อความ 5
cout << 5*2
โปรแกรมจะแสดงข้อความ 10

โปรแกรมที่ 3-4 ตัวอย่างการใช้ cout แสดงการคำนวณ
Source code
1: #include<iostream.h>
2: int main()
3: {
4:  cout << 5*3;
5:  return 0;
6: }
Output :
15

อธิบาย Source Code
บรรทัดที่ 4:โปรแกรมจะแสดงข้อความ 15 โดยได้มาจาก เอา 5 มาคูณกับ 3

ถ้าเราอยากให้ แสดงข้อความ “5*3” เราต้องใส่เครื่องหมายคำพูดล้อมรอบสิ่งที่เราต้องการให้แสดงเช่น

โปรแกรมที่ 3-5 ตัวอย่างการใช้ cout แสดงข้อความ
Source code
1: #include<iostream.h>
2: int main()
3: {
4:  cout << "5*3";
5:  return 0;
6: }
Output
5*3
อธิบาย Source code
บรรทัดที่ 4:โปรแกรมจะแสดงข้อความ “5*3”

โอเปอเรเตอร์ที่ใช้ในการคำนวณเลขคณิตมี 8 ชนิดมีลักษณะและลำดับการทำงานดังนี้
โอเปอเรเตอร์ ความหมาย ลำดับการทำงาน
()  วงเล็บ จากซ้ายไปขวา
+  ค่าบวก จากขวาไปซ้าย
ค่าลบ  จากขวาไปซ้าย
*  คูณ  จากซ้ายไปขวา
/  หาร จากซ้ายไปขวา
การหารเอาแต่เศษ จากซ้ายไปขวา
บวก จากซ้ายไปขวา
ลบ จากซ้ายไปขวา


ลำดับการทำงานของ โอเปอเรเตอร์มีดังนี้
 ลำดับการทำงาน
()  1
+ -(ค่าบวก,ค่าลบ)  2
* / %   3
+ -(บวก,ลบ) 4
ใน 8 ชนิดนี้ ลงเล็บทำงานเป็นอันดับแรก ต่อด้วย ค่าบวก ค่าลบ ไปจนถึง บวก ลบ เป็น ลำดับสุดท้าย
 * / % มีลำดับการทำงานเท่ากัน + - (บวก,ลบ) ก็มีลำดับการทำงานเท่ากัน โดยจะทำจากซ้ายไปขวาซึ่งถ้าเจอ โอเปอเรเตอร์ ไหนก็จะทำงานโอเปอเรเตอร์นั้นก่อน

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

Output

-5 + 3 =-2
8 + -4 =4
++++++++++++++++++++++++++++++++
+3 + +2=
 3 + 2=
anna
บรรทัดที่ 4:เป็นการสั่งให้พิพม์ข้อความ “-5 + 3 =” แล้ว

โปรแกรมที่ 3-7 แสดงตัวอย่างลำดับความสำคัญของ โอเปอเรเตอร์ที่ใช้ในการคำนวณ
Source code
1:#include"iostream.h"
2:int main()
3:{
4: cout << "(5 + 7) * 3 = " << (5 + 7) * 3 << endl;
5: cout << " 5 + 7 * 3 = " << 5 + 7 * 3 << endl;
6: cout << " 5 * 7 + 3 = " << 5 * 7 + 3 << endl;
7: cout << " 5 + 7 * 3 - 10 = " << 5 + 7 * 3 - 10 << endl;
8: cout << " 5 + 7 * 3 / 2 = " << 5 + 7 * 3 / 2 << endl;
9: cout << " 21 / 2 = " << 21 / 2 << endl;
10: return 0;
11:}

Output

 (5 + 7) * 3 = 36
 5 + 7 * 3 = 26
 5 * 7 + 3 = 38
 5 + 7 * 3 - 10 = 16
 5 + 7 * 3 / 2 = 15
 21 / 2 = 10
อธิบาย Source code
บรรทัดที่ 4:เป็นการสั่งให้พิมพ์ข้อความ "(5 + 7) * 3 = " และก็สั่งให้แสดง ผลการคำนวณของ (5 + 7) * 3 ซึ่ง ผลลัพธ์ คือ 36 โดยที่ได้จากเอา 5 + 7 ก่อนได้ผลลัพธ์คือ 12 จากนั้น ไปคูณกับ 3
บรรทัดที่ 5:ก็คล้ายๆกับบรรทัดที่ 4 แต่เปลี่ยนเป็น 5 + 7 * 3 ผลลัพธ์คือ 26 สาเหตุที่ได้ 26เพราะว่า โอเปอเรเตอร์ * มีความสำคัญกว่า โอเปอเรเตอร์ + โปรแกรมเลยทำการคำนวณ 7 * 3 ก่อน ซึ่งได้ 21 แล้วก็เอาไปบวก 5 จึงได้ 26
บรรทัดที่ 6: 5 * 7 + 3 ผลลัพธ์ คือ 38 ซึ่งก็คำนวณตามแบบปกติ
บรรทัดที่ 7: 5 + 7 * 3 –10 ผลลัพธ์ คือ 16 ได้จากการเอา 7 ไปคูณ กับ 3 ก่อน ถึงแม้ว่าจะมีการคำนวณ 5 +7 อยู่ก่อนก็ตามแต่ แต่ลำดับการทำงานของ โอเปอเรเตอร์ * ถือว่า ต้องทำก่อน โอเปอเรเตอร์ +
บรรทัดที่ 8: 5 + 7 * 3 / 2 ผลลัพธ์ คือ 15 ได้มาจาก เอา 7 ไปคูณกับ 3 ก่อน ได้ 21 แล้วค่อยนำไป / 2 ได้ 10 แล้วจึงนำไปบวกกับ ได้ 15 จะเห็นได้ว่า 7 * 3 / 2 โปรแกรมจะไม่ทำการ เอา 3 ไปหาร 2 ก่อน แล้วค่อยนำไปคูณกับ 7 เพราะว่า * กับ / ถือว่ามีลำดับการทำงานเท่ากัน แต่ ในที่นี้ * มาก่อนโดยที่การทำงานของโปรแกรมจะเรียงลำดับจาก ซ้ายไปขวา
บรรทัดที่ 9: แสดงข้อความแล้วก็ผลลัพธ์ ของ 21 / 2 ได้ผลลัพธ์ คือ 10 เพราะการหาร โดยที่เอาจำนวนเต็มหารจำนวนเต็ม คำตอบที่ได้จะเป็น จำนวนเต็ม โดยที่จะไม่มีเศษ

การแสดงข้อความมากกว่า 1 ครั้งที่จอภาพ

 การใช้ << (โอเปอเรเตอร์พุททู) ควรจะใช้ 1 ครั้ง ต่อ 1 ตัวแปรหรือ 1 ข้อความที่จะนำไปแสดงผล แต่จะใช้ต่อกันกี่อันก็ได้จนกว่าจะ ถึงในส่วนเครื่องหมาย “;”
เช่น
 cout << “Hello “ << Name;
ในกรณีที่มีข้อความมากกว่า 1 ข้อความสามารถใช้  <<  1 ครั้งต่อหลายข้อความได้ เช่น
cout << "Hello 's World" " How are you " " I'am Doctor" ;

แต่ถ้าหากมีข้อความแล้วต่อด้วยตัวแปรหรือจำนวน ที่ไม่ใช่ข้อความแล้วจะไม่ได้ เช่น
cout << "Hello 's World" 5 ;
ในกรณีนี้ต้องเขียนเป็น
cout << "Hello 's World" << 5 ;
 นี่คือตัวอย่างโอเปอเรเตอร์พุทธูที่ผิด
1: cout << “Hello “ 5*7 ; 
2: cout << “Hello “ cout << 5*7;


บรรทัดที่ 1:ผิดตรงที่ มีโอเปเรเตอร์พุททู 1 อันแต่มีส่วนที่ต้องการให้แสดงผล 2 ส่วนคือข้อความ “Hello “ และ Statement 5*7
วิธีที่ถูกคือ
 cout << “Hello “ << 5*7;
บรรทัดที่ 2: ผิดตรงที่มีการใช้ Cout ต่อกันโดยที่ไม่มีเครื่องหมายเซมิโคล่อนเพื่อเป็นการบอกให้รู้ว่าจบ cout อันแรกแล้ว
วิธีที่ถูกคือ
 cout << “Hello “ ; cout << 5*7;

การจัดตำแหน่งการแสดงผล

 การใช้ Operator endl  
 Operator endl ใช้ในการขึ้นบรรทัดใหม่ใช้ร่วมกับ cout
เช่น cout << endl; จะเป็นการให้ขึ้นบรรทัดใหม่
โปรแกรมที่ 3-8
Source code
1: #include"iostream.h"
2: int main()
3: {
 4: cout << endl << endl << endl;
 5: cout << endl << endl << endl;
 6: cout << " Hello 's World";
7: cout << endl;
8: cout << " How are you" << endl;
9: cout << " He is programer";
 10: cout << endl << " She is guitarlist";
 11: cout << endl << endl << endl << endl ;
 12: cout << " C++ is Easy";
 13:
 14:  return 0;
 15: }
output


 Hello 's World
 How are you
 He is programer
 She is guitarlist

บรรทัดที่ 4:กับบรรทัดที่5:จะเป็นการสั่งให้ขึ้นบรรทัดใหม่ 3 บรรทัดรวมแล้วเป็ฯ 6 บรรทัด
บรรทัดที่ 6:เป็นการสั่งให้พิมพ์คำว่า “Hello ‘ s world”ที่จอภาพ
บรรทัดที่ 7:เป็นการสั่งให้ขึ้นบรรทัดใหม่
บรรทัดที่ 8: เป็นการสั่งให้พิมพ์ข้อความแล้วค่อยขึ้นบรรทัดใหม่
บรรทัดที่ 9 เป็นการสั่งให้พิมพ์ข้อความ
บรรทัดที่ 10:เป็นการสั่งให้ขึ้นบรรทัดใหม่ก่อนที่จะพิมพ์ข้อความ
บรรทัดที่ 11:เป็นการสั่งให้ขึ้นบรรทัดใหม่จำนวน 4 ครั้ง เป็น 4 บรรทัด
บรรทัดที่ 12:สั่งให้พิมพ์ข้อความ

การเคลียร์หน้าจอ

 การเคลียร์หน้าจอเราสามารถใช้ Function clrscr ได้โดยที่ก่อนที่จะใช้ Function นี้ ต้องinclude Header file conio.h ก่อน
Function clrscr มีรูปแบบการใช้ดังนี้
void clrscr()
Function นี้เป็น Function ที่ไม่มีการส่งค่ากลับคืนมา
โปรแกรมที่ 3-9 ตัวอย่างการใช้ Function clrscr
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:
4:int main()
5: {
6:  cout << "Hello 's world";
7:  clrscr();
8:    cout << "I' am programmer";
9:}

Output

I’ am programmer
อธิบาย Source code
บรรทัดที่2:เป็นการสั่งให้ Compiler include Header file ชื่อ conio.h เพื่อที่จะใช้ Function clrscr ได้
บรรทัดที่5:เป็นการสั่งให้พิมพ์คำว่า "Hello 's world"
บรรทัดที่7:เป็นการสั่งให้เคลียร์หน้าจอโดยใช้ Function clrscr
บรรทัดที่ 8:เป็นการสั่งให้พิมพ์ข้อความว่า “I’ am programmer”
เมื่อ โปรแกรมทำงานจะเห็น Output แค่ข้อความว่า I’ am programmer โดยที่ไม่เห็นข้อความว่า "Hello 's world" เนื่องจาก หลังจากที่เราสั่งพิมพ์ข้อความ "Hello 's world" ในบรรทัดที่ 5 แล้ว เราได้สั่งให้โปรแกรม เคลียร์หน้าจอโดยใช้ Function clrscr

การจัดรูปแบบเลขฐาน

 เราสามารถใช้ manipulator ในการจัดรูปแบบ เลขฐานได้ ในที่นี้คือเลขฐาน 8,10,16 เช่นเรามีเลขฐาน 10 มีค่า 500 แล้วเราต้องการให้พิมพ์ออกที่หน้าจอเป็นเลขฐาน โดยที่เราใช้manipulator จัดเลขฐานแล้วโปรแกรมจะเปลี่ยนแปลงรูปแบบการจัดเลขฐานไปตลอดจนกว่าเราจะกำหนดให้เป็นแบบเดิม ตัวจัดรูปแบบเลขฐานมีดังนี้
 dec แปลงเป็นเลขฐาน 10
 hex แปลงเป็นเลขฐาน 16
 oct แปลงเป็นเลขฐาน 8
ในC++ การกำหนดเลขฐานมีหลักการดังนี้
 ฐาน 10 ไม่ต้องมี 0 หรือ 0x นำหน้า เช่น 500  (“0” คือเลขศูนย์ ไม่ใช้ตัวโอ)
 ฐาน 16 ต้องมี 0x นำหน้า เช่น
 ฐาน 8 ต้อง มี 0นำหน้า

เวลากำหนดเลขฐาน 8 หรือ ฐาน 16 เราต้องมี 0 หรือ 0x นำหน้าตามลำดับแต่เวลาแสดงผลโปรแกรมถ้าเรากำหนดให้แสดงผลตามเลขฐานที่เรากำหนด โปรแกรม จะไม่มี 0 หรือ 0x มาให้ด้วย
เช่น
เลขฐาน 8 สั่งให้แสดงผล ฐาน 8,เลขฐาน 16 แสดงผลฐาน 16
cout << oct << 0500;
cout << hex << 0x500;
Output
500
500
แต่ถ้าเรากำหนดให้แสดงเลขฐานอื่น Output ที่ได้ก็จะแสดงเป็นเลขฐานอื่น เช่นกำหนดให้เลขฐาน 8 และ ฐาน 16 แสดงเป็นเลขฐาน 10
cout << dec << 0500;
cout << dec << 0x500;
Output
320
1280



นอกจาก manipulators ที่ใช้ในการจัดรูปแบบเลขฐานแล้วเรายังมี Function ที่ใช้ในการจัดรูปแบบเลขฐานด้วย นั่นคือ Function  setbase(int n) เป็น Functionที่ แปลงเป็นเลขฐานต่างๆไปเป็นฐาน n โดยที่สามารถแปลงเป็นเลขฐาน 8 ,10 ,16 ได้เท่านั้นไม่สามารถแปลงเป็น ฐาน 2 หรือ ฐาน อื่นๆได้ ถ้าเราไม่กำหนดค่าจะถือว่าเป็นเลขฐาน 10 โดยอัตโนมัติ ถ้าจะใช้ Function นี้ ต้อง include Header file iomanip.h ด้วย


โปรแกรมที่ 3-10
Source code
1:#include"iostream.h"
2:#include"iomanip.h"
3:
4:int main()
5:{
6: int i;
7: i = 500;
8: cout << "i base 10 =" << i ;
9: cout << endl;
10: cout << "i base 16 use hex =" << (hex) << i;
11: cout << endl;
12: cout << "i base 8 use oct =" << (oct) << i;
13: cout << endl;
14: cout << "i base 16 use setbase =" << setbase(16) << i;
15: cout << endl;
16: cout << "i base 8 use setbase =" << setbase(8) << i;
17: cout << endl;
18: cout << "Now i don't change base=" << i << endl;
19: cout << "i base 10 use setbase =" << setbase(10) << i;
20:
21: return 0;
22:}

Output
i base 10= 500 =500
i base 16 use hex =1f4
i base 8 use oct =764
i base 16 use setbase =1f4
i base 8 use setbase =764
Now i don’t change base=764
i base 10 use setbase =500

Ana
บรรทัดที่ 2:include header file ชื่อ  iomanip.h เพื่อที่จะใช้ Function setbase()
บรรทัดที่ 7:กำหนดค่า i ให้เท่ากับ 500
บรรทัดที่ 8:พิมพ์ข้อความแล้วก็ต่อด้วย i ซึ่งตอนนี้เป็น 500
บรรทัดที่ 9,11,13,15,17:เป็นการสั่งให้ขึ้นบรรทัดใหม่
บรรทัดที่ 10: cout << "i base 16 use hex =" << (hex) << i; เป็นการสั่งให้พิมพ์ข้อความแล้วต่อด้วยค่า i ซึ่งให้แสดงเป็นเลขฐาน 16 โดยใช้ << (hex) << i;
บรรทัดที่ 12:เหมือนบรรทัดที่10 แต่ เปลี่ยนเป็นให้พิมพ์เป็นเลขฐาน 8 แทน โดย ใช้ (oct)เป็น << (oct) << i;
บรรทัดที่ 14,16:เป็นการสั่งให้พิมพ์ค่า i เป็นเลขฐาน 16 และ ฐาน 8 ตามลำดับ โดยใช้Function setbase
บรรทัดที่ 17:เป็นการสั่งให้พิมพ์ข้อความ “Now i don’t change base” แล้วต่อด้วย ค่า iโดย ไม่ได้กำหนดรูปแบบเลขฐานจะเห็นได้ว่า Output เป็นเลขฐาน 8 เนื่องจากบรรทัดที่ 16เราสั่งให้ การพิมพ์ตัวเลขเป็นเลขฐาน 8 ถ้าหากเรายังไม่มีการกำหนดใหม่ ตัวเลขที่พิมพ์ก็จะเป็นฐาน 8
บรรทัดที่ 19:เป็นการสั่งให้พิมพ์ค่า i โดยที่กำหนดให้เป็นเลขฐาน 10 โดยใช้ Function setbase

การใช้ manipulator setw ในการจัดตำแหน่งข้อความ
 เราสามารถใช้ manipulator setw ในการกำหนดความกว้างของข้อความที่เราต้องการพิมพ์มีรูปแบบดังนี้
setw(n)
โดยที่ n คือจำนวนความกว้างของ ข้อความที่ต้องการพิมพ์ ดังตัวอย่างต่อไปนี้
cout << setw(8) << “Hello”;
Output
 Hello
การที่เรากำหนดค่า 8 ให้ manipulators setw แล้วต่อด้วย << “Hello” มีความหมายว่าเรากำหนดให้ความกว้างของ Hello เท่ากับ 8 โดยที่ตัวอักษรตัวสุดท้าย ของ Hello คือ ตัว o จะอยู่ที่ตำแหน่งที่ 8 แล้วตัว l จะอยูที่ตำแหน่งที่ 7 ต่อกันมาเรื่อยๆ โดยที่ตัว H จะอยู่ที่ตำแหน่ง ที่ โปรแกรมจำทำการพิมพ์ คำว่า Hello โดยที่ตำแหน่งที่ 1-3 ที่ไม่มีอะไรโปรแกรมจะพิมพ์ค่าว่างจนถึงตำแหน่งที่ 4 ที่เป็น ตัว H โปรแกรมจะพิมพ์ตัว H ไปจนถึงตัวสุดท้ายคือ ตัว o
โปรแกรมที่ 3-11
Source code
1:#include"iostream.h"
2:#include"iomanip.h"
3:
4:int main()
5:{
6: cout << setw(6) << 1 << endl;
7: cout << setw(6) << 15 << endl;
8: cout << setw(6) << 378 << endl;
9: cout << setw(6) << 4600 << endl;
10: cout << setw(6) << 666666 << endl;
11: cout << "============================" << endl;
12: cout << "Name Score Grade" << endl;
13: cout << "============================";
14: cout << endl;
15:
16: cout << setw(6) << "Krirk" << setw(10) << 90 << setw(6) << "A";
17: cout << endl;
18: cout << setw(6) << "Pung" << setw(10) << 78 << setw(6) << "B";
19: cout << endl;
20: cout << setw(6) << "Tum" << setw(10) << 17 << setw(6) << "F";
21: cout << endl;
22: cout << setw(6) << "Keakai" << setw(10) << 100 << setw(6) << "A";
23:
24:
25: return 0;
26:}
Output ดัง รูปที่ 3-3 

อธิบาย Source code
บรรทัดที่ 6:ถึงบรรทัด10:เป็นการสั่งให้พิมพ์ข้อความ(ตัวเลข)1,15,378,4600,666666 ตามลำดับ
โดยที่การสั่งพิมพ์แต่ละครั้งใช้ manipulators setw ระบุให้ความกว้างของข้อความ เป็น 6เพราะฉะนั้นตัวเลขทั้ง 5 ตัว จึงดูเหมือนลักษณะชิดขวาที่ตำแหน่งเดียวกันเนื่องจาก ตำแหน่งตัวสุดท้ายของทั้ง 5 ตัว จะพิพม์ที่ตำแหน่งที่ 6 แล้วตำแหน่งต่อมาก็ พิมพ์ ที่ตำแหน่ง ที่ 5,4,3,2,1 ตามลำดับ ตัวเลขตัวแรกคือ 1 ตำแหน่งสุดท้ายของตัวเลขนี้ก็คือ 1จึงพิพม์ที่ตำแหน่งที่ 6 ส่วนตำแหน่งต่อๆมาไม่มีก็พิมพ์ช่องว่างไปเรื่อยๆจนถึงตำแหน่งที่ 1

บรรทัดที่ 16,18,20,22 :เป็นการสั่งให้พิมพ์ข้อมูลนักเรียน ประกอบด้วยชื่อ ,คะแนน ,เกรด โดยที่การพิมพ์แต่ละบรรทัดนั้นกำหนดให้ความกว้างของชื่อแต่ละคนเท่ากับ 6 ความกว้างของคะแนน เท่ากับ 10 และความกว้างของเกรด เท่ากับ 6 เราจึงได้เห็น ตำแหน่ง ของชื่อ,คะแนน,เกรด ของแต่ละคน ชิดขวาที่ตำแหน่งเดียวกัน

การใช้ Function gotoxy ในการจัดตำแหน่งข้อความ
 Function gotoxy เป็นFunction ที่ไม่ได้เอาไว้จัดตำแหน่งข้อความแต่จะสามารถเปลี่ยนตำแหน่งของ carret หรือ cursor ได้โดยก่อนที่จะใช้ ต้อง include Header file conio.h ถึงจะใช้ได้
รูปแบบการใช้ Function gotoxy มีดังนี้
 void gotoxy(int x,int y)
void หมายถึง Function นี้ไม่มีการส่งค่ากลับคืนมา
int x หมายถึงตำแหน่งของ Columns ที่ต้องการให้ cursor ย้ายไป
int y  หมายถึงตำแหน่งของ Rows ที่ต้องการให้ cursor ย้ายไป
โปรแกรมที่ 3-12
Source code
1:#include"iostream.h"
2:#include"conio.h"
3:int main()
4:{
5: gotoxy(10,1);
6: cout << "Hello 's World";
7: cout << endl;
8: cout << "How are you";
9: gotoxy(30,1);
10: cout << "Borland C++";
11: gotoxy(5,4);
12: cout << "C++ is very easy";
13:
14: return 0;
15:
16:}
Output ดังรูปที่ 3-4
อธิบาย Source code
บรรทัดที่ 2:เป็นการ include Header file ชื่อ conio.h เพื่อที่จะสามารถใช้ Function gotoxy ได้

การพิพม์เครื่องหมายคำพูดออกทางหน้าจอ
ถ้าหากเราเขียน Source code ว่า
cout << “Hello”;
Output คือ Hello
เนื่องจากว่า cout จะทำการพิมพ์ข้อความที่อยู่ระหว่างเครื่องหมายคำพูด
แล้วถ้าหากเราอยากให้Output คือ “Hello” ที่มีเครื่องหมายคำพูดด้วย เราไม่สามารถใช้วิธีทั่วๆไปอย่างเช่น
cout << “”Hello””;
ถ้าเราเขียนแบบนี้โปรแกรมจะ Compile ไม่ผ่าน แต่เราสามารถแก้ปัญหานี้ได้โดยทำการพิมพ์ข้อความนั้นในลักษณะที่ แปลงจากรหัส Ascii ไปเป็น ตัวอักษร รหัส Ascii ของ เครื่องหมายคำพูดคือ 34
ถ้าเราเขียน Code แบบนี้
cout << char(34);
โปรแกรมก็จะแสดงผลเครื่องหมายคำพูดออกมา
โปรแกรมที่ 3-13 ตัวอย่างการแสดงผลเครื่องหมายคำพูด
Source code
1:#include"iostream.h"
2:#include"iomanip.h"
3:int main()
4:{
5: cout << char(34) << "Hello how are you" << char(34) ;
6: cout << endl;
7: cout << char(34) << "C++ is easy" << char(34);
8:
9: return 0;
10:}

Output

"Hello how are you"
"C++ is easy"
อธิบาย Source code
บรรทัดที่ 5: จาก Source code cout << char(34) << “Hello how are you” << char(34);สิ่งที่สั่งให้พิมพ์ออกทางหน้าจอคือ  char(34)  “Hello how are you” char(34)
โดยที่
สิ่งที่สั่งให้พิมพ์ การแสดงผล
char(34) “
“How are you”  How are you
char(34)  “
รวมแล้วเป็น “How are you”
บรรทัดที่ 7:ก็จะมีการทำงานคล้ายๆกับบรรทัดที่ 5 แต่เปลี่ยนข้อความเป็น “C++ is easy”
โปรแกรมที่ 3-14 ตัวอย่างการแสดงผลเครื่องหมายคำพูดอีกวิธีหนึ่ง

Cin
 มีรูปแบบการใช้ดังนี้
 Cin  << (ตัวแปรที่ต้องการเก็บ) ;
เช่น
1: int Salary;
2: Cin << Salary ;
บรรทัดที่ 1 : เป็นการประกาศตัวแปร ชนิด integer ชื่อ Salary
บรรทัดที่ 2 : เป็นการรับค่าจากคีย์บอร์ดไปใว้ในตัวแปรชื่อ Salary โดยใช้ Statement Cin
การใช้ Cin รับค่ามากกว่า 1 ค่า
เราสามารถใช้ Cin รับค่ามากกว่า 1 โดยมีรูปแบบดังนี้
 Cin  << (ตัวแปรที่ต้องการเก็บ) << (ตัวแปรที่ต้องการเก็บ) << (ตัวแปรที่ต้องการเก็บ) ;
โปรแกรมที่ 3-15 แสดงการใช้ Cin รับค่ามากกว่า 1 ค่า
#include “iostream.h”
int main()
{
 int i,j,k;
 cin >> i >> j >> k;
 return 0;
}

การแสดงผลข้อมูลและการรับข้อมูลโดยใช้ stdio.h
 โดยปกติการแสดงผลข้อมูลและการรับข้อมูลใน C++ จะใช้ Header file iostream.h ส่วน เหตุผลที่เราอาจจะใช้ Header file stdio.h ได้แก่
 - สำหรับคนที่ต้องการเขียนโปรแกรมภาษา C โดยที่ Compiler ที่ใช้อยู่ไม่รองรับiostream.h หรือ นักเรียนที่เรียนภาษา C แล้ว Compiler ก็รองรับ iostream.h ด้วย เช่นTurbo C++ 3.0 for dos ที่ ตามโรงเรียนส่วนใหญ่ใช้กัน แต่ อาจาร์ยผู้สอนไม่ยอมรับการใช้iostream.h เพราะปกติการเขียนโปรแกรมภาษา Cตาม มาตรฐานจะนิยมใช้ stdio.h มากกว่า
  - สำหรับคนที่ต้องการเขียนภาษา C++ แต่อยากประหยัดทรัพยากรของเครื่อง เพราะจริงๆแล้วการใช้ iostream.h จะช้าและเปลืองทรัพยากรมากกว่า stdio.h

ในหนังสือเล่มนี้จะกล่าวถึงการใช้ stdio.h ในบทนี้เท่านั้นเพราะ C++ จะเน้นการใช้ iostream.h มากกว่า

การแสดงผลข้อมูลโดยการใช้Function printf()
 การแสดงผลข้อมูลโดยใช้ Function printf() มีรูปแบบดังนี้
printf(“formatString”)
โปรแกรมที่ 3-3
Source code
#include “stdio.h”
int main()
{
 printf(“Hello World”);
 printf(“I ‘ am programer”);
 return 0;
}

สรุปเนื้อหาในบท

 ในบทนี้ได้มีการกล่าวถึง การเขียนโปรแกรมภาษา C++ เบื้องต้นและการแสดงผลข้อมูล และการรับข้อมูล โดยใช้ cout ,cin ,printf,scanf และการใช้ โอเปอเรเตอร์ในการคำนวณ การจัดข้อความในการแสดง และการ include Header file ในบทนี้ได้มีการใช้ตัวแปรด้วย ซึ่งรายละเอียดของตัวแปร จะกล่าวถึงในบทต่อไป

ไม่มีความคิดเห็น:

แสดงความคิดเห็น