+ All Categories
Home > Documents > ( Function, SubSub--Program,Program,Program Module ) ·...

( Function, SubSub--Program,Program,Program Module ) ·...

Date post: 26-Mar-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
21
โปรแกรมยอย โปรแกรมยอย โปรแกรมยอย โปรแกรมยอย ( ( Function Function, , Sub Sub-Program, Program, Program Module ) Program Module ) . กฤษณะ สีพนมวัน ภาควชาคอมพวเตอร Sep 14, 2009
Transcript
Page 1: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

โปรแกรมยอย โปรแกรมยอย โปรแกรมยอย โปรแกรมยอย

( ( FunctionFunction, , SubSub--Program,Program, Program Module )Program Module )

อ. กฤษณะ สพนมวน ภาควชาคอมพวเตอร

Sep 14, 2009

Page 2: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

บทนา บทนา + + วธคดวธคดบทนา บทนา + + วธคดวธคดโปรแกรมคอมพวเตอรสวนใหญทใชงานจรง มกจะเปนโปรแกรมโปรแกรมคอมพวเตอรสวนใหญทใชงานจรง มกจะเปนโปรแกรมขนาดใหญ เกนกวาทจะเขยนรวมๆ กนในฟงกชนหลก main()

หากแบงการทางานออกเปนสวนเลกๆ หรอ Module เมอสรางและทดสอบโปรแกรมยอยๆ นนจนทางานไดด ๆแลวจงนาโปรแกรมยอยเหลานนประกอบขนมาเปนโปรแกรมใหญทสมบรณในขนตอนสดทาย ใหญทสมบรณในขนตอนสดทาย จะเปนการสรางโปรแกรมทมขนาดใหญจากโปรแกรมยอยๆ ซงมประสทธภาพและดาเนนการไดงายกวาการเขยนโปรแกรมเฉพาะใน ฟงกชนหลก main()()

Page 3: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

Page 4: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

1.ฟงกชนมาตรฐาน (Standard Function)ฟ ใ โ โป P2.ฟงกชนทสรางขนใหมโดยโปรแกรมเมอร (Programmer-

Defined Function)

Page 5: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

00 ฟงกชนแรกในภาษาซฟงกชนแรกในภาษาซ00. . ฟงกชนแรกในภาษาซฟงกชนแรกในภาษาซ// แบบท 1 // แบบท 2// แบบท 1#include<stdio.h>

// แบบท 2#include<stdio.h>

void main(){

int main(void){{

… code ..}

{… code ..return 0;} return 0;

}

ในภาษาซเรมตนทางานในฟงกชน main() และในภาษาซ มฟงกชน(ชอ) main() เพยงฟงกชนเดยว

Page 6: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

11 ฟงกชนมาตรฐานฟงกชนมาตรฐาน11. . ฟงกชนมาตรฐานฟงกชนมาตรฐานฟงกชนมาตรฐานในภาษาซจะอยในไลบรารมาตรฐาน ฟงกชนมาตรฐานในภาษาซจะอยในไลบรารมาตรฐาน (Standard Library) ซงประกอบดวยฟงกชนตางๆ

ไ ใ มากมาย ไมวาจะใชสาหรบการคานวณทางคณตศาสตร การจดการกบขอความ การจดการกบ input/output และอนๆ ซงจะทาใหงานของโปรแกรมเมอรงายขน โดยการใชงานฟงกชนประเภทนจะตองรวม (#include) โดยการใชงานฟงกชนประเภทนจะตองรวม (#include) ไลบรารทตองการใชงาน

i f() f() l () h()เชน ฟงกชน printf(), scanf(), clrscr(), getch()โดยหากตองการใช getch() เราตอง include conio.hg ()

Page 7: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

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

อยในฟงกชนนน ๆ เทานน นนหมายความวาฟงกชนอน ๆ รวมทงฟงกชน main() จะไม

ใ ใ ฟ ทราบการทางานภายในหรอคาสงตาง ๆ ในฟงกชนนน หรอพดอกอยางไดวาฟงกชนแตละฟงกชนจะไมทราบการทางาน

ใ ฟ ภายในของฟงกชนอน เพยงแตจะสามารถเรยกใชงานฟงกชนนนไดเทานน

Page 8: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

การไมเขยนเปนฟงกชนการไมเขยนเปนฟงกชนการไมเขยนเปนฟงกชนการไมเขยนเปนฟงกชน

#include<stdio.h>main()(){

printf(“Introduction to ”);printf(“C Programming.\n”);…

}

// ผลลพธ Introduction to C Programming.

Page 9: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

เขยนฟงกชนและใชงานในโปรแกรมเขยนฟงกชนและใชงานในโปรแกรมเขยนฟงกชนและใชงานในโปรแกรมเขยนฟงกชนและใชงานในโปรแกรม

function1(){

printf(“Introduction to ”);main(){

printf( Introduction to );}

{function1();function2();()…

}function1(){

i tf(“C P i \ ”)printf(“C Programming.\n ”);}

// ผลลพธ Introduction to C Programming.

Page 10: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

ใหแกปญหาไดยากขนขอบเขตของตวแปร : ตวแปรทกาหนดในฟงกชน มขอมลและขอบเขตของตวแปร : ตวแปรทกาหนดในฟงกชน มขอมลและสามารถใชงานไดเฉพาะภายในฟงกชนเทานนฟ ฟงกชนหนง ๆ ควรทางานเพยงงานเดยวฟงกชนจบเมอสนสดคาสงใน block หรอพบคาสง return

Page 11: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

การนยามฟงกชนการนยามฟงกชนการนยามฟงกชนการนยามฟงกชนSyntax:yreturn_type function_name( parameters ){

// code ของฟงกชน// code ของฟงกชน}

ตวอยาง

void function1(){

int function2(int p){

int function3(int p1, int p2){

…} return ?;

}return ?;

}

Page 12: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

การสรางฟงกชนการสรางฟงกชนการสรางฟงกชนการสรางฟงกชนหวขอทกลาวถง :หวขอทกลาวถง :

Function prototypeฟงกชนอยางงายฟงกชนทรบพารามเตอรฟงกชนทรบพารามเตอรฟงกชนทรบพารามเตอรและสงคากลบ

Page 13: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

Function PrototypeFunction PrototypeFunction PrototypeFunction Prototype

คอ การระบรปแบบของฟงกชนตาม syntax เพอบอกใหผใช คอ การระบรปแบบของฟงกชนตาม syntax เพอบอกใหผใช หรอตวโปรแกรมเมอรเองทราบถงวธการใชงานฟงกชนทสรางการนยาม prototype ไมตองเขยนสวนของการทางานโดย◦ จาเปน หากสรางหรอกาหนดฟงกชนนน ๆ ไวหลงฟงกชน mainไ ป ฟ ไ ฟ i◦ ไมจาเปน หากสรางหรอกาหนดฟงกชนนน ๆ ไวกอนฟงกชน main

Syntax :y◦ void function1(); // ประกาศเพยงเทาน อยาลม ;

Page 14: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

Function Prototype (Function Prototype (ตอตอ))Function Prototype (Function Prototype (ตอตอ))#include <stdio.h> #include <stdio.h>

void function1(); void function1()

{

int main(void)

{

{

}

prototype

function1(); int main(void)

{

}

{

function1();

void function1()

{

();

}

}

Page 15: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

ฟงกชนอยางงายฟงกชนอยางงายฟงกชนอยางงายฟงกชนอยางงายฟงกชนแบบน ใชในกรณทเราสามารถแบงแยกสวนของฟงกชนแบบน ใชในกรณทเราสามารถแบงแยกสวนของโปรแกรมออกมาจากโปรแกรมหลกไดอยางอสระการทางานในฟงกชนไมมการรบ – สง คาของตวแปร หรอการคานวณใด ๆ ทเกยวของกบโปรแกรมหลกๆตวอยาง id f ti 1( id) void function2(void)void function1(void)

{

printf(“This print of function1”);

void function2(void){

int i, x = 10;for(i=0; i<x; i++)printf( This print of function1 );

}for(i=0; i<x; i++)

printf(“%d”, x);}

Page 16: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

พารามเตอรทรบเขามาเปนคาของขอมลทสงมาจากโปรแกรมหลก และตองเปน data_type ชนดเดยวกน_ ypตวอยาง

void print x(int x)

รบ parameter แบบ int เทานน

int main(void) ส arameter void print_x(int x){

int i;for(i=0; i< x; i++)

int main(void){

int y = 10, z = 15;print x( y );

สง parameter ชอ y ชนด int

สง parameter for(i 0; i x; i )printf(“ X ”);

}

print_x( y );print_x( z )print_x( 20.5 );return 0;

สง parameter ชอ z ชนด int

สง parameter ;}

pเปนคาคงท 20.5ไมใช int

Page 17: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

void print_char(int x, float y, char z){

รบ parameter 3 ตว

int main(void){

สง parameterดวยตวแปร{

int i;for(i=0; i< x; i++)

printf(“%c %.2f”, z , y);

{int y = 10, z = 15;char a = ‘A’;float b = 2.5f;

ดวยตวแปร

สง parameter } print_char( y, b, a);

print_char(2, 20.5, ‘X’);return 0;

ดวยคาคงท

}

Page 18: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

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

สงคากลบไดเพยง 1 คาเทานนตวอยาง◦ โจทย : จงเขยนฟงกชนหาผลบวกของตวเลข 2 ตว◦ วธทา :

ตงชอฟงกชนใหสอถงการทางานภายในตองใชพารามเตอรกตว ชนดใด int float double char ?สงคากลบเปนชนดใดสงคากลบเปนชนดใดคานวณอยางไรใชงานในโปรแกรมหลกอยางไร

Page 19: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

ตยตย ฟงกชนหาผลบวกของเลข ฟงกชนหาผลบวกของเลข 2 2 ตวตวตยตย.. ฟงกชนหาผลบวกของเลข ฟงกชนหาผลบวกของเลข 2 2 ตวตว

int add(int a, int b){

return a+b;

#include<stdio.h>int main(void){;

}{

int x = 2, y = 3;printf(“ %d ”, x+y);

float sum(float a float b)

printf( %d , x y);printf(“ %d ”, add(x, y));printf(“ %f ”, sum(12.5, 13.5));

float sum(float a, float b){

int c;c = a + b;

printf(“ %d ”, add(5, add(20, 30)));

0c = a + b;return c;

}

return 0;}

Page 20: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

Test Test 11: simple functions: simple functionsTest Test 11: simple functions: simple functions

1 ฟงกชนแปลงคาเงนจาก baht เปน dollar1. ฟงกชนแปลงคาเงนจาก baht เปน dollar2. ฟงกชนคดคาสนคารวม vat3. ฟงกชนเลขยกกาลง 4 ฟงกชนคานวณจานวนวนาท 4. ฟงกชนคานวณจานวนวนาท

การใชงานในโปรแกรมหลก1. printf(“500 bahts = %f dollars”, exchange( 500, 0.02896 ));1. printf( 500 bahts %f dollars , exchange( 500, 0.02896 ));2. printf(“you must pay %f Bahts”, 100 + vat( 100, 7));3. printf(“ 2^5 = %d ”, power( 2, 5 ));p ( p ( ))

4. printf(“2 hours 2 minutes 59 seconds = %d ticks”, ticks( 2, 2, 59 ));

Page 21: ( Function, SubSub--Program,Program,Program Module ) · ในภาษาซีโปรแกรมยโปรแกรมยอย อย จะถกเรจะถูกเรยกวาียกว

เฉลยเฉลยdouble exchange(int a double b)double exchange(int a, double b)

{

return a * b;

}

double vat(int a, int b)

{

return a + ( a*b / 100); return a + ( a b / 100);

}

int power(int a, int b)

{

int i, x;

x = 1;

for(i=0; i<b; i++)for(i 0; i<b; i++)

x = x * a;

return x;

}

int ticks(int h, int m, int s)

{

return (h * 3600) + (m * 60) + s;return (h 3600) (m 60) s;

}


Recommended