Upload
aoife
View
57
Download
2
Embed Size (px)
DESCRIPTION
Function ( ฟังก์ชัน ) อ.สมชาติ แผ่อำนาจ krusomchart.Wordpress.com. Computer Programming. Function. ในการทำงานบางอย่างจำเป็นต้องใช้คำสั่งมากว่าหนึ่งคำสั่งเพื่อทำงานนั้นให้สำเร็จ ซึ่งคำสั่งที่เขียนรวมกันไว้เพื่อใช้งานจะเรียกว่า ฟังก์ชัน (function) - PowerPoint PPT Presentation
Citation preview
FUNCTION (ฟงกชน)อ. สมชาต แผอำานาจ
KRUSOMCHART.WORDPRESS.COM
Computer Programming
Function ในการทำางานบางอยางจำาเปนตองใชคำาสงมากวาหนง
คำาสงเพอทำางานนนใหสำาเรจ ซงคำาสงทเขยนรวมกนไว เพอใชงานจะเรยกวา ฟงกชน(function)
ทผานมาเราไดเรยกใชงานฟงกชนในภาษาซมาบางแลว เชน
printf( ) printf(“Hello world”); scanf( ) ฟงกชนเหลานเปนฟงกชนมาตรฐานใน ภาษาซหรอไลบราร
ฟงกชน
รปแบบของฟงกชน โครงสรางของโปรแกรมทเขยนดวยภาษาซ ภายในโปรแกรมจะ
ประกอบดวยฟงกชนตางๆ โดยจะไมมคำาสงทเขยนเดยวๆ อยนอก ฟงกชน
อยางนอยทสดในโปรแกรมจะตองมหนงฟงกชนเสมอนนคอ ฟงกชน main( ) ซงเปนฟงกชนหลกทโปรแกรมภาษาซจะเรมตน
ทำางานจากจดน จากนนภายในฟงกชน main( ) อาจจะมการเรยก ใชฟงกชนอนๆ
ฟงกชนในภาษาซ ฟงกชนในภาษาซสามารถแบงออกเปน 2 ประเภท คอ
ไลบรารฟงกชน (Library Function) หรอ ฟงกชนมาตรฐาน ฟงกชนมาตรฐานในภาษาซเปนฟงกชนทมมาใหพรอมกบตวแปลภาษาซตามขอ
กำาหนด ANSI C เพอใชงานในดานตางๆ โดยเนนทงานพนฐาน อยางเชนฟงกชนคำานวณทางคณตศาสตร, ฟงกชนสำาหรบจดการกบขอความ หรอ
ฟงกชนจดการเกยวกบเวลา การใชงานฟงกชนมาตรฐานปกตแลวจำาเปนตองใชคำาสง #include แฟม
ขอมล .h หรอทเรยกวา header file เขาไปในโปรแกรมกอนการเรยกใชงาน เนองจาก header file จะเปนตวทนยามฟงกชน และคาตางๆ ทฟงกชนจำาเปน
ตองใช เชนถาตองการใชงานฟงกชนทางคณตศาสตร ในโปรแกรมจะเปนตอง#include <math.h> เขาไปกอน
เชน #include <stdio.h> ฟงกชนทผใชสรางขนเอง (User defined function)
ฟงกชนมาตรฐาน (1) ฟงกชนมาตรฐานทางคณตศาสตร (ตรโกณมต)
#include <math.h>ฟงกชนมาตราฐาน คำาอธบายsin(x) ฟงกชนสำาหรบหาคา sine ของมม x ทมหนวยเปนเรเดยนcos(x) ฟงกชนสำาหรบหาคา cos ของมม x ทมหนวยเปนเรเดยนtan(x) ฟงกชนสำาหรบหาคา tan ของมม x ทมหนวยเปนเรเดยนasin(x) ฟงกชนสำาหรบหาคา arcsin ของคา x จะคนคามมทม
หนวยเปนเรเดยนacos(x) ฟงกชนสำาหรบหาคา arccos ของคา x จะคนคามมทม
หนวยเปนเรเดยนatan(x) ฟงกชนสำาหรบหาคา arctan ของคา x จะคนคามมทม
หนวยเปนเรเดยน
คณตศาสตรตรโกณมต180 องศาดกร คอ π องศาเรเดยน ( โดย π คอ 3.14…)
การแปลงมมองศาดกรใหเปนมมองศาเรเดยน สามารถทำาไดโดยคำานวณ องศาเรเดยน =
การแปลงมมองศาเรเดยนใหเปนมมองศาดกร สามารถทำาไดโดยคำานวณ องศาดกร =
ฟงกชนมาตรฐาน (2) ฟงกชนมาตรฐานทางคณตศาสตร (ลอการธม, ยก
กำาลง และคาสมบรณ) #include <math.h>ฟงกชนมาตรา
ฐานคำาอธบาย
exp(x) ฟงกชนสำาหรบหาคา ex
log(x) ฟงกชนสำาหรบหาคา log ฐาน e ของ x log10(x) ฟงกชนสำาหรบหาคา log ฐาน 10 ของ x ฟงกชนมาตรา
ฐานคำาอธบาย
pow(x, y) ฟงกชนสำาหรบหาคาเลขยกกำาลง xy
sqrt (x) ฟงกชนสำาหรบหาคารากทสองของ x fabs(x) ฟงกชนสำาหรบหาคาสมบรณของ x ฟงกชนมาตรฐาน
คำาอธบาย
floor(x) ฟงกชนสำาหรบปดเศษทศนยมของ x ออกใหเปนจำานวนเตม
ceil(x) ฟงกชนสำาหรบปดเศษทศนยมของ x ขนใหเปนจำานวนเตม
round(x) ฟงกชนสำาหรบปดเศษทศนยมของ x ใหเปนจำานวนเตม ถาจดทศนยมมากกวาหรอเทากบ .5 จะปดขนนอกนนปดลง
ฟงกชนมาตรฐานเกยวกบตวอกษร <ctype.h>ฟงกชนมาตรฐาน คำาอธบาย
tolower(ch) ฟงกชนทใชแปลงตวอกษร ch ใหเปนตวพมพเลกtoupper(ch) ฟงกชนทใชแปลงตวอกษร ch ใหเปนตวพมพใหญislower(ch) ฟงกชนทใชตรวจสอบตวอกษร ch วาเปนตวพมพเลก
หรอไม จะคนคาจรง(คาไมเทากบศนย) ถา ch เปนตวพมพเลก นอกนนคนคาเทจหรอศนย
isupper(ch) ฟงกชนทใชตรวจสอบตวอกษร ch วาเปนตวพมพใหญหรอไม จะคนคาจรง(คาไมเทากบศนย) ถา ch เปนตวพมพใหญ นอกนนคนคาเทจหรอศนย
isalnum(ch) ฟงกชนจะใหคากลบคนออกมาเปนจรง(คาไมเทากบศนย) ถาตวแปร ch มคาเปน 'A' - 'Z' , 'a' - 'z' , และ '0' – '9' นอกนนจะใหคาเปนเทจหรอศนย
isalpha(ch) ฟงกชนจะใหคากลบคนออกมาเปนจรง(คาไมเทากบศนย) ถาตวแปร ch มคาเปน 'A' - 'Z' , และ 'a' - 'z' นอกนนจะใหคาเปนเทจหรอศนย
isdigit(ch) ฟงกชนจะใหคากลบคนออกมาเปนจรง(คาไมเทากบศนย) ถาตวแปร ch มคาเปน '0' - '9' นอกนนจะใหคาเปนเทจหรอศนย
ispunct(ch) ฟงกชนจะใหคากลบคนออกมาเปนจรง(คาไมเทากบศนย) ถาตวแปร ch มคาเปนตวเชอมตางๆ เชน #, <, @, > และอนๆ นอกนนจะใหคาเปนเทจหรอศนย
ฟงกชนมาตรฐานเกยวกบขอความ<string.h>
ฟงกชนมาตรฐาน คำาอธบายstrcpy(str1, str2) ฟงกชนสำาหรบคดลอก (copy) ขอความจากตวแปร
str2 ไป เกบยงตวแปร str1
strcat(str1, str2) ฟงกชนสำาหรบเชอมตอขอความโดยการนำาขอความในตวแปร str2 ไปตอทายขอความในตวแปร str1 โดยผลลพธจะเกบไว ในตวแปร str1
strcmp(str1, str2) ฟงกชนสำาหรบเปรยบเทยบขอความในตวแปร str1 และ str2 ถาขอความเหมอนกนจะคนคาศนย
strlen(str) ฟงกชนสำาหรบหาความยาวของขอความใน str
ฟงกชนทผใชสรางขนเอง type function-name (type arg-1, type arg-2, … ) { local variable declaration; statement-1; statement-2; …. statement-n; return(value); }
น.95
องคประกอบของฟงกชน ประกอบดวย 2 สวนยอย คอ
สวนหว ชนดขอมลทจะสงกลบ ไดแก int, char, float, ตวช(int*)
เปนตน ชอฟงกชน จะตองไมซำากบชออนในโปรแกรมเดยวกน หรอไมซำากบ
คำาหลกในภาษาซ รายการพารามเตอร ตองอยในเครองหมาย(และ) เปนการประกาศ
ชนดขอมลของตวแปร และชอของตวแปร จะกำาหนดหรอไมกได* สวนหวของฟงกชนจะตองไมมเครองหมาย ; ปดทายบรรทด
สวนตว อยในเครองหมาย { และ } ประกาศตวแปลโลคอล คำาสงตางๆ
และสดทายคำาสง Return() เพอสงคากลบยงฟงกชนถกเรยก
น.95
ประเภทของฟงกชน ฟงกชนในภาษาซ ถาใชการรบ/สงคาของฟงกชนเปน
เกณฑ สามารถแบงออกไดเปน 3 ประเภท ฟงกชนทไมมการรบ/สงคา ฟงกชนทมการรบคาเขาไปในฟงกชน ฟงกชนทมการสงคากลบออกจากฟงกชน
ฟงกชนทไมมการรบ/สงคา ฟงกชนทไมมการรบ/ สงคาใดๆ ซงหมายความวา
การเรยกใชฟงกชนประเภทนไมตองสงอารกวเมนตใดๆ เขามาใหกบฟงกชน
และฟงกชนจะทำางานโดยไมมการสงผลลพธใดๆ กลบมาให กบผเรยกใช
ดงนนถอไดวาฟงกชนประเภทนเปนประเภททเขยนงาย ทสด สวนใหญจะใชในการแสดงผลขอความ
void showProgram( ) { printf(“= Today Program =\n”); printf(“1. Mummy\n”); printf(“2. Star war\n”); printf(“3. Spiderman\n\n”);}
ตวอยางการใชงาน#include <stdio.h>void showProgram( ) { printf(“=== Today Program ===\n”); printf(“1. Mummy\n”); printf(“2. Star war\n”); printf(“3. Spiderman\n\n”);} int main() { char ch; printf("Do you want to check showing program (y/n) : "); ch = getchar( ); if((ch == ‘Y’) || (ch == ‘y’)) { showProgram( ); } else { printf(“Thank you\n”); } }
ฟงกชนทมการรบคา ฟงกชนประเภททมการรบคาหมายถง ฟงกชนทเวลาจะ
เรยกใชงานตองมการสงคาอารกวเมนตไปใหกบ ฟงกชนนนดวย
โดยอารกวเมนตทสงไปตองตรงตามขอกำาหนดของ ฟงกชน อยางเชน ฟงกชนกำาหนดใหสงอารกวเมนต
เขาไป 3 ตวคอ int, float, long เวลาเรยกใชงาน ฟงกชนกตองสงขอมลซงอาจจะอยในรปของนพจน
ตวแปร หรอ คาคงทกได แตตองเปนขอมลชนด int, float, และ long ตามลำาดบเทานน
void average(int x, int y) { printf(“Average of %d and %d = %f\n”, x, y, (x + y)/2.0);}
ตวอยางการใชงาน(1)#include <stdio.h> void average(int x, int y){ printf(“Average of %d and %d = %f\n”, x, y, (x + y)/2.0);} int main(int argc, char **argv) { int a = 5, b = 10; average(a, b); average(4,6);}
average
Main 5
10ab
xy
510
ฟงกชนทมการสงคากลบออกจากฟงกชน ฟงกชนทมการสงคากลบออกจากฟงกชนดวย โดย
สวนใหญแลวฟงกชนประเภทนมกจะใชกบงานประเภท ทตองการคำานวณคา
ในการเรยกใชงานฟงกชนประเภททมการสงคากลบ เราจำาเปนจะตองสรางตวแปรทมประเภทขอมลเดยวกนกบประเภททฟงกชน
คาทสงกลบจากฟงกชน จะใชคำาสง return ซงสามารถคนไดคาเดยวเทานน
int power3(int x) { return( x * x * x);}
ตวอยางการใชงาน(1)#include <stdio.h> int power3(int x) { return( x * x * x);} int main() { int num; num = power3(2); printf(“2^3 = %d\n”, num);}
power3
Main ?nu
m
x
2
8
หาคาสงสด #include <stdio.h> #include <conio.h> int findmax(int x, int y); int main(){ int a,b; int max; printf("Enter two interger
numbers:"); scanf("%d %d",&a,&b); max=findmax(a,b); printf("%d is Maximum
among %d and %d\n",max,a,b);
getch(); }
int findmax(int x,int y){
if(x>y){ return x; }else{ return y; } }
การเขยนโปรโตไทปสำาหรบฟงกชน โปรโตไทป (Prototype) คอ คำาสงอธบายรายละเอยดของ
ฟงกชน เปนคำาสงทบอกใหตวแปรภาษาซรจกกบฟงกชนกอนทฟงกชนจะ
ถกเรยกใชงาน ตามปกตถาตองการใหตวแปรภาษาซแปลความหมายของ
โปรแกรมใหถกตอง เราจะตองเขยนฟงกชนทสรางขนเอง ไว กอนฟงกชน main( )
เนองจากถามการเรยกใชฟงกชนกอนทจะเจอตวฟงกชน ตวแปร ภาษาซจะเตอนวาไมรจกฟงกชน แตการเขยนโปรโตไทปจะทำาให
เราสามารถยายตำาแหนงของฟงกชนไปไวสวนใดของโปรแกรมกได
int power3(int x) {
การประกาศโปรโตไทป ซงรปแบบการเขยนโปรโตไทปจะเหมอนกบการเขยน
บรรทดแรกสดของฟงกชน คอ
ตวอยาง
type function-name (type arg-1, type arg-2, … );
int power3(int x) { return( x * x * x);}
Function
Prototype
;
น97
ตวอยางการใชงาน(1)#include <stdio.h>
int power3(int x) { return( x * x * x);}
int main() { printf(“2^3 = %d\n”, power3(2));}
#include <stdio.h> int main() { printf(“2^3 = %d\n”, power3(2));} int power3(int x) { return( x * x * x);}
ถกตอง ไมถกตอง
int power3(int x);
ถกตอง
ตวแปรและขอบเขตการใชงานสำาหรบฟงกชน
เมอมการสรางฟงกชนขนมาใชงานเพมในโปรแกรมการประกาศตวแปรในแตละฟงกชนนนจงตองมขอกำาหนดและขอบเขตของตวแปรเพอปองกนความ
สบสนในการใชงาน โดยประเภทของตวแปรในภาษาซจะแบงตามขอบเขต
ของการสรางและการใชงานตวแปรของเปน 4 ประเภท ใหญๆคอ
Local Global Extern Static
ตวแปร local ตวแปร local จะเรยกอกอยางหนงวา ตวแปร
automatic เปนตวแปรประเภททสรางขนมาภายในฟงกชน
ขอบเขตการใชงานตวแปร local กจะอยภายใน ฟงกชนทสรางตวแปรขนมาเทานน จะไมสามารถถก
เรยกใชงานจากฟงกชนอนได ถามการสรางตวแปร local แลวมการตงชอซำากน
ระหวางฟงกชน กถอวาเปนคนละตวแปรกน การสงใหเปลยนคาทฟงกชนใดฟงกชนหนงจะไมสงผลกระทบ
ตออกฟงกชนหนงทใชชอตวแปร local เดยวกน
ตวอยางการใชงาน#include <stdio.h> void testLocal( ) { int i = 10; i += 5;}
int main(int argc, char **argv) { int i = 10; printf(“i = %d\n”, i); testLocal( ); printf(“i = %d\n”, i);}
testLocal
Main 10i
10i
ผลการรน :i = 10i = 10
15
ตวแปร global ตวแปร global หรอเรยกอกอยางหนงวา ตวแปร
external เปนตวแปรประเภททสามารถเรยกใชงาน จากฟงกชนใดกไดในโปรแกรม
โดยการสรางตวแปร global จะตองเขยนคำาสง ประกาศสรางไว ทสวนกำาหนดคาเรมตนของโปรแกรม ตอจากสวนของ Preprocessor โดยไมไดสรางไว
ภายในฟงกชนใดฟงกชนหนงโดยเฉพาะ ขอบเขตการใชงานตวแปร global กคอตลอดทง
โปรแกรมสามารถเรยกใชหรอเขยนคำาสงเพอ เปลยนแปลงคาของตวแปรประเภท global จาก
ฟงกชนใดกไดในโปรแกรม
การสรางตวแปรชนด Global#include <stdio.h> int i; // ประกาศตวแปรglobal void testGlobal( ) { i += 5;}
int main(int argc, char **argv) { i = 10; printf(“i = %d\n”, i); testGlobal( ); printf(“i = %d\n”, i);}
ตวอยางการใชงาน#include <stdio.h> int i; // ประกาศตวแปรglobal void testGlobal( ) { i += 5;}
int main(int argc, char **argv) { i = 10; printf(“i = %d\n”, i); testGlobal( ); printf(“i = %d\n”, i);}
testGlobal
Main
ผลการ รน : i = 10
i = 15
Globali ?1015
ลำาดบในการเรยกใชตวแปรของฟงกชน ถาชอตวแปรซำากน ระหวางตวแปรประเภท Local และ
Global ฟงกชนจะเรยกใชงานตวแปรทเปน Local กอน จากนนถาไมพบตวแปรนนใน Local จงจะคนหาและเรยก
ใชในสวน Global ตวแปรทผานเขามาใหฟงกชน (parameter หรอ
argument) จะเปนตวแปรประเภท Local ดงนนจงหามตงชอซำากนเนองจากจะคอมไพลไมผาน
void testFunc(int x) { int x; .... ....}
ชอซำา
แบบฝกหด1 . เขยนฟงกชนหาคา Factory (แฟกทอร
ของ 5)2 . เขยนฟงกชนหาพนทสเหลยม (กวาง*ยาว)3 . เขยนโปรแกรมรบคาจำานวนเตม 5 จำานวน
แลวหาคาสงสด คาตำาสด คาเฉลย โดยใชฟงกชน
4 . เขยน Flow chart โปรแกรมในขอ 1-3
ตวอยาง โปรแกรมเพอบวกเลขสองจำานวนทรบจาก
ผใช และแสดงผลการคำานวณสามารถแบงการทำางานเปนงานยอยไดดงน1 ) รบขอมล 2 จำานวนจากผใช2) บวกเลข 2 จำานวนแลวเกบผลลพธ3) แสดงผลลพธของการทำางาน
ตวอยาง (ตอ) จะไดวาโปรแกรมประกอบดวยฟงกชน 4 ฟงกชนคอ
ฟงกชนหลก
ฟงกชนการรบขอมลฟงกชนในการบวกเลขฟงกชนแสดงผลลพธ
รปแบบของฟงกชน
ชนดขอมลทคนคา ชอฟงกชน ( การประกาศตวแปร )
{ การประกาศตวแปรภายในฟงกชน;
คำาสง;return (คาขอมลทตองการ
สงคากลบ);}
int , char , float , double ฯลฯ
แบบท 1
void ชอฟงกชน ( การประกาศตวแปร ){
การประกาศตวแปรภายในฟงกชน;
คำาสง;}
แบบท 2
ตวอยาง เขยนโปรแกรมหาคา Factorialint factorial(int);int main(){ int n; printf("Write number of Factorial : "); scanf("%d",&n);
printf("\n%d Factorial is %d",n,factorial(n));
printf("\nPress any key to contonue...");
getch();}
ตวอยาง เขยนโปรแกรมหาคา Factorial (ตอ)int factorial(int n){ int i,ans=1; for(i=1;i<=n;i++) { //ans = ans * i; ans *= i; } return(ans);