หน้าเว็บ

วันพุธที่ 21 กรกฎาคม พ.ศ. 2553

ภาษา C และ C++

ภาษา C และ C++

ก่อนที่เราจะเข้าสู่การเขียนโปรแกรมภาษา C++ กัน เราจะมาทำความเข้าใจกันอย่างละเอียด ๆ กันก่อนถึงคำถามที่ผู้อยากเขียนโปรแกรมภาษา C++ สงสัยกันว่า ระหว่างภาษา C และ C++ นั้นมีความแตกต่างกันอย่างไร และจะศึกษาภาษาใดถึงจะดีที่สุดในปัจจุบัน ผู้ที่จะตอบให้ได้ดีที่สุดนั้นก็คือ ตัวท่านผู้ศึกษาเอง หนังสือและตำราทั้งหลายเป็นเพียงแหล่งข้อมูลเท่านั้น ดังนั้น ในบทแรกนี้ เรามาทำความเข้าใจให้ตรงกันเสียก่อนว่า ทำไมจะต้องเป็น C++ แค่ C ยังไม่พออีกหรือ…
ยินดีต้อนรับการก้าวเข้าสู่โลกของ C++ ณ บรรทัดต่อจากนี้


จากภาษา C สู่ C++


ถ้าจะอธิบายเริ่มจากประวัติของโปรแกรมคอมพิวเตอร์แล้วล่ะก็ อาจจะยาวเกินไป และบางท่านที่หยิบหนังสือเล่มนี้ก็คงจะมีความรู้และชั่วโมงบินในการเขียน โปรแกรมมากันแล้ว จึงจะขอพูดถึงระดับของภาษากันเลย คือ ภาษาคอมพิวเตอร์นั้นแบ่งออกเป็น 2 ระดับใหญ่ ๆ คือ ระดับสูง (High Level Langauge) และระดับต่ำ (Low Level Langauge) แต่ในตำราบางเล่ม อาจจะแบ่งถึง 3 ระดับก็ไม่เป็นไร
ภาษาระดับสูงนั้นได้แก่ ภาษา Basic , Pascal , C และภาษาคอมพิวเตอร์ที่ดูแล้วเข้าใจง่ายเพราะใช้คำในภาษาอังกฤษเป็นคำสั่งของภาษา เราเรียนไม่เกินสัปดาห์ก็สามารถเขียนโปรแกรมเล็ก ๆ ได้แล้วครับ แต่สำหรับภาษาระดับต่ำนั้น ได้แก่ ภาษาเครื่อง , แอสแซมบลี้ (Assembly) เป็นต้น ซึ่งเข้าใจได้ยาก เพราะบางคำสั่งเป็นตัวย่อ หรือเป็นเลขฐาน แต่การทำงานของภาษาระดับต่ำนั้นเร็วครับ ติดต่อกับระบบเครื่องหรือระบบฮาร์ดแวร์ได้ดี
ภาษา C เป็นภาษาหนึ่งในภาษาระดับสูง และเป็นภาษาแบบโครงสร้างด้วย คือ ไม่จำเป็นต้องมีเลขประจำบรรทัด ถ้าเราย้อนอดีตกลับไปในยุคที่คอมพิวเตอร์ยังไม่มีโปรแกรมระบบปฏิบัติการวินโดวส์ (Windows) กันเลย เรามีระบบปฏิบัติการดอส (DOS) การทำงานทุกอย่างจะอยู่ในดอสหมด อยู่บนบรรทัดคำสั่ง การเขียนโปรแกรมในยุคนั้น ก็จะใช้โปรแกรมภาษาดังต่อไปนี้


ภาษา BASIC โดยมีโปรแกรม GWBASIC, BASICA, QBASIC เป็นตัวแปลภาษา
ภาษา Pascal โดยใช้โปรแกรม Turbo Pascal ในการแปลโปรแกรม
ภาษา C ใช้โปรแกรม Turbo C ในการแปลโปรแกรม
ภาษา Assembly ใช้โปรแกรม TASM , MASM ในการแปลโปรแกรม


นอกจากนี้ภาษาอื่น ๆ ที่ไม่ได้กล่าวถึงก็เช่นกัน การเขียนโปรแกรมจะเขียนบนตัวอิดิตเตอร์ (Editor) ที่มีมาให้กับตัวแปลภาษาเลย เมื่อเขียนโปรแกรมเสร็จแล้วก็จะทำการแปลโปรแกรม หรือที่เรียกว่า Compile เราก็สามารถสร้างโปรแกรมประยุกต์ขึ้นมากันได้แล้ว ซึ่งจะทำงานในเท็กซ์โหมด (Text Mode) และสามารถทำงานในกราฟิกโหมดได้ด้วย (Graphic Mode)
ในขณะที่ยุคของระบบปฏิบัติการแบบเท็กซ์ เช่น DOS กำลังจะถูกวินโดวส์เข้ามาแทนที่ การพัฒนาโปรแกรมก็เริ่มเปลี่ยนจากการพัฒนาโปรแกรมบนดอส มาเป็นการเขียนโปรแกรมบนวินโดวส์แทน วินโดสว์ในยุคแรก ๆ ที่เราคุ้นเคยกันก็คือ Windows 3.1 , Windows for Workgroup เป็นต้น
ในช่วงก่อนหน้านี้นั่นเอง ที่ได้เกิดแนวคิดที่เรียกว่า OOP ขึ้น OOP ย่อมาจาก Object Oriented Programming ก็คือ แนวคิดในการมองทุก ๆ อย่างให้เป็นวัตถุนั่นเอง แนวคิดนี้ ได้กลายมาเป็นแนวคิดในการทำงานของระบบปฏิบัติการวินโดวส์และระบบปฏิบัติการ หลาย ๆ ตัวด้วยกัน และจากแนวคิดนี้เอง ก็ได้เกิดภาษาคอมพิวเตอร์ที่พัฒนาต่อมาจากภาษา C นั่นก็คือ ภาษา C++ ซึ่งใช้โครงสร้างภาษาเหมือนกับภาษา C ทุกอย่าง แต่ได้เพิ่มความรัดกุมมากขึ้นในเรื่องของการใช้คำสั่งและฟังก์ชั่น พร้อมกับได้เพิ่มความสามารถในการประกาศคลาส ซึ่งเป็นตัวแปรในแบบ OOP และหลังจากที่ภาษา C++ และแนวคิดของ OOP เป็นที่ยอมรับ และได้นำไปใช้ในการพัฒนาโปรแกรมต่าง ๆ มากมาย ไม่ว่าจะเป็นตัวระบบปฏิบัติการหรือโปรแกรมประยุกต์ ทั้งบนวินโดวส์และบนระบบปฏิบัติการอื่น ๆ เช่น ลีนุกซ์ (Linux) และก็ยังมีการพัฒนาตัวแปลภาษาให้มีความสามารถสูงขึ้น ๆ ตามความสามารถของระบบปฏิบัติการ เช่น Visual C++ , Visual Studio , Visual Studio .NET เป็นต้น แต่อย่างไรก็ตาม พื้นฐานของภาษา C และการเขียนโปรแกรมแบบ OOP ใน C++ ก็ยังเป็นรากฐานในการพัฒนาภาษาใหม่ ๆ ขึ้นมาอีกหลายภาษา เช่น จาวา (Java) , ซีชาร์ป (C#) เป็นต้น
การที่เราจะพัฒนาโปรแกรมภาษา C++ ได้นั้น จะต้องมีโปรแกรมสำหรับแปลภาษาก่อน นั่นก็คือ Turbo C++, Borland C++ , Microsoft C/C++ , Visual C++ ฯลฯ.. โปรแกรมแปลภาษาเหล่านี้ สามารถแปลโปรแกรมได้ทั้งภาษา C และภาษา C++ ซึ่งก็ขึ้นอยู่กับว่าเรากำหนดให้นามสกุลของไฟล์เป็นภาษาอะไร ถ้าเขียนโปรแกรมภาษา C ให้กำหนดนามสกุลของไฟล์โปรแกรมเป็น .C แต่ถ้าเขียนโปรแกรมที่มีการประกาศคลาสหรือใช้ความสามารถของ OOP ด้วยล่ะก็ ให้กำหนดนามสกุลของไฟล์โปรแกรมนั้นให้เป็น .CPP
บางท่านอาจจะสงสัยว่า การบันทึกไฟล์โปรแกรมให้เป็น .C กับ .CPP นั้นมีข้อแตกต่างกันตรงไหน เพื่อให้เข้าใจมากขึ้น เรามาดูตัวอย่างกันดีกว่า ยกตัวอย่างโปรแกรมภาษา C ชื่อ TESTC.C ดังนี้

#include

int a,b,c;

plus()
{
printf("ans=%d\n",c);
}

main()
{
a=10;
b=20;
c=a+b;
plus();
}

โปรแกรม TESTC.C นี้ ถ้าเราแปลโปรแกรมโดยใช้ Visual C++ จะไม่มีปัญหา สามารถทำงานได้ตามปกติ แต่ถ้าเราบันทึกเป็นไฟล์นามสกุล TESTC.CPP ล่ะก็ แล้วแปลโปรแกรมด้วย Visual C++ ใหม่ จะเกิดข้อความเตือนเกี่ยวกับการคืนค่าของฟังก์ชั่น plus( ) ลักษณะนี้
warning C4508: 'plus' : function should return a value; 'void' return type assumed
warning C4508: 'main' : function should return a value; 'void' return type assumed

ข้อความเตือนในข้างต้น ได้บอกว่า ฟังก์ชั่น plus และ main นั้นจะต้องมีการคืนค่าโดยคำสั่ง return ด้วย ที่เป็นเช่นนี้ก็เพราะว่า ในภาษา C++ นั้น มีข้อกำหนดอย่างหนึ่งก็คือ ถ้าเราเขียนฟังก์ชั่นขึ้นมาลอย ๆ แบบในข้างต้น C++ จะถือว่าฟังก์ชั่นนั้นคืนค่ากลับมาเป็นแบบ int ทันที ดังนั้น ถ้าเราสร้างฟังก์ชั่นแบบที่ไม่มีการคืนค่าใด ๆ กลับมา จะต้องใส่ void นำหน้าด้วยเพื่อเป็นการบอกให้ตัวแปลภาษาทราบว่าเป็นฟังก์ชั่นที่ไม่มีการคืนค่า ดังนั้น โปรแกรมจะต้องเปลี่ยนเป็น TESTC.CPP ดังต่อไปนี้ ข้อความเตือนจากการแปลโปรแกรมก็จะไม่ปรากฏอีก
โปรแกรม TESTC.CPP มีดังนี้

#include

int a,b,c;

void plus()
{
printf("ans=%d\n",c);
}

void main()
{
a=10;
b=20;
c=a+b;
plus();
}

ตรงจุดนี้คือ ข้อแตกต่างเล็ก ๆ น้อย ๆ ที่เราสามารถสังเกตได้จากการที่เรานำเอาโปรแกรมภาษา C มาแปลโปรแกรมในแบบ C++ ซึ่งจะเห็นได้ว่า การเขียนโปรแกรมภาษา C++ มีความเข้มงวดมากขึ้น เนื่องมาจากในการเขียนโปรแกรมแบบ OOP ในเรื่องของการสร้างฟังก์ชั่นในคลาสจำเป็นจะต้องระบุการคืนค่าของฟังก์ชั่นด้วย ไม่เช่นนั้น โปรแกรมอาจจะไม่สามารถแปลภาษาได้ รายละเอียดส่วนนี้เราจะได้ศึกษาในบทต่อ ๆ ไป


ก่อนเข้าสู่ OOP ต้องรู้จักฟังก์ชั่นก่อน


ความรู้พื้นฐานอย่างหนึ่งที่ท่านจะต้องศึกษาให้เข้าใจมากเป็นพิเศษก็คือการใช้งานฟังก์ชั่นในภาษา C เพราะว่าเมื่อท่านเขียนโปรแกรมในระดับสูงขึ้นไป การเขียนโปรแกรมแบบหลาย ๆ บรรทัดเรียงกันเต็มหน้าจอก็จะไม่ค่อยมีให้เห็นอีกแล้ว โดยมากโค้ดโปรแกรมที่ยาว ๆ จะถูกยุบให้เป็นฟังก์ชั่น ๆ หนึ่ง จากนั้นก็เรียกใช้เอาตามต้องการ ดังนั้น เรื่องของฟังก์ชั่น จึงเป็นเรื่องพื้นฐานเรื่องแรกที่ท่านจะต้องทำความเข้าใจให้ดี
ก่อนเข้าสู่ C++ ทบทวนเรื่องของฟังก์ชั่น ดังต่อไปนี้

1. วิธีการสร้างฟังก์ชั่น


ท่านจะต้องศึกษาวิธีการที่ใช้ในการสร้างฟังก์ชั่นไว้ใช้เอง ออกแบบและสร้างได้อย่างไร วางไว้ที่บรรทัดไหนในโปรแกรม ยกตัวอย่างเช่น ถ้าเราเขียนฟังก์ชั่นไว้ด้านล่างฟังก์ชั่น main( ) ดังตัวอย่างต่อไปนี้

void main( )
{
call( );
}

void call( )
{
//
}

โค้ดในข้างต้นลักษณะนี้ ท่านจะไม่สามารถเรียกใช้ฟังก์ชั่น call( ) ได้ เนื่องมาจากฟังก์ชั่น main( ) ไม่รู้จักฟังก์ชั่น call() เพราะว่ามันถูกเขียนเอาไว้ด้านล่าง จากบรรทัดที่อยู่ใน main( ) มันมองหาฟังก์ชั่น call( ) ไม่เจอเมื่อเราแปลโปรแกรม เราจะพบกับข้อความ Error ฟ้องออกมาว่า
Function "call" should have a prototype
ซึ่งมีความหมายเป็นภาษาไทยว่า
“ถ้าจะให้เรียกฟังก์ชั่น call() ได้นั้น ให้ประกาศฟังก์ชั่นต้นแบบเอาไว้ก่อน main() นะ”
ฟังก์ชั่นต้นแบบ หรือ Prototype Function นี้ มีไว้เพื่อบอกให้ตัวแปลภาษารู้ว่า ในโปรแกรมนี้ ยังมีฟังก์ชั่นชื่อว่า call( ) อยู่นะ แต่อยู่ด้านล่างของ main( ) ดังนั้น เราจะต้องแก้ไขโค้ดโปรแกรมให้เป็นดังนี้ จึงจะใช้ได้

void call( );

void main( )
{
call( );
}

void call( )
{
//
}

หรืออีกวิธีหนึ่งก็คือ ให้ประกาศฟังก์ชั่น call( ) เอาไว้ด้านบนก่อน main( ) เลย ดังนี้

void call( )
{
//
}

void main( )
{
call( );
}

2. การคืนค่าของฟังก์ชั่น


เราสามารถกำหนดให้ฟังก์ชั่นส่งค่ากลับมายังจุดที่เรียกใช้ได้ โดยใช้คำสั่ง return แต่ก่อนที่จะใช้คำสั่ง return นั้นเราจะต้องดูก่อนว่า เราจะส่งค่าประเภทใดกลับไป ถ้าเป็นค่าจำนวนเต็ม เราจะต้องเปลี่ยนคำว่า void ที่อยู่หน้าฟังก์ชั่นให้เป็น int ดังตัวอย่างต่อไปนี้

int call( );

void main( )
{
int a;
a = call( );
}

int call( )
{
return 5+6;
}

จากตัวอย่าง จะเห็นได้ว่าฟังก์ชั่น call( ) เป็นฟังก์ชั่นแบบ int และให้คืนค่า 5+6 (ซึ่งก็คือ 11) กลับไปยังจุดที่เรียกใช้ ดังนั้น ถ้าเราไม่เปลี่ยนจาก void ให้มาเป็น int เราก็จะไม่สามารถส่งค่ากลับไปได้เลย
บางท่านอาจจะสงสัยว่า ในการเขียนฟังก์ชั่นให้ส่งค่ากลับนั้นมีดีที่ตรงไหน และมีประโยชน์อะไร ถ้าเราเขียนโปรแกรมเล็ก ๆ น้อย ๆ เราอาจจะยังไม่เห็นประโยชน์ของมันมากนัก การคืนค่าจะช่วยให้ลดการสร้างตัวแปรได้มากขึ้น เพราะฟังก์ชั่นจะทำงานเสมือนกับตัวแปร ๆ หนึ่ง และโค้ดโปรแกรมจะลดบรรทัดลง ท่านควรที่จะศึกษาเรื่องนี้ไว้ เพราะเมื่อท่านเขียนศึกษาการโปรแกรมไปเรื่อย ๆ และได้พบกับโจทย์ปัญหาบ่อย ๆ ท่านก็จะพบว่าการคืนค่ากลับจากฟังก์ชั่นนั้นจะช่วยให้การเขียนโปรแกรมของ ท่านมีความสดใสมากขึ้นเลยทีเดียว

3. การส่งค่าไปให้ฟังก์ชั่น


เราสามารถส่งค่าให้กับฟังก์ชั่นได้ เพื่อให้ฟังก์ชั่นนำเอาค่าที่ส่งไปนี้ไปประมวลผล เราเรียกค่าที่ส่งนี้ว่า “พารามิเตอร์” หรือจะเรียกว่า “อากิวเมนต์” ก็น่าจะได้เหมือนกัน ลองดูตัวอย่างต่อไปนี้

#include

int call( int a , int b );

void main( )
{
printf("answer = %d\n", call( 10 , 20 ) );
}

int call( int a , int b )
{
return a+b;
}

จากตัวอย่างจะเห็นได้ว่า ฟังก์ชั่น call รับพารามิเตอร์ 2 ตัวคือ a กับ b เราได้เรียกโดยผ่านฟังก์ชั่น printf ส่งค่า 10 และ 20 ไปให้กับ call( ) และมันก็จะคืนค่ากลับมาโดยเอาเลขทั้งสองบวกกัน เพราะฉะนั้น ฟังก์ชั่น call( ) จึงคืนค่ากลับมาเป็น 30 แสดงออกทางจอภาพโดย printf ต่อมานั่นเอง
ความรู้พื้นฐานเรื่องของฟังก์ชั่นที่ได้กล่าวไปนี้ จะเป็นรากฐานสำคัญที่จะช่วยผลักดันให้เราศึกษาภาษา C++ และ OOP ง่ายขึ้น เพราะในบทต่อ ๆ ไป ท่านจะพบกับการเรียกใช้ฟังก์ชั่น และการประกาศฟังก์ชั่นลักษณะนี้มากขึ้นเรื่อย ๆ เมื่อท่านเข้าใจในเรื่องของฟังก์ชั่นแล้ว มันก็จะกลายเป็นเรื่องที่ทำความเข้าใจได้ง่ายขึ้น เมื่อท่านศึกษาการเขียนโปรแกรม


จะเริ่มเรียนภาษา C หรือ C++ ก่อน


การเริ่มต้นศึกษาการเขียนโปรแกรมภาษา C++ นั้น อันดับแรกควรจะเริ่มศึกษาจากภาษา C ก่อน เพราะดังที่ได้อธิบายไปแล้ว ข้อแตกต่างระหว่าง C และ C++ ก็คือเรื่องของการประกาศคลาสในแบบของ OOP และรายละเอียดปลีกย่อยอื่น ๆ เท่านั้น นอกจากนั้น เรายังคงใช้ความรู้เดิมที่เกี่ยวกับภาษา C ล้วน ๆ
ผู้ที่ต้องการศึกษาภาษา C++ หลาย ๆ ท่านเคยถามว่า จะเรียน C++ เลยได้หรือไม่ ไม่ต้องเรียน C ก่อน คำตอบก็คือ "ได้" แต่ถ้าท่านเข้าคอร์สเรียนภาษา C++ เลย ท่านจะได้เรียนเกี่ยวกับ OOP , การสร้างคลาสในขณะที่คำสั่งเบื้องต้นของภาษา C ยังไม่ได้เรียนเลย และถ้าท่านจำเป็นจะต้องเขียนโปรแกรมด้วยภาษา C++ เพื่อใช้ในการคำณวนเลขหรือทศนิยมล่ะ ท่านอาจจะทำไม่ได้เพราะพื้นฐานของภาษา C ยังไม่มี
พราะฉะนั้น ถ้าท่านต้องการที่จะเขียนภาษา C++ ได้ ควรเริ่มที่ภาษา C อย่าไปติดอยู่ที่ว่ามันเป็นคนละภาษา มันคือภาษาที่ต่อเนื่องกัน เหมือนกันกับเด็กที่โตขึ้นจนเป็นผู้ใหญ่ ไม่ใช่คนละคนกัน แต่เป็นการต่อเนื่องเช่นเดียวกัน
ขอสมมติตัวอย่างง่าย ๆ ที่เห็นได้ชัด ๆ เลยก็คือ

นายเอก อยากเขียนโปรแกรมภาษา C++ เป็น นายเอกเคยศึกษาการเขียนโปรแกรม Visual Basic กับ Delphi มาก่อน แต่ไม่เคยเรียนภาษา C หรือ C++ จากคอร์สไหนมาเลย นายเอกจึงเสาะแสวงหาที่เรียน ไปเจออยู่ที่หนึ่ง เป็นคอร์สสอนภาษา C++ รายละเอียดของคอร์สนี้เขียนไว้ดังนี้
- คลาสและอ็อปเจ็กต์ (Class and Object)
- การสืบทอดคลาส (Inheritance in C++)
- โพลิมอฟิซึมใน OOP (Polymorphm in OOP)
- การประยุกต์ C++ บนวินโดวส์ (C++ for Windows Application)
ขอถามท่านผู้อ่านว่า นายเอกเมื่อเข้าคอร์สนี้แล้ว นายเอกจะเข้าใจใน C++ หรือไม่ ??

เราลองมาพิจารณากัน ถ้านายเอกเข้าใจ ก็แสดงว่า นายเอกเป็นผู้ที่เก่งมาก ๆ เพราะเขาสามารถเข้าใจในการใช้ OOP กับ C++ ได้ แน่นอน นายเอกอาจจะเข้าใจในทฤษฎีของ OOP ระดับหนึ่ง เพราะมีความรู้ด้าน Visual Basic และ Delphi มาบ้างแล้ว แต่เมื่อมาศึกษาในเรื่องของตัวภาษาของ C++ อาจจะสับสน เพราะถ้านายเอกไม่ได้มีความรู้ในเรื่องของภาษา C มาก่อนเลย นายเอกก็จะไม่รู้จักประเภทของตัวแปรในภาษา C ไม่รู้ว่าการเขียน if..else และเครื่องหมายเปรียบเทียบในภาษา C นั้นเป็นอย่างไร รู้แต่ในภาษา Visual Basic เท่านั้น เพราะฉะนั้น เราสามารถพอสรุปได้แล้วว่า ถ้าเราเริ่มต้นศึกษาภาษา C++ เลยนั้น อาจจะต้องใช้เวลาที่นานสักหน่อย เพราะเราจะต้องหันกลับไปเปิดตำราดูคู่มือการเขียนโปรแกรมภาษา C ควบคู่ไปด้วย
แต่ถ้านายเอก.. ศึกษาภาษา C มาก่อน นายเอกจะได้เรียนรู้ในเรื่องดังต่อไปนี้มาแล้ว
- การใช้คอมไพเลอร์และลิงค์เกอร์ในภาษา C
- ฟังก์ชั่น main( )
- การประกาศตัวแปรในภาษา C แบบ int , char , float , char *
- การเปรียบเทียบในภาษา C ( == , != , < , > , <= , >= )
- คำสั่งเปรียบเทียบและทำซ้ำ เช่น if..else , for( ) , do..while , while( )
- การคำณวนในภาษา C เช่น +, - , * , / , % , ++ , -- , *= เป็นต้น
- อะเรย์ 1 มิติ, 2 มิติ และ 3 มิติ
- การสร้างฟังก์ชั่นในภาษา C
- ตัวแปรแบบโครงสร้าง (Struct)
- การเขียนข้อมูลไฟล์และการอ่านไฟล์ (File I/O)
จากข้างต้น คือ เนื้อหาของภาษา C ที่นายเอกจะได้ศึกษา และเป็นเนื้อหาที่ท่านผู้อ่านหนังสือเล่มนี้ได้ศึกษากันมาในระดับหนึ่งแล้ว เพราะฉะนั้น เมื่อท่านมาศึกษาต่อในเรื่องของ C++ กับหนังสือเล่มนี้ จะไม่ขออธิบายในเนื้อหาดังกล่าว เพราะท่านสามารถศึกษาได้จากตำราภาษา C ของสำนักพิมพ์และผู้แต่งคนเดียวกันนี้

การศึกษาไปพร้อมกับหนังสือเล่มนี้
การศึกษาไปพร้อมกับหนังสือเล่มนี้ ขอให้ท่านศึกษาไปทีละลำดับ ๆ พร้อมกับทำตัวอย่าง เนื้อหาแต่ละส่วน ๆ ได้ทำการจัดลำดับตามความยากง่ายเอาไว้แล้ว ซึ่งอาจจะแตกต่างออกไปจากตำราเล่มอื่น เนื่องจากได้จัดลำดับเนื้อหาเพื่อเน้นการปฏิบัติจริงมากกว่าการอธิบายทฤษฎีของ OOP ให้หมดก่อนแล้วค่อยเข้าสู่การปฏิบัติ
หลังจากที่ท่านได้ศึกษาเรื่องของ C++ และ OOP แล้ว ภาษาที่ท่านจะศึกษาต่อไป ท่านจะทำความเข้าใจกับมันได้ง่ายขึ้น ไม่ว่าจะเป็น C# หรือภาษา Java เนื่องจากท่านได้ศึกษาแนวคิดของ OOP ด้วยภาษา C++ เรียบร้อยแล้ว ขอให้ท่านบอกกับตัวเองว่า "คิดในแบบวัตถุ" (Think in object) แล้วท่านก็จะเข้าใจภาษา C++ และแนวคิดของ OOP โดยไม่ยาก

เอาล่ะครับ เรามาเปิดโลกของ "Object" กันในบทต่อไปเลยครับ

ที่มา http://members.tripod.com/mt_kmitnb/Computer_Programming/ch01.htm

วันอังคารที่ 20 กรกฎาคม พ.ศ. 2553

YAESU FM-9012


SPECIFICATIONS

General

Frequency Ranges

TX: 144 to 146 MHz or 144 to 148 MHz.

RX: 144 to 146 MHz or 136 to 174 MHz.

Channel Steps

5, 10, 12.5, 15, 20, 25, 50, 100 kHz

Frequency Stability

Better than ±10 ppm (–20° C to +60° C)

Repeater Shift

±600 kHz

Emission Type

F2D , F3E

Antenna Impedance

50 Ohm.

Supply Voltage

13.8 V DC (±15%), negative ground

Current Consumption

RX: less than 0.7 A (signal)

less than 0.3 A (squelched)

TX: 10 A (50W) / 7A (25W) / 5A (10W) / 4A (5W)

Operating Temperature

– 4° F to +140° F (–20° C to +60° C)

Case Size

5.6" x 1.6" x 5.8"

140 x 40 x146 mm (w/o knobs / connectors)

Weight

2.6 lb / 1.2 kg

Transmitter

RF Power Output

50 W / 25W / 10W / 5W

Modulation Type

Variable Reactance

Maximum Deviation

Wide ±5 kHz / Narrow ±2.5 kHz

Spurious Emissions

Better than –60 dB

Microphone Impedance

2 kΩ

Receiver

Circuit Type

Double-Conversion Superheterodyne

Intermediate Frequencies

1st : 21.7 MHz

2nd: 450 kHz

Sensitivity

Better than 0.2 μV for 12 dB SINAD

Selectivity

Wide 12 kHz / 28 kHz(–6 dB / –60 dB)

Narrow 9 kHz / 22 kHz(–6 dB / –60 dB)

AF Output

3.0 W @4 Ω for 10 % THD

IF Rejection

Better than 70 dB

Image Rejection

Better than 70 dB

Features :

- Keyboard Frequency Entry from Microphone

- Four user-programmable "SOFT" keys on Microphone

- llluminated Front Panel keys for Nightime use

- Memory Channels with Alpha-Numeric Labeling

- Eight emory Banks for Organizing Memqry Channels

- Adjustable Mic Gain, and Wide/Narow Deviation & RX Bandwidth

- Enhanced Paging and Code Squelch System (EPCS)

- CW Trainer: Practice Morse code Between QSOs!

- Security Password helps Prevent Unauthorized use

- One-Touch Access to WiRES-II VolP Intemet Linking! And much, much more…..

- Big Three Watts of Audio Output

- Automatic Repeater Shift (ARS)

- Automatic Power-Off (APO)

- Busy Channel Lock Out (BCLO)

- Dual Watch

- Multi-level Display Dimmer

- RF-level Squelch

- Advanced Track Tuning (ATT) for excellent Intemod rerection

- Time-Out Timer (TOT)

- ARTS (Auto-Range Transponder System)

- DTMF Auto-dialer

- Smart Search" Automatic Memory Loading Versatile VFO and Memory Scanning.

ICOM IC-2200T

คุณสมบัติ :

- ความถี่รับ-ส่ง 144.000 -146.000 MHz.
- กำลังส่ง High = 50 Watts.
Middle = 25 Watts.
Mid.low = 10 Watts.
Low = 5 Watts.
- 207 memory channels ( incl. 6 scan edges and 1 call CH. )
- มีฟังก์ชั่นพื้นฐานและ ฟังก์ชั่นใหม่ๆอีกมากมาย

อุปกรณ์เครื่อง :

- ตัวเครื่อง, ไมค์ HM-133V, ขาตั้งเครื่อง, สายไฟเข้าเครื่อง, คู่มือใช้งาน

ลักษณะของเครื่อง ICOM IC-2200-T

ตัวเครื่อง IC-2200-T เครื่อง ICOM รุ่นนี้ออกแบบมาใกล้เคียงกับ ICOM รุ่น IC-2100-T ไม่ว่าจะเป็นตำแหน่งของปุ่มกดหรือ Dial Volume และ SQL จะเหมือนกัน แต่ลักษณะการออกแบบของ ICOM รุ่นนี้จะออกแบบแตกต่างจากรุ่น ICOM IC-2100-T เล็กน้อยบริเวณด้านหน้าของเครื่อง และ ฮีทซิงก์ น้ำหนักของเครื่องอยู่ที่ 1,300 กรัม (เฉพาะตัวเครื่อง) ตัวเครื่องจะเป็นสีดำทั้งตัว ส่วนด้านหลังจะมี Connector สำหรับ Antenna และ DC power อยู่ในตำแหน่งเดิมตามแบบของ ICOM แต่ส่วนที่จะมีเพิ่มขึ้นมาจากรุ่นก่อน คือ บริเวณ Jack สำหรับเสียบลำโพงนอก จะมี Jack สำหรับเชื่อมต่อ PC (computer) สาย DC power เป็นสายดำแดง มีกระบอก Fuse ทั้งขั้วบวกและลบ ยาวประมาณ 3 เมตร ส่วนขาตั้งจะมีจุดยึดน๊อตข้างซ้ายและขวาอย่างละสองจุด ด้านล่างอีก 5 จุด โดยในถุงใส่น๊อตจะมี Fuse DC สำหรับสาย DC Power อีก 2 ตัว

Microphone HM-133V เป็น Microphone เหมือนๆ กับรุ่น ICOM IC-2100-T มีขนาดเบาน้ำหนัก 300 กรัม และสายที่เชื่อมต่อกับตัวเครื่องเป็นเกลียว มี Jack แบบ 8 pin (RJ 45) ทั้งหัวและท้าย Microphone รุ่นนี้จะมี Function ใหม่เพิ่มขึ้นมา คือ จะมีปุ่มปรับ SQL ได้ที่ Microphone และมีปุ่ม Bank/Option ไว้ใช้งานอีกด้วย

มีอะไรใหม่...ในเครื่องรุ่นนี้
ICOM IC-2200-T เป็นรุ่นที่มีการพัฒนาและปรับปรุง จากรุ่นเดิมให้ดีขึ้น โดยในส่วนของ Logic Unit ก็ได้มีการเพิ่มเติม ช่องสำหรับเสียบ Option UT-118 ซึ่ง UT-118 จะสามารถส่ง Data ได้ถึง 4.8 Kbps. บันทึก Call signs ได้ถึง 6 Call signs จากสถานีอื่นๆ หรือจะส่ง Message ได้ 20 ตัวอักษร นอกจากนี้ ยังสามารถเชื่อมต่อกับ GPS ภายนอก เพื่อระบุตำแหน่งและพิกัดที่อยู่ได้อีกด้วย ที่บริเวณ Main Unit จะมี Diode 2 ตัวเพื่อป้องกันความร้อนในกรณีที่มีการใช้งานต่อเนื่องนานๆ ส่วน Features อื่นที่มากับตัวเครื่อง คือ ICOM IC-2200-T Memory ช่องความถี่ได้ถึง 207 ช่องความถี่ มีระบบ Scan แบบ Dynamic Memory Scan (DMS) มี Tone CTCSS และ DTCS สามารถบันทึก DTMF 24 DTMF, เรียกแบบ Pager มี Mode FM Narrow สามารถเลือก Squelch Delay ได้ มี Attenuator 10 dB และมีกำลังส่ง 4 ระดับ คือ Hi, Mid low และ Low

การทดสอบเครื่อง รับ-ส่ง
สำหรับ ผู้ใช้ที่เคยใช้งาน ICOM รุ่น IC-2000 และ IC-2100 มาแล้ว ICOM รุ่นนี้ จะมี Function ที่คล้ายๆ กัน ไม่ว่าจะเป็นตำแหน่งของปุ่มต่างๆ หรือ จุด Connector ต่างๆ หรือรูปร่างลักษณะของเครื่อง และหลังจากป้อนไฟเข้าไปที่ 13.8 Volt และ ON เครื่องขึ้นมา ความสว่างของหน้าจอ LCD ชัดเจนมาก และสามารถปรับ Dimmer เพื่อลดทอนแสงสว่างจากหน้าจอได้ ไฟหน้าจอ LCD สามารถเปลี่ยนสีได้ 2 สี คือ สีส้ม และ เขียว ทดสอบภาคส่งโดยตั้งความถี่ที่ 144.000, 145.000 และ 146.000 ตามความถี่ของสมัครเล่น กำลังส่งที่วัดได้จะอยู่ที่ 10.3 Watt จากนั้นทดสอบที่ Mid 5 Watt และ Low 1 Watt ส่วนภาครับที่วัดได้อยู่ที่ 0.16 ไมโครโวล์ ที่ 12 dBS ส่วน Function อื่นๆ จะเหมือนกับ ICOM รุ่น IC-2100-T ..............

( ข้อมูลจาก G.Simon Radio.Co.,Ltd )

วันจันทร์ที่ 19 กรกฎาคม พ.ศ. 2553

รหัส มอส

A .-
B -...
C -.-.
D -..
E .
F ..-.
G --.
H ....
I ..
J .---
K -.-
L .-..
M --
N -.
O ---
P .--.
Q --.-
R .-.
S ...
T -
U ..-
V ...-
W .--
X -..-
Y -.--
Z --..
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.
Fullstop (จบประโยค) .-.-.-
Comma ( , ) --..--
Query ( ? ) ..--..

รหัส มอร์สภาษาไทย

พยัญชนะ
ก – –· ข ฃ –·–· ค ฅ ฆ –·– ง –·– –· จ –··–·
ฉ – – – – ช –··– ซ – –·· ญ ·– – – ด ฎ –··
ต – ถ ฐ –·–·· ท ธ ฑ ฒ –··– – น ณ –· บ –···
ป ·– –· ผ – –·– ฝ –·–·– พ ภ ·– –·· ฟ ··–·
ม – – ย –·– – ร ·–· ล ฬ ·–·· ว ·– –
ศ ษ ส ··· ห ···· อ –···– ฮ – –·– – ฤ ฤๅ ·–·– –

สระ
สระ ะ ·–··· สระ า ·– สระ อิ ··–·· สระ อี ·· สระ อึ ··– –·
สระ อื ··– – สระ อุ ··–·– สระ อู – – –· สระ เ · สระ แ ·–·–
ไ ใ ·–··– โ – – – สระ อำ ···–·

วรรณยุกต์
ไม้เอก ··– ไม้โท ···– ไม้ตรี – –··· ไม้จัตวา ·–·–·

เครื่อง หมาย
ไม้หัน อากาศ ·– –·– ไม้ไต่คู้ ·– – –· การันต์ – –··– ไม้ยมก –·– – –
ฯ – –·–· ฯลฯ – – –·– " " ·–··–· ( ) –·– –·–