!
บทที่ 1 แนะนําภาษา C++ เบือ้ งตน ♦!ประวัตภิ าษา C , C++ ค.ศ. 1970 มีการพัฒนาภาษา B โดย Ken Thompson ซึ่งทํางานบนเครือ่ ง DEC PDP-7 ซึ่ง ทํางานบนเครือ่ งไมโครคอมพิวเตอรไมได และยังมีขอจํากัดในการใชงานอยู (ภาษา B สืบทอดมาจาก ภาษา BCPL ซึง่ เขียนโดย Marth Richards) ค.ศ. 1972 Dennis M. Ritchie และ Ken Thompson ไดสรางภาษา C เพื่อเพิ่มประสิทธิภาพ ภาษา B ใหดียิ่งขึ้น ในระยะแรกภาษา C ไมเปนทีน่ ยิ มแกนกั โปรแกรมเมอรโดยทัว่ ไปนัก ค.ศ. 1978 Brian W. Kernighan และ Dennis M. Ritchie ไดเขียนหนังสือเลมหนึง่ ชือ่ วา The C Programming Language และหนังสือเลมนี้ทาให ํ บุคคลทั่วไปรูจักและนิยมใชภาษา C ในการเขียน โปรแกรมมากขึน้ แตเดิมภาษา C ใช Run บนเครือ่ งคอมพิวเตอร 8 bit ภายใตระบบปฏิบัติการ CP/M ของ IBM PC ซึ่งในชวงป ค. ศ. 1981 เปนชวงของการพัฒนาเครือ่ งไมโครคอมพิวเตอร ภาษา C จึงมี บทบาทสําคัญในการนํามาใชบนเครือ่ ง PC ตัง้ แตนน้ั เปนตนมา และมีการพัฒนาตอมาอีกหลาย ๆ คาย ดังนัน้ เพือ่ กําหนดทิศทางการใชภาษา C ใหเปนไปแนวทางเดียวกัน ANSI (American National Standard Institute) ไดกาหนดข ํ อตกลงทีเ่ รียกวา 3J11 เพื่อสรางภาษา C มาตรฐานขึน้ มา เรียนวา ANSI C ค.ศ. 1983 Bjarne Stroustrup แหงหองปฏิบตั กิ ารเบล (Bell Laboratories) ไดพัฒนาภาษา C++ ขึ้นรายละเอียดและความสามารถของ C++ มีสวนขยายเพิ่มจาก C ที่สาคั ํ ญ ๆ ไดแก แนวความคิดของการ เขียนโปรแกรมแบบกําหนดวัตถุเปาหมายหรือแบบ OOP (Object Oriented Programming) ซึง่ เปนแนว การเขียนโปรแกรมที่เหมาะกับการพัฒนาโปรแกรมขนาดใหญที่มีความสลับซับซอนมาก มีขอมูลที่ใชใน โปรแกรมจํานวนมาก จึงนิยมใชเทคนิคของการเขียนโปรแกรมแบบ OOP ในการพัฒนาโปรแกรมขนาด ใหญในปจจุบนั นี้
♦!ขอ ดีของภาษา C และ C++ โปรแกรมเมอรโดยทัว่ ไปในปจจุบนั นิยมพัฒนาโปรแกรมดวยภาษา C และ C++ ดวยเหตุผล ดังนี้ 1. โปรแกรมเมอรสามารถสรางโปรแกรมทีค่ วบคุมการทํางานของคอมพิวเตอรและการโตตอบ ระหวางผูใชกับคอมพิวเตอรไดอยางเต็มประสิทธิภาพ เชน การเขียนโปรแกรมในลักษณะที่ผูใชควบคุม โปรแกรมในสภาพแวดลอม ที่เปน Event-Driven คือ ผูใชสามารถควบคุมเหตุการณตาง ๆ ของโปรแกรม ศิริชัย นามบุรี
!
แนะนําภาษา C++ เบือ้ งตน
!
2 ในขณะทํางานไดไมใชผูใชถูกควบคุมโดยโปรแกรม ลักษณะการทํางานแบบ Event-Driven ไดแก โปรแกรมทีท่ างานในสภาพแวดล ํ อมภายใตระบบปฏิบัติการวินโดวส เปนตน 2. ภาษา C และ C++ มีประสิทธิภาพของภาษาอยูในระดับที่ใกลเคียงกับภาษา Assembly มากที่ สุด แตมคี วามยืดหยุน ในยึดติดกับฮารดแวรคอมพิวเตอรหรือ Microprocessor รุน ใดรุน หนึง่ ทําใหสามารถ นําโปรแกรมที่สรางขึ้นไปทํางานไดกบั เครือ่ งคอมพิวเตอรไดทกุ รุน 4. ภาษา C++ สนับสนุนการเขียนโปรแกรมในลักษณะเชิงวัตถุหรือ OOP (Object Oriented Programming) ซึง่ เปนเทคนิคการเขียนโปรแกรมทีน่ ยิ มใชเขียนโปรแกรมขนาดใหญทม่ี จี ํานวนขอมูลใน โปรแกรมมาก 5. โปรแกรมเมอรสวนใหญจะนิยมใชภาษา C, C++ พัฒนาโปรแกรมประยุกตในงานดานตาง ๆ เปนจํานวนมากในปจจุบัน เพราะประสิทธิภาพของภาษาที่ไดเปรียบภาษาอื่น ๆ
♦!ขัน้ ตอนการพัฒนาโปรแกรมดวย C++ การพัฒนาโปรแกรมดวยภาษา C++ มีขั้นตอนในการสรางคลายกับภาษาระดับสูงทั่วไป แตภาษา C++ ไดจดั เตรียมเครือ่ งมือในการพัฒนาโปรแกรมในสภาพแวดลอมทีร่ วมไวดว ยกันแบบเบ็ดเสร็จ ที่เรียก วา IDE (Integrated Development Environment) คือ ไดนาเครื ํ อ่ งมือทีจ่ าเป ํ นทัง้ หมดในการพัฒนา โปรแกรมมารวมไว ดวยกัน ทั้ง Editor, Compiler, Link Library และ Help เพื่อความสะดวกของผูใชใน ขณะทําการพัฒนาโปรแกรม การพัฒนาโปรแกรมดวยภาษา C++ มีขั้นตอนตามลําดับ ดังนี้ 1. ขัน้ ตอนการสราง Source File หรือแฟมตนฉบับเปน Text File โดยการใชสวน Editor ของ IDE (หรือสรางจาก Editor ของโปรแกรมอืน่ ๆ ก็ได) เมือ่ สรางเสร็จ แลวจึงบันทึก Source File ไว โดย กําหนดสวนขยายเปน CPP เชน TEST.CPP (C Plus Plus) โดย Source File นีจ้ ะตองสรางใหถกู ตองตาม โครงสรางและไวยากรณของภาษา C++ ทั้งหมดกอน 2. การคอมไพล (Compile) คือการใชตวั โปรแกรมหรือ Compiler ของ C++ ในการแปล Source File ใหเปนไฟลภาษาเครื่องที่เรียกวา Object File หรือ Object Code จะไดไฟลที่มีสวนขยายเปน OBJ เพิ่มขึ้นมาอีกหนึ่งไฟล เชน TEST.OBJ 3. การเชือ่ มโยง (Linking) เปนขัน้ ตอนการเชือ่ มโยงไฟลประเภท OBJ เขากับแฟมจากคลัง (Library) ของภาษา C++ จํานวน 1 แฟมหรือมากกวา ซึ่งไฟลใน Library นีจ้ ดั เตรียมไวโดยผูส รางภาษา C++ ผลก็คือจะไดผลลัพธเปนไฟลที่สามารถนําไปทํางาน หรือ Run ไดโดยอิสระ หรือทีเ่ รียกวา Executable File มีสวนขยายเปน EXE เชน TEST.EXE เปนตน ขัน้ ตอนของการสราง Source File , การ Compile และการ Link ทั้งหมดจะดําเนินการไดใน IDE ของ C++ ทีจ่ ดั เตรียมไวใหแลวอยางอัตโนมัติ ทําใหผูเขียนโปรแกรมสามารถทําสรางโปรแกรมดวย ภาษา C++ สะดวกยิ่งขึ้น ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
3
! Source File ! TEST.CPP ! Compile ! Object File ! TEST.OBJ
!
C++ Library File iostream.h, conio.h
Link
! Executable File ! TEST.EXE
! รูปแสดง ขัน้ ตอนการพัฒนาโปรแกรมดวย C++
♦!การใช IDE ของ C++ ในการพัฒนาโปรแกรมดวยภาษา C++ โดยใช Turbo C++ Version 3.0 มี ซึง่ ไดจดั เตรียมเครือ่ ง มือในการพัฒนาโปรแกรมทีเ่ รียกวา IDE มาใหแลว ลักษณะการใชงานใน IDE มีความคลายคลึงกับ Editor ของภาษาระดับสูงอื่น ๆ เชน BASIC, PASCAL การเรียกใช IDE ของ C++ ใหเขาเรียกใชไฟล TC.EXE ดังนี้ C:\TC>TC แลวกดแปน Enter หรือ C:\TC\BIN>TC แลวกดแปน Enter (กรณี TC.EXE อยูใน path C:\TC\BIN) โปรแกรมสภาพแวดลอมของ IDE ดังนี้จอภาพตอไปนี้
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
4
การเปด IDE ของ TURBO C++ version 3.0 ในระบบปฏิบัติการ Windows'95 ในลักษณะหนา ตางแบบ Graphic ก็สามารถทํางานไดเชนเดียวกัน โดยการเลือกโปรแกรม MS-DOS Prompt จากเมนู ของ Windows'95 เมือ่ เครือ่ งหมาย prompt ของ DOS ปรากฏขึ้นแลว ก็ใหเปลี่ยน directory ไปยัง path ของ Turbo C++ ดังนี้ C:\>cd\tc C:\TC>TC
[enter] [enter] เพื่อ run program
จะปรากฎ IDE ของ Turbo C++ ดังภาพขางลางในรูปแบบ Graphic windows (ถาไมเปนดังภาพ ให กดแปน Alt+Enter เพื่อสลับการแสดงผลระหวาง Graphic window กับ IDE แบบเดิม
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
5
! พิมพ Code ของภาษา C++ ใน ! Editor นี้
♦!ตัวอยางวิธกี ารเขียนโปรแกรมและ Compile ดวย C++ จากตัวอยาง Source File ตอไปนี้ ใหทดลองสรางโปรแกรมภาษา C++ โดยใช IDE ของ Turbo C++ 3.0 ของบริษทั Borland International, Inc. (หรืออาจใช C++ ของบริษทั อืน่ ๆ ) /*Program : First.CPP Written by: Mr.Sirichai Date : 10/1997 */ #include <iostream.h> void main(void) { cout << "My name is Mr.Sirichai Namburi \n"; cout << "Office : Computer Department,RIPA"; }
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
6 ขัน้ ที่ 1 สราง Source File ใน Editor โดยการ Click Mouse ในหนาตาง Editor แลวพิมพ รหัส คําสั่งของภาษา C++ ตามตัวอยางใหถูกตอง ขัน้ ที่ 2 บันทึกแฟม Source File โดยใชคาสั ํ ่งเมนู File, Save เลือกหรือพิมพชื่อไดรฟและ ไดเรกทอรี่ จากนั้นพิมพชื่อไฟล First.CPP แลว Click ปุมคําสั่ง OK หรือใชฟงกชันคีย F2 เพื่อสั่ง บันทึกแฟมก็ได (ถาตองการเขียนเปนภาษา C ใหบันทึกเปนไฟลเปนประเภท C เชน First.C) ขัน้ ที่ 3 ใชคาสั ํ ่งสั่ง Run, Run หรือ Ctrl+F9 เพือ่ ทําการ Compile , Link และทดลอง Run โปรแกรมทีส่ รางขึน้ เพือ่ ทํางาน จากนั้นกดแปน Alt+F5 เพือ่ ดูผลการทํางานของโปรแกรมในหนาตาง ผลลัพธ (User Screen) ผลการทํางานจากโปรแกรม หรือผลการ RUN ไดดงั นี้ My name is Mr.Sirichai Namburi Office : Computer Department,RIPA ขัน้ ที่ 4 กรณีมีขอผิดพลาด IDE ของ C++ จะไมสามารถทําการ Compile ได จะแจงขาวสารขอผิด พลาดไวในกรอบหนาตาง Message จะตองแกไขใหถูกตองกอน แลวจึงดําเนินการในขัน้ ที่ 3 ใหม
♦!โครงสรางของโปรแกรม C++ การเขียนโปรแกรมดวย C++ มีโครงสรางของโปรแกรมพืน้ ฐานดังตัวอยาง /*Program : First.CPP Written by: Mr.Sirichai Date : 10/1997 */ #include <iostream.h> void main() { cout << "My name is Mr.Sirichai Namburi \n"; cout << "Office : Computer Department,RIPA"; }
1. หมายเหตุหรือคําอธิบาย (comments) 2. Preprocessor, Directive, header file 3. Function main() 4. Statement ของคําสั่งอยูใน block ของ เครือ่ งหมาย{ …. }แตละ Statement จบดวย ;
สวนประกอบเบื้องตนของ C++ มีดังนี้ 1. Comments or Remark หมายถึงสวนทีเ่ ปนการอธิบายหรือหมายเหตุในโปรแกรม เขียน อธิบายไวในเครื่องหมาย /* ………*/ หรือเขียนตามหลังเครือ่ งหมาย // ก็ได ในขณะที่แปล Compiler ของ C++ จะไมนาไปแปลด ํ วย แตตอ งเขียน Comments อยูภายในเครื่องหมายใหถูกตอง โดยที่ /*…..*/ ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
7 มักใชกับ Comment หลาย ๆ บรรทัด สวน // ใชกับการ Comments ตามหลัง Statement เปนสวนใหญ เชน /*Program : First.CPP Written by: Mr.Sirichai หมายเหตุหรือคําอธิบาย Date : 10/1997 */
หรือ cout << "My name is Mr.Sirichai Namburi \n";
// display text to screen
2. #include <iostream.h> บรรทัดทีข่ น้ึ ตนดวย # นีจ้ ะตองมีเสมอในทุกโปรแกรม เรียกวา preprocessor เรียกคําวา include ทีต่ ามเครือ่ งหมาย # นีว้ า directive และชื่อไฟลที่อยูในเครื่องหมาย <…..> (จะใชเครือ่ งหมาย “……” แทนก็ได) เรียกวา header file หรือ include file ซึ่งเปนไฟลที่เก็บไว ในคลังคําสั่ง (Library File) ของ C++ ขอสังเกต การเขียน preprocessor directive จะตองเขียนรายการละ 1 บรรทัด และไมตอง มีเครือ่ งหมาย ; ที่ทายประโยค #include <iostream.h> หมายถึง การสั่งให Compiler นําสิ่งที่อยูในไฟลที่กําหนดชือ่ มา ให คือไฟล iostream.h มารวมกับ source file ขณะทําการ link เพือ่ ใหได Executable file นัน่ หมาย ความวา ในโปรแกรมทีเ่ ราสรางขึน้ ไดมีการเรียกใชฟงกชันที่ถูกเก็บไวใน Header File นัน้ 3. void main() เปนการเรียกใชฟง กชนั หลักของโปรแกรมคือ ฟงกชัน main() ซึ่งจะตองมีชื่อ ฟงกชันนี้เสมอ ฟงกชัน main() เปนฟงกชันหลัก จะประกอบไปดวยวงเล็บเปด { เปนการเริม่ ตนภายในมี การประกาศตัวแปร มีประโยคคําสั่งของภาษา C++ มีชื่อฟงกชันอื่น ๆ ที่ผูเขียนสรางขึ้นแลวเรียกใชภาย ในฟงกชัน main() แลวจบฟงกชันดวยวงเล็บปด } คําวา void เปนชือ่ ประเภทขอมูล(data type) ที่ใหคาวาง จะทําใหฟงกชันไมมีการสงคา ใด ๆ กลับไปยังชื่อฟงกชันที่ถูกเรียกใช ทั้งนี้ เนื่องจากใน C++ เมื่อมีการเรียกใชฟงกชันใดฟงกชันหนึ่ง เมื่อฟงกชันทํางานเสร็จแลว จะตองสงคาคืนกลับมายังจุดที่เรียกใชชื่อฟงกชันเสมอ เพื่อไมใหสงคืนคาใด ๆ กลับมา จึงใชคาว ํ า void เพื่อกําหนด main() ใหเปนฟงกชันที่ไมตองคืนคากลับมา ณ จุดเรียกใชหรือ เปนฟงกชนั ประเภทไมมคี า นัน่ เอง 4. cout << "My name is Mr.Sirichai Namburi \n"; cout << "Office : Computer Department,RIPA"; เปนสวนของประโยคคําสั่งหรือ Statement ในภาษา C++ ซึ่งตองเขียนใหถูกตองตามไวยากรณ ของภาษา ทุกประโยคตองจบดวยเครือ่ ง semicolon (;) เสมอ สําหรับคําวา cout เปน object ซึ่งถูกเก็บไว ในไฟล iostream.h ดังนัน้ จึงตองกําหนดชื่อไฟล iostream.h ไวในสวนของ preprocessor directive ดวย
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
8 header file ที่สามารถใชรวมกับ #include ใน C++ เพื่อใหสามารถเรียกใชคาสั ํ ่งหรือฟงกชันตาง ๆ ทีผ่ ใู ชตอ งการได ไดแกรายชื่อไฟลในตารางตอไปนี้ โดยกอนที่จะเรียกใช header file ใดนัน้ ผูใชจะ ตองตรวจสอบกอนวาฟงกชันที่ตองเรียกใชถูกสรางไวใน header file ใด เชน ถามีการเรียกใชฟงกชัน getch() ในโปรแกรม จะตองเขียน preprocessor directive เรียกใช header file ที่ชื่อ conio.h เนือ่ งจาก ฟงกชัน getch() ถูกเก็บไวในไฟล conio.h ซึ่งเปนคลังคําสั่ง (Library) ของ C++ มีรูปแบบการเรียกใช ดังนี้ #include <conio.h> ตาราง แสดงรายชื่อ Header file ใน C++ และรายละเอียดกลุมฟงกชันที่เรียกใชไดในแตละ herder file Header File Groups of Functions in Header file
alloc.h assert.h Bcd.h Bios.h complex.h Conio.h ctype.h Dir.h Direct.h Dirent.h Dos.h Errno.h Fcntl.h Float.h fstream.h ศิริชัย นามบุรี
Declares memory management functions (allocation, deallocation, etc.). Defines the assert debugging macro. Declares the C++ class bcd and the overloaded operators for bcd and bcd math functions. Declares various functions used in calling IBM-PC ROM BIOS routines. Declares the C++ complex math functions. Declares various functions used in calling the DOS console I/O routines. Contains information used by the character classification and character conversion macros. Contains structures, macros, and functions for working with directories and path names. Defines structures, macros, and functions for working with directories and path names. Declares functions and structures for POSIX directory operations. Defines various constants and gives declarations needed for DOS and 8086-specific calls. Defines constant mnemonics for the error codes. Defines symbolic constants used in connection with the library routine open. Contains parameters for floating-point routines. Declares the C++ stream classes that support file input and output. แนะนําภาษา C++ เบือ้ งตน
!
9 Header File
generic.h graphics.h io.h iomanip.h iostream.h Limits.h locale.h malloc.h math.h mem.h memory.h new.h process.h search.h setjmp.h share.h signal.h stdarg.h stddef.h stdio.h
ศิริชัย นามบุรี
Groups of Functions in Header file
Contains macros for generic class declarations. Declares prototypes for the graphics functions. Contains structures and declarations for low-level input/output routines. Declares the C++ streams I/O manipulators and contains macros for creating parameterized manipulators. Declares the basic C++ (version 2.0) streams (I/O) routines. Contains environmental parameters, information about compile-time limitations, and ranges of integral quantities. Declares functions that provide country- and language-specific information. Memory management functions and variables. Declares prototypes for the math functions, defines the macro HUGE_VAL, and declares the exception structure used by matherr. Declares the memory-manipulation functions. (Many of these are also defined in string.h.) Memory manipulation functions. Access to operator new and newhandler. Contains structures and declarations for the spawn... and exec... functions. Declares functions for searching and sorting. Defines a type used by longjmp and setjmp. Defines parameters used in functions that use file-sharing. Defines constants and declarations for signal and raise. Defines macros used for reading the argument list in functions declared to accept a variable number of arguments. Defines several common data types and macros. Defines types and macros needed for the Standard I/O Package defined in Kernighan and Ritchie and extended under UNIX System V. Defines the standard I/O predefined streams stdin, stdout, stdprn, and stderr, and declares stream-level I/O routines. แนะนําภาษา C++ เบือ้ งตน
!
10 Header File
Groups of Functions in Header file
stdiostr.h
Declares the C++ (version 2.0) stream classes for use with stdio FILE structures. stdlib.h Declares several commonly used routines: conversion routines, search/sort routines, and other miscellany. stream.h Declares the C++ (version 1.2) streams (I/O) routines. string.h Declares several string- and memory-manipulation routines. strstrea.h Declares the C++ stream classes for use with byte arrays in memory. sys\locking.h Definitions for mode parameter of locking function. sys\stat.h Defines symbolic constants used for opening and creating files. sys\timeb.h Declares the function ftime and the structure timeb that ftime returns. sys\types.h Declares the type time_t used with time functions. time.h Defines a structure filled in by the time-conversion routines, and a type used by other time routines; also provides prototypes for these routines. utime.h Declares the functions utime and the structure utimbuf values.h Defines important constants, including machine dependencies; provided for UNIX System V compatibility. varargs.h Defines old style marcos for processing variable argumnet lists. Superceded by stdarg.h ํ ง่ Help, Index ! หมายเหตุ ถาตองการทราบวา header file ประกอบดวยฟงกชั่นใดบาง ใหใชคาสั ! จากเมนูใน IDE ของภาษา C++ เพื่อคนหารายละเอียดและตัวอยางการใชฟงกชัน !
♦!ไอเด็นติฟายเออร (identifier) ใน C++ ไอเด็นติฟายเออร (identifier) หมายถึง ชื่อที่มีอยูในสวนตาง ๆ ของโครงสรางโปรแกรม C++ ซึ่งไดแก ชือ่ ของ เลเบล (label) คอนสแตนต (constant) แวเรียเบิลหรือตัวแปร (variable) ฟงกชัน (function) และชนิดของขอมูล (data type) ประเภทของไอเด็นติฟายเออร มี 3 ประเภท คือ keyword , standard identifier และ user-defined ! identifier มีรายละเอียด ดังนี้ 1. Keyword เปนชื่อที่มีความหมายและวิธีการใชแนนอน ไดกาหนดไว ํ ในภาษา C++ แลว ! คอมไพเลอรจะไมยอมใหเราใชชื่อนี้ในลักษณะที่แตกตางไปจากที่กาหนดไว ํ ตัวอยางของ keyword เชน void if else int char float case auto return !
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
11 2. Standard Identifier หมายถึง ชื่อที่กําหนดขึน้ ในคอมไพเลอร ชื่อเหลานี้มีความหมายและวิธี ! ใชตามเงื่อนไขที่คอมไพเลอรกาหนดไว ํ แตเราสามารถเปลี่ยนแปลงวิธีการทํางานและเงื่อนไขการใชชื่อ เหลานีไ้ ด โดยคอมไพเลอรจะยกเลิกเงื่อนไขเดิมและเปลี่ยนมาใชเงื่อนไขที่เรากําหนดขึ้นใหม standard identifier สวนใหญจะเปนชื่อฟงกชันที่มีอยูใน C++ เชน abort, abs, arc, ftime, getch, open, rename เปนตน 3. User-defined identifier หมายถึง ชือ่ ทีเ่ รากําหนดความหมายและเงือ่ นไขในการใชขน้ึ เองโดย ผูใช แตตั้งกําหนดขึ้นตามกฎเกณฑของ C++ ซึ่งมีรายละเอียดของกฎการตั้งชื่อ ดังนี้ - อักขระตัวแรกตองเปนตัวอักษรหรือ underscore ( _ ) จะเปนตัวเลขไมได ตัวอักขระตัว ตอไปจะเปนตัวอักษร ตัวเลข หรือเครือ่ งหมาย _ ก็ได เรียงกันโดยหามมีชองวางภายในชื่อ - ชื่อหามซํากั ้ บคียเวิรด (Keywords) ของภาษา C++ เชน main void if - คอมไพเลอรจะถือวาอักษรพิมพเล็กและพิมพใหญ มีความแตกตางกัน ดังนัน้ Identifier ชื่อFIRST_PROGRAM กับ first_program จะถือวาเปนชื่อตางกันและเปนคนละชื่อกัน - ชื่อมีความยาวไมจํากัด แตจะมีความหมายเฉพาะอักขระ 32 ตัวแรกเทานัน้ แตควรตัง้ ชื่อใหมีความหมายสอดคลองกับวัตถุประสงคการนําชือ่ นัน้ ไปใชภายในโปรแกรม เพื่อความสะดวกใน การจดจําในขณะเขียนโปรแกรม
♦!ชนิดของขอมูล(Data Type) ขอมูลใน C++ แบงชนิดขอมูลออกเปน 2 ประเภท คือ 1. Simple data type เปนชนิดขอมูลที่ใชแสดงคาของสิ่งใดสิ่งหนึ่งเพียงรายการเดียว เชน คา ความสูง นําหนั ้ ก จํานวนนักเรียน อุณหภูมิ ระดับคะแนน เปนตน 2. Structure เปนขอมูลชนิดใชแสดงคาของสิ่งใดสิ่งหนึ่งหลายรายการ เชน ความสูงของนัก เรียนใน ชั้น ม. 6, อุณหภูมขิ องแตละวันในเดือนตุลาคม, รายชือ่ นักเรียนใน 1 กลุม ตองกําหนดเปนขอมูล ชนิดโครงสรางแบบ อารเรย (array) แบบโครงสราง(structure) หรือแบบยูเนียน(union) เปนตน ขอมูล Simple data type รายละเอียดชนิดของมูลและชวงของขอมูลประเภท Simple data type แสดงไดดงั ตารางตอไปนี้
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
12 ตาราง แสดงชือ่ ชนิดของขอมูล ชวงของคาขอมูลและขนาดหนวยความจําที่ใช ชนิดขอมูล คาตํ่าสุด คาสูงสุด ใชพื้นที่หนวยความจํา char -128 127 1 byte unsigned char 0 255 1 byte int -32,768 32,767 2 byte unsigned int 0 65,535 2 byte short int -32,768 32,767 2 byte long -2,147,483,648 2,147,483,647 4 byte unsigned long 0 4,294,967,295 4 byte float 3.4x10-38 3.4x10+38 4 byte double 1.7x10-308 1.7x10+308 8 byte long double 3.4x10-4932 3.4x10+4932 10 byte หมายเหตุ ชือ่ ชนิดของขอมูลไดแก char, unsigned char , int , unsigned int, short in, long , unsigned long , float , double , long double เปน keyword ที่นาไปกํ ํ าหนดประเภทขอมูลที่จะใชใน โปรแกรม •! ตัวอยางโปรแกรม size_mem.cpp เปนตัวอยางโปรแกรมแสดงขนาดของหนวยความจําทีข่ อ มูลแตละชนิดใชพื้นที่หนวยความจํา โดยใช คียเ วิรด sizeof ซึ่งใหคาขนาดหนวยความจําทีข่ อ มูลชนิดนั้นใช มีหนวยเปน byte /*Program : size_mem.cpp Process : Display size of memory for each simple data type */ #include <iostream.h> #include <conio.h> void main() { clrscr(); //clear screen in conio.h cout<< "Size of char = "<<sizeof(char)<< " bytes"<<endl; cout<< "Size of unsigned char = "<<sizeof(unsigned char)<< " bytes"<<endl; cout<< "Size of int = "<<sizeof(int)<< " bytes"<<endl; cout<< "Size of unsigned int = "<<sizeof(unsigned int)<< " bytes"<<endl; cout<< "Size of short int = "<<sizeof(short int)<< " bytes"<<endl; cout<< "Size of long = "<<sizeof(long)<< " bytes"<<endl; cout<< "Size of unsigned long = "<<sizeof(unsigned long)<< " bytes"<<endl; cout<< "Size of float = "<<sizeof(float)<< " bytes"<<endl; cout<< "Size of double = "<<sizeof(double)<< " bytes"<<endl; cout<< "Size of long double = "<<sizeof(long double)<< " bytes"<<endl; getch(); //wait for press any key } ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
13
♦!การประกาศตัวแปร (Variable Declaration) และการกําหนดคาใหตวั แปรใน C++ ตัวแปร (Variables) ในภาษา C++ หมายถึง ชื่อที่กําหนดขึน้ เพือ่ ใชเก็บคาของขอมูลหรือคาคงที่ ประเภทตาง ๆ ในขณะโปรแกรมทํางาน ซึง่ ผูเ ขียนโปรแกรมตองตัง้ ชือ่ ตัวแปรตามกฎเกณฑการตัง้ ชือ่ ประเภท user defined identifier การใชตัวแปรในภาษา C++ จะตองมีการประกาศ (Declaration) ชือ่ ตัวแปรและประเภทของตัว แปร (Data type) ไวกอน จึงจะสามารถนําตัวแปรไปใชในโปรแกรมได มีรปู แบบการประกาศตัวแปรดัง นี้
Data_type variable_name; หรือ ! Data_type variable_name1, variable_name2,varible_name3, … ;
โดยที่ Data_type คือ ชือ่ ของประเภทขอมูลของตัวแปร ที่สามารถเก็บคาได เชน int, float variable_name คือ ชื่อของตัวแปรที่ผูใชกาหนดเอง ํ ถาในประเภทนั้นมีมากกวา 1 ตัวให ใชเครือ่ งหมาย , แยก และจบประโยคดวยเครื่องหมาย ; (semi-colon) การประกาศตัวแปรเพือ่ ใชในโปรแกรมของ C++ มี 2 ลักษณะ คือ 1. definition คือ เปนการประกาศเพื่อกําหนดความหมาย เปนประโยคคําสั่งที่ประกอบดวย ชื่อ ประเภทของตัวแปร และตัวแปร โดยทั่วไปมักจะประกาศไวตอนตน ๆ ของฟงกชัน หรือโปรแกรม เชน #include <iostream.h> void main() { int number; float sales, purchase; การประกาศตัวแปรในลักษณะ definition char grade; … } 2. การประกาศแบบกําหนดคา ณ ตําแหนงทีใ่ ช หมายถึง การประกาศตัวแปร ณ ตําแหนงที่ ตองการใชตวั แปรในโปรแกรม ก็จะประกาศพรอมกับหนดคาใหกับตัวแปรทันที ดังตัวอยางโปรแกรม ตัวอยางโปรแกรม pos_var.cpp แสดงวิธีการประกาศตัวแปร ณ จุดทีต่ อ งการใชในโปรแกรม /*Program : pos_var.cpp Process : Show declared varaible at any position in program */ #include <iostream.h> #include <conio.h> void main() ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
14
{ float sale,price; clrscr(); sale=500.25; price=5.25; float total=sale*price; cout<< "Total Sale = "<<total; getch(); }
ประกาศตัวแปร total ณ ตําแหนงทีต่ อ งการใช
วิธีการกําหนดคาใหแกตวั แปรใน C++ ทําได ดังนี้ 1. การใชประโยคคําสัง่ เครือ่ งหมายเทากับ (=) โดยกําหนดใหชื่อตัวแปรที่จะใชเก็บคาอยูทางซาย มือของ เครือ่ งหมาย = ตัวแปรหรือคาคงทีอ่ ยูท างดานขวาของเครือ่ งหมาย ดังเชนตัวอยางโปรแกรมตอ ไปนี้ •! ตัวอยางโปรแกรม variable.cpp แสดงการกําหนดคาคงทีใ่ หกบั ตัวแปรในโปรแกรม โดยใช เครือ่ งหมายเทากับ = /*Program : variable.cpp Process : Display set value of varible */ #include <iostream.h> #include <conio.h> void main() { int number; //declaration variable การประกาศตัวแปรภายในฟงกชนั main() float sales,purchase; //declaration variable // set value of variable number = 50; sales = 5000.75; การกําหนดคาคงที่ใหกับตัวแปร purchase = 3500.50; clrscr(); // function clear screen from <conio.h> //show value from variable cout << "Show varlue of variable"<<endl; cout << "number = " << number<<endl; cout << "sales = " << sales<<endl; cout << "purchase = " << purchase; getch(); // function getch() for wait to press anykey from <conio.h> } หมายเหตุ กรณีเปนตัวแปรประเภทตัวเลข คาคงทีด่ า นขวามือหามมีเครือ่ งหมายวรรคตอนใด ๆ ทั้งสิ้น ยกเวนจุดทศนิยม สวนตัวแปรประเภท char กําหนดคาคงทีใ่ นเครือ่ งหมาย '_' เชน ch = 'A'; 2. การกําหนดคาเริม่ ตนใหแกตวั แปร เมื่อมีการประกาศใชตัวแปรในลักษณะ definition มีการ กําหนดคาคงที่ใหแกตัวแปรทันที ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
15
•! ตัวอยางโปรแกรม varia2.cpp แสดงการกําหนดคาใหแกตัวแปร number, sales, purchase ดวยเครือ่ งหมาย = เมือ่ ประกาศตัวแปรในโปรแกรม /*Program : varia2.cpp Process : Display set value of varible */ #include <iostream.h> #include <conio.h> void main() { int number=500; //declaration and set value variable ประกาศตัวแปร float sales=500.50,purchase=3500.75; //declaration and set value variable พรอมกําหนดคา clrscr(); // function clear screen from <conio.h> //show value from variable cout << "Show varlue of variable"<<endl; cout << "number = " << number<<endl; cout << "sales = " << sales<<endl; cout << "purchase = " << purchase; getch(); // function getch() for wait to press anykey from <conio.h> } 3. การกําหนดคาตัวแปรโดยการรับคาทางแปนพิมพ โดยการใชฟงกชันในการรับขอมูล (Input) เขาไปเก็บไวในตัวแปร จะกลาวรายละเอียดตอไปในบทที่ 2 ตัวแปรประเภท Global และ Local การประกาศใชตวั แปรใน C++ สามารถทําได 2 ลักษณะ คือ 1. Global variable คือ ตัวแปรทีก่ าหนดหรื ํ อประกาศไวนอกฟงกชันใด ๆ ทุกฟงกชัน สามารถนําตัวแปรประเภท Global ไปใชไดทุกฟงกชัน เพราะเปนลักษณะการประกาศแบบสารธรณะ 2. Local variable คือ ตัวแปรทีก่ าหนดหรื ํ อประกาศไวในฟงกชันใดฟงกชันหนึ่ง สามารถนํา ตัวแปรนั้นไปใชไดเฉพาะในฟงกชันนั้น ๆ เทานัน้ ฟงกชันอื่นไมสามารถนําไปใชได เพราะประกาศใน ลักษณะสวนตัวหรือเฉพาะที่ หมายเหตุ กรณีทม่ี กี ารตัง้ ชือ่ ตัวแปรประเภท Global และ Local ซํากั ้ น จะถือวาเปนตัวแปรคนละ ตัวกัน เนื่องจากใชพื้นที่ในหนวยความจําในการเก็บขอมูลในตําแหนงที่ตางกัน แตถามีการเรียกใชชื่อตัว แปร C++ จะนําตัวแปรประเภท Local มาใชกอนเสมอ
•! ตัวอยางโปรแกรม glo_loc.cpp แสดงการประกาศตัวแปรประเภท Global และ Local ใน โปรแกรม ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
16
/*Program : glo_loc.cpp Process : define global and locat variable */ #include <iostream.h> #include <conio.h> char grade; //defined global variable ประกาศตัวแปรประเภท Global Variable void main() { int midterm,final,total; //defined local variable in function main() ประกาศตัวแปรประเภท Local clrscr(); Variable ในฟงกชัน main() midterm = 30; final=50; total=midterm+final; grade='A'; cout<< "You get total score "<<total<<" And get grade = " <<grade; getch(); }
♦!การกําหนดตัวแปรคงที่(Constant) ตัวแปรคงที่หรือคอนสแตนต (Constant) หมายถึง ตัวแปรที่เก็บคาคงที่ที่ไมสามารถเปลี่ยนแปลง ได การกําหนดคอนสแตนต มีจุดประสงคเพื่อปองกันมิใหมีการเปลี่ยนแปลงคาของตัวแปรนั้นในขณะ ทํางาน สามารถกําหนดไดทั้งในลักษณะที่เปน Global และ Local รูปแบบการกําหนดคาคอนสแตนต ใช คําวา const นําหนาประเภทขอมูลและชือ่ คอนสแตนต ดังนี้ const ชนิดขอมูล ชือ่ คอนสแตนต = คาคงที่; ตัวอยางเชน const int Day = 7; const int month = 12; const float PI = 3.1418926; const float Amount = 1.0E+2; // คือ 1.0 * 102 const float Rate = 1E-3; // คือ 1 * 10-3 const char name = 'A'; // ใหคา รหัส ASCII ของ A คือ 65 const char ch = 'B'; // ใหคา รหัส ASCII ของ B คือ 66 •! ตัวอยางโปรแกรม contst.cpp แสดงการกําหนดและการใช constant ในโปรแกรม มีราย ละเอียด ดังนี้ ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
17
/*Program : const.cpp Process : Display constant in program */ #include <iostream.h> #include <conio.h> const float rate = 0.05; // Global constant void main() { const float tax=0.03; //Local constant float sales,income,total_tax; clrscr(); sales = 8500.50; income = sales*rate; total_tax=income*tax; cout<< "Income = "<< income <<endl; cout<< "Total tax = "<< total_tax <<endl; getch(); }
♦!การดําเนินการทางคณิตศาสตร (Arithmetic Operations) ในการคํานวณทางคณิตศาสตรของภาษา C++ มีการใชเครื่องหมายสําหรับการคํานวณ ดังนี้ ตาราง แสดงเครือ่ งหมายคํานวณทางคณิตศาสตรใน C++ ตัวดําเนินการ ความหมาย ตัวอยาง ผลลัพธ การลบ 10-5 5 + การบวก 10+5 15 * การคูณ 10*5 50 / การหาร 10/5 2 % การหารคิดเฉพาะเศษ 9%2 1 -การลดคาครั้งละ 1 --x หรือ x-x=x-1 ++ การเพิ่มคาครั้งละ 1 ++x หรือ x++ x=x+1 += การบวกสะสมในตัวแปร y+=x y=y+x -= การลบคาจากตัวแปร y-=x y=y-x *= การคูณคาจากตัวแปร y*=x y=y*x /= การหารจากตัวแปร y/=x y=y/x การหารคิดเศษจากตัวแปร %= y%=x y=y%x ตาราง แสดงลําดับการประมวลผล (Precedence) ของเครือ่ งหมายคณิตศาสตร เครือ่ งหมายคณิตศาสตร ลําดับการประมวลผล หมายเหตุ ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
18
() 1 ถาเครื่องหมายมีลําดับการ ++, -- (ใชแบบ prefix) 2 ประมวลผลระดับเดียวกันให - (เครือ่ งหมายหนาตัวเลข) 3 ดําเนินการจากซายไปขวา */% 4 +5 += -= *= /= %= 6 ขอสังเกต การใชโอเปอเรเตอร (Operator) ในการเพิ่มคา(increment) ++ และลดคา(decrement) -- มีขอควรสังเกต ดังนี้ 1. การเพิ่มคาขึ้นทีละ 1 ไดแกการเพิ่มคาใหแกตัวแปรครั้งละ +1 เชน count = count +1; count +=1; count++; ++count; สําหรับ ++ มีวิธีการใช 2 วิธี คือ แบบ prefix และ แบบ postfix มีขอแตกตางกัน ดัง ตัวอยางตอไปนีเ้ ปนการใช ++ แบบ prefix price = 5; volume = 3; value = price * ++volume; // คาของ value คือ 20 คาของ volume คือ 4 จากประโยคคําสั่งนี้ คาของ volume จะเพิ่มขึ้น 1 กอนทีจ่ ะนําไปคูณกับ price แลวนํา ไปเก็บไวในตัวแปร value ตอไปนี้ ลองพิจารณาการใช ++ แบบ postfix price = 5; volume = 3; value = price * volume++; // คาของ value คือ 15 คาของ volume คือ 4 จากประโยคคําสั่งนี้ คาของ volume คือ 3 จะถูกนําไปคูณกับ price คือ 5 กอนแลวนํา ไปเก็บไวในตัวแปร value จากนัน้ จึงเพิม่ คาของ volume อีก 1 จึงมีคาเปน 4 2. การลดคาลงทีละ 1 ไดแกการลดคาของตัวแปรครั้งละ -1 เชน count = count -1; count -=1; count--; --count; สําหรับ -- มีวิธีการใช 2 วิธี คือ แบบ prefix และ แบบ postfix มีขอ แตกตางการใชเชน เดียวกับการใช ++ ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
19
♦!การเปลีย่ นแปลงชนิดขอมูลในนิพจนคณิตศาสตร ในนิพจนทางคณิตศาสตรเมือ่ มีการใชเครือ่ งหมายคํานวณระหวางขอมูลหรือตัวแปรทีม่ ชี นิด (Data Type) แตกตางกัน เชน ชนิด float บวกกับ ชนิด int ใน C++ จะปรับประเภทขอมูลของผลลัพธที่ ไดจากการคํานวณใหเปนชนิดขอมูลทีม่ อี นั ดับสูงกวาโดยอัตโนมัติ ดังแสดงอันดับความสําคัญของชนิด ขอมูลในตารางตอไปนี้ ตาราง แสดงอันดับความสําคัญ(Precedence) ของขอมูลประเภท Simple Data Type ชนิดตาง ๆ ชนิดขอมูล อันดับ ตัวอยาง long double สูงสุด int * long = long double char + int = int float int + float = float long int * double = double int float + double = double char ตําสุ ่ ด long + long dobule = long double
♦!เครือ่ งหมายเปรียบเทียบและตรรก (Comparison and Logical Operators) การเปรียบเทียบ หมายถึง การหาวาเมือ่ นําคาที่อยูทางดานซายของเครื่องหมายกับคาที่อยูทางขวา ของเครือ่ งหมายเปรียบเทียบ มาเปรียบเทียบกันแลวจะไดผลลัพธเปนจริงหรือเท็จ ซึ่งในแตละกรณีเมื่อ เปรียบเทียบกันแลว จะไดคา เปนจริงหรือเปนเท็จเพียงคาเดียวเทานัน้ โดย C++ จะใชคา 0 แทนเท็จ และ 1 แทน จริง และมีลาดั ํ บในการประมวลผลจากซายไปขวา ถาไมมีวงเล็บกํากับไว มีเครือ่ งหมายเปรียบ เทียบดังนี้ ตาราง แสดงเครื่องหมายเปรียบเทียบใน C++ เครือ่ งหมาย ความหมาย > มากกวา < นอยกวา == เทากับ != ไมเทากับ >= มากกวาหรือเทากับ <= นอยกวาหรือเทากับ
ศิริชัย นามบุรี
ตัวอยาง 5>1 5<1 5==1 5!=1 5>=5 5<=5
ผลลัพธ 1 (จริง) 0 (เท็จ) 0 (เท็จ) 1 (จริง) 1 (จริง) 1 (จริง)
แนะนําภาษา C++ เบือ้ งตน
!
20 การหาคาลอจิก (Logic) หมายถึง การหาผลลัพธจาก Logic operator ซึ่งจะใหคาผลลัพธออกมา เปนจริงหรือเท็จกรณีใดกรณีหนึง่ เทานัน้ เครือ่ งหมายทีเ่ ปน Logical operator ใน C++ แสดงไวในตาราง ดังนี้ ตาราง แสดงเครือ่ งหมายเปรียบเทียบเชิงตรรก (Logical operator) ใน C++ เครือ่ งหมาย ความหมาย ตัวอยาง ผลลัพธ && AND (5==5)&&(5>3) 1 (จริง) || OR (5<1)||(5>3) 1 (จริง) ! NOT !(5==5) 0 (เท็จ) ตาราง แสดงคาเปนจริงและเท็จในกรณีตา ง ๆ ทีเ่ ปนไปไดทง้ั หมดของ AND, OR , NOT โดยกําหนดให A และ B คือประโยคตรรกทีใ่ หคา จริงหรือเท็จ A B !A A&&B A||B จริง จริง เท็จ จริง จริง จริง เท็จ เท็จ เท็จ จริง เท็จ จริง จริง เท็จ จริง เท็จ เท็จ จริง เท็จ เท็จ •! ตัวอยางโปรแกรม logic_tst.cpp เปนการแสดงคาตรรกทีไ่ ดจากการเปรียบเทียบดวยเครือ่ ง หมายเปรียบเทียบและ ตัวดําเนินการตรรก โดยคา 0 แทน เท็จ และ 1 แทนจริง ดังนี้ /*Program : logic_tst.cpp Process : Test logical value of expression */ #include <iostream.h> #include <conio.h> void main() { clrscr(); cout<< "Display Logic Operation :\a"; cout<< "\nLogic value of expression (3==5) :" <<(3==5); cout<< "\nLogic value of expression (5==5) :" <<(5==5); cout<< "\nLogic value of expression (3<=5) :" <<(3<=5); cout<< "\nLogic value of expression (3>=5) :" <<(3>=5); cout<< "\nLogic value of expression (3<=5)&&(5>3) :" <<((3<=5)&&(5>3)); cout<< "\nLogic value of expression ((3<=5)&&(3>5)) :" <<((3<=5)&&(3>5)); cout<< "\nLogic value of expression ((3<=5)||(3>5)) :" <<((3<=5)||(3>5)); cout<< "\nLogic value of expression ((8<=5)||(3>=5)) :" <<((8<=5)||(3>=5)); cout<< "\n\nValue 1 is true, 0 is false ....press any key"; getch(); } ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน
!
21
♦!แบบฝกหัดทายบท 1. จงเขียนโปรแกรมเพือ่ คํานวณหาผลลัพธของนิพจนทางคณิตศาสตรตอไปนี้โดยกําหนดใหตวั แปร A=50 B=30 C=5 D=3 E = 10 1.1 (A+B)*(E-D) 1.6 --D+C+B-1.2 ++D+C*E 1.7 25*D/5+10 1.3 (25+A)/C+B 1.8 A+B--+D 1.4 A*=D 1.9 C*2+E*5 1.5 20*C+B+++D/2 1.10 (A*2)+B/C-15 2. จงบอกขนาดของหนวยความจําทีต่ วั แปรชนิดตาง ๆ ตอไปนีต้ อ งใชในการจองพืน้ ทีใ่ นหนวยความจํา char, int , float, double, long int, long double 3. จงเขียนโปรแกรมเพือ่ หาคําตอบวาประโยคตอไปนีเ้ ปนจริงหรือเท็จ ถากําหนดใหตวั แปร A = 20 B=30 C = 2 D = 5 E=50 3.1 (A>=B) && (A==A) 3.2 (B+C>A+D)|| (B+C<A+D)&&(D<10) 3.3 (A==20) && (B>=30) 3.4 (50==E ) || (!(D<=E) 3.5 !(D!=5) 3.6 (B+C+20)!=50 3.7 C==(D-3) 3.8 (A/C<=B) && (C+D<=A) || (D>A) 3.9 (A%C+5)==(E/5-10) 3.10 A<B&&D<E
ศิริชัย นามบุรี
แนะนําภาษา C++ เบือ้ งตน