แผนบริหารการสอนประจ าบทที่...

31
แผนบริหารการสอนประจาบทที4 หัวข้อเนื ้อหา ความหมายของฟังก์ชั่น การสร้างฟังก์ชั่น การเรียกใช้ฟังก์ชั่น การส่งค่าผ่านระหว่างฟังก์ชั่น โอเวอร์โหลดดิ่งฟังก์ชั่น ฟังก์ชั่นการเรียกซ ฟังก์ชั่นแม่แบบ อินลายฟังก์ชั่น คลังมาตรฐานฟังก์ชั่น กรณีศึกษาการสร้างโปรแกรมเครื่องคิดเลข สรุป แบบฝึกหัด เอกสารอ้างอิง วัตถุประสงค์เชิงพฤติกรรม เมื่อศึกษาบทนี ้แล ้วนักศึกษาสามารถ 1. อธิบายถึงความหมายของฟังก์ชั่นได้ 2. สร้างต้นแบบฟังก์ชั่นได้ 3. สร้างและเรียกใช้ฟังก์ชั่นในภาษาซีพลัสพลัสได้ 4. กาหนดการส่งค่าและรับค่าผ่านระหว่างฟังก์ชั่นได้ 5. สร้างและเรียกใช้ฟังก์ชั่นการเรียกซ าได้ 6. เรียกใช้ฟังก์ชั่นที่สาคัญในคลังมาตรฐานฟังก์ชั่นต่างๆ ได้

Upload: others

Post on 17-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

แผนบรหารการสอนประจ าบทท 4

หวขอเนอหา ความหมายของฟงกชน การสรางฟงกชน การเรยกใชฟงกชน การสงคาผานระหวางฟงกชน โอเวอรโหลดดงฟงกชน ฟงกชนการเรยกซ า

ฟงกชนแมแบบ อนลายฟงกชน คลงมาตรฐานฟงกชน กรณศกษาการสรางโปรแกรมเครองคดเลข สรป แบบฝกหด เอกสารอางอง

วตถประสงคเชงพฤตกรรม เมอศกษาบทนแลวนกศกษาสามารถ

1. อธบายถงความหมายของฟงกชนได 2. สรางตนแบบฟงกชนได 3. สรางและเรยกใชฟงกชนในภาษาซพลสพลสได 4. ก าหนดการสงคาและรบคาผานระหวางฟงกชนได 5. สรางและเรยกใชฟงกชนการเรยกซ าได 6. เรยกใชฟงกชนทส าคญในคลงมาตรฐานฟงกชนตางๆ ได

Page 2: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

84

วธสอนและกจกรรมการเรยนการสอน 1. วธสอน

วธสอนแบบบรรยายและแบบการเรยนรดวยตนเอง 2. กจกรรมการเรยนการสอน

ใหนกศกษาทดลองเขยนโปรแกรมเพอสรางฟงกชนตามโจทยทก าหนดให ใหผเรยนศกษาเนอหาจากหนงสอ ต ารา เอกสารสอนและเวบไซตทเกยวของเพมเตม

สอการเรยนการสอน 1. โปรแกรมน าเสนองาน 2. เนอหา บทท 4 ฟงกชน 3. ระบบเครอขายอนเทอรเนต 4. โปรแกรมไมโครซอฟทวชวลสตดโอ 2010

การวดผลและประเมนผล 1. สงเกตการตอบค าถามและการตงค าถาม 2. สงเกตการเขยนโปรแกรมภาษาซพลสพลสและการแกไขขอผดพลาดทเกดขน 3. วดเจตคตจากการท ากจกรรมและพฤตกรรมความกระตอรอรนในการท ากจกรรม

Page 3: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

85

บทท 4

ฟงกชน

การเขยนฟงกชนในภาษาซพลสพลส มความส าคญตอการพฒนาโปรแกรมทจะใหสามารถรองรบความตองการของผใชไดอยางสมบรณ เนอหาในบทนจะกลาวถงความหมายของฟงกชนและการสรางฟงกชนทงสรางขนใชเอง หรอจะเรยกใชฟงกชน (Call Function) ทมอยในคลงมาตรฐานฟงกชนซพลสพลส ดงนน เมอมการสรางฟงกชนในชดค าสงภาษาซพลสพลสแลวจงจ าเปนตองมวธการเรยกใชฟงกชนตางๆ เหลานน ซงในบางครงของการเรยกใชฟงกชนอาจมการสงผานคาระหวางฟงกชนเกดขน โดยการสงคาระหวางฟงกชนในภาษาซพลสพลสกมรปแบบการสงผานคาได 2 แบบ คอ การสงผานคาจรงและการสงผานคาอางองสดทายเมอมการเรยกฟงกชนมาใชงาน บางครงอาจมการเขยนชดค าสงเพมเตมเพอใหฟงกชนทมชอเหมอนกนนนสามารถรองรบการใชของผ ใชสมบรณยงข น หรอทเรยกวาการท าโอเวอรโหลดดงฟงกชน(Overloading Function) นนเอง

ความหมายของฟงกชน ฟงกชน (Function) คอ การเขยนค าสงรวมกนไวเปนกลมของชดค าสงเพอท างานใหเสรจ โดยกลมของค าสงทเขยนขนจะอยภายในขอบเขตเครองหมายปกกาเปดและปกกาปด { } และมการตงชอใหกบกลมของค าสงนน เพอความสะดวกในการเรยกใชงานฟงกชนจงแบงการเขยนออกเปน 2 แบบ แบบฟงกชนทสรางข นมาเอง และแบบทมอยแลวในคลงมาตรฐานของภาษาซพลสพลส ซงฟงกชนแตละฟงกชนจะมหนาทแตกตางกนไป เชน ฟงกชนทใชในการค านวณ ฟงกชนทใชในการแสดงผล ขอดของการสรางฟงกชนขนมาใชงานกคอ สามารถเรยกใชงานหรอรองรบการท างานซ าหลายครงได (ประภาพร ชางไม. 2545: 143-144)

การสรางตนแบบฟงกชน ในการสรางตนแบบฟงกชนขนใช จะแบงฟงกชนออกเปน 2 สวน คอ สวนหวฟงกชน (Function Header) และสวนตวฟงกชน (Function Body) รายละเอยดดงน

Page 4: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

86

1. สวนหวฟงกชน (Function Header) เปนการเขยนฟงกชนมาประกาศไวเหนอฟงกชนหลก (Main Function) โดยในสวนหวฟงกชน เรยกวา ตนแบบฟงกชน เพอก าหนดวาฟงกชนนนจะมจ านวนอารกวเมนต หรอ คาพารามเตอร (Parameter) ทรบเขาในฟงกชน วามอะไรบาง หรอ ฟงกชนนนมการสงกลบหรอไม ถามตองก าหนดชนดของขอมลทสงกลบคนมาดวยและตองจบค าสงดวยเครองหมายเซมโคลอน (;) เสมอ โดยมรปแบบการประกาศฟงกชน ดงน

2. สวนตวฟงกชน (Function Body) เปนการเขยนรายละเอยดการท างานภายในฟงกชนทประกาศไวในสวนหวฟงกชน โดยรายละเอยดนนจะถกก าหนดขอบเขตไวภายในเครองหมายปกกาเปดและปกกาปด { } การสรางตนแบบฟงกชนลกษณะนถอวาเปนการสรางฟงกชนขนมาเอง ดงชดค าสงในตารางท 4.1

void FunctionPrototypeName ( );/*การสรางสวนหวฟงกชนแบบไมมการก าหนด คาอารกวเมนต*/ void FunctionPrototypeName ( int value_One );//มการก าหนดอารกวเมนต1 ตว int main () { ชดค าสง ; ชดค าสง ;

return 0 } void FunctionPrototypeName() {//การสรางสวนตวฟงกชน ชดค าสง ; ชดค าสง ; } void FunctionPrototypeName ( int value_One ){ //การสรางสวนตวฟงกชน

ชดค าสง ; ชดค าสง ; }

Page 5: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

87

ตารางท 4.1 รปแบบการเขยนชดค าสงการสรางฟงกชน

01 #include<iostream> 02 #include<iomanip> 03 usingnamespace std; //เปนการเรยกใชเนมสเปส std ทอยเฮดเดอรไฟล iostream 04 int sum( int value1,int value2 ); //ประกาศฟงกชนตนแบบชอ sum 05 int main(){ //เรมการท างานของชดค าสง 06 int a,b; //เปนการประกาศตวแปร a, b โดยรบคาเลขจ านวนเตม 07 cout<<"Please Add Value1 And Value2"<<setw(3)<<":" ; 08 cin >>a>>b; //เปนการรบคาจากคยบอรดเพอไปเกบไวท a และ b 09 cout<<a<<'+'<<b<<'='<< sum ( a ,b ) <<endl; //แสดงผลลพธทได 10 return 0;

11 } 12 int sum ( int value1, int value2 ) { 13 int result = value1+value2; //น าคา value1 มาบวกกบ value2 และไปเกบไวท result 14 return result; // คนคา result ; 15 }

จากตารางท 4.1 ในโปรแกรมมการสรางฟงกชนชอ “Sum” และก าหนดอารกวเมนต 2 ตวและประกาศตวแปร a และ b เพอรบคาจากการปอนขอมลทางคยบอรดเมอปอนคา 15 และ 20 เขาไปในโปรแกรมโดยมผลลพธทไดดงภาพท 4.1

ภาพท 4.1 ผลลพธการรนโปรแกรมการสรางฟงกชน

การเรยกใชฟงกชน การเรยกใชฟงกชน (Call Function) หมายถง การเรยกใชงานฟงกชนทสรางขนหรอทมอยในไลบารขนมาท างาน โดยท าการเรยกใชไดจากชอฟงกชนทตองตรงกนกบชอฟงกชนทมอยจรงและจ านวนของอารกวเมนตทอยในวงเลบ ( ) กตองเทากนและชนดเดยวกนดวยโดยมรปแบบการเรยกฟงกชน ดงน

int sum (int value1,int value2) int main(){ int sum(4,5);//บรรทดทมการเรยกใชฟงกชนชอ sumโดยสงคาผาน อารกวเมนต 4 และ 5 ไปใหดวย } intsum(int value1,int value2){ //บรรทดทถกเรยกใชและมการรบคา 4 และ 5 เขามาดวย int result = value1+value2; }

Page 6: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

88

การสงคาผานระหวางฟงกชน การสงคาผานระหวางฟงกชน (Passing) หมายถง การสงคาใหกนระหวางฟงกชนทเรยกใชกบฟงกชนทถกเรยกในภาษาซพลสพลส สามารถสงได 2วธ ไดแก

1. การสงคาจรง (Passing by Value) คอ การสงตวแปรคาคงทตางๆ ผานอารกวเมนต ให ฟงกชน โดยการก าหนดคาแบบการคดลอกคาอารกวเมนตใหกบพารามเตอรโดยมรปแบบการสงคาจรง ดงน

2. การสงค าอางอง (Passing by Reference) คอ การสงค าผ านอารกวเมนต ท เปน

แอดเดรสของตวแปรนนๆ ไปใหฟงกชนหรอตวแปรทเรยก เมอมการเปลยนแปลงแกไขคาดวย ตวแปรจะเปนตวอางองคาตวแปรอารกวเมนต และไมสามารถเปลยนการอางองได โดยมรปแบบการสงคาอางอง ดงน

การท างานของการสงคาใหกนระหวางฟงกชนทเรยกใชกบฟงกชนทถกเรยกมรปแบบการสงคาจรงและรปแบบการสงคาอางอง ดงชดค าสงในตารางท 4.2

void passingByValue(int number); intmain(){ passingByValue(5); // สงผานคาจรง คอ คา 5 return 0; } void passingByValue(int number) { //รบคา 5 ทสงมาให cout<< number *number<<endl; //แสดงผลลพธทไดจาก 5*5; }

void passingByReference (int&number); intmain(){ int a = 5 passingByReference(a); // สงผานคาอางองหรอทอยคอ คา 5 return 0; } void passingByReference(int&number) { //รบคาทอางองหรอทอย a ทสงมาให cout<< number *number<<endl; //แสดงผลลพธทไดจาก 5*5; }

Page 7: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

89

ตารางท 4.2 รปแบบการเขยนค าสงการสงคาจรงและรปแบบการสงคาอางอง

01 #include<iostream> 02 usingnamespace std; 03 void passingByValue(int ByValue); 04 void passingByReference(int&); 05 int main(){ 06 int a = 2; 07 int b = 4; 08 cout<<"a="<<a<<","<<"b="<<b<<endl; 09 cout<<"a="<<a<<"before passingByValue\n"; 10 passingByValue(a);

11 cout<<"b="<<b<<"before passingByReference"<<endl; 12 passingByReference(b); 13 cout<<"b*b="<<b<<"after passingByReference"<<endl; 14 return 0; 15 } 16 void passingByValue(int value){ 17 value *= value; 18 cout<<"a*a="<< value<<"after passingByValue\n"<<endl; 19 } 20 void passingByReference(int&ByRef){ 21 cout <<"b address ="<<&ByRef<<endl; 22 ByRef*=ByRef; 23 }

จากตารางท 4.2 ในการท างานของโปรแกรมมการสงคาจรงโดยสงตวแปรคาคงท ผานอารกวเมนต ใหฟงกชนและสงคาอางองผานอารกวเมนตทเปนแอดเดรสของตวแปร ไปใหตวแปรทเรยกใชโดยมผลลพธดงภาพท 4.2

ภาพท 4.2 ผลลพธการรนโปรแกรมเพอการสงคาระหวางฟงกชน

โอเวอรโหลดดงฟงกชน การสรางโอเวอรโหลดดงฟงกชน (Function Overloading) หมายถง การสรางฟงกชนขนมา ซงมชอเดยวกนแตจะตองมชนดของอารกวเมนตหรอจ านวนอารกวเมนตทแตกตางกน เพออนญาตใหนกเขยนโปรแกรมสามารถสรางฟงกชนทเดยวกนได เพราะในความเปนจรงการพฒนาโปรแกรมขนมามโอกาสสงทจะมฟงกชนชอเดยวกน เชน ฟงกชนค านวณโปรแกรมเครองคดเลข ฟงกชนค านวณในโปรแกรมตดเกรด โดยมรปแบบการโอเวอรโหลดดงฟงกชน ดงน

Page 8: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

90

การสรางโอเวอรโหลดดงฟงกชนนนเปนการสรางฟงกชนทชอเดยวกนแตมการก าหนดกระบวนการภายในฟงกชนมการท างานทแตกตางกนออกไป ดงชดค าสงในตารางท 4.3 ตารางท 4.3 รปแบบการเขยนค าสงการสรางโอเวอรโหลดดงฟงกชน

01 #include<iostream> 02 #include<stdlib.h> 03 usingnamespace std; 04 double Calculator(int x); 05 double Calculator(double x); //เปนการโอเวอรโหลดดงฟงชนแตมชนดขอมลตางกน 06 void main(){ 07 cout<<"integer total:"<<Calculator(5)<<endl; 08 cout<<"double total:"<<Calculator(5.5)<<endl; 09 } 10 double Calculator(int x){ /*เปนการโอเวอรโหลดดงฟงชนชอ Calculator มอารกวเมนตชนด 11 จ านวนเตมขนาด 32 บต */ 12 return x+x; 13 } 14 double Calculator(double y){ /*เปนการโอเวอรโหลดดงฟงชนชอ Calculator มอารกวเมนตชนด 15 จ านวนจรงขนาด 64 บต */ 16 return y+y;

17 }

จากตารางท 4.3 ในโปรแกรมมการสรางฟงกชนทเดยวกนเปนการโอเวอรโหลดดง ฟงกชนแตมชนดขอมลตางกนโดยมผลลพธ ดงภาพท 4.3

ภาพท 4.3 ผลลพธการรนโปรแกรมการท างานโอเวอรโหลดดงฟงกชน

ฟงกชนการเรยกใชซ า ฟงกชนการเรยกใชซ า (Recursion Function) คอ ฟงกชนทมการเรยกตวเองมาท างานหลายๆ ครง เชน การค านวณหาคาแฟกทอเรยล (Factorial) เปนการเรยกฟงกชนตวเองขนมาท างานเรอยๆ จนครบจ านวนครงทก าหนด ดงนน จะตองใสเงอนไขการตรวจสอบจ านวนครงดวย เพอใหหยดการเรยกตวเองซ า มฉะนนโปรแกรมจะท างานไมรจบ (Deitel, and Deitel, 2003: 198-201) ตวอยางดงภาพท 4.4

double Calculator(int x=1); double Calculator(double);

Page 9: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

91

ภาพท 4.4 ลกษณะการท างานฟงกชนการเรยกตวเอง การสรางฟงกชนการเรยกซ าโดยฟงกชนมการเรยกตวเองมาท างานเรอยๆ จนครบจ านวนครงทก าหนด ดงชดค าสงในตารางท 4.4

ตารางท 4.4 รปแบบการเขยนค าสงการสรางฟงกชนการเรยกซ า

01 #include<iostream> 02 #include<iomanip> 03 usingnamespace std; 04 unsignedlong factorial(unsignedlong); 05 int main (){ 06 for(int i=0; i<=10; i++) 07 cout<<setw(2)<<i<<"!="<<factorial(i)<<endl; 08 return 0; 09 } 10 unsignedlong factorial(unsignedlong number){ 11 if(number<=1) 12 return 1; 13 else 14 return number *factorial(number-1); //เรยกใชฟงกชนตวเองจนกวาครบ 10 ครง 15 }

จากตารางท 4.4 ในโปรแกรมมฟงกชนแฟกทอเรยลโดยมการใชฟงกชนการเรยกตวเองจนกวาครบ 10 ครง มผลลพธดงภาพท 4.5

5 !

5 * 4 !

4 * 3 !

3 * 2 !

2 * 1 !

1

5 !

5 * 4 !

4 * 3 !

3 * 2 !

2 * 1 !

1

คาสดทายเทากบ 120

5!=5*24 เทากบ คนคากลบ 120

4!=4*6 เทากบ คนคากลบ 24

3!=3*2 เทากบ คนคากลบ 6

2!=2*1 เทากบ คนคากลบ 2

คนคากลบ 1

Page 10: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

92

ภาพท 4.5 ผลลพธการรนโปรแกรมการใชฟงกชนการเรยกตวเอง

ฟงกชนแมแบบ ฟงกชนแมแบบ (FunctionTemplate) หมายถง ฟงกชนแมแบบทสามารถใชกบขอมลชนดใดกได หรอทเรยกวาเจนเนอรคไทป (Generic Type) โดยเมอมการสรางฟงกชนแมแบบไวแลว ในการเขยนโปรแกรแบบเชงวตถกไมจ าเปนตองเขยนชดค าสงจ านวนมากมาย ซงจะชวยใหการท าโอเวอรโหลดดงฟงกชนนน สามารถท าไดยงขน (ยทนธนา ลลาศวฒนกล. 2547 : 222-224) โดยมรปแบบการประกาศฟงกชนแมแบบ ดงน

ไทป (Type) คอ ชนดขอมลทใชในการคนคาของฟงกชนแมแบบ ซงอาจจะเปนชนดขอมลพนฐาน เชน บลน จ านวนเตม หรออนๆ รายการพารามเตอร (Parameter List) คอ รายการคาพารามเตอร ซงสามารถเปนไดทงชนดขอมลพนฐานหรอชนดทก าหนดขนเองกได ขอก าหนดการใชฟงกชนแมแบบเบองตน

1. ชอของแมแบบ สามารถก าหนดได ตวอยางเชน

Template < class type>type FunctionName (type parameter list); type FunctionName (parameter list){ ชดค าสง; return type; }

Template < class type > type functemp (type a) { type temp; return temp; // คนคาเปนชนด type }

Page 11: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

93

2. ชอของพารามเตอรแมแบบ สามารถใชไดครงเดยวหรอหามใชซ า ในลสตพารามเตอร

แมแบบเดยวกน ตวอยางเชน

3. ชอของพารามเตอรแมแบบสามารถใชซ ากนระหวางการประกาศฟงกชนแมแบบไดตวอยาง เชน

การสรางฟงกชนแมแบบเพอใหสามารถใชกบชนดขอมลใดๆ กได โดยการน าค าหลก “Template” มาใชกบฟงกชน ท าใหฟงกชนนนเปนแมแบบ ดงชดค าสงในตารางท 4.5

ตารางท 4.5 รปแบบการเขยนค าสงการสรางฟงกชนแมแบบ

01 #include<iostream> 02 #include<iomanip> 03 #include<string> 04 usingnamespace std; 05 template<class Type>void Swap(Type&a,Type&b); //สวนหวของการประกาศฟงกชนแมแบบ 06 int main (){ 07 double x=213.55,y=123.0; 08 cout<<fixed<<showpoint<<setprecision(2); 09 Swap(x,y); 10 cout<<"Call Swap(double&a,double&b):"<<x<<""<<y<<endl;//แสดงผลลพธเปนจ านวนจรง 11 int x1=67,y1=10; 12 Swap(x1,y1); 13 cout<<"Call Swap(int&a,int&b):"<<x1<<""<<y1<<endl; //แสดงผลลพธเปนจ านวนเตม 14 string sta="c++"; 15 string stb="Hello"; 16 Swap(sta,stb); 17 cout<<"Call Swap(string&a,string&b):"<<sta<<stb<<endl; //แสดงผลลพธเปนขอความ 18 return 0; 19 } 20 template<class Type>void Swap(Type&a,Type&b){ //สวนตวของฟงกชนแมแบบ

21 Type temp=b; 22 b=a; 23 a=temp; 24 }

Template < class type , class type > // syntax – error เพราะวาใชชอ type ซ ากน

template <class type> // ประกาศฟงกชนเทมเพลต double double avg (type * a,int n); template <class type> // ประกาศฟงกชนเทมเพลตซ า temp sum (type*a, int); // ประกาศฟงกชนเทมเพลต sum double avg (type 1 * a, type2& b); //กรณใชมพารามเตอรมากวาหนงตวใชจลภาค(,) คน

Page 12: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

94

จากตารางท 4.5 ในโปรแกรมมฟงกชนแมแบบสามารถแสดงผลเปนจ านวนจรง จ านวนเตม และขอความโดยมผลลพธ ดงภาพท 4.6

ภาพท 4.6 ผลลพธการรนโปรแกรมการเรยกใชฟงกชนแมแบบ

อนลายฟงกชน

อนลายฟงกชน (Inline Function) เปนการบอกตวแปลภาษาคอมไพเลอร วาจะใหมการเรยกใชฟงกชนตรงๆ ทมค าหลก “inline” น าหนามาแทรกลงไปในสวนชดค าสงนน โดยไมตองมการกระโดด(Jump) หรอการเรยกฟงกชนใดๆ ประโยชนของฟงกชน คอ หากฟงกชนขนาดเลกทมการเรยกใชบอยๆ จะท าใหมประสทธภาพสงขน ไมตองโอเวอรเฮด (Overhead) ของการเรยกฟงกชน สวนขอเสย คอ จะท าใหโปรแกรมมขนาดใหญขนเพราะแทนทจะมฟงกชนนอยทเดยว แตตองมกระจายอยทกทเมอมการเรยกใช ดงชดค าสงในตารางท 4.6

ตารางท 4.6 รปแบบการเขยนค าสงอนลายฟงกชน

01 #include<iostream> 02 usingnamespace std; 03 inlineint min(int a, int b){//เปนการประกาศฟงกชนอนลาย 04 return a<b ? a : b; 05 } 06 int main(){ 07 cout << min(4, 3) << endl;//เรยกฟงกอนลาย 08 cout << min(3, 4) << endl; //แปลชดค าสงinlineในบรเวณน 09 return 0; 10 }

จากตารางท 4.6 ในการท างานของโปรแกรมโดยไมตองมการเรยกฟงกชนใดๆ โดยน าค าสงอนลายแทรกลงไปใชสวนชดค าสงนน ผลลพธทไดดงภาพท 4.7

ภาพท 4.7 ผลลพธการรนโปรแกรมการเรยกใชอนลายฟงกชน

Page 13: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

95

คลงมาตรฐานฟงกชน ฟงกชนมาตรฐาน (Function Standard) เปนฟงกชนทมอยแลวในคลงมาตรฐานฟงกชนสามารถเรยกใชงานไดทนท ส าหรบใชงานพนฐานตางๆ เชน ฟงกชนทางคณตศาสตร ฟงกชนส าหรบจดการกบขอความตางๆ ฟงกชนเกยวกบเวลา เปนตน โดยมรายละเอยดดงน เฮดเดอร math.h เปนเฮดเดอรทเกบฟงกชนเกยวกบทางคณตศาสตรตางๆ มาเรยกใชโดยมฟงกชนมาตรฐานทส าคญ ดงตารางท 4.7 ตารางท 4.7 เฮดเดอร math.h ฟงกชนเกยวกบคณตศาสตร

ชอฟงกชน การใชงาน acos ใชหาคาโคไซน (cosine) asin ใชหาคาไซน (sine) atan ใชหาคาแทนเจนต (tangent) atan2 ใชหาจดหมมสมผสสวนโคงระหวางแกน x กบแกน y cos ใชหาคาคอส (cos) cosh ใชหาคาความยาวเปนสองเทา tan หาคาแทน (tan) sinh หาคาไฮเพอรโบลกไซน (hyperbolic sine) sin หาคาไซน (sine) tanh ใชหาคาไฮเพอรโบลกแทนเจนต (hyperbolic tangent) exp ค านวณฟงกชนเอคโปเนนเทยล log หาคาลอการทมธรรมชาต (natural logarithm) (to base e) modf การปดเศษ pow ใชหายกก าลงสอง sqrt ใชหาสแควรรต fabs หาคาบวกของ floating fmod การหารเอาเศษ

Page 14: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

96

ฟงกชนไซน (sin) คอส (cos) แทน (tan) ทอยในเฮดเดอร math.h เปนฟงกชนทใชส าหรบการค านวณคาทางคณตศาสตรใชในการหาคา ไซนคอสแทน ดงชดค าสงในตารางท 4.8 ตารางท 4.8 รปแบบการเขยนค าสงไซนฟงกชน

01 #include<stdio.h> 02 #include<conio.h> 03 #include<math.h>

04 int main(){ 05 float degree , angle, pi = 3.141592654; 06 printf("Please enter value you want to find sin,cos,tan :"); 07 scanf("%f",&degree); 08 angle = degree * pi / 180; 09 printf("value of sin %4.0f degree is %4.2f \n",degree,sin(angle)); 10 printf("value of cos %4.0f degree is %4.2f \n",degree,cos(angle)); 11 printf("value of tan %4.0f degree is %4.2f \n",degree,tan(angle)); 12 return 0; 13 }

จากตารางท 4.8 มการเรยกใชเฮดเดอร math.h ในโปรแกรมเพอใชฟงกชนไซน คอส

แทน โดยมผลลพธทไดดงภาพท 4.8

ภาพท 4.8 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร math.h

เฮดเดอร ctype.h เปนเฮดเดอรทเกบฟงกชน เพอใชน าฟงกชนเกยวกบชนดของขอมลและตวอกษรมาเรยก โดยมฟงกชนมาตรฐานทส าคญ ดงตารางท 4.9

Page 15: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

97

ตารางท 4.9 เฮดเดอร ctype.h ฟงกชนเกยวกบชนดของขอมลและตวอกษร

ชอฟงกชน การใชงาน isdigit ใชตรวจสอบคาตวเลข 0 ถง 9 isupper ใชตรวจสอบตวอกษรทใชเปนตวพมพใหญ islower ใชตรวจสอบตวอกษรทใชตวพมพเลก isalpha ใชตรวจสอบตวอกษรวาใชตวอกษรหรอไม isprint ใชตรวจสอบตวอกษรจากการพมพ isalnum ใชตรวจสอบวาใชตวอกษรเลขหรอไม isspace ใชตรวสอบวาใชทวางหรอไม toupper แปลงตวอกษรใหทใชตวพมพใหญ tolower แปลงตวอกษรใหทใชตวพมพเลก

ฟงกชน isdigit เปนฟงกชนทใชตรวจสอบวาขอมลในตวแปรเปนจ านวนเตมหรอไม ถาเปนจ านวนเตมฟงกชนจะพมพขอความ “Yes” แตถาเปนตวอกษรฟงกชนจะพมพขอความ “NO” ดงชดค าสงในตารางท 4.10 ตารางท 4.10 รปแบบการเขยนค าสงฟงกชน isdigit

01 #include<ctype.h> 02 #include<iostream> 03 usingnamespace std; 04 int main(){ 05 char expression; 06 cout<<"Please enter your info"<<endl; 07 cin >>expression; 08 if(isdigit(expression))

09 cout<<"Yes"<<endl; 10 else 11 cout <<"No"<<endl; 12 return 0; 13 }

จากตารางท 4.10 มการเรยกใชฟงกชน isdigit () ทอยเฮดเดอร ctype.h เพอใชในการ

ตรวจสอบวาขอมลทรบเขาเกบไวในตวแปร “expression” มคาเปนดจทลหรอไม โดยสมมต วาม

Page 16: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

98

การปอนคา 7 เขาไปเกบไวในตวแปร “expression” แลวก าหนดโปรแกรมมการตรวจสอบ ถาเปนตวเลขใหแสดงผลวา ใช “Yes” แตถาไมใชแสดงผลลพธวา ไม “No” ดงภาพท 4.9

ภาพท 4.9 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร ctype.h

เฮดเดอร stdio.h เปนเฮดเดอรทเกบฟงกชนทใชในการสงเขาและสงออก โดยมฟงกชนมาตรฐานและส าคญ ดงชดค าสงในตารางท 4.11

ตารางท 4.11 เฮดเดอร stdio.h ฟงกชนใชในการสงคาเขาและสงออก

ชอฟงกชน การใชงาน clearerr ใชลบความผดพลาด fclose ใชปดแฟม feof ใชตรวจคาแฟม fgetpos ใชหาต าแหนงคาในแฟม

ferror ใชเชคขอผดพลาดในแฟม

fflush ใชในการเรยงคา freopen เปดเอกสารตามชอ fopen เปดไฟล fread อานจากแฟม fsetpos ใชยายสต าแหนงในแฟม ftell ใชบอกขนาดของแฟม fseek ใชจดต าแหนง fwrite เขยนถงแฟม remove ลบแฟม rename เปลยนชอแฟม setvbuf ใชเสรจคาวางลงในแฟม rewind ใชในการก าหนดจดเรมตน

Page 17: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

99

ตารางท 4.11 เฮดเดอร stdio.h ฟงกชนใชในการสงคาเขาและสงออก (ตอ)

ชอฟงกชน การใชงาน setbuf ใชในการพกขอมล tmpfile ใชเปดแฟมชวคราว tmpnam ใชสรางชอแฟมชวคราว printf แสดงผลลพธออกทางหนาจอ fgets ใชในการอานคาสตรง จากแฟม fgetc ใชในการอานคาจากแฟม scanf รบคาเขาจากคยบอรด fputc เขยนตวอกษรลงแฟม fputs เขยนสตรงลงแฟม getchar อานตวอกษร gets อานขอมลทเปนชนดสตรง putc เขยนตวอกษรถงกระแสขอมล (Stream) putchar ใชแสดงตวอกษร puts ใชแสดงขอความ ungetc ใชในการตรวจคาในแฟม

ฟงกชน “fopen” จะเรมจากการเปดไฟลนนขนมาแลวท าการสรางตวชต าแหนงไฟล

เพอจะน าไปใชในการอานและเขยนขอมลลงในไฟล โดยมรปแบบใชในการเปดไฟล ดงน

โหมด (Mode) การเปดไฟล ในการเปดไฟลนนควรระบใหชดเจนวาจะเปดไฟล เพอจะท าอะไร เชน เปดแลวอานอยางเดยวหรอเปดไฟลแลวท าการอานและเขยนขอมลทบขอมลเดม โดยมฟงกชนมาตรฐานและส าคญ ดงตารางท 4.12

FILE *documents; // เปนการสรางตวแปรไฟลขอมล ชอ documents documents = fopen("c:/document.txt","w"); //ก าหนด document เกบไฟลเอกสารเวรดในไดรฟซ

Page 18: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

100

ตารางท 4.12 โหมดการเปดไฟล

ยกตวอยางในการใชโหมดดบเบลย (w) จะเปนการเปดไฟล แลวท าการเขยนขอมลทบขอมลเดมลงในไฟลเดม ดงชดค าสงในตารางท 4.13

ตารางท 4.13 รปแบบการเขยนค าสงโหมดดบเบลย

01 #include<stdio.h> 02 #include<iostream> 03 #include<conio.h> 04 usingnamespace std; 05 06 int main (){ 07 08 char words[20]; 09 FILE *documents = fopen("c:/abc.doc","w"); //เปดไฟลขอมลทชอ abc.doc ไวในไดรฟ C: 10 cout <<"Enter the information\n"; 11 cout <<"Your wirte is : "; gets(words); //ดงขอมลทอยในตวแปร words 12 fprintf(documents, "%s\n", words); //น าตวแปร wordsไปเกบไวในเอกสาร abc.doc 13 fclose(documents); //ปดไฟลขอมลทชอ abc.doc ไวในไดรฟ C: 14 15 return 0; 16 }

จากตารางท 4.13 เปนการเขยนขอความ “C++ Programming” ไปเกบไวในเอกสารทชอ

“abc.doc” ทเกบในไดรวซ ( C: ) โดยมผลลพธทไดดงภาพท 4.10

การเปดไฟล ค าอธบาย r เปดไฟลแลวท าการอานเพยงอยางเดยว w เปดไฟลแลวท าการเขยนขอมลทบขอมลเดมลงในไฟล a เปดไฟลแลวท าการเขยนขอมลแตถามขอมลอยจะเขยนตอทายขอมลทมอย r+ เปดไฟลแลวท าการอานและเขยนขอมล w+ เปดไฟลแลวท าการอานและเขยนขอมลทบขอมลเดมลงในไฟลแตถาไฟลท

ตองการเปดไมมอยจรงกจะท าการสรางไฟลนนขนมา a+ เปดไฟลแลวท าการอานและเขยนขอมลตอทายขอมลเดมลงในไฟลแตถา

ไฟลทตองการเปดไมมอยจรงกจะท าการสรางไฟลนนขนมา

Page 19: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

101

ภาพท 4.10 ผลลพธการรนโปรแกรมใชโหมดดบเบลย เฮดเดอร float.h เปนเฮดเดอรทเกบฟงกชนเพอใชในการจดการขอมลทเปนตวเลขจ านวนจรงประกอบดวยฟงกชนมาตรฐานและส าคญ ดงชดค าสงในตารางท 4.14 ตารางท 4.14 เฮดเดอร float.h ฟงกชนการจดการขอมลทเปนตวเลขจ านวนจรง

ชอฟงกชน การใชงาน FLT_ROUNDS ใชบอกขอบเขตของทศนยม FLT_MANT_DIG ใชบอกคาเลขฐานสองจดของทศนยม FLT_MAX_EXP ใชบอกคายกก าลงสงสดของทศนยม FLT_MIN_EXP ใชบอกคายกก าลงต าสดของทศนยม DBL_MANT_DIG ใชบอกคาเลขฐานสองจดของทศนยมเปนชนดดบเบล DBL_MAX_EXP ใชบอกคายกก าลงสงสดของทศนยมเปนชนดดบเบล DBL_MIN_EXP ใชบอกคายกก าลงต าสดของทศนยมเปนชนดดบเบล FLT_DIG ใชบอกคาความละเอยดของทศนยม FLT_MAX ใชบอกขอบเขตทมคาสงสดของทศนยม FLT_MIN ใชบอกขอบเขตทมคาต าสดของทศนยม DBL_DIG ใชบอกคาความละเอยดของทศนยมดบเบล DBL_MAX ใชบอกคาสงสดของทศนยมดบเบล DBL_MIN ใชบอกคาต าสดของทศนยมดบเบล

ฟงกชนเกยวกบการหาขอบเขตของทศนยม โดยจะท าการหาคาขอบเขตของคาดบเบลสามารถเรยกใชฟงกชนนจากไฟลในเฮดเดอร float.h ดงค าสงตารางท 4.15

Page 20: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

102

ตารางท 4.15 รปแบบการเขยนค าสงการเรยกใชเฮดเดอร float.h

01 #include<limits.h> 02 #include<stdio.h> 03 #include<float.h> 04 05 int main(){ 06 printf("The Minimum Value of DBL_MAX_EXP%d\n", DBL_MAX_EXP); 07 printf("The Minimum Value of DBL_MIN_EXP%d\n",DBL_MIN_EXP); 08 printf("The Maximum Value of DBL_MAX%d\n",DBL_MAX); 09 printf("The Minimum Value of DBL_MIN%d\n",DBL_MIN); 10 return 0; 11 }

จากตารางท 4 .15 ม ก ารเรยก ใช ฟ งกชนหาขอบ เขตยกก าลงส งสดของดบ เบ ล(DBL_MAX_EXP) ยกก าลงต าสดของดบเบล (DBL_ DBL_MIN_EXP) บอกคาสงสดของดบเบล (DBL_MAX) และบอกคาต าสดของดบเบล (DBL_MIN) โดยมผลลพธทไดดงภาพท 4.11

ภาพท 4.11 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร float.h เฮดเดอร limits.h เปนเฮดเดอรทเกบฟงกชนเพอการบอกขอบเขตของขอมลแตละชนด ประกอบดวยฟงกชนมาตรฐานและส าคญ ดงตารางท 4.16

Page 21: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

103

ตารางท 4.16 เฮดเดอร limits.h ฟงกชนใชจดการบอกขอบเขตของขอมลแตละชนด

ชอฟงกชน การใชงาน CHAR_BIT ใชบอกขนาดตวอกษรซงมคา 8 บต INT_MAX ใช บ อก ขน าดม าก ท ส ด ข อ งช น ด จ าน วน เต ม ซ ง ม ค า

2,147,483,647 LONG_MIN ใชบอกขนาดเลกทสดของชนดจ านวนเตมซงมคา2,147,483,647 SHRT_MAX ใชบอกขนาดมากทสดของชนดจ านวนเตมซงมคา32,767 UCHAR_ MAX ใชบอกขนาดมากทสดของชนดตวอกษรซงมคา +255 USHRT_MAX ใชบอกขนาดมากทสดของชนดขอมลจ านวนเตม ซงมคา

+65,535 CHAR_MAX ใชบอกขนาดมากทสดของชนดตวอกษรซงมคา +127 INT_MIN ใชบอกขนาดเลกทสดของชนดขอมลจ านวนเตม ซงมคา -

32,767 บต SCHAR_MAX ใชบอกขนาดมากทสดของชนดสตรงซงมคา +127 SHRT_MIN ใชบอกขนาดเลกทสดของชนดขอมลจ านวนเตม ซงมคา -

32,767 CHAR_MIN ใชบอกขนาดเลกทสดของชนดตวอกษรซงมคา -127 LONG_MAX ใชบอกขนาดมากทสดของชนดขอมลจ านวนเตม ซงมคา

+2,147,483,647 ฟงกชน “LONG_MAX” และ “LONG_MIN” เปนฟงกชนใชในการบอกขอบเขตของชนดขอมลทใชค าหลก “long” ดงชดค าสงในตารางท 4.17

Page 22: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

104

ตารางท 4.17 รปแบบการเขยนค าสงฟงกชน long

01 #include<stdio.h> 02 #include<limits.h> 03 04 int main(void){ 05 printf("The Maximum Value of LONG: %d\n", LONG_MAX); 06 07 printf("The Minimum Value of LONG: %d\n", LONG_MIN); 08 09 return 0;

10 }

จากตารางท 4.17 มการเรยกใชฟงกชน “LONG_MAX” และ “LONG_MIN” จ าเปนตอง

มการอนคสเฮดเดอร limits.h และก าหนดโปรแกรมมการแสดงชนดขอมลแบบ “long” ทมากทสดและนอยทสดออกมาทางหนาจอผลลพธทไดดงภาพท 4.12

ภาพท 4.12 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร limits.h

เฮดเดอร stdlib.h เปนเฮดเดอรทเกบฟงกชนมาตรฐานตางๆ โดยถกเกบไวในสวนของคลงมาตรฐาน ซงมฟงกชนทส าคญ ดงตารางท 4.18 ตารางท 4.18 เฮดเดอร stdlib.h เกบฟงกชนมาตรฐานตางๆ

ชอฟงกชน การใชงาน calloc ใชจองพนทในหนวยความจ าใหกบอารเรย realloc ใชในการจองพนทในหนวยความจ าอกครง free ไมมการจองพนทในหนวยความจ า malloc ใชจองความยาวในพนทในหนวยความจ า exit ใชหยดโปรแกรม

Page 23: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

105

ตารางท 4.18 เฮดเดอร stdlib.h เกบฟงกชนมาตรฐานตางๆ (ตอ)

ชอฟงกชน การใชงาน bsearch ใชหาต าแนงในอาเรย div ใชบอกผลลพธหาร rand ใชสมตวเลข strtol ใชแปลงสตรงใหจ านวนเตมฐานสบ abort ใชหยดโปรแกรม getenv ใชในการหาต าแหนงของวถ(path) qsort ใชจดขอมลในอาเรย labs ใชคนคาทเปนบวก srand ใชสมคาตวเลข atol ใชแปลงสตรงเปนจ านวนเตม strtoul ใชแปลงสตรงเปนจ านวนเตม atexit ใชเปนทางออกของโปรแกรม system ใชในการประมวณผล abs การคนคาจ านวนเตมบวก ldiv ใชบอกผลลพธการหารทเปนหารยาว(long)

ฟงกชน “div” มหนาทแสดงผลลพธเกยวกบการหาร โดยสามารถประยกตใชไดดงค าสงตารางท 4.19

ตารางท 4.19 รปแบบการเขยนค าสงฟงกชน div

01 #include<stdlib.h> 02 #include<stdio.h> 03 int main(void){ 04 div_t result; 05 result = div(17, 3); 06 printf("17/3= %d remainder = %d.\n", result.quot, result.rem); 07 08 return 0; 09 }

Page 24: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

106

จากตารางท 4.18 มการเรยกใชฟงกชน “div” ทอยในเฮดเดอร stdlib.hโดยตวอยางในโปรแกรมเปนการประกาศตวแปร “result” เปนชนดโครงสราง div_t และ ldiv_t โดยมการหาผลลพธทไดจากการหาร (Quotient)vดวยค าสง result.quot และแสดงเศษทเหลออย (Remainder) ดวยค าสง result.rem ไดผลลพธดงภาพท 4.13

ภาพท 4.13 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร stdlib.h เฮดเดอร string.h เปนเฮดเดอรทเกบฟงกชนเพอใชในการก าหนดคาใหกบสตรงและหาความยาวของสตรง ประกอบดวยฟงกชนมาตรฐานและส าคญ ดงตารางท 4.20

ตารางท 4.20 เฮดเดอร stdlib.h ใชก าหนดคาใหกบสตรงและหาความยาวของสตรง

ชอฟงกชน การใชงาน memchr ใชในการหาต าแหนงตวอกษรในอาเรย memmove ใชในการเซทต าแหนงของหนวยความจ า strcat ใชในการเรยงคาสตรง strncmp ใชเปรยบเทยบตวอกษรของสองสตรง strncpy ใชคดลอกตวอกษรจากสตรง strlen ใชหาความยาวของสตรง strspn ใชหาความหางของสตรง strxfrm ใชแปลงฟงกชนสตรง memset ใชเซทคาตวอกษร strchr ใชหาความหางระหวางสตรง strcoll ใชในการเปรยบเทยบคาสตรงสองคา strcspn ใชหาความหางของสตรง strpbrk ใชในการหาพยญชนะทอยในสตรง strstr ใชหาต าแหนงของสตรง memcpy ใชคดลอกบลอคหนวยความจ า

Page 25: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

107

ตารางท 4.20 เฮดเดอร stdlib.h ใชก าหนดคาใหกบสตรงและหาความยาวของสตรง (ตอ)

ชอฟงกชน การใชงาน strncat ใชเพมตวอกษรจากสตรง strcmp ใชเปรยบเทยบคาสองสตรง strcpy ใชคดลอกสตรง strerror ใชหาขอผดพลาด strrchr ใชหาต าแหนงสดทายของสตรง strtok ใชแบงสตรง

ฟงกชน “memset” เปนการก าหนดจ านวนคาหรอสมาชกทเกบไวในตวแปร โดยมประโยชน คอ ท าใหสามารถก าหนดคาสมาชกไดตามทตองการ ซงไมตองเขยนค าสงควบคมการท างานซ า ท าใหสะดวกและลดบรรทดของการเขยนชดค าสง แตในการเรยกใชฟงกชนนจ าเปนตองมการเรยกใชเฮดเดอรไฟล ดงชดค าสงในตารางท 4.21 ตารางท 4.21 รปแบบการเขยนค าสงฟงกชน memset

01 #include<string.h> 02 #include<stdio.h> 03 #include<stdlib.h> 04 char Value1[10]; 05 void main(){ 06 printf (" Value1 before set: \"% s\"\n", Value1); 07 memset (Value1, 'a', 10); 08 printf (" Value1 set: \"% s\"\n", Value1); 09 }

จากตารางท 4.21 การประกาศเฮดเดอร string.h เพอใชฟงกชน memset มการก าหนดคา

ตวอกษรโดยมผลลพธทไดดงภาพท 4.14

ภาพท 4.14 ผลลพธการรนโปรแกรมการเรยกใชเฮดเดอร string.h

Page 26: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

108

เฮดเดอร time.h เปนเฮดเดอรท เกบ ฟงกชนในการท างานเกยวกบระบบเวลา โดยประกอบดวยฟงกชนมาตรฐานและส าคญ ดงตารางท 4.22 ตารางท 4.22 เฮดเดอร time.h ใชในการท างานเกยวกบระบบเวลา

ชอฟงกชน การใชงาน asctime เกยวกบตนฉบบของเวลา difftime บอกความแตกตางระหวางสองเวลา mktime บอกเวอรชนปฏทนของเวลา clock ใชในการจบเวลา gmtime บอกเวลาปจจบนรอบๆ โลก ctime บอกรายละเอยดเวอรชนทจดรปแบบของเวลา localtime บอกเวลาภายในปจจบนและวนท time บอกเวลาปฏทนปจจบนของระบบ

ฟงกชน “time” เปนการท างานของฟงกชนใชส าหรบการอานและการแปลงเวลาปจจบน

และวนท ดงชดค าสงในตารางท 4.23 ตารางท 4.23 รปแบบการเขยนค าสงฟงกชน time

01 #include<stdio.h> 02 #include<stdlib.h> 03 #include<time.h> 04 void main(){ 05 time_t encoded_time; 06 char *time_st; 07 printf("The current date and time\n");

08 time (& encoded_time); 09 time_st = ctime(&encoded_time); 10 printf(" %s\n", time_st); 11 }

จากตารางท 4.23 มการประกาศเฮดเดอร time.h เพอเรยกใชฟงกชน “time” และ “ctime”

เพอการบอกเวลาปฏทนปจจบนของระบบ โดยมผลลพธทไดดงภาพท 4.15

Page 27: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

109

ภาพท 4.15 ผลลพธการรนโปรแกรมจากการเรยกใชเฮดเดอร time.h

กรณศกษาการสรางโปรแกรมเครองคดเลข ส าหรบในบทนจะยกตวอยางโปรแกรมเครองคดเลข (Calculator) โดยการประยกตใชการควบคมประโยคค าสงตางๆ ทกลาวมา ซงการออกแบบฟงกชนในโปรแกรมเครองคดเลขควรจะมโครงสราง ดงภาพท 4.16 คอ ฟงกชน “getFunction” ท าหนาทรองรบการเลอกฟงกชนใชงานของผใช ฟงกชน “getNumber” ท าหนาทรบคาตวเลข ฟงกชน “Compute” ท าหนาทการค านวณและฟงกชน “showResult” ท าหนาทแสดงผลลพธทไดจากฟงกชน ในสวนของการค านวณจะใชการบวก (sum) การลบ (sub) การคณ (mul) และการหาร (div) อยในสวนของการเขยนชดค าสงดงตารางท 4.23 (Behrouz, and Gilberg,2000:199)

ภาพท 4.16 การสรางเมนโปรแกรมเครองคดเลข

Calculator

getFunction getNumber Compute showResult

sum sub mul div

Page 28: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

110

ตารางท 4.24 รปแบบการเขยนค าสงการสรางเมนโปรแกรมเครองคดเลข

01 #include<iostream> // เฮดเดอรไฟล 02 #include<iomanip> 03 usingnamespace std; // ประกาศใช namespace 04 05 void getNumber (float&num1, float&num2); 06 void showResult (float num1,float num2,float result,int option); 07 int getFunction (void); 08 float Compute (int Option, float num1, float num2); 09 float sum (float num1,float num2); 10 float sub (float num1,float num2); 11 float mul (float num1,float num2); 12 float div (float num1,float num2); 13 void main () { 14 int option; 15 float num1, num2, result; 16 17 option = getFunction(); 18 getNumber (num1, num2);//เรยกใชฟงกชน (call funetion) 19 result = Compute (option, num1, num2); 20 showResult (num1, num2, result, option); 21 } // จบฟงกชนหลก 22 int getFunction () { 23 int option; 24 cout <<"\n\n\n"; 25 cout <<"\n\t*******************************";

26 cout <<"\n\t* MENU *"; 27 cout <<"\n\t* *"; 28 cout <<"\n\t* 1. Sum *"; 29 cout <<"\n\t* 2. SUBTRACT *"; 30 cout <<"\n\t* 3. MULTIPLY *"; 31 cout <<"\n\t* 4. DIVIDE *"; 32 cout <<"\n\t* *"; 33 cout <<"\n\t********************************"; 34 cout <<"\n\nPlease type your choice and press the returu key : "; 35 cin >> option; 36 return option; 37 } 38 // จบฟงกชน getFunction 39 void getNumber (float&num1,float&num2) { 40 cout <<"\nEnter two numbers separated by a space:"; 41 cin >> num1 >> num2; 42 return ; 43 } // จบฟงกชน getNumber 44 float Compute (int option,float num1,float num2) { 45 float result; 46 switch (option) { 47 case 1 : result = sum (num1, num2); 48 break; 49 case 2 : result = sub (num1, num2); 50 break; 51 case 3 : result = mul (num1, num2); 52 break; 53 case 4 : if (num2 == 0.0) {

Page 29: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

111

ตารางท 4.24 รปแบบการเขยนค าสงการสรางเมนโปรแกรมเครองคดเลข (ตอ)

54 cout <<"\n\a\aError: "; 55 cout <<"division by zero ***\n"; 56 exit (1); 57 } else 58 result = div (num1, num2); 59 break; 60 default : cout <<"\aOption not available\n"; 61 exit (1);} 62 63 return result; 64 } 65 float sum (float num1,float num2) { 66 float res = num1 + num2; 67 return res; 68 } 69 float sub (float num1,float num2) { 70 float res = num1 - num2; 71 return res; 72 } 73 float mul (float num1,float num2) { 74 float res = num1 * num2; 75 return res; 76 } 77 float div (float num1,float num2) {

78 float res = num1 / num2; 79 return res; 80 } 81 void showResult (float num1,float num2,float res, int option) { 82 cout << fixed<< setprecision(2); 83 cout <<"\n\n"<< num1; 84 switch (option) { 85 case 1 : cout <<" + "; 86 break; 87 case 2 : cout <<" - "; 88 break; 89 case 3 : cout <<" * "; 90 break; 91 case 4 : cout <<" / "; 92 break; 93 } 94 cout << num2 <<" = "<< res << endl;

95 }

จากตารางท 4.24 เมอเลอกเมน DIVIDE โดยปอนคา 4 เขาไป จากนนปอนคา 20 และ 2

เขาไปในโปรแกรม จะไดผลลพธดงภาพท 4.17

Page 30: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

112

ภาพท 4.17 ผลลพธการรนโปรแกรมกรณศกษาการสรางโปรแกรมเครองคดเลข

สรป

การสรางฟงกชนในภาษาซพลสพลสนนเปนการก าหนดการท างานของโปรแกรมใหผลลพธอยางใดอยางหนง ท งนนกเขยนโปรแกรมควรมการออกแบบหรอเขยนฟงกชนใหกระทดรดและไมซบซอนหรอชดค าสงไมควรมหลายบรรทดจนเกนไป ซงปกตการสรางฟงกชนจะประกอบไปดวยชดค าส งอยระหวาง 1-25 บรรทด ในการเรยกใชฟงกชนน นเพอไมให เกดขอผดพลาดขนในระหวางทโปรแกรมท างาน ตองแนใจวาฟงกชนดงกลาวมอยจรงไมวาจะเปนฟงกชนทถกสรางขนมาเองหรอมอยในคลงมาตรฐานฟงกชนขนมาท างานโดยนกเขยนโปรแกรมจ าเปนจะตองรวามจ านวนอารกวเมนตในการสงคาผานระหวางฟงกชนหรอไม และแบบใด นอกจากน บางครงเมอมการเรยกใชฟงกชนขนมาท างานแลวอาจมการเขยนชดค าสงเพมเตม เพอใหฟงกชนนนมความสามารถในการรองรบการใชงานของผใชไดอยางสมบรณขน แตตองระมดระวงวาการท างานของฟงกชนทเขยนเพมเตมวาจะไมไปซ าซอนกบความสามารถของฟงกชนทมอยแลวในชดค าสง ในกรณทมการเรยกใชฟงกชนนนท าซ าหลายๆ ครง ควรมการพจารณาในเรองของการสรางฟงกชนแบบเรยกใชตวเอง หรอ แบบอนลายฟงกชน เพอเปนการลดจ านวนบรรทดของชดค าสงและเพมประสทธภาพของการท างานโปรแกรม ซงประโยชนส าหรบสรางฟงกชนทมขนาดเลกจะท าใหเราสามารถบรหารและจดการเกยวกบขอผดพลาดทอาจเกดขนไดงาย ในเนอหาบทตอไปจะอธบายถงความหมายของขอผดพลาดตางๆ การแกไขขอผดพลาดทเกดขนโดยใชเครองมอจดการขอผดพลาดทมอยในโปรแกรมไมโครซอฟทวชวลสตดโอ 2010

Page 31: แผนบริหารการสอนประจ าบทที่ 4anantakul.net/learning/4_C++.pdf · แผนบริหารการสอนประจ าบทที่

113

แบบฝกหด

จงตอบค าถามตอไปน 1. จงอธบายสวนประกอบของฟงกชนและเขยนรปแบบการประกาศฟงกชน 2. จงเขยนโปรแกรมสรางฟงกชนชอ multiply และก าหนดอารกวเมนต 2 ตว ซงประกาศ

ตวแปร a และ b เพอรบคาจากการปอนขอมลทางคยบอรด แลวน าคาทงสองมาค านวณโดยการคณกน

3. จงเขยนโปรแกรมการสงคาจรงผานระหวางฟงกชน โดยก าหนดใหฟงกชน ชอ passingByValue และก าหนดอารกวเมนต 1 ตว

4. จงเขยนโปรแกรมการสงคาอางองผานระหวางฟงกชนโดยก าหนดใหฟงกชน ชอ Reference และก าหนดอารกวเมนต 1 ตว

5. จงเขยนโปรแกรมการสรางโอเวอรโหลดดงฟงกชน (Function Overloading) โดยสรางฟงกชน 2 ฟงกชนและใชชอเดยวกนท งสองฟงกชน ใหใชชอ ”Overload” และในแตละฟงกชน ก าหนดอารกวเมนตทมชนดทแตกตางกน

6. จงอธบายการท างานของอนลายฟงกชน (Inline Function) 7. จงเขยนโปรแกรมเพอเรยกใชฟงกชนทอยในเฮดเดอร stdio.h และเฮดเดอร time.h 8. จงอธบายการท างานของโอเวอรโหลดดงฟงกชนพรอมยกตวอยาง 9. จงเขยนโปรแกรมเพอเรยกใชฟงกชนทอยในเฮดเดอร math.h โดยจะตองมการเรยกใช

ฟงกชนไซน (sin) คอส (cos) และแทน (tan) 10. จงพฒนาโปรแกรมตดเกรด โดยมการสรางฟงกชนหาผลรวมคะแนนทงหมดเพอมา

ท าการตดเกรด และคดคาเฉลย

เอกสารอางอง

ประภาพร ชางไม. (2545). คมอเขยนโปรแกรมดวยภาษาC. กรงเทพฯ: คอมฟอรม. Behrouz, A. F. and Gilberg,R. F. (2000). Computer Science A StructuredProgramming

Approach Using C++. New York:Brooks/Cole. Deitel,H.M. and Deitel,P.J. (2003). C++ How to Program.New Jersey:Prentice Hall.