SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
!

                                          บทที่ 5
                                   ฟงกชน (Function)
                                      ั

♦! วามหมายและประโยชนของฟงกชน
 ค                       ั
         ฟงกชัน (Function) หมายถึง ประโยคคําสั่ง(statements) ชุดหนึ่งซึ่งมีชื่อเรียกใชโดยเฉพาะ
ฟงกชันหนึ่ง ๆ จะทําหนาที่เฉพาะอยางใดอยางหนึ่ง สวนอน ๆ ของโปรแกรมสามารถเรยกสเตตเมนต
                                                        ่ื                            ี
ชุดนีได โดยการเรียกใช ชื่อฟงกชัน นัน ๆ ใหถูกตองตามรูปแบบที่ฟงกชันนั้น ๆ กําหนดไว
     ้                                 ้

         ฟงกชันในภาษา C++ มี 2 ประเภท คือ
         1. User Defined Function คือ ฟงกชนทผเู ขยนโปรแกรมสรางขนหรอกาหนดขึนเอง ตามรูป
                                            ั ่ี ี                 ้ึ ื ํ        ้
แบบการสรางฟงกชันของ C++ เพือนํามาใชในการเขยนโปรแกรมของตนเอง (จะกลาวถึงรายละเอียด
                                    ่               ี
ตอไป)
         2. Standard Function คือ ฟงกชันมาตรฐานที่บริษัทผูสราง Compiler ภาษา C++ ไดสราง
รวบรวมไวในคลัง (Library) ผเู ขยนโปรแกรมสามารถเรยกใชไดทนที ไดแก ฟงกชันที่ประกอบอยูใน
                                ี                      ี   ั
header file ตาง ๆ ขณะเรียกใช ตอง #include ชื่อไฟลที่รวบรวมฟงกชันนั้นไวกอน เชน ฟงกชัน
                                                                                    
clrscr() ทาหนาที่ลางจอภาพใหวางและเลื่อน cursor ไปไวที่มุมซายบนของจอภาพ เปนฟงกชันอยูใน
            ํ
ไฟล conio.h เปนตน

          ประโยชนฟงกชนในการเขยนโปรแกรมใน C++ มีดังตอไปนี้
                        ั         ี
          1. ชวยใหไมตองเขียน statement เดม ๆ ซํากันหลายครั้งในโปรแกรมเดียวกัน
                                              ิ     ้
          2. ชวยใหสามารถคนหาสวนทผลหรอสวนทตองปรบปรงไดอยางรวดเรว เนืองจากเราทราบวา
                                  ่ี        ื  ่ี    ั ุ             ็ ่
แตละฟงกชันทาหนาที่อะไร และสรางฟงกชันไวที่สวนใดของโปรแกรม
                   ํ
          3. ทาใหโปรแกรมมีขนาดกระทัดรัด ทาความเขาใจไดงายและรวดเร็ว เพราะเขยนแบงเปน
                 ํ                                ํ                               ี      
ฟงกชนตามงานหรอหนาททตองการเขยน
      ั             ื  ่ี ่ี       ี
          4. เนื่องจากฟงกชันมีการทํางานเปนอสระ สามารถนําฟงกชันที่สรางไวและมีการทางานเปน
                                              ิ                                         ํ
มาตรฐานแลว เก็บไวใน Header File เพื่อใหเปนคลังคําสั่ง(Library) ของผูใช นําไปใชไดในโปรแกรม
                                                                                    
อน ๆ ไดอก ซึงชวยใหเราเขียนโปรแกรมใหมไดรวดเร็วขึน โดยการนําฟงกชันที่มีอยูแลวมาใชใหมได
 ่ื       ี ่                                           ้




ศิริชัย นามบุรี                                                                   ฟงกชน(Functions)
                                                                                        ั
!                                                  59

♦!สวนประกอบในการสรางฟงกชัน
          ฟงกชนทเ่ี ราสรางขนเอง เรยกวา User Defined Function ซึ่งใน C++ กําหนดใหเมือมีการเรียก
              ั        ้ึ      ี                                                    ่
ใชชื่อฟงกชันใด ๆ จะตองมีการ สงคากลับมา (return value) ในชื่อฟงกชันนั้นเสมอ มีรปแบบโครง
                                                                                      ู
สรางของฟงกชันประกอบไปดวยสวนหัวของฟงกชันและสวนของ statement ดังนี้

            function_type function_name (parameter1,parameter2,…) //function header
            { int …        //declaration variable in function
              float …               //declaration variable in function
                  statement;                 //statement in function
                  statement;                 //statement in function
                 return(value); //function must return only one or null value to function_name
        }

        ความหมายของสวนประกอบในฟงกชัน มีดังนี้
        function_type คือ ประเภทคาหรอขอมลทไดจากการทํางานของฟงกชัน ซึ่งจะตองใหคาคืน
                                          ื  ู ่ี 
กลับมาเก็บไวในชื่อของฟงกชัน (function_name) ถาเปนประเภท void จะเปนฟงกชันประเภทที่ตองมี
การ return value
        function_name คือ ชื่อฟงกชันที่กําหนดขนตามกฎเกณฑการตงชอของ C++ และจะเปนชื่อที่ใช
                                                     ้ึ         ้ั ่ื
สําหรับการเรียกใชฟงกชันตอไป
        (parameter1,parameter2,…) หรือพารามิเตอรประกอบไปดวย ประเภทและชื่อของตัวแปร
ใชรบคาคงทเ่ี พอนํามาใชทางานในฟงกชัน ในขณะที่ฟงกชันนั้นถูกเรียกใชทางาน พารามเิ ตอรของ
   ั         ่ื           ํ                                                  ํ                    
ฟงกชันมีมากกวา 1 ตวและหลายประเภทได
                      ั
        return(value); โดยที่ return เปนคยเ วรด และ value คือคาคงที่ที่สงคืนไปใหแกชื่อฟงกชัน 1
                                            ี ิ
คาหรือไมมีก็ได ( กรณีเปนฟงกชันที่ไมใหคาใด ๆ)

            ตัวอยางการกําหนดชื่อฟงกชัน เชน




ศิริชัย นามบุรี                                                                       ฟงกชน(Functions)
                                                                                            ั
!                                                 60

                  int factorial(int number)
                                             parameter ของฟงกชันเปน integer
                                   ชื่อฟงกชัน factorial
                          ประเภทฟงกชันใหคาเปน integer

              ความหมาย คือ ฟงกชันชื่อ factorial() คาที่ไดจากการทํางานของฟงกชันเปน int และ
ขณะเรยกใชตองมการรบคาพารามเิ ตอรมาเกบไวทตวแปร number และเปนประเภท int เพื่อในมาใช
     ี   ี ั                    ็  ่ี ั
ภายในฟงกชัน

         void line()
                  ความหมายคือ ฟงกชันชื่อ line() เปนฟงกชนทไมมพารามเิ ตอร เมื่อฟงกชันทํางาน
                                                       ั ่ี  ี
เสร็จแลว จะไมใหคาใด ๆ คืนกลับมา เพราะมีประเภทเปน void

        float power(int base, int exp)
                ความหมาย ฟงกชันชื่อ power() คาที่ไดจากฟงกชันเปน float และขณะเรียกใชตองมี
การรับคาพารามิเตอร 2 ตัว ตัวแรก base เปน int และตัวที่สอง exp เปน int มาใชในฟงกชันดวย
                                                                    



♦! ารสรางและการเรยกใชฟงกชนในโปรแกรม
 ก              ี    ั

           การสรางและการเรียกใชฟงกชนในโปรแกรม มีการกําหนดรูปแบบการสรางและเรียกใช ดังนี้
                                   ั




ศิริชัย นามบุรี                                                                     ฟงกชน(Functions)
                                                                                          ั
!                                                     61

           #include <header file>
           #include <header file>
           //declaration 2 prototype function in this program are line() and factorial()
           void line();
           int factorial(int number);

           void main()                //function main()
           { int …          //declaration variable in function main()
          statement;                  //statement in function
          factorial(int value or variable); //call function factorial() in function main()
             statement;               //statement in function
              line();          //call function line() in function main()
             statement;               //statement in function
         } //end of main() and end of this program

           void line()
            { int …         //declaration variable in function
           float …          //declaration variable in function
              statement;             //statement in function
              statement;             //statement in function
             } //return

           int factorial(int number)
            { int …         //declaration variable in function factorial()
          float …           //declaration variable in function factorial()
             statement;              //statement in function factorial()
            line();         //call function line() in function factorial()
             statement;              //statement in function factorial()
             return(value);//return only one value to factorial() function
         } //return


ศิริชัย นามบุรี                                                                              ฟงกชน(Functions)
                                                                                                   ั
!                                                   62

          จากโครงสรางโปรแกรมทีมการสรางฟงกชน สรุปไดดังนี้
                                      ่ ี                 ั
          1. การประกาศชื่อฟงกชันที่ผูใชกาหนดไวทตอนตนโปรแกรมกอนฟงกชน main() เรยกวา
                                                     ํ         ่ี                 ั             ี 
ฟงกชันตนแบบ (prototype) หรือการกําหนดฟงกชัน (function declaration) แสดงวาในโปรแกรมมีการ
สรางและเรียกใชฟงกชันเหลานี้ ซึ่งสามารถเรียกใชชื่อฟงกชันนั้น ณ ตําแหนงใด ๆ ของโปรแกรมกได       ็
ยกเวนหาม เรยกใชชอฟงกชนนนในตวฟงกชนเอง
                ี  ่ื   ั ้ั            ั   ั               การประกาศฟงกชันตนแบบ(prototype) ที่มี
พารามเิ ตอร(parameters) ทาได 2 ลักษณะ คือ
                                ํ
                    - ในสวนของพารามเิ ตอรของฟงกชน เขยนทงชนดขอมลและตวพารามเิ ตอร เชน
                                                       ั ี ้ั ิ  ู              ั             
                              int factorial(int number);
                    - ในสวนของพารามเิ ตอรของฟงกชน เขียนเฉพาะชนิดขอมูล เชน
                                                        ั                          
                              int factorial(int);
          2. การเรียกใชฟงกชันมีรูปแบบการเรียกใชเสมือนเปน statement เชน line() factorial(x) โดย
                                                                                   
ที่ฟงกชันใดที่มีพารามิเตอรกาหนดไว ตองใสคา argument ใหถูกตองในขณะเรียกใชดวย และเรียก x
                                  ํ
ของฟงกชัน factorial() วาอากวเมนต (argument)
                               ิ
          3. เมื่อมีการเรียกใชฟงกชัน ณ ตําแหนงใด โปรแกรมจะไปทางานในฟงกชันนั้นจนเสร็จ แลวจะ
                                                                           ํ                          
กลับมาทํางานตอใน statement ถัดไปจากตาแหนงที่เรียกใชฟงกชัน
                                                 ํ
          4. สามารถเรียกใชฟงกชันกี่ครั้งก็ไดในโปรแกรม


♦! งกชนไมมพารามเิ ตอร
 ฟ  ั  ี
          ฟงกชนไมมพารามเิ ตอร หมายถึง ฟงกชันที่ไมมีการรับคาพารามิเตอรมาใชในขณะทํางาน
             ั  ี
และการเรียกใชก็ไมตองสง argument มาใหฟงกชัน อาจเปนฟงกชนประเภทคนคา (return value) หรือ
                                                              ั         ื 
ไมมีการคืนคาใด ๆ ใหแกชื่อฟงกชันเมื่อทํางานเสรจกได
                                                   ็ ็
        •! ตัวอยางโปรแกรม line_non.cpp แสดงการสรางและเรยกใชฟงกชันแบบไมมพารามเิ ตอร
                                                                  ี         ี
            และไมมีการคืนคาใด ๆ คือ ฟงกชันประเภท viod

/*Program : line_non.cpp
 Process : creat non-parameter function line() */
#include <iostream.h>
#include <conio.h>
//declaration prototype function
void line();
//begin main program
void main()
{ int i;

ศิริชัย นามบุรี                                                                            ฟงกชน(Functions)
                                                                                                 ั
!                                                   63

 clrscr();
 cout<< "Display 1 line from line() functionn";
 line(); //call line() and non-argument
 getch();
 cout<< "Display 5 lines from line() functionn";
 for (i=1;i<=5;++i)
   line(); //call line() and non-argument
 getch();
}//end main program
void line() //non-parameter function
{
  cout<< "_________________________________n";
}

           •! ตัวอยางโปรแกรม func_non.cpp แสดงโปรแกรมที่มีการสรางฟงกชันประเภทที่ไมมี
              parameter ไมมการ return value คือ ฟงกชัน input() และฟงกชันที่ไมมี parameter
                             ี
              แตมการ return value คือฟงกชัน summation()
                  ี

/*Program : func_non.cpp
  process : display return value and non-parameter function
*/
#include <iostream.h>
#include <conio.h>
//prototype function declaration
int summation();
void input();
//global variable
int x,y;
void main()
{ clrscr();
  input(); //called function input()
  cout<<"Result of x+ y =a"<<summation(); //called function summation()
  getch();
}

void input() //non-return value function
{ cout<<"Enter 2 number for summation : "<<endl<<endl;
  cout<<"Number1 : ";cin>>x;

ศิริชัย นามบุรี                                                                   ฟงกชน(Functions)
                                                                                        ั
!                                                  64

cout<<"Number2 : ";cin>>y;
}
int summation() //return value function
{ int result;
  result=x+y;
  return (result); //return result value to summation() called
}

♦! งกชนมีพารามิเตอร
 ฟ ั
          ฟงกชนมพารามเิ ตอร หมายถึงฟงกชันที่มีการรับคาพารามิเตอรมาใชในขณะฟงกชันทํางาน ดัง
              ั ี
นั้นการเรียกใชฟงกชันประเภทนี้ ตองสง argument มาใหฟงกชันดวย จึงจะสามารถทางานได ดัง
                                                                                       ํ
ตวอยาง
  ั
          •! ตัวอยางโปรแกรม line_par.cpp แสดงการสรางและเรียกใชฟงกชันแบบมีพารามิเตอรและ
               ไมมีการคืนคาใด ๆ (เปนฟงกชันประเภท void) ใหแกชื่อฟงกชัน ณ จุดเรียกใช คาที่ไดจาก
               การทํางานของฟงกชัน จะตองนําไปใชอยางใดอยางหนงในโปรแกรม เชน แสดงคานั้นทาง
                                                                ่ึ
               จอภาพ เก็บคาที่ไดไวในตัวแปร เปนตน
/*Program : line_par.cpp
  Process : creat parameter function line()*/
#include <iostream.h>
#include <conio.h>
void line(int amount); //declaration prototype function
//begin main program
void main()
{ int i=45;
  //begin statement
  clrscr();
  cout<< "Display line from line() functionn";
  line(30); //call line() and send constant argument is 30
  getch();
  line(50); //call line() and send constant argument is 50
  getch();
  line(i); //call line() and send variable argument is i
  getch();
}
//end main program
void line(int amount) //amount is int parameter of function
{
  int x;

ศิริชัย นามบุรี                                                                           ฟงกชน(Functions)
                                                                                                ั
!                                            65

    for(x=1; x<=amount;++x)
     cout<<"_";
    cout<<'n';
}
         หมายเหตุ จากโปรแกรมตวอยาง การกาหนดคาอารกวเมนต (argument) ในการเรียกใชฟงกชัน
                                    ั             ํ          ิ
ทาได 2 ลักษณะ คือ
  ํ
         1. กําหนดเปนคาคงท่ี (constant) ใหเ ปนประเภทเดยวกนกบพารามเิ ตอรของฟงกชน เชน การ
                                                        ี ั ั              ั 
เรียกใชฟงกชัน line(30) line(50) ซึ่ง 30 และ 50 คือ คาคงที่ชนิด int
         2. กําหนดเปนตวแปร(variable) โดยกําหนดใหเ ปนตวแปรประเภทเดยวกนกบพารามเิ ตอรของ
                        ั                                 ั          ี ั ั          
ฟงกชัน เชน การเรียกใชฟงกชัน line(i) ซึ่ง i เปนตัวแปรชนิด int
           

         •! ตัวอยางโปรแกรม func_par.cpp แสดงการคานวณการบวก ลบ คูณ หาร เลข
                                                        ํ
             จานวนจริง 2 จานวน โดยการสรางฟงกชันประเภทที่มี parameters และมีการ
               ํ               ํ
             return value ใหแกชอฟงกชน ณ ตําแหนงทีเ่ รียกใชฟงกชน
                                  ่ื     ั                        ั
/*Program : func_par.cpp
  process : display return value and parameter function
        calculate addition,subtract,multiply and divide
*/
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
//prototype function declaration
void input();
float addition(float x, float y);
float subtract(float x, float y);
float multiply(float x, float y);
float divide(float x, float y);
//global variable
float num1,num2;
void main()
{ clrscr();
  input();
 cout<<"Result of addition = "<<addition(num1,num2)<<endl;
 cout<<"Result of subtract = "<<subtract(num1,num2)<<endl;
 cout<<"Result of multiply = "<<multiply(num1,num2)<<endl;
 cout<<"Result of subtract = "<<divide(num1,num2)<<endl<<endl;
 cout<<"Calculate by sent argument to parameters of function..."<<endl;

ศิริชัย นามบุรี                                                              ฟงกชน(Functions)
                                                                                   ั
!                                               66

    cout<<"Result of   10.0+20.25= "<<addition(120.0,20.25)<<endl;
    cout<<"Result of   10.0-20.25= "<<subtract(120.0,20.25)<<endl;
    cout<<"Result of   10.0*20.25= "<<multiply(120.0,20.25)<<endl;
    cout<<"Result of   10.0/20.25= "<<setprecision(3)<<divide(10.0,20.25)<<endl;
    getch();
}
void input() //non-parameter and non-return value function
{
  cout<<"Enter 2 number for calculate : "<<endl<<endl;
  cout<<"Number1 : ";cin>>num1;
  cout<<"Number2 : ";cin>>num2;
}
float addition(float x, float y)
{ float result;
  result=x+y;
result=x-y;
  return (result);
}
float subtract(float x, float y)
{ float result;
  result=x-y;
  return (result);
}
float multiply(float x, float y)
{ float result;
  result=x*y;
  return (result);
}
float divide(float x, float y)
{ float result;
  result=x/y;
  return (result);
}




ศิริชัย นามบุรี                                                                    ฟงกชน(Functions)
                                                                                         ั
!                                                   67

♦! งกชนแบบไมประกาศ prototype
 ฟ ั
         การสรางฟงกชันในโปรแกรมแบบไมประกาศเปน prototype คือ การสรางรายะเอยดของ
                                                                                        ี
ฟงกชันตางๆ ไวกอนฟงกชัน main() การเรียกใชฟงกชันประเภทนี้จะตองเรียกใชตามลําดับของการ
สรางฟงกชนในโปรแกรม ฟงกชันที่ถูกเรียกใชจะตองสรางอยูกอนฟงกชันที่เรียกใชเสมอ เหมาะสาหรบ
      ั                                                                                 ํ ั
การเขียนโปรแกรมงาย ๆ หรือมีขนาดสัน ๆ ไมสลับซับซอนมากนัก
                                    ้

           •! ตัวอยางโปรแกรม non_prot.cpp แสดงการสรางฟงกชนแบบไมประกาศ prototype ไวกอน
                                                       ั     
              ดงรายละเอยดโปรแกรมในหนาตอไป
               ั         ี                

/*Program : non_prot.cpp
 Process : creat non prototype function */
#include <iostream.h>
#include <conio.h>

// create non-prototype function before function main()
void line1(int amount) //parameter function
{
  int x;
  for(x=1; x<=amount;++x)
   cout<<"_";
  cout<<'n';
}
void line2() //non-parameter function
{
  cout<< "*********************************n";
  line1(65);
}
//begin main program
void main()
{
  clrscr();
  cout<< "Display line from line1() functionn";
  line1(40);      //call line1() and constant argument is 40
  getch();
  cout<< "nDisplay line from line2() functionn";
  line2();       //call line2() and constant argument is 50
  getch();
} //end main program

ศิริชัย นามบุรี                                                                 ฟงกชน(Functions)
                                                                                      ั
!                                                    68

♦! ินไลนฟงกชัน (inline function)
 อ
          โปรแกรมที่เรียกใชฟงกชันจะมีการเรียกใชหนวยความจานอยกวาโปรแกรมที่ไมเรียกใชฟงกชัน
                                                                    ํ
ทั้งนี้เพราะฟงกชันจะจองและใชพื้นที่หนวยความจาขณะถูกเรียกใชเทานั้น เมื่อฟงกชันทํางานเสรจจะคน
                                                     ํ                                        ็ ื
พื้นที่หนวยความจําใหกบโปรแกรม สวนโปรแกรมที่ไมเรียกใชฟงกชันจะมีการใชหนวยความจําเตมท่ี
                           ั                                                                    ็
ตลอดเวลาตามความตองการของโปรแกรมในขณะทํางาน
          โปรแกรมที่เรียกใชฟงกชันมีสวนดีในแงประหยัดการใชหนวยความจํา แตการเรียกใชฟงกชัน
ทาใหโปรแกรมตองใชเ วลาเพม มีผลทาใหการทํางานของโปรแกรมชากวาโปรแกรมที่ไมเรียกใชฟงกชัน
   ํ                          ่ิ      ํ
แตเราสามารถกําหนดใหฟงกชันในโปรแกรมถูกเรียกใชโดยจองพื้นที่หนวยความจําตลอดเวลา ไมเสีย
เวลาในการเรยกใช โดยกําหนดใหฟงกชนเปนประเภท อินไลนฟงกชัน (inline function)
               ี                       ั 
          วิธีการสราง อินไลนฟงกชัน (inline function) มีวิธีการดังนี้
          1. สรางอินไลนฟงกชันอยูกอนฟงกชัน main()
          2. เพมคยเ วรดคาวา inline ที่สวนหัวของฟงกชัน
                 ่ิ ี ิ  ํ
          หมายเหตุ ขอจํากัดของอินไลนฟงกชัน คือ ฟงกชันตองมีขนาดสั้น ถาอินไลนฟงกชันมีขนาด
                         
ยาวเกินไป compiler ของ C++ จะ compile ใหเปนฟงกชันที่มีการเรียกใชแบบปกติ
          •! ตัวอยางโปรแกรม inline.cpp แสดงการสรางและการเรยกใช อินไลนฟงกชัน ชื่อ square()
                                                                        ี
               ซึงทําหนาที่คานวณหาคาเลขยกกําลังสอง ดังนี้
                   ่          ํ

/*Program : inline.cpp
 Process : creat and call inline function*/

    #include<iostream.h>
    #include<conio.h>
    inline float square(float number) //declaration inline function
    {
      return(number*number);
    }
    void main() //begin function main()
    { float x;
      clrscr();
      cout<< "Enter number to calculate square : ";
      cin>>x;
      cout<< "Result of square = "<<square(x); //call square() function
      getch();
    }

ศิริชัย นามบุรี                                                                     ฟงกชน(Functions)
                                                                                          ั
!                                                  69

♦! ปแบบการสงอารกวเมนตใหฟงกชน (reference argument)
 รู         ิ          ั
        ฟงกชนประเภททสรางแบบมพารามเิ ตอร(parameter)
            ั          ่ี         ี                       เมื่อถูกเรียกใชจะตองมีการสงอารกิว
เมนต (argument) ไปใหแกฟงกชันนั้น ๆ โดยทีชนิดของตัวแปรหรือคาคงทีทของอารกวเมนตจะตอง
                                               ่                          ่ ่ี        ิ
เปนชนดเดยวกบพารามเิ ตอรของฟงกชนและมจานวนเทากับพารามิเตอร และกรณทมพารามเิ ตอรมาก
   ิ ี ั                        ั     ีํ                                   ี ่ี ี        
กวา 1 ตัว ลําดับการสงอารกวเมนตตองตรงกับลําดบของพารามเิ ตอรทกําหนดไว ดังตัวอยาง เชน
                              ิ                 ั             ่ี                       



           void main()
           { int x = 5, y=2;
              float result;
              result = power(x, y); //เรียกใชฟงกชัน power() ตองสง argument x และ y ไปใหฟงกชัน
           }                       โดยที่ x และ y เปนตวแปรประเภท int เหมอนกับตว parameters
                                                        ั                    ื       ั

           float power(int base, int exp) //ตัวแปร base , exp เปน parameters ของ function
                                                                
           {                              //รอรับคาจาก argument x และ y ตามลําดบั
             statement1;
             statement2;
             return value;
           }

           ลักษณะของการสงอารกิวเมนตที่เปน ตัวแปร ใหแกฟงกชัน มี 2 ลักษณะ คือ
           1. สงเฉพาะคาอารกิวเมนต (passed argument by value) หมายถึง เมือสงคาของตัวแปรทีเ่ ปน
                                                                                ่
อารกวเมนตไปใหแกพารามเิ ตอรของฟงกชนแลว เมื่อฟงกชันทํางานเสรจแลว คาตวแปรทเ่ี ปนอารกว
    ็ิ                                   ั                          ็   ั              ิ
เมนตยงคงมคาเดม การทางานของฟงกชันไมมีผลทาใหตวแปรอารกวเมนตเ ปลยนแปลงคา เรยกอารกว
         ั ี ิ                ํ                    ํ  ั          ิ            ่ี       ี      ิ
เมนตประเภทนวา value argument
                 ้ี 
           2. สงและเปลี่ยนคาอารกิวเมนต(passed argument by reference) เมอสงคาของตวแปรทเ่ี ปน
                                                                            ่ื        ั       
อารกวเมนตไปใหแกพารามเิ ตอรของฟงกชนแลว เมื่อฟงกชันทํางานเสรจแลว คาตวแปรทเ่ี ปนอารกว
    ็ิ                                  ั                          ็   ั              ิ
เมนตมีการเปลี่ยนแปลง             การทางานของฟงกชันทําใหตวแปรอารกวเมนตเ ปลยนแปลงคาไปจากเดม
                                        ํ                   ั         ิ            ่ี            ิ
เรยกอารกวเมนตชนดนวา reference argument
  ี        ิ           ิ ้ี 




ศิริชัย นามบุรี                                                                        ฟงกชน(Functions)
                                                                                             ั
!                                                   70

        รูปแบบการกาหนดและการเรียกใชฟงกชันที่มีการสงอารกิวเมนตแบบ value argument และ
                    ํ
reference argument มดงน้ี
                    ีั

           #include <header file>
           //declaration prototype function
           float square(float number);
           float area(float& width, float& high);

           void main()
           { float x,y,z;
              statement;
            }
           float square(float number) // value argument function
           {
              statement;
               return value_of_function;
           }
           float area(float& width, float& high) // reference argument function
           {
               statement;
               return value_of_function;
           }

       หมายเหตุ การกาหนดฟงกชนใหเ ปนประเภท reference argument ใชเครืองหมาย & ตอทาย
                      ํ        ั                                   ่
ชนิดขอมูลของพารามิเตอรในการกําหนดสวนหัวของฟงกชัน ในฟงกชันสามารถกําหนดทง reference
                                                                             ้ั
argument และ value argument รวมกันได
                              




ศิริชัย นามบุรี                                                                   ฟงกชน(Functions)
                                                                                        ั
!                                                71

        •! ตัวอยางโปรแกรม argument.cpp แสดงการเปรียบเทียบการเรียกใชฟงกชันแบบ value
                                                                      
             argument และ แบบ reference argument
/*Program : argument.cpp
 Process : show creat and call value and reference function*/

    #include <iostream.h>
    #include <conio.h>
    //declaration prototype function
    float sum(float arg1,float arg2);
    float multiply(float& arg3,float& arg4);
 void main() //begin main program
 {
   float arg1,arg2,arg3,arg4;
   clrscr();
   cout<< "Please enter 4 number for argument : n";
   cout<< "Argument1 : ";cin>>arg1;
   cout<< "Argument2 : ";cin>>arg2;
   cout<< "Argument3 : ";cin>>arg3;
   cout<< "Argument4 : ";cin>>arg4;
   //display call value argument function
   cout<< "nnDisplay call function sum() and send value argument";
   cout<< "nValue argument before send to function :";
  cout<< "nArgument 1 = "<<arg1<< " Argument 2 ="<<arg2;
  cout<< "nResult of sum = "<<sum(arg1,arg2);
  cout<< "nValue argument after send to function :(not change)";
  cout<< "nArgument 1 = "<<arg1<< " Argument 2 ="<<arg2;
  // display call reference argument function
  cout<< "nnDisplay call function multiply() and send reference argument";
  cout<< "nValue argument before send to function :";
  cout<< "nArgument 3 = "<<arg3<< " Argument 4 ="<<arg4;
  cout<< "nResult of multiply from function= "<<multiply(arg3,arg4);
  cout<< "nValue argument after send to function :(changed)";
  cout<< "naArgument 3 = "<<arg3<< " Argument 4 ="<<arg4;
  getch();
} //end main program
 float sum(float para1, float para2) //value argument function
 {
   return para1+para2;
 }
float multiply(float& para3, float& para4) //reference argument function

ศิริชัย นามบุรี                                                                ฟงกชน(Functions)
                                                                                     ั
!                                                     72

    {
        para3++; //change para3 and return valut to arg3
        para4++; //change para4 and return valut to arg4
        return para3*para4;
    }


♦! verloaded function
 O
           โอเวอรโหลดฟงกชน(overloaded function) เปนฟงกชันที่สามารถทํางานไดหลาย ๆ ลักษณะ
                           ั
ขึ้นอยูกับอารกิวเมนตที่ผูใชกาหนดให ดงนนชอฟงกชนประเภทน้ี ขณะเรียกใชจึงสามารถกาหนดอาร
                                  ํ       ั ้ั ่ื   ั                                ํ
กิวเมนตไดหลายลักษณะ
           วิธีการสราง overloaded function มีวิธีการสรางเหมือนกับฟงกชันปกติ แตมีการสรางชื่อ
overloaded function ใหมชอเหมอนกน โดยกําหนดพารามิเตอรแตละฟงกชันใหแตกตางกัน ดังตัว
                               ี ่ื ื ั
อยางในโปรแกรม
    
           •! โปรแกรม over_fun.cpp แสดงการสราง overloaded function ชื่อฟงกชัน line()
                                                  

/*Program : over_fun.cpp
  Process : creat and call overloaded function line()*/
#include <iostream.h>
#include <conio.h>
//declaration overloaded prototype function
void line();
void line(int x);
void line(char ch,int x);
void line(char ch);
void main() //begin main program
{
  clrscr();
  cout<< "Display 1 line from line() functionn";
  line();                   //call line()
  cout<< "Display 2 line from line() functionn";
  line(30);                 //call line()
  cout<< "Display 3 line from line() functionn";
  line('*',60);             //call line()
cout<< "Display 4 line from line() functionn";
  line('+');                 //call line()
  getch();
} //end main program
void line() //overload function1 line()

ศิริชัย นามบุรี                                                                   ฟงกชน(Functions)
                                                                                        ั
!                                                 73

{
    cout<< "================================n";
}
void line(int x) //overload function2 line()
{ int y;
  for (y=1;y<=x;++y)
    cout<< "_";
  cout<<'n';
}
void line(char ch,int x) //overload function3 line()
{ int y;
  for (y=1;y<=x;++y)
    cout<< ch;
  cout<<'n';
}
void line(char ch) //overload function4 line()
{ int y;
  for (y=1;y<=80;++y)
    cout<< ch;
  cout<<'n';
}

♦! efault argument
 D
         การประกาศ prototype function สามารถกาหนดคาเริมตน (default) ใหกับฟงกชันได ในขณะ
                                                 ํ         ่
เรียกใชฟงกชันทาใหเราสามารถกําหนดอารกิวเมนตไดหลายลักษณะ ถึงแมเราไมกาหนด หรอกาหนด
                 ํ                                                           ํ         ื ํ
อารกิวเมนตเพียงบางสวน ฟงกชันก็ยังสามารถทํางานได เรยกอารกวเมนตแบบนวา default argument
                                                        ี    ิ        ้ี 

           •! ตัวอยางโปรแกรม default.cpp แสดงการสรางฟงกชันแบบกําหนด default argument ไว
              สําหรับการเรียกใชพังกชัน




/*Program : argument.cpp

ศิริชัย นามบุรี                                                                ฟงกชน(Functions)
                                                                                     ั
!                                                  74

 Process : creat and call default argument function line()*/
#include <iostream.h>
#include <conio.h>
//ประกาศ prototype function และกําหนด default argument
void line(char ch= '_',int x=80);
void main() //begin main program
{
  clrscr();
  cout<< "Display line from line() functionn";
  line();         //call line() function
  line('+');      //call line() function
  line('#',50); //call line() function
  line(65);       //call line() will display character of ASCII CODE 65
  getch();
}//end main program
void line(char ch,int x) //function line()
{
  for (int y=1;y<=x;++y)
    cout<< ch;
  cout<<'n';
}

♦! กษณะการใชตวแปรในฟงกชน
 ลั          ั       ั
        การใชหรอการประกาศตวแปรในโปรแกรมของ C++ สามารถกาหนดใหตัวแปรมีลักษณะการ
                   ื            ั                                ํ
ใชงานได 3 ลักษณะ คือ
        1. automatic variable เปนการประกาศตวแปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตัว
                                                ั
แปรประเภทนจะนําไปใชไดเฉพาะในฟงกชันนี้เทานั้น จงเรยกอกอยางหนงวา Local variable การ
               ้ี                                       ึ ี ี       ่ึ 
ทางานของตวแปรประเภทน้ี จะจองพนทหนวยความจําเมื่อฟงกชันถูกเรียกใชเทานั้น และยกเลิกการใช
 ํ         ั                            ้ื ่ี 
หนวยความจําเมื่อฟงกชันทํางานเสรจ ปกติ C++ จะไมกาหนดคาเรมตนใหแกตวแปร automatic
                                    ็                       ํ    ่ิ    ั
variable ดงนนผใชควรกําหนดคาเรมตนใหกบตวแปรดวยเพอปองกนความผดพลาด การกาหนดตัว
             ั ้ั ู               ่ิ   ั ั         ่ื  ั           ิ      ํ
แปร automatic variable จะใชคียเวิรด auto หรือไมกได เชน
                                                    ็     



                  void main()


ศิริชัย นามบุรี                                                             ฟงกชน(Functions)
                                                                                  ั
!                                                        75

                         { int x=50;             //declaration x and number are automatic variable in main()
                      auto float number = 0; //used keywoad auto before type and name fo variable
                      statement;
                            …
                  }
                         void repeat() //function repeat()
                         { int y;        //declaration y is automatic variable
                            for(y=1;y<=40;++y) //use y from automatic or local variable
                                cout<<'#';
                            cout<<endl;
                    }
             2. external variable เปนการประกาศตวแปร อยนอก { } ของทุกฟงกชัน ตัวแปรประเภทนี้
                                                    ั       ู
จะนําไปใชไดในทุกฟงกชัน จงเรยกอกอยางหนงวา Global variable การทางานของตวแปรประเภทน้ี
                                   ึ ี ี          ่ึ                       ํ        ั
จะจองพนทหนวยความจําตลอดเวลาทโปรแกรมทางาน และยกเลิกการใชหนวยความจําเมอโปรแกรม
           ้ื ่ี                        ่ี            ํ                                 ่ื
ทางานเสรจ ปกติ C++ จะไมกาหนดคาเริมตนใหอตโนมัตแตอาจจะไมถกตอง ดงนนผใชควรกําหนดคา
    ํ          ็                    ํ       ่            ั      ิ          ู   ั ้ั ู     
เรมตนใหกบ
      ่ิ   ั
ตวแปรดวยเพอปองกนความผดพลาด การกาหนดตวแปร external variable จะกําหนดหรือประกาศไว
  ั           ่ื  ั            ิ             ํ           ั
กอนฟงกชัน main()
                      int y=0; //declaration y and x are external variable
                      float x=0;

                         void main() //function main()
                         { int x=50; //declaration x and number are automatic variable in main()
                           statement;
                           …
                  }
        หมายเหตุ ชือตัวแปรประเภท automatic และ external สามารถกาหนดชอซากันได เนืองจาก
                    ่                                                ํ    ่ื ้ํ        ่
ใชหนวยความจําพื้นที่คนละสวนกัน
        3. static variable เปนการประกาศตวแปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตัวแปร
                                           ั
ประเภทนี้จะนาไปใชไดเฉพาะในฟงกชันนี้เทานั้น การทางานของตวแปรประเภทน้ี จะจองพนทหนวย
                 ํ                                    ํ         ั                    ้ื ่ี 
ความจําไวตลอดเวลาทโปรแกรมทางาน และยกเลิกการใชหนวยความจําโปรแกรมจบการทางาน เรียก
                      ่ี       ํ                                                  ํ
อกอยางหนงวา static automatic variable จะใชคียเวิรด static นําหนาในการประกาศตัวแปร เชน
 ี         ่ึ                                                                           



                         float Avg(float value)


ศิริชัย นามบุรี                                                                               ฟงกชน(Functions)
                                                                                                    ั
!                                                     76

                     { static float total; //declaration static variable in function Avg()
                  static int amount;
                        total = total+value; //summation         of total
                        statement;
                      }

        •! ตัวอยางโปรแกรม type_var.cpp แสดงการกําหนดและการใชตัวแปรประเภท automatic
             และ external variable ในโปรแกรม
/*Program : type_var.cpp
 Process : show using automatic and external variable
*/
#include <iostream.h>
#include <conio.h>

void line(); //declaration prototype function
void repeat();
int x; //declaration external or global variable
void main() //begin main program
{ int x;        //declaration automatic or global variable in main()
 auto int y; //declaration automatic or global variable in main()
 clrscr();
 line();
 repeat();
 for(y=1;y<=5;++y) //use y is automatic or local variable
      line();
 for(x=1;x<=5;++x) //use x is automatic or local variable
      repeat();
getch();
} //end main program
void line() //function line()
{ for(x=1;x<=80;x++) //use x from global or external variable
  cout<<'=';
  cout<<endl;
 }

void repeat() //function repeat()
{int y;

ศิริชัย นามบุรี                                                                              ฟงกชน(Functions)
                                                                                                   ั
!                                                 77

    for(y=1;y<=40;++y) //usy y from automatic or local variable
      cout<<'#';
    cout<<endl;
}

♦! emplate Function
 T
          เท็มเพลตฟงกชัน (Template Function) หมายถึง ฟงกชันที่มีคุณสมบัติในการใชอากิวเมนต
(argument) ไดกับขอมูลหลาย ๆ ประเภท เท็มเพลตฟงกชันกาหนดใหพารามเิ ตอรของฟงกชนสามารถ
                                                                ํ                        ั
รบคาอารกิวเมนตไดหลายประเภท เชน ฟงกชัน sum() กําหนดใหเ ปนประเภท template function
 ั                                                                   
สามารถรบคาจากตวแปรประเภท int, float และ double ได คํานวณมาหาผลรวมไดทงอารกวเมนต
         ั           ั                                                                   ้ั     ิ
ประเภท int, float และ double ซงในฟงกชนแบบปกตพารามเิ ตอรจะรบอารกวเมนตไดเ ฉพาะขอมล
                                           ่ึ      ั     ิ          ั ิ                        ู
ประเภทเดียวกันกับที่กาหนดไวเ ทานน
                           ํ           ้ั
        การกาหนด template function กําหนดไวกอนหนาฟงกชัน main() มรปแบบดงน้ี
              ํ                                                             ีู       ั
                   template <class Type>
                   Type Sum(Type first, Type second) //function sum()
                   { statement;
                        statement;
                         return first+second;
                   }
        สวนประกอบใน template function มดงน้ี        ีั
        1. template เปนคียเ วิรดเพือกําหนดวา ฟงกชัน sum() เปน template function
                                     ่                           
        2. <class Type> class เปนคียเ วิรดเพือกําหนดชนดขอมล มชอวา Type ซึ่งสามารถกาหนด
                                                 ่          ิ  ู ี ่ื                       ํ
ชอไดตามความตองการของผใช ตามกฎการตงชอของ C++
  ่ื                           ู                ้ั ่ื
        3. Type Sum(Type first, Type second) ชื่อฟงกชัน sum() มประเภทเปน Type มีพารา
                                                                      ี        
มิเตอร 2 ตัว มชนดเปน Type เชนกน
                ี ิ                    ั

           •! ตัวอยางโปรแกรม template.cpp แสดงการใชฟงกชันประเภท template function ชื่อ sum()
              ทําหนาที่คานวณหาผลรวมของเลข 2 จานวน ฟงกชันชื่อ multiply() หาผลคูณเลข 2
                         ํ                        ํ
              จานวน ซึ่งเปนตัวเลขประเภท integer, float และ double
               ํ


/*Program : template.cpp
 Process : show create and call template function */

ศิริชัย นามบุรี                                                                        ฟงกชน(Functions)
                                                                                             ั
!                                         78

  #include <iostream.h>
  #include <conio.h>
  //declaration templat function sum()
  template<class TYPE>
  TYPE sum(TYPE first, TYPE second)
  {
     return first+second;
  }
  //declare template function multiply()
  template<class New_type>
  New_type multiply(New_type number1,New_type number2)
  {
     return number1*number2;
  }
void main() //begin main program
 { int x=50,y=30;
   float a=300.25, b=100.50;
   double c=3.21541005,d=10005.02541152;
   //begin statement
   clrscr();
   cout<< " Sum integer "<< sum(x,y)<<endl;
   cout<< " Sum float "<< sum(a,b)<<endl;
   cout<< " Sum double "<< sum(c,d)<<endl;
   cout<< "n Multiply integer "<< multiply(x,y)<<endl;
   cout<< " Multiply float "<< multiply(a,b)<<endl;
   cout<< " Multiply double "<< multiply(c,d);
   getch();
 } //end main program




ศิริชัย นามบุรี                                           ฟงกชน(Functions)
                                                                ั
!                                           79

♦! บบฝกหัดทายบท
 แ

1. ใหเขียนโปรแกรมสรางฟงกชันเสนกรอบสี่เหลี่ยม โดยกําหนดพารามิเตอรกาหนดตําแหนง มุมซาย
                                                                       ํ           
   ดานบนและมุมขวาดานลางของกรอบได เชน frame(5,2,50,10) แสดงวากรอบสี่เหลี่ยมจะเริ่มวาด
                                           
   ตังแตตาแหนง มุมซายบนที่ คอลัมน 5 แถว 2 และมุมขวาลางที่ตําแหนง คอลัมน 50 แถวที่ 10
     ้ ํ                                                          
                 5,2



                                                            50,10

2. ใหเ ขยนโปรแกรมเพอสรางฟงกชนคํานวณคา factorial(n) เพอคานวณหาคาแฟกทอเรยลของ
         ี               ่ื    ั                                 ่ื ํ               ี
   จํานวน n
3. ใหเขียนโปรแกรมเพื่อสรางฟงกชันแบบพารามิเตอรและมีการ return value ในการคํานวณเลข
   ยกกําลังโดยการสง argument เปนเลขจํานวนฐานและเลขกาลังไปใหแกฟงกชัน เชน power(2,4)
                                                                  ํ                   
   คือการคํานวณเลขจํานวน 2 ยกกําลัง 4
4. ใหเ ขยนโปรแกรมเพอสรางฟงกชนประเภทมพารามเิ ตอรและมการ return value ในการคํานวณหา
           ี               ่ื    ั                     ี           ี
    คาพนทของรปเรขาคณตตอไปน้ี วงกลม, สามเหลี่ยม และ สี่เหลี่ยม
       ้ื ่ี ู                     ิ 
5. จงเขยนโปรแกรมเพอคานวณการตัดเกรด โดยการเขียนแยกเปนฟงกชัน มีเงือนไขการตัดเกรด ดังนี้
             ี               ่ื ํ                                              ่
             คะแนน 0-49 เกรด F                       คะแนน 50-59 เกรด D
             คะแนน 60-69 เกรด C                      คะแนน 70-79 เกรด B
             คะแนน 80-100 เกรด A
    ในโปรแกรมใหสรางฟงกชนตอไปน้ี
                         ั 
    void input()                          ทาหนาที่รับคะแนนระหวางภาคและปลายภาคเรียน
                                                  ํ
    int summation(int x, int y) ทาหนาทในการรวมคะแนน
                                                 ํ  ่ี
    char calculate(int total)             ทาหนาทีในการตัดเกรด
                                               ํ     ่
    void display()                        ทาหนาที่ในการแสดงผลขอมูลของโปรแกรมทั้งหมด
                                             ํ
6. ใหเขียนโปรแกรมสรางฟงกชนประเภทมีพารามิเตอรและมีการ return value เพือคํานวณหาผลรวม
                                        ั                                          ่
    ของเลขอนกรม 2 ฟงกชัน โดยมีชื่อฟงกชัน sum_even() และ sum_odd มีการทางาน ดังตัวอยาง
                 ุ                                                                   ํ
    sum_odd(1,10)              คอหาผลรวมของ 1+3+5+7+9
                                  ื
    sum_odd(9,20)              คอหาผลรวมของ 9+11+13+15+17+19
                                ื



ศิริชัย นามบุรี                                                               ฟงกชน(Functions)
                                                                                    ั
!                                              80

     sum_even(1,10)     คอหาผลรวมของ 2+4+6+8
                         ื
     sum_even(9,20)     คอหาผลรวมของ 10+12+14+16+18+20
                           ื
7. Write the function digitsum(n) ,which computes and returns the sum of the decimal digits
   of the integer parameter n.
8. Write the function sort4, which has four parameters. If the integer variables a,b,c and d are
   available and have been assigned values, we want to write
       sort4(&a, &b,&c,&d);
   to sort four variables, so that, after that call, we have a<=b<=c<=d




ศิริชัย นามบุรี                                                                    ฟงกชน(Functions)
                                                                                         ั

Contenu connexe

Tendances

ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาThanachart Numnonda
 
การเขียนโปรแกรมเพื่องานอาชีพ 6.
การเขียนโปรแกรมเพื่องานอาชีพ 6.การเขียนโปรแกรมเพื่องานอาชีพ 6.
การเขียนโปรแกรมเพื่องานอาชีพ 6.Ploy StopDark
 
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6Ploy StopDark
 
Pbl2 นะแนนxปิ้น
Pbl2 นะแนนxปิ้นPbl2 นะแนนxปิ้น
Pbl2 นะแนนxปิ้นDararat Worasut
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตThanachart Numnonda
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีNattapon
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented ConceptJava Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented ConceptIMC Institute
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานNookky Anapat
 
บทที่1 พื้นฐานโปรแกรมภาษาซี
บทที่1 พื้นฐานโปรแกรมภาษาซีบทที่1 พื้นฐานโปรแกรมภาษาซี
บทที่1 พื้นฐานโปรแกรมภาษาซีKomkai Pawuttanon
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentalsUsableLabs
 
6.Flow control
6.Flow control6.Flow control
6.Flow controlUsableLabs
 

Tendances (20)

Vb6 5 ข้อมูลและตัวแปร
Vb6 5 ข้อมูลและตัวแปร Vb6 5 ข้อมูลและตัวแปร
Vb6 5 ข้อมูลและตัวแปร
 
3.2 ตัวแปรและคำสงวน
3.2 ตัวแปรและคำสงวน3.2 ตัวแปรและคำสงวน
3.2 ตัวแปรและคำสงวน
 
Chapter1
Chapter1Chapter1
Chapter1
 
3.6 ฟังก์ชัน
3.6 ฟังก์ชัน3.6 ฟังก์ชัน
3.6 ฟังก์ชัน
 
ความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวาความรู้เบื้องต้นภาษาจาวา
ความรู้เบื้องต้นภาษาจาวา
 
การเขียนโปรแกรมเพื่องานอาชีพ 6.
การเขียนโปรแกรมเพื่องานอาชีพ 6.การเขียนโปรแกรมเพื่องานอาชีพ 6.
การเขียนโปรแกรมเพื่องานอาชีพ 6.
 
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6
โปรแกรมย่อยและฟังก์ชัน มาตรฐาน 6
 
Pbl2 docx
Pbl2 docxPbl2 docx
Pbl2 docx
 
Pbl2 นะแนนxปิ้น
Pbl2 นะแนนxปิ้นPbl2 นะแนนxปิ้น
Pbl2 นะแนนxปิ้น
 
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุตJava Programming: คลาสอินพุตและเอาต์พุต
Java Programming: คลาสอินพุตและเอาต์พุต
 
C slide
C slideC slide
C slide
 
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซีใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
ใบความรู้ที่ 1 ความรู้พื้นฐานโปรแกรมภาษาซี
 
ภาษาซีเบื้องต้น
ภาษาซีเบื้องต้นภาษาซีเบื้องต้น
ภาษาซีเบื้องต้น
 
Java Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented ConceptJava Programming [4/12] : Object Oriented Concept
Java Programming [4/12] : Object Oriented Concept
 
3.1 โครงสร้างของภาษาซี
3.1 โครงสร้างของภาษาซี3.1 โครงสร้างของภาษาซี
3.1 โครงสร้างของภาษาซี
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐานการเขียนคำสั่งควบคุมขั้นพื้นฐาน
การเขียนคำสั่งควบคุมขั้นพื้นฐาน
 
บทที่1 พื้นฐานโปรแกรมภาษาซี
บทที่1 พื้นฐานโปรแกรมภาษาซีบทที่1 พื้นฐานโปรแกรมภาษาซี
บทที่1 พื้นฐานโปรแกรมภาษาซี
 
ภาษา C#
ภาษา C#ภาษา C#
ภาษา C#
 
2.Java fundamentals
2.Java fundamentals2.Java fundamentals
2.Java fundamentals
 
6.Flow control
6.Flow control6.Flow control
6.Flow control
 

En vedette

Gunbower forest environmental watering resource booklet.
Gunbower forest environmental watering resource booklet.Gunbower forest environmental watering resource booklet.
Gunbower forest environmental watering resource booklet.Peter Phillips M.Ed.
 
บทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookบทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookโทโม๊ะจัง นานะ
 
บทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookบทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookโทโม๊ะจัง นานะ
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงMaxky Thonchan
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงMaxky Thonchan
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงMaxky Thonchan
 
VCE Environmental Science Unit 3: Biodiversity and conservation management.
VCE Environmental Science Unit 3: Biodiversity and conservation management.VCE Environmental Science Unit 3: Biodiversity and conservation management.
VCE Environmental Science Unit 3: Biodiversity and conservation management.Peter Phillips M.Ed.
 
รายวิชา ปวส
รายวิชา ปวสรายวิชา ปวส
รายวิชา ปวสMaxky Thonchan
 
Gunbower forest environmental watering fieldwork booklet.
Gunbower forest environmental watering fieldwork booklet.Gunbower forest environmental watering fieldwork booklet.
Gunbower forest environmental watering fieldwork booklet.Peter Phillips M.Ed.
 
Characteristics of salt as a pollutant
Characteristics of salt as a pollutantCharacteristics of salt as a pollutant
Characteristics of salt as a pollutantPeter Phillips M.Ed.
 

En vedette (19)

บท5
บท5บท5
บท5
 
Gunbower forest environmental watering resource booklet.
Gunbower forest environmental watering resource booklet.Gunbower forest environmental watering resource booklet.
Gunbower forest environmental watering resource booklet.
 
Lesson6
Lesson6Lesson6
Lesson6
 
Lesson3
Lesson3Lesson3
Lesson3
 
บทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookบทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e book
 
บท1
บท1บท1
บท1
 
บท4
บท4บท4
บท4
 
บท6
บท6บท6
บท6
 
บทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e bookบทที่ 4 เรื่องทำงานกับไฟล์ e book
บทที่ 4 เรื่องทำงานกับไฟล์ e book
 
Lesson2
Lesson2Lesson2
Lesson2
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
 
Murray River Virtual Field Trip
Murray River Virtual Field TripMurray River Virtual Field Trip
Murray River Virtual Field Trip
 
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูงหลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง
 
VCE Environmental Science Unit 3: Biodiversity and conservation management.
VCE Environmental Science Unit 3: Biodiversity and conservation management.VCE Environmental Science Unit 3: Biodiversity and conservation management.
VCE Environmental Science Unit 3: Biodiversity and conservation management.
 
รายวิชา ปวส
รายวิชา ปวสรายวิชา ปวส
รายวิชา ปวส
 
Gunbower forest environmental watering fieldwork booklet.
Gunbower forest environmental watering fieldwork booklet.Gunbower forest environmental watering fieldwork booklet.
Gunbower forest environmental watering fieldwork booklet.
 
Characteristics of salt as a pollutant
Characteristics of salt as a pollutantCharacteristics of salt as a pollutant
Characteristics of salt as a pollutant
 
เฉลยแบบฝึกหัดบทที่ 1
เฉลยแบบฝึกหัดบทที่ 1เฉลยแบบฝึกหัดบทที่ 1
เฉลยแบบฝึกหัดบทที่ 1
 

Similaire à Lesson5

บทที่6 งานคอม
บทที่6 งานคอมบทที่6 งานคอม
บทที่6 งานคอมIce Ice
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานPrapatsorn Keawnoun
 
4.ฟังก์ชันในภาษาซี
4.ฟังก์ชันในภาษาซี4.ฟังก์ชันในภาษาซี
4.ฟังก์ชันในภาษาซีmansuang1978
 
หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2SubLt Masu
 
โครงสร้างภาษาซี
โครงสร้างภาษาซีโครงสร้างภาษาซี
โครงสร้างภาษาซีPatipat04
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานWasin Kunnaphan
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานchanamanee Tiya
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานchanamanee Tiya
 
โครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซีโครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซีณัฐพล บัวพันธ์
 

Similaire à Lesson5 (20)

งานทำBlog บทที่ 10
งานทำBlog บทที่ 10งานทำBlog บทที่ 10
งานทำBlog บทที่ 10
 
3.6 ฟังก์ชัน
3.6 ฟังก์ชัน3.6 ฟังก์ชัน
3.6 ฟังก์ชัน
 
งานทำBlog บทที่ 10
งานทำBlog บทที่ 10งานทำBlog บทที่ 10
งานทำBlog บทที่ 10
 
บทที่6 งานคอม
บทที่6 งานคอมบทที่6 งานคอม
บทที่6 งานคอม
 
Mindmapping
MindmappingMindmapping
Mindmapping
 
Mindmapping
MindmappingMindmapping
Mindmapping
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
4.ฟังก์ชันในภาษาซี
4.ฟังก์ชันในภาษาซี4.ฟังก์ชันในภาษาซี
4.ฟังก์ชันในภาษาซี
 
Pbl2 docx
Pbl2 docxPbl2 docx
Pbl2 docx
 
หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2หน่วยการเรียนรู้ที่ 2
หน่วยการเรียนรู้ที่ 2
 
โครงสร้างภาษาซี
โครงสร้างภาษาซีโครงสร้างภาษาซี
โครงสร้างภาษาซี
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
Presenter1234567
Presenter1234567Presenter1234567
Presenter1234567
 
โครงสร้างของโปรแกรมภาษา C
โครงสร้างของโปรแกรมภาษา Cโครงสร้างของโปรแกรมภาษา C
โครงสร้างของโปรแกรมภาษา C
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐานโปรแกรมย่อยและฟังก์ชันมาตรฐาน
โปรแกรมย่อยและฟังก์ชันมาตรฐาน
 
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
โปรแกรมย่อยและฟังก์ชันมาตรฐาน 1
 
โครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซีโครงสร้างของโปรแกรมภาษาซี
โครงสร้างของโปรแกรมภาษาซี
 
7 2โครงสร้าง
7 2โครงสร้าง7 2โครงสร้าง
7 2โครงสร้าง
 

Plus de โทโม๊ะจัง นานะ

บทที่ 2 สร้าง e book ง่ายและเร็ว
บทที่ 2 สร้าง e book ง่ายและเร็วบทที่ 2 สร้าง e book ง่ายและเร็ว
บทที่ 2 สร้าง e book ง่ายและเร็วโทโม๊ะจัง นานะ
 
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์โทโม๊ะจัง นานะ
 

Plus de โทโม๊ะจัง นานะ (20)

บทที่ 3 การควบคุม e book
บทที่ 3 การควบคุม e bookบทที่ 3 การควบคุม e book
บทที่ 3 การควบคุม e book
 
บทที่ 2 สร้าง e book ง่ายและเร็ว
บทที่ 2 สร้าง e book ง่ายและเร็วบทที่ 2 สร้าง e book ง่ายและเร็ว
บทที่ 2 สร้าง e book ง่ายและเร็ว
 
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์
บทที่ 1 ลักษณะทั่วไปของหนังสืออิเล็กทรอนิกส์
 
Chapter1
Chapter1Chapter1
Chapter1
 
Lesson1
Lesson1Lesson1
Lesson1
 
Lesson4
Lesson4Lesson4
Lesson4
 
Lesson1
Lesson1Lesson1
Lesson1
 
บทที่1
บทที่1บทที่1
บทที่1
 
บท2
บท2บท2
บท2
 
บท3
บท3บท3
บท3
 
บท4
บท4บท4
บท4
 
บท5
บท5บท5
บท5
 
บท6
บท6บท6
บท6
 
บท6
บท6บท6
บท6
 
บท1
บท1บท1
บท1
 
บท2
บท2บท2
บท2
 
บท5
บท5บท5
บท5
 
B2
B2B2
B2
 
บท3
บท3บท3
บท3
 
บท6
บท6บท6
บท6
 

Lesson5

  • 1. ! บทที่ 5 ฟงกชน (Function)   ั ♦! วามหมายและประโยชนของฟงกชน ค    ั ฟงกชัน (Function) หมายถึง ประโยคคําสั่ง(statements) ชุดหนึ่งซึ่งมีชื่อเรียกใชโดยเฉพาะ ฟงกชันหนึ่ง ๆ จะทําหนาที่เฉพาะอยางใดอยางหนึ่ง สวนอน ๆ ของโปรแกรมสามารถเรยกสเตตเมนต  ่ื ี ชุดนีได โดยการเรียกใช ชื่อฟงกชัน นัน ๆ ใหถูกตองตามรูปแบบที่ฟงกชันนั้น ๆ กําหนดไว ้ ้ ฟงกชันในภาษา C++ มี 2 ประเภท คือ 1. User Defined Function คือ ฟงกชนทผเู ขยนโปรแกรมสรางขนหรอกาหนดขึนเอง ตามรูป   ั ่ี ี  ้ึ ื ํ ้ แบบการสรางฟงกชันของ C++ เพือนํามาใชในการเขยนโปรแกรมของตนเอง (จะกลาวถึงรายละเอียด ่  ี ตอไป) 2. Standard Function คือ ฟงกชันมาตรฐานที่บริษัทผูสราง Compiler ภาษา C++ ไดสราง รวบรวมไวในคลัง (Library) ผเู ขยนโปรแกรมสามารถเรยกใชไดทนที ไดแก ฟงกชันที่ประกอบอยูใน ี ี   ั header file ตาง ๆ ขณะเรียกใช ตอง #include ชื่อไฟลที่รวบรวมฟงกชันนั้นไวกอน เชน ฟงกชัน    clrscr() ทาหนาที่ลางจอภาพใหวางและเลื่อน cursor ไปไวที่มุมซายบนของจอภาพ เปนฟงกชันอยูใน ํ ไฟล conio.h เปนตน ประโยชนฟงกชนในการเขยนโปรแกรมใน C++ มีดังตอไปนี้    ั ี 1. ชวยใหไมตองเขียน statement เดม ๆ ซํากันหลายครั้งในโปรแกรมเดียวกัน ิ ้ 2. ชวยใหสามารถคนหาสวนทผลหรอสวนทตองปรบปรงไดอยางรวดเรว เนืองจากเราทราบวา     ่ี ื  ่ี  ั ุ   ็ ่ แตละฟงกชันทาหนาที่อะไร และสรางฟงกชันไวที่สวนใดของโปรแกรม ํ 3. ทาใหโปรแกรมมีขนาดกระทัดรัด ทาความเขาใจไดงายและรวดเร็ว เพราะเขยนแบงเปน ํ ํ ี   ฟงกชนตามงานหรอหนาททตองการเขยน   ั ื  ่ี ่ี  ี 4. เนื่องจากฟงกชันมีการทํางานเปนอสระ สามารถนําฟงกชันที่สรางไวและมีการทางานเปน  ิ ํ มาตรฐานแลว เก็บไวใน Header File เพื่อใหเปนคลังคําสั่ง(Library) ของผูใช นําไปใชไดในโปรแกรม    อน ๆ ไดอก ซึงชวยใหเราเขียนโปรแกรมใหมไดรวดเร็วขึน โดยการนําฟงกชันที่มีอยูแลวมาใชใหมได ่ื ี ่ ้ ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 2. ! 59 ♦!สวนประกอบในการสรางฟงกชัน ฟงกชนทเ่ี ราสรางขนเอง เรยกวา User Defined Function ซึ่งใน C++ กําหนดใหเมือมีการเรียก   ั  ้ึ ี  ่ ใชชื่อฟงกชันใด ๆ จะตองมีการ สงคากลับมา (return value) ในชื่อฟงกชันนั้นเสมอ มีรปแบบโครง ู สรางของฟงกชันประกอบไปดวยสวนหัวของฟงกชันและสวนของ statement ดังนี้ function_type function_name (parameter1,parameter2,…) //function header { int … //declaration variable in function float … //declaration variable in function statement; //statement in function statement; //statement in function return(value); //function must return only one or null value to function_name } ความหมายของสวนประกอบในฟงกชัน มีดังนี้ function_type คือ ประเภทคาหรอขอมลทไดจากการทํางานของฟงกชัน ซึ่งจะตองใหคาคืน  ื  ู ่ี  กลับมาเก็บไวในชื่อของฟงกชัน (function_name) ถาเปนประเภท void จะเปนฟงกชันประเภทที่ตองมี การ return value function_name คือ ชื่อฟงกชันที่กําหนดขนตามกฎเกณฑการตงชอของ C++ และจะเปนชื่อที่ใช ้ึ  ้ั ่ื สําหรับการเรียกใชฟงกชันตอไป (parameter1,parameter2,…) หรือพารามิเตอรประกอบไปดวย ประเภทและชื่อของตัวแปร ใชรบคาคงทเ่ี พอนํามาใชทางานในฟงกชัน ในขณะที่ฟงกชันนั้นถูกเรียกใชทางาน พารามเิ ตอรของ ั  ่ื ํ ํ  ฟงกชันมีมากกวา 1 ตวและหลายประเภทได ั return(value); โดยที่ return เปนคยเ วรด และ value คือคาคงที่ที่สงคืนไปใหแกชื่อฟงกชัน 1  ี ิ คาหรือไมมีก็ได ( กรณีเปนฟงกชันที่ไมใหคาใด ๆ) ตัวอยางการกําหนดชื่อฟงกชัน เชน ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 3. ! 60 int factorial(int number) parameter ของฟงกชันเปน integer ชื่อฟงกชัน factorial ประเภทฟงกชันใหคาเปน integer ความหมาย คือ ฟงกชันชื่อ factorial() คาที่ไดจากการทํางานของฟงกชันเปน int และ ขณะเรยกใชตองมการรบคาพารามเิ ตอรมาเกบไวทตวแปร number และเปนประเภท int เพื่อในมาใช ี   ี ั   ็  ่ี ั ภายในฟงกชัน void line() ความหมายคือ ฟงกชันชื่อ line() เปนฟงกชนทไมมพารามเิ ตอร เมื่อฟงกชันทํางาน    ั ่ี  ี เสร็จแลว จะไมใหคาใด ๆ คืนกลับมา เพราะมีประเภทเปน void float power(int base, int exp) ความหมาย ฟงกชันชื่อ power() คาที่ไดจากฟงกชันเปน float และขณะเรียกใชตองมี การรับคาพารามิเตอร 2 ตัว ตัวแรก base เปน int และตัวที่สอง exp เปน int มาใชในฟงกชันดวย   ♦! ารสรางและการเรยกใชฟงกชนในโปรแกรม ก  ี    ั การสรางและการเรียกใชฟงกชนในโปรแกรม มีการกําหนดรูปแบบการสรางและเรียกใช ดังนี้  ั ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 4. ! 61 #include <header file> #include <header file> //declaration 2 prototype function in this program are line() and factorial() void line(); int factorial(int number); void main() //function main() { int … //declaration variable in function main() statement; //statement in function factorial(int value or variable); //call function factorial() in function main() statement; //statement in function line(); //call function line() in function main() statement; //statement in function } //end of main() and end of this program void line() { int … //declaration variable in function float … //declaration variable in function statement; //statement in function statement; //statement in function } //return int factorial(int number) { int … //declaration variable in function factorial() float … //declaration variable in function factorial() statement; //statement in function factorial() line(); //call function line() in function factorial() statement; //statement in function factorial() return(value);//return only one value to factorial() function } //return ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 5. ! 62 จากโครงสรางโปรแกรมทีมการสรางฟงกชน สรุปไดดังนี้ ่ ี ั 1. การประกาศชื่อฟงกชันที่ผูใชกาหนดไวทตอนตนโปรแกรมกอนฟงกชน main() เรยกวา ํ  ่ี     ั ี  ฟงกชันตนแบบ (prototype) หรือการกําหนดฟงกชัน (function declaration) แสดงวาในโปรแกรมมีการ สรางและเรียกใชฟงกชันเหลานี้ ซึ่งสามารถเรียกใชชื่อฟงกชันนั้น ณ ตําแหนงใด ๆ ของโปรแกรมกได ็ ยกเวนหาม เรยกใชชอฟงกชนนนในตวฟงกชนเอง   ี  ่ื   ั ้ั ั   ั การประกาศฟงกชันตนแบบ(prototype) ที่มี พารามเิ ตอร(parameters) ทาได 2 ลักษณะ คือ ํ - ในสวนของพารามเิ ตอรของฟงกชน เขยนทงชนดขอมลและตวพารามเิ ตอร เชน     ั ี ้ั ิ  ู ั  int factorial(int number); - ในสวนของพารามเิ ตอรของฟงกชน เขียนเฉพาะชนิดขอมูล เชน     ั  int factorial(int); 2. การเรียกใชฟงกชันมีรูปแบบการเรียกใชเสมือนเปน statement เชน line() factorial(x) โดย  ที่ฟงกชันใดที่มีพารามิเตอรกาหนดไว ตองใสคา argument ใหถูกตองในขณะเรียกใชดวย และเรียก x ํ ของฟงกชัน factorial() วาอากวเมนต (argument)  ิ 3. เมื่อมีการเรียกใชฟงกชัน ณ ตําแหนงใด โปรแกรมจะไปทางานในฟงกชันนั้นจนเสร็จ แลวจะ ํ  กลับมาทํางานตอใน statement ถัดไปจากตาแหนงที่เรียกใชฟงกชัน ํ 4. สามารถเรียกใชฟงกชันกี่ครั้งก็ไดในโปรแกรม ♦! งกชนไมมพารามเิ ตอร ฟ  ั  ี ฟงกชนไมมพารามเิ ตอร หมายถึง ฟงกชันที่ไมมีการรับคาพารามิเตอรมาใชในขณะทํางาน   ั  ี และการเรียกใชก็ไมตองสง argument มาใหฟงกชัน อาจเปนฟงกชนประเภทคนคา (return value) หรือ    ั ื  ไมมีการคืนคาใด ๆ ใหแกชื่อฟงกชันเมื่อทํางานเสรจกได ็ ็ •! ตัวอยางโปรแกรม line_non.cpp แสดงการสรางและเรยกใชฟงกชันแบบไมมพารามเิ ตอร  ี     ี และไมมีการคืนคาใด ๆ คือ ฟงกชันประเภท viod /*Program : line_non.cpp Process : creat non-parameter function line() */ #include <iostream.h> #include <conio.h> //declaration prototype function void line(); //begin main program void main() { int i; ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 6. ! 63 clrscr(); cout<< "Display 1 line from line() functionn"; line(); //call line() and non-argument getch(); cout<< "Display 5 lines from line() functionn"; for (i=1;i<=5;++i) line(); //call line() and non-argument getch(); }//end main program void line() //non-parameter function { cout<< "_________________________________n"; } •! ตัวอยางโปรแกรม func_non.cpp แสดงโปรแกรมที่มีการสรางฟงกชันประเภทที่ไมมี parameter ไมมการ return value คือ ฟงกชัน input() และฟงกชันที่ไมมี parameter ี แตมการ return value คือฟงกชัน summation() ี /*Program : func_non.cpp process : display return value and non-parameter function */ #include <iostream.h> #include <conio.h> //prototype function declaration int summation(); void input(); //global variable int x,y; void main() { clrscr(); input(); //called function input() cout<<"Result of x+ y =a"<<summation(); //called function summation() getch(); } void input() //non-return value function { cout<<"Enter 2 number for summation : "<<endl<<endl; cout<<"Number1 : ";cin>>x; ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 7. ! 64 cout<<"Number2 : ";cin>>y; } int summation() //return value function { int result; result=x+y; return (result); //return result value to summation() called } ♦! งกชนมีพารามิเตอร ฟ ั ฟงกชนมพารามเิ ตอร หมายถึงฟงกชันที่มีการรับคาพารามิเตอรมาใชในขณะฟงกชันทํางาน ดัง   ั ี นั้นการเรียกใชฟงกชันประเภทนี้ ตองสง argument มาใหฟงกชันดวย จึงจะสามารถทางานได ดัง ํ ตวอยาง ั •! ตัวอยางโปรแกรม line_par.cpp แสดงการสรางและเรียกใชฟงกชันแบบมีพารามิเตอรและ ไมมีการคืนคาใด ๆ (เปนฟงกชันประเภท void) ใหแกชื่อฟงกชัน ณ จุดเรียกใช คาที่ไดจาก การทํางานของฟงกชัน จะตองนําไปใชอยางใดอยางหนงในโปรแกรม เชน แสดงคานั้นทาง    ่ึ จอภาพ เก็บคาที่ไดไวในตัวแปร เปนตน /*Program : line_par.cpp Process : creat parameter function line()*/ #include <iostream.h> #include <conio.h> void line(int amount); //declaration prototype function //begin main program void main() { int i=45; //begin statement clrscr(); cout<< "Display line from line() functionn"; line(30); //call line() and send constant argument is 30 getch(); line(50); //call line() and send constant argument is 50 getch(); line(i); //call line() and send variable argument is i getch(); } //end main program void line(int amount) //amount is int parameter of function { int x; ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 8. ! 65 for(x=1; x<=amount;++x) cout<<"_"; cout<<'n'; } หมายเหตุ จากโปรแกรมตวอยาง การกาหนดคาอารกวเมนต (argument) ในการเรียกใชฟงกชัน ั  ํ ิ ทาได 2 ลักษณะ คือ ํ 1. กําหนดเปนคาคงท่ี (constant) ใหเ ปนประเภทเดยวกนกบพารามเิ ตอรของฟงกชน เชน การ    ี ั ั    ั  เรียกใชฟงกชัน line(30) line(50) ซึ่ง 30 และ 50 คือ คาคงที่ชนิด int 2. กําหนดเปนตวแปร(variable) โดยกําหนดใหเ ปนตวแปรประเภทเดยวกนกบพารามเิ ตอรของ  ั  ั ี ั ั  ฟงกชัน เชน การเรียกใชฟงกชัน line(i) ซึ่ง i เปนตัวแปรชนิด int  •! ตัวอยางโปรแกรม func_par.cpp แสดงการคานวณการบวก ลบ คูณ หาร เลข ํ จานวนจริง 2 จานวน โดยการสรางฟงกชันประเภทที่มี parameters และมีการ ํ ํ return value ใหแกชอฟงกชน ณ ตําแหนงทีเ่ รียกใชฟงกชน ่ื ั  ั /*Program : func_par.cpp process : display return value and parameter function calculate addition,subtract,multiply and divide */ #include <iostream.h> #include <conio.h> #include <iomanip.h> //prototype function declaration void input(); float addition(float x, float y); float subtract(float x, float y); float multiply(float x, float y); float divide(float x, float y); //global variable float num1,num2; void main() { clrscr(); input(); cout<<"Result of addition = "<<addition(num1,num2)<<endl; cout<<"Result of subtract = "<<subtract(num1,num2)<<endl; cout<<"Result of multiply = "<<multiply(num1,num2)<<endl; cout<<"Result of subtract = "<<divide(num1,num2)<<endl<<endl; cout<<"Calculate by sent argument to parameters of function..."<<endl; ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 9. ! 66 cout<<"Result of 10.0+20.25= "<<addition(120.0,20.25)<<endl; cout<<"Result of 10.0-20.25= "<<subtract(120.0,20.25)<<endl; cout<<"Result of 10.0*20.25= "<<multiply(120.0,20.25)<<endl; cout<<"Result of 10.0/20.25= "<<setprecision(3)<<divide(10.0,20.25)<<endl; getch(); } void input() //non-parameter and non-return value function { cout<<"Enter 2 number for calculate : "<<endl<<endl; cout<<"Number1 : ";cin>>num1; cout<<"Number2 : ";cin>>num2; } float addition(float x, float y) { float result; result=x+y; result=x-y; return (result); } float subtract(float x, float y) { float result; result=x-y; return (result); } float multiply(float x, float y) { float result; result=x*y; return (result); } float divide(float x, float y) { float result; result=x/y; return (result); } ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 10. ! 67 ♦! งกชนแบบไมประกาศ prototype ฟ ั การสรางฟงกชันในโปรแกรมแบบไมประกาศเปน prototype คือ การสรางรายะเอยดของ  ี ฟงกชันตางๆ ไวกอนฟงกชัน main() การเรียกใชฟงกชันประเภทนี้จะตองเรียกใชตามลําดับของการ สรางฟงกชนในโปรแกรม ฟงกชันที่ถูกเรียกใชจะตองสรางอยูกอนฟงกชันที่เรียกใชเสมอ เหมาะสาหรบ    ั ํ ั การเขียนโปรแกรมงาย ๆ หรือมีขนาดสัน ๆ ไมสลับซับซอนมากนัก ้ •! ตัวอยางโปรแกรม non_prot.cpp แสดงการสรางฟงกชนแบบไมประกาศ prototype ไวกอน    ั  ดงรายละเอยดโปรแกรมในหนาตอไป ั ี   /*Program : non_prot.cpp Process : creat non prototype function */ #include <iostream.h> #include <conio.h> // create non-prototype function before function main() void line1(int amount) //parameter function { int x; for(x=1; x<=amount;++x) cout<<"_"; cout<<'n'; } void line2() //non-parameter function { cout<< "*********************************n"; line1(65); } //begin main program void main() { clrscr(); cout<< "Display line from line1() functionn"; line1(40); //call line1() and constant argument is 40 getch(); cout<< "nDisplay line from line2() functionn"; line2(); //call line2() and constant argument is 50 getch(); } //end main program ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 11. ! 68 ♦! ินไลนฟงกชัน (inline function) อ โปรแกรมที่เรียกใชฟงกชันจะมีการเรียกใชหนวยความจานอยกวาโปรแกรมที่ไมเรียกใชฟงกชัน ํ ทั้งนี้เพราะฟงกชันจะจองและใชพื้นที่หนวยความจาขณะถูกเรียกใชเทานั้น เมื่อฟงกชันทํางานเสรจจะคน ํ ็ ื พื้นที่หนวยความจําใหกบโปรแกรม สวนโปรแกรมที่ไมเรียกใชฟงกชันจะมีการใชหนวยความจําเตมท่ี ั ็ ตลอดเวลาตามความตองการของโปรแกรมในขณะทํางาน โปรแกรมที่เรียกใชฟงกชันมีสวนดีในแงประหยัดการใชหนวยความจํา แตการเรียกใชฟงกชัน ทาใหโปรแกรมตองใชเ วลาเพม มีผลทาใหการทํางานของโปรแกรมชากวาโปรแกรมที่ไมเรียกใชฟงกชัน ํ   ่ิ ํ แตเราสามารถกําหนดใหฟงกชันในโปรแกรมถูกเรียกใชโดยจองพื้นที่หนวยความจําตลอดเวลา ไมเสีย เวลาในการเรยกใช โดยกําหนดใหฟงกชนเปนประเภท อินไลนฟงกชัน (inline function) ี    ั  วิธีการสราง อินไลนฟงกชัน (inline function) มีวิธีการดังนี้ 1. สรางอินไลนฟงกชันอยูกอนฟงกชัน main() 2. เพมคยเ วรดคาวา inline ที่สวนหัวของฟงกชัน ่ิ ี ิ  ํ หมายเหตุ ขอจํากัดของอินไลนฟงกชัน คือ ฟงกชันตองมีขนาดสั้น ถาอินไลนฟงกชันมีขนาด  ยาวเกินไป compiler ของ C++ จะ compile ใหเปนฟงกชันที่มีการเรียกใชแบบปกติ •! ตัวอยางโปรแกรม inline.cpp แสดงการสรางและการเรยกใช อินไลนฟงกชัน ชื่อ square()  ี ซึงทําหนาที่คานวณหาคาเลขยกกําลังสอง ดังนี้ ่ ํ /*Program : inline.cpp Process : creat and call inline function*/ #include<iostream.h> #include<conio.h> inline float square(float number) //declaration inline function { return(number*number); } void main() //begin function main() { float x; clrscr(); cout<< "Enter number to calculate square : "; cin>>x; cout<< "Result of square = "<<square(x); //call square() function getch(); } ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 12. ! 69 ♦! ปแบบการสงอารกวเมนตใหฟงกชน (reference argument) รู  ิ     ั ฟงกชนประเภททสรางแบบมพารามเิ ตอร(parameter)   ั ่ี  ี เมื่อถูกเรียกใชจะตองมีการสงอารกิว เมนต (argument) ไปใหแกฟงกชันนั้น ๆ โดยทีชนิดของตัวแปรหรือคาคงทีทของอารกวเมนตจะตอง ่ ่ ่ี ิ เปนชนดเดยวกบพารามเิ ตอรของฟงกชนและมจานวนเทากับพารามิเตอร และกรณทมพารามเิ ตอรมาก  ิ ี ั    ั ีํ ี ่ี ี  กวา 1 ตัว ลําดับการสงอารกวเมนตตองตรงกับลําดบของพารามเิ ตอรทกําหนดไว ดังตัวอยาง เชน ิ  ั  ่ี  void main() { int x = 5, y=2; float result; result = power(x, y); //เรียกใชฟงกชัน power() ตองสง argument x และ y ไปใหฟงกชัน } โดยที่ x และ y เปนตวแปรประเภท int เหมอนกับตว parameters  ั ื ั float power(int base, int exp) //ตัวแปร base , exp เปน parameters ของ function  { //รอรับคาจาก argument x และ y ตามลําดบั statement1; statement2; return value; } ลักษณะของการสงอารกิวเมนตที่เปน ตัวแปร ใหแกฟงกชัน มี 2 ลักษณะ คือ 1. สงเฉพาะคาอารกิวเมนต (passed argument by value) หมายถึง เมือสงคาของตัวแปรทีเ่ ปน ่ อารกวเมนตไปใหแกพารามเิ ตอรของฟงกชนแลว เมื่อฟงกชันทํางานเสรจแลว คาตวแปรทเ่ี ปนอารกว ็ิ       ั  ็   ั  ิ เมนตยงคงมคาเดม การทางานของฟงกชันไมมีผลทาใหตวแปรอารกวเมนตเ ปลยนแปลงคา เรยกอารกว ั ี ิ ํ ํ  ั ิ ่ี  ี ิ เมนตประเภทนวา value argument  ้ี  2. สงและเปลี่ยนคาอารกิวเมนต(passed argument by reference) เมอสงคาของตวแปรทเ่ี ปน ่ื   ั  อารกวเมนตไปใหแกพารามเิ ตอรของฟงกชนแลว เมื่อฟงกชันทํางานเสรจแลว คาตวแปรทเ่ี ปนอารกว ็ิ       ั  ็   ั  ิ เมนตมีการเปลี่ยนแปลง การทางานของฟงกชันทําใหตวแปรอารกวเมนตเ ปลยนแปลงคาไปจากเดม ํ  ั ิ ่ี  ิ เรยกอารกวเมนตชนดนวา reference argument ี ิ  ิ ้ี  ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 13. ! 70 รูปแบบการกาหนดและการเรียกใชฟงกชันที่มีการสงอารกิวเมนตแบบ value argument และ ํ reference argument มดงน้ี ีั #include <header file> //declaration prototype function float square(float number); float area(float& width, float& high); void main() { float x,y,z; statement; } float square(float number) // value argument function { statement; return value_of_function; } float area(float& width, float& high) // reference argument function { statement; return value_of_function; } หมายเหตุ การกาหนดฟงกชนใหเ ปนประเภท reference argument ใชเครืองหมาย & ตอทาย ํ   ั  ่ ชนิดขอมูลของพารามิเตอรในการกําหนดสวนหัวของฟงกชัน ในฟงกชันสามารถกําหนดทง reference ้ั argument และ value argument รวมกันได  ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 14. ! 71 •! ตัวอยางโปรแกรม argument.cpp แสดงการเปรียบเทียบการเรียกใชฟงกชันแบบ value  argument และ แบบ reference argument /*Program : argument.cpp Process : show creat and call value and reference function*/ #include <iostream.h> #include <conio.h> //declaration prototype function float sum(float arg1,float arg2); float multiply(float& arg3,float& arg4); void main() //begin main program { float arg1,arg2,arg3,arg4; clrscr(); cout<< "Please enter 4 number for argument : n"; cout<< "Argument1 : ";cin>>arg1; cout<< "Argument2 : ";cin>>arg2; cout<< "Argument3 : ";cin>>arg3; cout<< "Argument4 : ";cin>>arg4; //display call value argument function cout<< "nnDisplay call function sum() and send value argument"; cout<< "nValue argument before send to function :"; cout<< "nArgument 1 = "<<arg1<< " Argument 2 ="<<arg2; cout<< "nResult of sum = "<<sum(arg1,arg2); cout<< "nValue argument after send to function :(not change)"; cout<< "nArgument 1 = "<<arg1<< " Argument 2 ="<<arg2; // display call reference argument function cout<< "nnDisplay call function multiply() and send reference argument"; cout<< "nValue argument before send to function :"; cout<< "nArgument 3 = "<<arg3<< " Argument 4 ="<<arg4; cout<< "nResult of multiply from function= "<<multiply(arg3,arg4); cout<< "nValue argument after send to function :(changed)"; cout<< "naArgument 3 = "<<arg3<< " Argument 4 ="<<arg4; getch(); } //end main program float sum(float para1, float para2) //value argument function { return para1+para2; } float multiply(float& para3, float& para4) //reference argument function ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 15. ! 72 { para3++; //change para3 and return valut to arg3 para4++; //change para4 and return valut to arg4 return para3*para4; } ♦! verloaded function O โอเวอรโหลดฟงกชน(overloaded function) เปนฟงกชันที่สามารถทํางานไดหลาย ๆ ลักษณะ    ั ขึ้นอยูกับอารกิวเมนตที่ผูใชกาหนดให ดงนนชอฟงกชนประเภทน้ี ขณะเรียกใชจึงสามารถกาหนดอาร ํ ั ้ั ่ื   ั ํ กิวเมนตไดหลายลักษณะ วิธีการสราง overloaded function มีวิธีการสรางเหมือนกับฟงกชันปกติ แตมีการสรางชื่อ overloaded function ใหมชอเหมอนกน โดยกําหนดพารามิเตอรแตละฟงกชันใหแตกตางกัน ดังตัว  ี ่ื ื ั อยางในโปรแกรม  •! โปรแกรม over_fun.cpp แสดงการสราง overloaded function ชื่อฟงกชัน line()  /*Program : over_fun.cpp Process : creat and call overloaded function line()*/ #include <iostream.h> #include <conio.h> //declaration overloaded prototype function void line(); void line(int x); void line(char ch,int x); void line(char ch); void main() //begin main program { clrscr(); cout<< "Display 1 line from line() functionn"; line(); //call line() cout<< "Display 2 line from line() functionn"; line(30); //call line() cout<< "Display 3 line from line() functionn"; line('*',60); //call line() cout<< "Display 4 line from line() functionn"; line('+'); //call line() getch(); } //end main program void line() //overload function1 line() ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 16. ! 73 { cout<< "================================n"; } void line(int x) //overload function2 line() { int y; for (y=1;y<=x;++y) cout<< "_"; cout<<'n'; } void line(char ch,int x) //overload function3 line() { int y; for (y=1;y<=x;++y) cout<< ch; cout<<'n'; } void line(char ch) //overload function4 line() { int y; for (y=1;y<=80;++y) cout<< ch; cout<<'n'; } ♦! efault argument D การประกาศ prototype function สามารถกาหนดคาเริมตน (default) ใหกับฟงกชันได ในขณะ ํ ่ เรียกใชฟงกชันทาใหเราสามารถกําหนดอารกิวเมนตไดหลายลักษณะ ถึงแมเราไมกาหนด หรอกาหนด ํ ํ ื ํ อารกิวเมนตเพียงบางสวน ฟงกชันก็ยังสามารถทํางานได เรยกอารกวเมนตแบบนวา default argument ี ิ  ้ี  •! ตัวอยางโปรแกรม default.cpp แสดงการสรางฟงกชันแบบกําหนด default argument ไว สําหรับการเรียกใชพังกชัน /*Program : argument.cpp ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 17. ! 74 Process : creat and call default argument function line()*/ #include <iostream.h> #include <conio.h> //ประกาศ prototype function และกําหนด default argument void line(char ch= '_',int x=80); void main() //begin main program { clrscr(); cout<< "Display line from line() functionn"; line(); //call line() function line('+'); //call line() function line('#',50); //call line() function line(65); //call line() will display character of ASCII CODE 65 getch(); }//end main program void line(char ch,int x) //function line() { for (int y=1;y<=x;++y) cout<< ch; cout<<'n'; } ♦! กษณะการใชตวแปรในฟงกชน ลั  ั   ั การใชหรอการประกาศตวแปรในโปรแกรมของ C++ สามารถกาหนดใหตัวแปรมีลักษณะการ  ื ั ํ ใชงานได 3 ลักษณะ คือ 1. automatic variable เปนการประกาศตวแปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตัว  ั แปรประเภทนจะนําไปใชไดเฉพาะในฟงกชันนี้เทานั้น จงเรยกอกอยางหนงวา Local variable การ ้ี ึ ี ี  ่ึ  ทางานของตวแปรประเภทน้ี จะจองพนทหนวยความจําเมื่อฟงกชันถูกเรียกใชเทานั้น และยกเลิกการใช ํ ั ้ื ่ี  หนวยความจําเมื่อฟงกชันทํางานเสรจ ปกติ C++ จะไมกาหนดคาเรมตนใหแกตวแปร automatic ็ ํ  ่ิ    ั variable ดงนนผใชควรกําหนดคาเรมตนใหกบตวแปรดวยเพอปองกนความผดพลาด การกาหนดตัว ั ้ั ู   ่ิ   ั ั  ่ื  ั ิ ํ แปร automatic variable จะใชคียเวิรด auto หรือไมกได เชน ็  void main() ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 18. ! 75 { int x=50; //declaration x and number are automatic variable in main() auto float number = 0; //used keywoad auto before type and name fo variable statement; … } void repeat() //function repeat() { int y; //declaration y is automatic variable for(y=1;y<=40;++y) //use y from automatic or local variable cout<<'#'; cout<<endl; } 2. external variable เปนการประกาศตวแปร อยนอก { } ของทุกฟงกชัน ตัวแปรประเภทนี้  ั ู จะนําไปใชไดในทุกฟงกชัน จงเรยกอกอยางหนงวา Global variable การทางานของตวแปรประเภทน้ี ึ ี ี  ่ึ  ํ ั จะจองพนทหนวยความจําตลอดเวลาทโปรแกรมทางาน และยกเลิกการใชหนวยความจําเมอโปรแกรม ้ื ่ี  ่ี ํ ่ื ทางานเสรจ ปกติ C++ จะไมกาหนดคาเริมตนใหอตโนมัตแตอาจจะไมถกตอง ดงนนผใชควรกําหนดคา ํ ็ ํ ่ ั ิ ู ั ้ั ู   เรมตนใหกบ ่ิ   ั ตวแปรดวยเพอปองกนความผดพลาด การกาหนดตวแปร external variable จะกําหนดหรือประกาศไว ั  ่ื  ั ิ ํ ั กอนฟงกชัน main() int y=0; //declaration y and x are external variable float x=0; void main() //function main() { int x=50; //declaration x and number are automatic variable in main() statement; … } หมายเหตุ ชือตัวแปรประเภท automatic และ external สามารถกาหนดชอซากันได เนืองจาก ่ ํ ่ื ้ํ ่ ใชหนวยความจําพื้นที่คนละสวนกัน 3. static variable เปนการประกาศตวแปร อยูใน { } ของฟงกชันใดฟงกชันหนึ่ง ตัวแปร  ั ประเภทนี้จะนาไปใชไดเฉพาะในฟงกชันนี้เทานั้น การทางานของตวแปรประเภทน้ี จะจองพนทหนวย ํ ํ ั ้ื ่ี  ความจําไวตลอดเวลาทโปรแกรมทางาน และยกเลิกการใชหนวยความจําโปรแกรมจบการทางาน เรียก  ่ี ํ ํ อกอยางหนงวา static automatic variable จะใชคียเวิรด static นําหนาในการประกาศตัวแปร เชน ี  ่ึ   float Avg(float value) ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 19. ! 76 { static float total; //declaration static variable in function Avg() static int amount; total = total+value; //summation of total statement; } •! ตัวอยางโปรแกรม type_var.cpp แสดงการกําหนดและการใชตัวแปรประเภท automatic และ external variable ในโปรแกรม /*Program : type_var.cpp Process : show using automatic and external variable */ #include <iostream.h> #include <conio.h> void line(); //declaration prototype function void repeat(); int x; //declaration external or global variable void main() //begin main program { int x; //declaration automatic or global variable in main() auto int y; //declaration automatic or global variable in main() clrscr(); line(); repeat(); for(y=1;y<=5;++y) //use y is automatic or local variable line(); for(x=1;x<=5;++x) //use x is automatic or local variable repeat(); getch(); } //end main program void line() //function line() { for(x=1;x<=80;x++) //use x from global or external variable cout<<'='; cout<<endl; } void repeat() //function repeat() {int y; ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 20. ! 77 for(y=1;y<=40;++y) //usy y from automatic or local variable cout<<'#'; cout<<endl; } ♦! emplate Function T เท็มเพลตฟงกชัน (Template Function) หมายถึง ฟงกชันที่มีคุณสมบัติในการใชอากิวเมนต (argument) ไดกับขอมูลหลาย ๆ ประเภท เท็มเพลตฟงกชันกาหนดใหพารามเิ ตอรของฟงกชนสามารถ ํ     ั รบคาอารกิวเมนตไดหลายประเภท เชน ฟงกชัน sum() กําหนดใหเ ปนประเภท template function ั       สามารถรบคาจากตวแปรประเภท int, float และ double ได คํานวณมาหาผลรวมไดทงอารกวเมนต ั  ั ้ั ิ ประเภท int, float และ double ซงในฟงกชนแบบปกตพารามเิ ตอรจะรบอารกวเมนตไดเ ฉพาะขอมล ่ึ   ั ิ  ั ิ   ู ประเภทเดียวกันกับที่กาหนดไวเ ทานน ํ  ้ั การกาหนด template function กําหนดไวกอนหนาฟงกชัน main() มรปแบบดงน้ี ํ ีู ั template <class Type> Type Sum(Type first, Type second) //function sum() { statement; statement; return first+second; } สวนประกอบใน template function มดงน้ี ีั 1. template เปนคียเ วิรดเพือกําหนดวา ฟงกชัน sum() เปน template function  ่  2. <class Type> class เปนคียเ วิรดเพือกําหนดชนดขอมล มชอวา Type ซึ่งสามารถกาหนด  ่ ิ  ู ี ่ื  ํ ชอไดตามความตองการของผใช ตามกฎการตงชอของ C++ ่ื   ู ้ั ่ื 3. Type Sum(Type first, Type second) ชื่อฟงกชัน sum() มประเภทเปน Type มีพารา ี  มิเตอร 2 ตัว มชนดเปน Type เชนกน ี ิ   ั •! ตัวอยางโปรแกรม template.cpp แสดงการใชฟงกชันประเภท template function ชื่อ sum() ทําหนาที่คานวณหาผลรวมของเลข 2 จานวน ฟงกชันชื่อ multiply() หาผลคูณเลข 2 ํ ํ จานวน ซึ่งเปนตัวเลขประเภท integer, float และ double ํ /*Program : template.cpp Process : show create and call template function */ ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 21. ! 78 #include <iostream.h> #include <conio.h> //declaration templat function sum() template<class TYPE> TYPE sum(TYPE first, TYPE second) { return first+second; } //declare template function multiply() template<class New_type> New_type multiply(New_type number1,New_type number2) { return number1*number2; } void main() //begin main program { int x=50,y=30; float a=300.25, b=100.50; double c=3.21541005,d=10005.02541152; //begin statement clrscr(); cout<< " Sum integer "<< sum(x,y)<<endl; cout<< " Sum float "<< sum(a,b)<<endl; cout<< " Sum double "<< sum(c,d)<<endl; cout<< "n Multiply integer "<< multiply(x,y)<<endl; cout<< " Multiply float "<< multiply(a,b)<<endl; cout<< " Multiply double "<< multiply(c,d); getch(); } //end main program ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 22. ! 79 ♦! บบฝกหัดทายบท แ 1. ใหเขียนโปรแกรมสรางฟงกชันเสนกรอบสี่เหลี่ยม โดยกําหนดพารามิเตอรกาหนดตําแหนง มุมซาย ํ  ดานบนและมุมขวาดานลางของกรอบได เชน frame(5,2,50,10) แสดงวากรอบสี่เหลี่ยมจะเริ่มวาด  ตังแตตาแหนง มุมซายบนที่ คอลัมน 5 แถว 2 และมุมขวาลางที่ตําแหนง คอลัมน 50 แถวที่ 10 ้ ํ   5,2 50,10 2. ใหเ ขยนโปรแกรมเพอสรางฟงกชนคํานวณคา factorial(n) เพอคานวณหาคาแฟกทอเรยลของ ี ่ื    ั  ่ื ํ  ี จํานวน n 3. ใหเขียนโปรแกรมเพื่อสรางฟงกชันแบบพารามิเตอรและมีการ return value ในการคํานวณเลข ยกกําลังโดยการสง argument เปนเลขจํานวนฐานและเลขกาลังไปใหแกฟงกชัน เชน power(2,4)  ํ  คือการคํานวณเลขจํานวน 2 ยกกําลัง 4 4. ใหเ ขยนโปรแกรมเพอสรางฟงกชนประเภทมพารามเิ ตอรและมการ return value ในการคํานวณหา ี ่ื    ั ี  ี คาพนทของรปเรขาคณตตอไปน้ี วงกลม, สามเหลี่ยม และ สี่เหลี่ยม  ้ื ่ี ู ิ  5. จงเขยนโปรแกรมเพอคานวณการตัดเกรด โดยการเขียนแยกเปนฟงกชัน มีเงือนไขการตัดเกรด ดังนี้ ี ่ื ํ ่ คะแนน 0-49 เกรด F คะแนน 50-59 เกรด D คะแนน 60-69 เกรด C คะแนน 70-79 เกรด B คะแนน 80-100 เกรด A ในโปรแกรมใหสรางฟงกชนตอไปน้ี     ั  void input() ทาหนาที่รับคะแนนระหวางภาคและปลายภาคเรียน ํ int summation(int x, int y) ทาหนาทในการรวมคะแนน ํ  ่ี char calculate(int total) ทาหนาทีในการตัดเกรด ํ ่ void display() ทาหนาที่ในการแสดงผลขอมูลของโปรแกรมทั้งหมด ํ 6. ใหเขียนโปรแกรมสรางฟงกชนประเภทมีพารามิเตอรและมีการ return value เพือคํานวณหาผลรวม ั ่ ของเลขอนกรม 2 ฟงกชัน โดยมีชื่อฟงกชัน sum_even() และ sum_odd มีการทางาน ดังตัวอยาง ุ ํ sum_odd(1,10) คอหาผลรวมของ 1+3+5+7+9 ื sum_odd(9,20) คอหาผลรวมของ 9+11+13+15+17+19 ื ศิริชัย นามบุรี ฟงกชน(Functions) ั
  • 23. ! 80 sum_even(1,10) คอหาผลรวมของ 2+4+6+8 ื sum_even(9,20) คอหาผลรวมของ 10+12+14+16+18+20 ื 7. Write the function digitsum(n) ,which computes and returns the sum of the decimal digits of the integer parameter n. 8. Write the function sort4, which has four parameters. If the integer variables a,b,c and d are available and have been assigned values, we want to write sort4(&a, &b,&c,&d); to sort four variables, so that, after that call, we have a<=b<=c<=d ศิริชัย นามบุรี ฟงกชน(Functions) ั