Function ( ฟังก์ชัน ) อ.สมชาติ แผ่อำนาจ...

Preview:

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);

Recommended