More Related Content Similar to ฟังก์ชั่นย่อยและโปรแกรมมาตรฐาน ม.6.1 Similar to ฟังก์ชั่นย่อยและโปรแกรมมาตรฐาน ม.6.1 (20) More from Little Tukta Lita More from Little Tukta Lita (9) ฟังก์ชั่นย่อยและโปรแกรมมาตรฐาน ม.6.12. ความหมายของฟั งก์ ชันและฟั งก์ ชันมาตรฐานของ
ภาษาซี
ฟ ังก์ชนหรือโปรแกรมย่อย (Function) ในการเขียนโปรแกรมคอมพิวเตอร์
ั
บ่อยครังจะต้องมีชุดคําสังบางชุดทีจะต้องถูกทํางานบ่อยๆ ถ้าหากโปรแกรมต้องทํา
ชุดคําสังเหล่านันอีกครังผูเขียนโปรแกรมจะต้องเขียนชุดคําสังชุดเดิมใหม่อกครังทําให้
้ ี
โปรแกรมมีขนาดใหญ่ขน แต่เราสามารถนําชุดคําสังทีจะต้องถูกใช้งานบ่อย ๆ มารวม
ึ
เป็ นฟ ังก์ชนได้ แล้วจึงเรียกใช้ชอฟ ังก์ชนแทนการทีจะต้องเขียน ชุดคําสังนันใหม่อกครัง
ั ื ั ี
3. โครงสร้ างของฟั งก์ ชัน
การสร้างฟ ังก์ชน ทังฟ ังก์ชนมาตรฐานและฟ ังก์ชนทีผูใช้สร้างขึนมีรปแบบโครงสร้างดังนี
ั ั ั ้ ู
4. คําอธิบาย
type คือ ชนิดของฟังก์ชน หรื อ ชนิดของข้อมูล เช่น int , float , char , double , void ที
ั
ส่ งไปให้ตาแหน่งทีเรี ยกใช้ ถ้าไม่มีการส่ งค่ากลับไปให้ตาแหน่งทีเรี ยกใช้ จะใช้ void ถ้าไม่
ํ ํ
มีการกําหนดจะได้ขอมูลทีส่ งกลับมาเป็ น int เสมอ
้
function_name คือ ชือของฟังก์ชน ควรต้องชือให้สือความหมายถึงการทํางานของ
ั
ฟังก์ชน และต้องเป็ นไปตามกฏเกณฑ์การตังชือตัวแปรในภาษาซี
ั
type parameter คือ ชนิดและชือของ parameter ค่าที 1 , 2 ถึง N ทีจะรับมาจากผู้
เรี ยกใช้ฟังก์ชน ถ้าเป็ นฟังก์ชนทีไม่มีการรับส่ งค่า parameter จะใช้คาว่า void
ั ั ํ
{ คือ จุดเริ มต้นของฟังก์ชน ั
location variable declaration คือ ส่ วนทีมีการประกาศชนิดและชือของตัวแปรทีจะใช้
เฉพาะในฟังก์ชน โดยส่ วนทีอยูนอกฟังก์ชน จะไม่สามารถเรี ยกใช้ตวแปรเหล่านีได้
ั ่ ั ั
statement_1; statement_2; ... statement_N คือ คําสั งทีใช้งานในฟังก์ชน ั
return(value); คือ คําสั งทีใช้ส่งข้อมูลหรื อค่าทีเป็ นผลลัพธ์จากการประมวลผลใน
ฟังก์ชน ไปให้ผเู้ รี ยกใช้ฟังก์ชน โดยชนิดของข้อมูลทีส่ งต้องเป็ นชนิดเดียวกับชนิดของ
ั ั
ฟังก์ชนหรื อชนิดของข้อมูลของฟังก์ชน ถ้าเป็ นฟังก์ชนทีไม่มีการส่ งค่า(void) จะไม่ตองใช้
ั ั ั ้
คําสั ง return
} คือ ส่ วนสิ นสุ ดของฟังก์ชน ั
5. ฟั งก์ ชันในภาษาซีแบ่ งตามทีมาของฟั งก์ ชันแบ่ ง
ได้ เป็ น 2 ประเภทคือ
FUNCTIONS IN C
C STANDARD PROGRAMMER
LIBRARY DEFINED FUNCTION
1. ฟังก์ชนทีผู้เขียนโปรแกรมสร้างขึนเอง (User-defined Function)
ั
เป็ นฟ ังก์ชนหรือโปรแกรมย่อยทีผูใช้สร้างขึนมาใช้ในการเขียนโปรแกรมเพือทํางาน
ั ้
อย่างใดอย่างหนึง
2. ฟังก์ชนมาตรฐาน (Standard Function) เป็ นฟ ังก์ชนทีถูกสร้างขึนและ
ั ั
เก็บไว้ในไลบรารี ในการใช้งานเราต้องเรียกใช้ include directives เพือเรียก
header file ขนมาก่อนจงจะสามารถใช้งานฟ ังกชันนันได้
6. 1. ฟั งก์ ชันทีผู้เขียนโปรแกรมสร้ างขึนเอง หรือการ
เขียนโปรแกรมแบบโปรแกรมย่ อย
โปรแกรมย่อยเป็นวิธเี ขียนโปรแกรมทีต้องการแยกระบบงานเป็ นส่วน เช่น ระบบงาน
เป็นระเบียบเพราะแบ่งเป็นส่วนงาน สามารถสร้างทีมงานช่วยพัฒนาระบบได้ เมือเกิด
ข้อผิดพลาดจุดใด สามารถแก้ไขได้ทนทีั
1.1 โครงสร้างของฟ ังก์ชน
ั
type function_name(type1 arg1, type2 arg2,.., typeN argN)
{
local variable declaration;
statement(s);
return( varlue);
}
7. อธิบาย
type คือ ชนิดของข้อมูลทีส่งกลับมายังชือฟ ังก์ชนทีเรียกใช้ โดยปกติแล้วถ้าไม่มการกําหนด
ั ี
type ว่าเป็นชนิด int, float, char หรือ double จะได้ค่าข้อมูลทีส่งกลับมาเป็ น
ชนิด int เสมอ ยกเว้นว่าฟ ังก์ชนนันไม่มการส่งค่ากลับจะต้องกําหนดให้ type เป็ น void
ั ี
function_name คือ ชือฟ ังก์ชน ซึงเราสามารถตังชือฟ ังก์ชนโดยอาศัยกฎเกณฑ์ของ
ั ั
การตังชือตัวแปรในภาษาซี
type1 arg1, type2 arg2,…, typeN argN คือ การประกาศชือและชนิดของ
ตัวแปรทีจะใช้เป็น argument ตัวที 1, 2, 3,…, N ตามลําดับ ถ้าเป็ นฟ ังก์ชนทีไม่มทง
ั ี ั
การส่งค่าไปและรับค่ากลับเลย ให้ใช้คาว่า void แทน
ํ
{ คือ จุดเริมต้นของฟ ังก์ชนั
} คือจุดสินสุดของฟ ังก์ชนั
local variable declaration คือ การประกาศชนิดและชือของตัวแปรทีใช้ได้
เฉพาะภายในฟ ังก์ชน ถ้าอยู่นอกฟ ังก์ชนจะไม่สามารถใช้ตวแปร local ทีประกาศไว้ได้
ั ั ั
statement(s) คือ คําสังต่าง ๆ ทีใช้ในฟ ังก์ชน ถ้ามีมากกว่า 1 คําสังให้จบท้ายแต่ละ
ั
คําสังด้วยเครืองหมาย ; (semicolon)
return(value) คือ คําสังทีใช้ส่งค่ากลับไปยังชือฟ ังก์ชนทีเรียกใช้ ส่วน value ทีอยู่
ั
ภายใน ( ) คือ ค่าทีจะถูกส่งกลับ คําสังนี จะใช้เฉพาะฟั งก์ชนที มีการส่งค่ากลับเท่านัน ถ้า
ั
เป็นฟ ังก์ชนทีไม่มทงการส่งค่าไปและกลับ หรือเป็นฟ ังก์ชนชนิดทีมีแต่การส่งค่าไปอย่างเดียว ก็
ั ี ั ั
ไม่ตองใช้คาสังนี
้ ํ
8. #include<stdio.h>
#include<conio.h>
void one(void); /* function Prototype
void two(void); /* function Prototype ผลลัพธ์ทีได้จากโปรแกรม
void main(void)
{
clrscr();
one(); /* call one() */
two(); /* call two() */
printf("nPress any key back to program ...");
getch();
}
/* one function */
void one()
{
int a=5, b=7;
printf("A = %d, B = %dn",a,b);
}
/* two function */
void two()
{
float p=4.5, q=3.5;
p+=q;
printf("P = %6.3f, Q = %6.3fn",p,q);
}
9. คําอธิ บายโปรแกรม
จากโปรแกรม สามารถอธิบายการทํางานของโปรแกรมทีสําคัญ ๆ ได้ดงนี ั
บรรทัดที 3 และ 4 คําสัง void one(void); และ void two(void); คําสังประกาศชือ
ฟ ังก์ชนและชนิดของการส่งค่ากลับมายังฟ ังก์ชน ซึงในกรณีนีทังฟ ังก์ชน one( ) และ two( ) เป็ น
ั ั ั
ฟ ังก์ชนชนิดทีไม่มทงการส่งค่าไปและรับค่ากลับ เนืองจากคําว่า void ทีอยู่หน้าชือฟ ังก์ชน one( )
ั ี ั ั
และ two( ) เป็ นการบอกว่าไม่มการรับค่าทีส่งกลับ ส่วนคําว่า void ทีอยู่ภายใน ( ) ของฟ ังก์ชน
ี ั
one( ) และ two เป็ นการบอกว่าไม่ม ี argument นันคือไม่มการส่งค่าไปนันเอง
ี
ข้อสังเกต การประกาศชือและชนิดของฟ ังก์ชนจะต้องประกาศไว้ก่อนฟ ังก์ชน main( ) เพราะจะทํา
ั ั
ให้เราสามารถใช้ฟ ังก์ชนทีประกาศไว้ในส่วนใดของโปรแกรมก็ได้
ั
บรรทัดที 8 และ 9 คําสัง one( ); และ two( ); เป็ นการเรียกใช้ฟ ังก์ชนชือ one( ) และ
ั
two( ) ตามลําดับ โดยฟ ังก์ชน one( ) อยู่ทคําสังบรรทัดที 14 ถึง 18 และ ฟ ังก์ชน two( ) อยู่
ั ี ั
ทีบรรทัดที 20 ถึง 25
บรรทัดที 14 ถึง 18 ฟ ังก์ชน one( ) ให้พมพ์ค่าทีเก็บไว้ในตัวแปร a และ b แสดงทีจอภาพ
ั ิ
บรรทัดที 20 ถึง 25 ฟ ังก์ชน two( ) ให้พมพ์คาทีเก็บไว้ในตัวแปร p และ q และพิมพ์ค่าตัวแปร
ั ิ ่
q แสดงทีจอภาพ
บรรทัดที 10 และ 11 ภายหลังจากทํางานตามฟ ังก์ชน one( ) และ two( ) แล้ว พิมพ์ขอความให้
ั ้
กดคียใด ๆ เพือกลับสูโปรแกรม และหยุดรอรับค่าใด ๆ เช่น กด enter จะกลับเข้าสู่โปรแกรม
์ ่
11. 1.2 การวางตําแหน่ งโปรแกรมย่อย ภาษาซีมให้เลือกใช้งาน 2 ลักษณะคือ
ี
วางโปรแกรมย่อยไว้ในตําแหน่งก่อนส่วนโปรแกรม
วางโปรแกรมย่อยไว้ในตําแหน่งหลังส่วนโปรแกรมหลัก
วางโปรแกรมย่อยไว้ในตําแหน่ ง วางโปรแกรมย่อยไว้ในตําแหน่ งหลัง
ก่อนส่วนโปรแกรม ส่วนโปรแกรมหลัก
#include <stdio.h> #include <stdio.h>
Main () Main ()
{ {
Function-name2 (); Function-name1 ();
…………………... Function-name2
Function-name1 (); ();
} …………………..
}
12. ข้อแนะนําในการเขียนโปรแกรมย่อย
กรณีเลือกวางโปรแกรมย่อยไว้หลังโปรแกรมหลัก ต้องประกาศชือโปรแกรมย่อยต่อ
จาก #include เสมอ มิฉะนันจะเกิดข้อผิดพลาดได้
กรณีมโปรแกรมย่อยหลายส่วนงาน วางโปรแกรมย่อยไว้หลังโปรแกรมหลัก เพราะ
ี
หลักการอ่านคําสังงานจะต้องอ่านในส่วนโปรแกรมหลักก่อน แล้วจึงโนยงไปทีโปรแกรม
ย่อย หากมีโปรแกรมย่อยจํานวนมากจะดันโปรแกรมหลักไปอยูสวนล่าง ทําให้เสียเวลา
่่
ค้นหาโปรแกรมหลัก
13. 1.3 โปรแกรมย่อยแบบไม่มีการรับส่งค่าพารามิ เตอร์
มีจุดประสงค์สร้างโปรแกรมเพือใช้แบ่งส่วนการทํางานโปรแกรมหลักเป็ น
ส่วนย่อยเท่านัน การเรียกใช้งาน เพียงพิมพ์ชอโปรแกรมย่อยตามด้วย ( )
ื
เท่านัน
รูปแบบ void function_name(void )
โครงสร้างของโปรแกรม
14. ตัวอย่างโปรแกรมย่อยแบบไม่มการรับส่งค่าพารามิเตอร์
ี
#include<stdio.h>
#include<conio.h>
void asterisk_line(void);
void main(void)
{
clrscr( );
asterisk_line( );
printf("****** C and C++ PROGRAMMING ******n");
asterisk_line();
printf("nPress any key back to program ..."); ผลลัพธ์ทีได้จาก
โปรแกรม
getch();
}
/* asterisk_line function */
void asterisk_line( )
{
int j, n=40;
for(j=1; j<=n; j++)
printf("*");
printf("n");
}
15. คําอธิ บายโปรแกรม
จากโปรแกรม สามารถอธิบายการทํางานของโปรแกรมทีสําคัญ ๆ ได้ดงนี ั
บรรทัดที 3 คําสัง void asterisk_line (void); แสดงว่าฟ ังก์ชนชือ ั
asterisk_line( ) เป็ นฟ ังก์ชนทีไม่มทงการส่งค่าไป และรับค่ากลับ
ั ี ั
บรรทัดที 7 และ 9 เป็ นคําสังเรียกใช้ฟ ังก์ชน asterisk_line( ) ซึงฟ ังก์ชนอยู่
ั ั
คําสังบรรทัดที 14 ถึง 19
บรรทัดที 14 ถึง 19 ฟ ังก์ชน asterisk_line( ) มีการทํางานโดยพิมพ์ *
ั
จํานวน 40 ตัวออกแสดงทีจอภาพ
บรรทัดที 10 และ 11 พิมพ์ขอความให้กดคียใด ๆ เพือกลับสูโปรแกรม และหยุดรอรับ
้ ์ ่
ค่าใด ๆ เช่น กด enter จะกลับเข้าสูโปรแกรม
่
16. 1.4 โปรแกรมย่อยแบบรับค่าพารามิ เตอร์ไปใช้อย่างเดียว
โปรแกรมย่อยลักษณะนี มีจดประสงค์เพือแบ่งระบบงานเป็ นโปรแกรม
ุ
ย่อย และต้องการให้โปรแกรมย่อยมีประสิทธิภาพรับค่าข้อมูลจาก
โปรแกรมหลักทีส่งไปให้ใช้ในการประมวลผลภายในโปรแกรมย่อยได้
ดังนัน การเรียกชือโปรแกรมย่อย ต้องตามด้วยค่าข้อมูลทีส่งไปให้ใช้
งานด้วย
การกําหนดคุณสมบัตให้โปรแกรมย่อยทํางานในลักษณะรับ
ิ
ค่าพารามิเตอร์ไปใช้ เขียนรูปแบบดังนี
รูปแบบ void function_name (type_parameter parameter_name [,..] ) ;
18. 1.5 โปรแกรมย่อยแบบรับและคืนค่าพารามิ เตอร์
มีจดประสงค์แบ่งโปรแกรมเป็ นโปรแกรมส่วนย่อย และให้โปรแกรมย่อยมีประสิทธิภาพ
ุ
รับค่าข้อมูลจากโปรแกรมหลัก ไปใช้ในการประมวลภายในโปรแกรมย่อย รวมทัง
สามารถส่งค่าทีได้จากการประมวลผลกลับไปทีโปรแกรมหลัก
โปรแกรมย่อยประเภทนี ประกาศลักษณะการทํางานด้วยรูปแบบดังนี
รูปแบบ Type_variable function_name (parameter_name
Type_variable ชือชนิดข้อมูลของตัวแปร ทีส่งกลับมาจากโปรแกรมย่อย
function_name ชือโปรแกรม
parameter_name ชือพารามิเตอร์ทรับค่ามาใช้งานในโปรแกรม หากมี
ี
มากกว่า 1 ใช้ , คัน
20. ตัวอย่างคําสัง กําหนดให้โปรแกรมย่อยรับค่าพารามิเตอร์จากโปรแกรมหลักไปใช้ และส่งค่า
กลับมาให้ได้
#include<stdio.h>
#include<conio.h>
int calculate(int, int);
void main(void)
{ ผลลัพธ์ทีได้จาก
โปรแกรม
int p=3, q=4, r;
clrscr( );
r = calculate(p,q);
printf("P = %d, Q = %d, R = %dn",p,q,r);
printf("nPress any key back to program ...");
getch();
} /* end main() */
int calculate(int p, int q)
{
return (p+q);
}
21. คําอธิ บายโปรแกรม
จากโปรแกรม สามารถอธิบายการทํางานของโปรแกรมทีสําคัญ ๆ ได้ดงนี ั
บรรทัดที 3 คําสัง int calculate (int, int); การประกาศรูปแบบฟ ังก์ชนที ั
มีการส่งค่า argument ไป 2 ตัว ชนิด int และ มีการส่งค่ากลับมายังฟ ังก์ชน ั
เป็ นชนิด int เช่นกัน โดยฟ ังก์ชนชือ caculate( )
ั
บรรทัดที 8 คําสัง r = caculate (p, q); เป็ นการเรียกใช้ฟ ังก์ชน ั
caculate( ) และส่งค่า p และ q ส่งไปให้ฟ ังก์ชนด้วย ตามลําดับ ซึงฟ ังก์ชน
ั ั
caculate( ) อยูคาสังบรรทัดที 13 ถึง 16
่ ํ
บรรทัดที 13 ถึง 16 ฟ ังก์ชน caculate( ) โดยมีการทํางาน คือ นําค่าตัวแปร p
ั
และ q ทีได้มาบวกกัน แล้วส่งผลลัพธ์ทได้กลับไปให้ ณ จุดทีเรียกใช้ในฟ ังก์ชน
ี ั
main( ) นันคือ ไปเก็บไว้ทตัวแปร r
ี
บรรทัดที 9 แสดงค่าตัวแปร p, q และ r แสดงทีจอภาพ
บรรทัดที 10 และ 11 พิมพ์ขอความให้กดคียใด ๆ เพือกลับสูโปรแกรม และหยุดรอ
้ ์ ่
รับค่าใด ๆ เช่น กด enter จะกลับเข้าสูโปรแกรม
่
22. 1.6 ฟังก์ชนทีไม่มีการรับค่าพารามิ เตอรแต่มีการส่งคืนค่า
ั
มีการเรียกใช้ ดังนี variable_name = function_name();
โดย variable_name คือ ชือของตัวแปรทีจะมารับค่าของฟ ังก์ชนทีส่งคืนมา
ั
ฟ ังก์ชนประเภทนีต้องมีชนิดของฟ ังก์ชน แต่ไม่มพารามิเตอร และในโครงสร้างต้องมี
ั ั ี
คําสัง return (value) เพือส่งค่ากลับ
โครงสร้างของโปรแกรม
24. 1.7 ประสิ ทธิ ภาพการทํางานของตัวแปร
ตัวแปรทีประกาศการใช้งานในตําแหน่งของโครงสร้างตัวซีในตําแหน่งทีต่างกัน ย่อมมี
ประสิทธิภาพการทํางานทีแตกต่างกันไปคือ ตัวแปรทีประกาศการใช้งานตัวนอกส่วนของ
โปรแกรมใดๆ มีประสิทธิภาพการใช้งานต่างกันกับตัวแปรภายในโปรแกรมหลัก
ตัวแปรภายใน (Local Variable) คือ ตัวแปรทีถูกสร้างขึนภายในฟ ังก์ชน สามารถ
ั
เรียกใช้งานได้เฉพาะภายในฟ ังก์ชนทีสร้างขึน และจะถูกทําลายลงเมือเสร็จสินการทํางานของ
ั
ฟ ังก์ชนนันๆ
ั
ตัวแปรภายนอก (Global Variable) คือ ตัวแปรทีถูกสร้างขึนภายนอกฟ ังก์ชน ั
สามารถใช้งานได้ในทุกฟ ังก์ชน หรือทังโปรแกรม (ยกเว้นฟ ังก์ชนทีมีตวแปรภายในชือ
ั ั ั
เดียวกับตัวแปรภายนอก ซึงมีความเป็ นไปได้) และจะคงอยูตลอดการทํางานของโปรแกรม
่
25. โปรแกรมตัวอย่าง
/* 7th Sample Program: Local vs Global Variable */
#include<stdio.h>
int ans = 0;
int inc_one(int); /* function prototype */
void main()
{
int a = 3;
ans = inc_one(a);
printf(“Answer is %dn”, ans);
}
/* function definition: return x+1 */
int inc_one(int x)
{
int ans;
ans = x + 1;
return ans;
}
26. สังเกตง่ายทีสุดคือตัวแปรภายนอก ans เพราะถูกประกาศเอาไว้ภายนอก
ฟ ังก์ชน โดยสามารถเรียกใช้งานได้โดยฟ ังก์ชนหลัก (main) หรือฟ ังก์ชนใดๆ
ั ั ั
สังเกตได้วาฟ ังก์ชนหลัก ใช้ตวแปร ans โดยไม่มการประกาศตัวแปร
่ ั ั ี
หากจะระบุวาตัวแปรใดเป็ นตัวแปรภายใน จะต้องพิจารณาทีละฟ ังก์ชน ในฟ ังก์ชน
่ ั ั
หลักตัวแปร a คือ ตัวแปรภายใน เพราะถูกประกาศในฟ ังก์ชนหลัก
ั
ในฟ ังก์ชน inc_one มีตวแปร x และ ans เป็ นตัวแปรภายใน ข้อสังเกต
ั ั
เพิมเติมคือ ans ทีประกาศขึนในฟ ังก์ชนนีมีชอเหมือนกับ ans ทีเป็ นตัวแปร
ั ื
ภายนอกของทังโปรแกรม อย่างไรก็ตามหากลองย้อนกลับไปดูนิยามก็จะพบว่าสามารถ
ทําได้ เพียงแต่วาในฟ ังก์ชน inc_one ได้ประกาศตัวแปร ans ขึนใหม่เป็ นตัวแปร
่ ั
ภายใน ใช้งานในฟ ังก์ชน inc_one เท่านันโดยไม่เกียวกับตัวแปร ans ซึงเป็ นตัว
ั
แปรภายนอก หากฟ ังก์ชน inc_one ไม่ได้ประกาศตัวแปร ans ขึนใหม่ ก็จะมา
ั
สามารถเรียกใช้ตวแปร ans ซึงเป็ นตัวแปรภายนอกได้เช่นเดียวกับฟ ังก์ชนหลัก
ั ั
27. ตัวอย่าง แสดงโกลบอลและโลคอล
PROGRAM AA;
VAR NUM:INTEGER;
PROCEDURE A; ผลทีได้จาการ RUN
BEGIN
NUM:=NUM*10; NUM*10 = 50
WRITELN(‘NUM*10 = ‘,NUM);
END; NUM = 124
VAR ANY:INTEGER;
PROCEDURE B; CNTR = 122
VAR NUM,CNTR:INTEGER;
BEGIN
BACK TO MAIN
NUM:=124; NUM = 50
WRITELN(‘NUM = ‘,NUM);
CNTR:=122;
WRITELN(‘CNTR =’,CNTR);
END;
BEGIN {MAIN PROGRAM}
NUM:=5;
WRITELN(‘IN MAIN’,’NUM = ‘,NUM);
A;
B;
WRITELN(‘BACK TO MAIN NUM = ‘,NUM);
END.
28. อธิบาย
- NUM ทีกําหนดในโปรแกรมหลักเป็ นโกบอล คือให้คาและ output ใน
่
โปรแกรมหลักและให้คาและ output ใน program ย่อย A
่
- NUM, cntr ทีกําหนดใน program ย่อย B เป็ นโลคอล B ซึงโปรแกรมหลัก
หรือโปรแกรมย่อยอืน ๆ จะนําไปใช้ไม่ได้ แต่ชอ NUM ซํากับ NUM ใน
ื
โปรแกรมหลัก จึงถือว่าเป็ นคนละ NUM กัน ทีโปรแกรมหลัก NUM=5 แต่พอถึง
A นํามาคูณ 10 ได้ 50 เมือถึง B ให้คาใหม่เป็ น 124 เมือกลับมาโปรแกรมหลักก็
่
เป็ น 124 แต่ยงเป็ น 50 เพราะเป็ น NUM คนละตัวกัน
ั
- ก่อน procedure B ได้กําหนดตัวแปร ANY ซึงเป็ นโกบอล แต่ใช้ใน
procedure A ไม่ได้ใช้ได้ใน procedure B และโปรแกรมหลัก
- เพราะฉะนัน B เรียกใช้ A แต่ A เรียกใช้ B ไม่ได้ และทัง A,B เรียกใช้ AA
ไม่ได้ เพราะเป็ นโปรแกรมหลัก
29. 2. การใช้ ฟังก์ ชันมาตรฐานภาษาซี
ฟ ังก์ชนมาตรฐาน เป็ นคําสังสําเร็จรูปทีภาษา C มีไว้ให้เรียกใช้งานได้เลย โดยจะ
ั
ถูกจัดเก็บไว้ในส่วนของไลบรารี โดยจะแบ่งตามกลุ่มงาน เช่น กลุ่มงานคํานวณ กลุ่ม
อักขระ เป็ นต้น ผูเขียนโปรแกรมจําเป็ นต้องรูวามีฟ ังก์ชนใดบ้าง อยู่ในไลบรารีไหน
้ ้่ ั
เพือให้เรียกใช้งานได้อย่างง่ายวิธการใช้งานเพียงแค่ระบุไลบรารีทต้องการใช้ในส่วน
ี ี
ของHeader ของโปรแกรม #include ให้ถูกต้อง
30. #include<stdio.h> #include<math.h>
void main() Square root 4 =
Square root 4 =
{ 2.000000
2.000000
printf(“square root 4 =”); 5 power 3 =
5 power 3 =
printf(“%fn”, sqrt(4));
125.000000
125.000000
printf(“5 power 3 =”);
printf(“%f”, pow(5,3));
}
ฟ ังก์ชนมาตรฐาน
ั
เรียกใช้โดยการ include ไฟล์นามสกุล .h ทีเก็บฟ ังก์ชนนันไว้ เช่น
ั
ถ้าต้องการใช้ฟ ังก์ชน printf หรือ scanf จะต้อง include ไฟล์ชอ stdio.h มาก่อน
ั ื
ถ้าเราต้องการใช้ฟ ังก์ชนทางคณิตศาสตร์ เช่น sqrt หรือ pow ต้อง include ไฟล์ชอ
ั ื
math.h
31. 2.1 ฟังก์ชนทีใช้กบงานคํานวณ
ั ั
ฟ ังก์ชนทางคณิตศาสตร์ เป็ นฟ ังก์ชนทีใช้ทางการคํานวณ ทางคณิตศาสตร์ ปกติอยูใน
ั ั ่
math.h ผลลัพธ์ ทีได้จากฟ ังก์ชนกลุ่มนีเป็ นข้อมูลประเภท double ดังนันตัวแปร
ั
ทีใช้จงเป็ นพวกทีมีชนิดเป็ น double
ึ
ตัวอย่าง การใช้ฟ ังก์ชนทางคณิตศาสตร์ คือ sin(), cos() และ tan()
ั
ผลลัพธ์ของโปรแกรม
32. ฟ ังก์ชนทางคณิตศาสตร์ เป็นฟ ังก์ชนทีใช้ทางการคํานวณ ทางคณิตศาสตร์ ปกติอยู่ใน math.h
ั ั
ผลลัพธ์ ทีได้จากฟ ังก์ชนกลุ่มนีเป็ นข้อมูลประเภท double ดังนันตัวแปรทีใช้จงเป็นพวกทีมี
ั ึ
ชนิดเป็น double
ฟ ังก์ชน sin(x) เป็นฟ ังก์ชนใช้คานวณหาค่าของ sine โดย x มีค่าของมุมในหน่ วย เรเดียน
ั ั ํ
ฟ ังก์ชน cos(x) ใช้หาค่า cosine โดย x มีหน่ วยเป็ นเรเดียน(radian)
ั
ฟ ังก์ชน tan(x) ใช้หาค่า tangent โดย x มีหน่ วยเป็ นเรเดียน(radian)
ั
ฟ ังก์ชน sqrt(x) ใช้หาค่ารากทีสองของ x โดย x เป็นตัวเลขหรือตัวแปรทีไม่ตดลบ
ั ิ
ฟ ังก์ชน exp(x) ใช้หาค่า ex โดย e มีค่าประมาณ 2.718282
ั
ฟ ังก์ชน pow(x,y) ใช้หาค่า x y
ั
ฟ ังก์ชน log(x) ใช้หาค่า log ฐาน e เรียกว่า natural logarithm โดย x เป็ นตัวเลข
ั
หรือตัวแปรทีไม่ติดลบ
ฟ ังก์ชน log10(x) ใช้หาค่า log ฐาน 10 โดย x เป็นตัวเลขหรือตัวแปรทีไม่ติดลบ
ั
ฟ ังก์ชน ceil(x) ใช้ในการป ัดเศษทศนิยมของ x เมือ x เป็ นเลขทศนิยม
ั
ฟ ังก์ชน floor(x) ใช้ในการตัดเศษทศนิยมของ x ทิงเมือ x เป็ นเลขทศนิยม
ั
ฟ ังก์ชน fabs(x) ใช้ในการหาค่าสัมบูรณ์ของค่าคงทีหรือตัวแปรทีมีทศนิยม โดยเป็ นบวกหรือ
ั
ลบก็ได้
34. 2.2 ฟังก์ชนทีใช้กบงานข้อความ
ั ั
(string.h)•เฮดเดอร์ไฟล์ชอstring.hจะบรรจุฟ ังก์ชนมาตรฐานทีเกียวข้องกับการทางาน
ื ั
กับข้อความไว้
ฟังก์ชน strcpy
ั
ประสิ ทธิ ภาพ : คัดลอดข้อความจากตัวแปร string 2 มาเก็บไว้ทตัวแปร string 1
ี
< strcpy (สตริงปลายทาง, สตริงต้นทาง) ทําสําเนาข้อความ>
รูปแบบ strcpy (string 1,string 2)
ฟังก์ชน strcat
ั
ประสิ ทธิ ภาพ : เชือมต่อข้อความ โดยนําข้อความจากตัวแปร string 2 มาต่อท้าย
ข้อความตัวแปร string 1
รูปแบบ strcat (string 1,string 2)
35. ฟังก์ชน strcmp
ั
ประสิ ทธิ ภาพ : เปรียบเทียบความยาวของข้อความ
ถ้าความยาว string 1 มากกว่าหรือเท่ากับstring 2 ได้ค่าเป็ น 1 (จริง)
ถ้าความยาว string 1 สันกว่า string 2 ได้ค่าเป็ น 0 (เท็จ)
รูปแบบ strcmp(string 1,string 2)
ฟังก์ชน strlen
ั
ประสิ ทธิ ภาพ : หาความยาวของข้อความ
รูปแบบ strlen (string)
ฟังก์ชน strcmpi
ั
ประสิ ทธิ ภาพ : เปรียบเทียบข้อความ
ถ้าความยาว string 1 เป็ นข้อความเดียวกับ string 2 ได้ค่าเป็ น 0 (เท็จ)
ถ้าความยาว string 1 เป็นข้อความมีค่า < string 2 ได้ค่าเป็ น < 0
ถ้าความยาว string 1 เป็นข้อความมีค่า > string 2 ได้ค่าเป็ น > 0
รูปแบบ strcmpi (string 1,string 2)
36. 2.3 ฟังก์ชนทีใช้กบงานกับอักขระ
ั ั
กลุ่มเรียกใช้งานในไลบรารีตองสัง #include <ctype.h>
้
ฟังก์ชน TOLOWER ฟ ังก์ชน LOWER ใช้ในการแปลงข้อความทีเป็ นตัวพิมพ์ใหญ่ ไม่วาจะเป็ นแค่บาง
ั ั ่
ตัวอักษรหรือทังข้อความ ให้เป็ นตัวพิมพ์เล็กทังหมด
หน้ าที แปลงข้อความให้เป็ นตัวพิ มพ์เล็ก
รูปแบบ TOLOWER(text)
text ข้อความทีต้องการแปลงเป็ นตัวพิมพ์เล็ก ซึงต้องเป็ นตัวอักษรเท่านัน
ฟังก์ชน TOUPPER ฟ ังก์ชน UPPER จะตรงข้ามกับฟ ังก์ชน LOWER โดยฟ ังก์ชน
ั ั ั ั
TOUPPER จะแปลงข้อความทังหมดให้เป็ นตัวพิมพ์ใหญ่
หน้ าที แปลงข้อความให้เป็ นตัวพิ มพ์ใหญ่
รูปแบบ TOUPPER(text)
text ข้อความทีต้องการแปลงเป็ นตัวพิมพ์ใหญ่ ซึงต้องเป็ นตัวอักษรเท่านัน
38. สรุปเนื อหา
เทคนิคการเขียนโปรแกรมในรูปแบบแบ่งระบบงานเป็ นโปรแกรมย่อยนันช่วยให้เกิด
ประโยชน์หลายด้าน เช่น โปรแกรมมีความเป็นระบบระเบียบมากขึน สามารถมุง ่
เป้ าหมายไปยังส่วนของระบบงานย่อยทีต้องการได้งายขึน รวมทังเอือต่อการทํางานแบบทีม
่
ได้
การวางตําแหน่งของโปรแกรมในตําแหน่ งย่อยในโครงสร้างภาษาซีทาได้ 2 รูปแบบคือ
ํ
วางโปรแกรมย่อยในตําแหน่งก่อนโปรแกรมหลักและวางโปรแกรมย่อยในตําแหน่ งหลัง
โปรแกรมหลัก โปรแกรมย่อยมีประสิทธิภาพการทํางานให้เลือกใช้ 4 รูปแบบคือ
1.แบบไม่มการรับส่งค่าพารามิเตอร์
ี
2.แบบรับค่าพารามิเตอร์ไปใช้งานอย่างเดียว
3.แบบรับ-ส่งค่าพารามิเตอร์
4.แบบไม่มการรับค่าพารามิเตอรแต่มการส่งคืนค่า
ี ี
39. การเขียนโปรแกรมย่อยแบบไม่มการรับส่งค่าพารามิเตอร์นิยมนําไปใช้งาน
ี
โปรแกรมประเภทมีเมนูให้เลือกกดหมายเลขการทํางานในส่วนย่อยของระบบงานนัน
ส่วนการเขียนโปรแกรมย่อยในรูปแบบรับ – ส่งค่าพารามิเตอร์ระหว่างโปรแกรมหลัก
กับโปรแกรมย่อย นิยมนําไปใช้งานคํานวณและภาษาซี ผูใชงานสามารถสร้าง
้
ฟ ังก์ชนขึนมาใช้งานได้เอง แต่หากต้องการใช้ฟ ังก์ชนสําเร็จรูปทีมีอยูแล้วในภาษาซีให้
ั ั ่
ศึกษาเรืองฟ ังก์ชน มาตราฐาน
ั
ฟ ังก์ชนมาตรฐานเป็ นโปรแกรมย่อยชนิดหนึงทีผูพฒนาภาษาซีสร้างไว้ให้ผเขียน
ั ้ ั ู้
งานภาษาซีนําไปใช้ควบคุมการทํางาน เช่น ฟ ังก์ชนควบคุมการแสดงผล คือ
ั
ฟ ังก์ชน printf เป็ นต้น ฟ ังก์ชนเหล่านีถูกจัดเก็บในส่วนทีเรียกว่า ไลบรารี
ั ั
ดังนันผูเขียนงานโปรแกรมภาษาซีตองศึกษาว่าฟ ังก์ชนทีต้องการใช้งานนัน จัดเก็บใน
้ ้ ั
ไลบรารี ใด แล้วจึงเรียกการใช้งานด้วย #include ชือ ไลบรารี ให้ถูกต้อง
40. แบบฝึ กหัด
1.กําหนด char s3[5] = {‘G’, ‘O’, ‘O’, ‘D’, ‘0’}; ดังนัน s3 เป็ นตัวแปรประเภทใด
ก) ตัวอักขระ
ข) ข้อความ
ค) ถูกทังข้อ ก. และข้อ ข.
ง) ไม่มคาตอบทีถูกต้อง
ี ํ
2. ข้อใด หมายถึงฟ ังก์ชนในภาษาซี
ั
ก) ฟ ังก์ชนมาตรฐาน
ั
ข) ฟ ังก์ชนทีสร้างขึนเอง
ั
ค) ถูกทังข้อ ก. และข้อ ข.
ง) ไม่มคาตอบทีถูกต้อง
ี ํ
3.ข้อใดถูกต้องในการเขียนรูปแบบโครงสร้างของฟ ังก์ชนทีมีการส่งค่าไปและไม่มการส่งค่ากลับ
ั ี
ก) int function_name(type arg, …)
ข) void function_name(type arg, …)
ค) function_name(type arg, ….)
ง) void function_name()
41. 4.ข้อใด ไม่ใช่ ข้อมูลในภาษาซี
ก) เลขจํานวนเต็ม
ข) ตัวอักขระ
ค) ข้อความ
ง) รูปภาพ
5.ฟ ังก์ชนทีสร้างขึนเองในภาษาซี ต้องเขียนอยู่ ภายในเครืองหมายอะไร
ั
ก) ()
ข)
ค) {} []
ง) ถูกทุกข้อ
6.กําหนด char s1[9] = “LANGUAGE”; ดังนัน s1 เป็นตัวแปรประเภทใด
ก) ตัวอักขระ
ข) ข้อความ
ค) ถูกทังข้อ ก. และข้อ ข.
ง) ไม่มคําตอบทีถูกต้อง
ี
42. 7.กําหนด char s2[4] = {‘G’, ‘O’, ‘O’, ‘D’}; ดังนัน s2 เป็ นตัวแปรประเภทใด
ก) ตัวอักขระ
ข) ข้อความ
ค) ถูกทังข้อ ก. และข้อ ข.
ง) ไม่มคําตอบทีถูกต้อง
ี
8.ข้อใดเขียนรูปแบบการเรียกใช้ฟ ังก์ชนได้ ถูกต้อง
ั
ก) function_name();
ข) function_name()
ค) function_name(arg1,arg2)
ง) Function_name(arg1; arg2);
9.ข้อใดถูกต้องในการเขียนรูปแบบโครงสร้างของฟ ังก์ชนทีมีการส่งค่าไปและไม่มการส่งค่ากลับ
ั ี
ก) int function_name(type arg, …)
ข) void function_name(type arg, …)
ค) function_name(type arg, ….)
ง) void function_name()
44. เฉลย
1. ก
2. ค
3. ข
4. ง
5. ข
6. ข
7. ก
8. ก
9. ข
10. ง
45. รายชือสมาชิก
1. น.ส.กฤตวรรณ แต้มประเสริฐ เลขที 13
2. น.ส.ณัฐชยา พลูสวัสดิ เลขที 14
3. น.ส.นพวรรณ ปลาบู่ทอง เลขที 19
4. น.ส.กาญจนาพร พงศ์อมพรทิพย์
ั เลขที 21
5. น.ส.นภัสกร นาควิโรจน์ เลขที 22
6. น.ส. ลลิตา บันลือศรีสกุล เลขที 23
ชันมัธยมศึกษาปี ที 6/1