เรื่อง ฟังก์ชัน

43
เเเเเเ เเเเเเเเ เเเเเเเเ 1 เเเเเเเเเเเเเเเเเเเ ฟฟฟฟฟฟฟฟ ฟฟฟฟฟฟฟ ฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟ ฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟ ฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟฟ

Upload: sukanya

Post on 03-Apr-2016

230 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: เรื่อง ฟังก์ชัน

เรอง ฟงกชน

ฟงกชน1 ความหมายของฟงกชน

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

Page 2: เรื่อง ฟังก์ชัน

2 ประเภทของฟงกชน

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

2.1 ฟงกชนมาตรฐาน 2.2 ฟงกชนทสรางขน2.1 ฟงกชนมาตรฐาน

หมายถง ฟงกชนทภาษาซใหมาพรอมโปรแกรม ซงผเขยนโปรแกรมสามารถ เรยกใชไดทนท โดยไมจำาเปนตองสรางฟงกชนขนมาใชงาน ทำาใหเกดความสะดวก รวดเรวมากขน ตวอยางของฟงกชนมาตรฐาน เชน clrscr( ), printf( ), scanf( ), getch( ), getchar( ), gets( ) เปนตน

2.2 ฟงกชนทสรางขน หมายถง ฟงกชนทผเขยนโปรแกรมสรางขน เพอใหตรงกบ

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

ฟงกชนทสรางขนมสวนประกอบคลายกบสวนประกอบของโปรแกรม โดยฟงกชนทสรางขน มสวนประกอบทสำาคญ 2 สวน ดงน

8.3.1 สวนหวของฟงกชน

8.3.2 สวนฟงกชนหลก

8.3.1 สวนหวของฟงกชน

Page 3: เรื่อง ฟังก์ชัน

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

ชนดของขอมลทสงกลบ ชอฟงกชน(ชนดของขอมล อารกวเมนต 1,

ชนดของขอมล อารกวเมนต 2,

ชนดของขอมล อารกวเมนต 3)

ภาพท 8.1 รปแบบของฟงกชนทสรางขน

จากภาพท 8.1 อธบายรปแบบของฟงกชนทสรางขนไดดงน

ชนดของขอมลทสงกลบ

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

ชอฟงกชน หมายถง ชอทตงขนตามกฎเกณฑการตงชอของภาษาซ

ชนดของขอมล หมายถง ชนดขอมลของโปรแกรมภาษาซ เพอบงบอก

Page 4: เรื่อง ฟังก์ชัน

ชนดของอารกวเมนตแตละอารกวเมนต

อารกวเมนต หมายถง ชนดขอมลของโปรแกรมภาษาซ เพอบงบอกชนดของอารกวเมนตแตละอารกวเมนต อารกวเมนต เปน int ชนดของอารกวเมนตจะตองเปน int ดวย หากมมากกวา 1 อารกวเมนตจะตองคนแตละอารกวเมนตดวยเครองหมายคอมมา (,) หากไมมการรบคาขอมลเขามาใชในฟงกชน จะไมมอารกวเมนตไวคอยรบคา

8.3.2 สวนฟงกชนหลก

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

1 {

2 คำาสงท 1;

3 คำาสงท 2;

4 คำาสงท n;

5 return คาท

Page 5: เรื่อง ฟังก์ชัน

ตองการสงกลบ;

6 }

ภาพท 8.2 รปแบบของสวนฟงกชนหลก

จากภาพท 8.2 อธบายรปแบบของสวนฟงกชนหลกของฟงกชน ไดดงน

บรรทดท 1,2,3,4 หมายถง คำาสงท 1, คำาสงท 2, .....คำาสงท n ซงเปนคำาสงทสงใหฟงกชนทำางาน ซงแตละคำาสงจะตองจบดวยเครองหมายเซมโคลอน (;)

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

ตวอยางการใชฟงกชนทสรางขน มดงน

ตวอยางท 8.1 ฟงกชนแสดงรายชอนกเรยนออกทางจอภาพ

1 void showname() 2 { 3 printf(”Miss Thanawan Kiriya”);

Page 6: เรื่อง ฟังก์ชัน

4 printf(”end of function”); 5 }

จากตวอยางท 8.1 อธบายการทำางานของฟงกชนไดดงน

บรรทดท 1 สวนหวของฟงกชน ประกอบดวย

void หมายถง ไมมการสงคาของฟงกชนกลบ

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

บรรทดท 2 สญลกษณบอกจดเรมตนของฟงกชน

บรรทดท 3 แสดงคำาวา Miss Thanawan Kiriya ออกทางจอภาพ

บรรทดท 4 แสดงคำาวา end of function ออกทางจอภาพ

บรรทดท 5 สญลกษณบอกจดสนสดของฟงกชน

ตวอยางท 8.2 ฟงกชนคำานวณหาผลบวกของเลข 2 จำานวน และสงผลบวกของเลข 2 จำานวน กลบไปยงคำาสงหรอฟงกชนทเรยกใช

1 int summation() 2 { 3 int x = 3, y = 10, sum; 4 sum =

Page 7: เรื่อง ฟังก์ชัน

x+y; 5 return sum; 6 }

จากตวอยางท 8.2 อธบายการทำางานของฟงกชนไดดงน

บรรทดท 1 สวนหวของฟงกชน ประกอบดวย

int หมายถ ง มการสงคาของฟงกชนกลบ โดยขอมลทสงกลบมชนดเปน int

บรรทดท 3 ประกาศตวแปร x,y และ sum มชนดเปน int โดยกำาหนดใหตวแปร x มคาเทากบ 3 และตวแปร y มคาเทากบ 10

บรรทดท 4 นำาคาตวแปร x บวกดวยคาตวแปร y นำาผลลพธเกบไวในตวแปร sum

บรรทดท 5 สงคาตวแปร sum กลบ

ในการเขยนโปรแกรม ซงโปรแกรมนนอาจจะมเฉพาะฟงกชนหลก หรออาจมทงฟงกชนหลกและฟงกชนยอย มกจะมการใชตวแปรทสำาคญ 2 ชนด คอตวแปรแบบโกลบอล (global ) และตวแปรแบบโลคอล (local) ซงตวแปรทง 2 ชนดน มการประกาศตวแปร เพอใชงานแตกตางกน ดงน

8.4 ตวแปรแบบโกลบอล (global) และตวแปรแบบ

Page 8: เรื่อง ฟังก์ชัน

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

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

การใชงานตวแปรแบบโกลบอล (global) และตวแปรแบบโลคอล (local) แสดงดงตวอยางตอไปน

ตวอยางท 8.3 การใชงานตวแปรแบบโกลบอล (global)

1 #include<stdio.h> 2 #include<conio.h> 3 int x = 5, y = 10, sum; 4 void summation(); 5 main() 6 { 7 printf(”in main() \n”); 8 printf(”x = %d ”,x); 9 printf(”y = %d \n”,y); 10 printf(”in function\n”); 11 summation();

Page 9: เรื่อง ฟังก์ชัน

12 } 13 void summation(); 14 { 15 printf(”x = %d ”,x); 16 printf(”y = %d ”,y); 17 sum = x + y; 18 printf(”sum =%d \n”,sum); 19 }

จากตวอยางท 8.3 อธบายการทำางานของโปรแกรมไดดงน

บรรทดท 3 ประกาศตวแปร x, ตวแปร y และตวแปร sum มชนดเปน int เปนตวแปรแบบโกลบอล (global) เนองจากประกาศตวแปรไวในนอกฟงกชน โดยกำาหนดใหตวแปร x มคาเทากบ 5 และตวแปร y มคาเทากบ 10

บรรทดท 4 ประกาศโปรโตไทปของฟงกชน summation()

บรรทดท 5 คำาบงคบ main() บอกใหทราบถงสวนของฟงกชนหลก

บรรทดท 6 บอกจดเรมตนของฟงกชนหลก

บรรทดท 7 แสดงคำาวา in main ออกทางจอภาพ

บรรทดท 8 แสดงคำาวา x = ตามดวยคาตวแปร x โดยตวแปร x มชนดเปน int จงใชคกบ %d

บรรทดท 9 แสดงคำาวา y = ตามดวยคาตวแปร y โดยตวแปร y มชนดเปน int จงใชคกบ %d

Page 10: เรื่อง ฟังก์ชัน

บรรทดท 10 แสดงคำาวา in function ออกทางจอภาพ

บรรทดท 11 เรยกใชฟงกชน summation()

บรรทดท 12 บอกจดสนสดของฟงกชนหลก

บรรทดท 13 สวนหวของฟงกชน summation() โดยฟงกชนนไมมการสงคากลบ จงใชคำาวา void นำาหนา

บรรทดท 14 บอกจดเรมตนของฟงกชน summation()

บรรทดท 15 แสดงคำาวา x = ตามดวยคาตวแปร x โดยตวแปร x มชนดเปน int จงใชคกบ %d

บรรทดท 16 แสดงคำาวา y = ตามดวยคาตวแปร y โดยตวแปร y มชนดเปน int จงใชคกบ %d

บรรทดท 17 นำาคาตวแปร x บวกดวยคาตวแปร y นำาผลลพธเกบไวในตวแปร sum

บรรทดท 18 แสดงคำาวา sum = ตามดวยคาตวแปร sum โดยตวแปร sum มชนดเปน int จงใชคกบ %d

จากตวอยางท 8.3 โปรแกรมจะเรยกใชฟงกชน summation() โดยในฟงกชน summation() ใหแสดงคาตวแปร x ตวแปร y และตวแปร sum โดยตวแปร sum เกดจากผลบวกของตวแปร x และตวแปร y ซงตวแปรทง 3 ตว ไดประกาศไวนอกฟงกชน จงมชนดของตว

แปรเปนแบบโกลบอล (Global) ทำาใหฟงกชน summation() สามารถเรยกใชตวแปร x และตวแปร y ได ทำานองเดยวกนกบฟงกชนหลก (main()) กสามารถเรยกใชตวแปร x และตวแปร y ไดเชนเดยวกน

Page 11: เรื่อง ฟังก์ชัน

จากตวอยางท 8.3 แสดงผลการรนโปรแกรมไดดงน

ภาพท 8.3 ผลการรนโปรแกรมการใชงานตวแปรแบบโกลบอล (global)

จากภาพท 8.3 จะเหนวาคาตวแปร x และคาตวแปร y ทงในฟงกชนหลกและฟงกชนยอยมคาเทากน เนองจากตวแปร x และตวแปร y เปนตวแปรแบบโกลบอล (global)

ตวอยางท 8.4 การใชงานตวแปรแบบโลคอล (local)

1. #include<stdio.h> 2. #include<conio.h> 3. void subprogram(); 4. main()(){ 5. clrscr(); 6. int x = 5, y = 10;

Page 12: เรื่อง ฟังก์ชัน

7. printf(“in main() \n”); 8 printf(“x = %d\n”,x);9. printf(“y = %d\n”,y); 10. subprogram(); 11. getch() 12. } 13. void subprogram() 14. { 15. int x = 5, y = 10; 16. printf(“in function \n”); 17. printf(“x = %d ”,x); 18. printf(“y = %d ”,y); 19. }

จากตวอยางท 8.4 อธบายการทำางานของโปรแกรมไดดงน

บรรทดท 6 ประกาศตวแปร x และตวแปร y มชนดเปน int โดยกำาหนดใหตวแปร x มคาเทากบ 5 และตวแปร y มคาเทากบ 10

บรรทดท 7 แสดงคำาวา in main ออกทางจอภาพ

บรรทดท 8 แสดงคำาวา x = ตามดวยคาตวแปร x โดยตวแปร x มชนดเปน int จงใชคกบ %d

บรรทดท 9 แสดงคำาวา y = ตามดวยคาตวแปร y โดยตวแปร y มชนดเปน int จงใชคกบ %d

Page 13: เรื่อง ฟังก์ชัน

บรรทดท 10 เรยกใชฟงกชน subprogram()

บรรทดท 13 สวนหวของฟงกชน subprogram() โดยฟงกชนนไมมการสงคากลบ จงใชคำาวา void นำาหนา

บรรทดท 15 ประกาศตวแปร x และตวแปร y มชนดเปน int โดยกำาหนดใหตวแปร x มคาเทากบ 5 และตวแปร y มคาเทากบ 10

บรรทดท 16 แสดงคำาวา in function ออกทางจอภาพ

บรรทดท 17 แสดงคำาวา x = ตามดวยคาตวแปร x โดยตวแปร x มชนดเปน int จงใชคกบ %d

บรรทดท 18 แสดงคำาวา y = ตามดวยคาตวแปร y โดยตวแปร y มชนดเปน int จงใชคกบ %d

จากตวอยางท 8.4 แสดงผลการรนโปรแกรมไดดงน

ภาพท 8.4 ผลการรนโปรแกรมการใชงานตวแปรแบบโลคอล (local)

จากภาพท 8.4 จะเหนวาผลการรนโปรแกรมมคาเหมอนกนกบภาพท 8.3 แตโปรแกรมในตวอยางท 8.4 มการประกาศตวแปร x และตว

Page 14: เรื่อง ฟังก์ชัน

แปร y ในฟงกชน main() และฟงกชน subprogram() จากนนกำาหนดคาใหตวแปร x และตวแปร y มคาเทากนทงในฟงกชน main() และฟงกชน subprogram() โดยคาตวแปร x เทากบ 5 และคาตวแปร y เทากบ 10 แตตวแปร x และตวแปร y ทงในฟงกชน main( ) และในฟงกชน subprogram() เปนตวแปรแบบโลคอล (local) เนองจากตวแปร x และตวแปร y ทประกาศในแตละฟงกชน จะเปนทรจกเฉพาะในฟงกชนทประกาศตวแปรนเทานน ไมสามารถนำาไปใชในฟงกชนอนๆ ทไมไดประกาศตวแปรนไวได

Page 15: เรื่อง ฟังก์ชัน

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

ในการเขยนฟงกชนยอยจะมรปแบบเหมอนฟงกชนหลก สวนการวางตำาแหนงของฟงกชนสามารถวางไวเหนอฟงกชน main() หรอวางไวใตฟงกชน main() กได แตถาหากวางไว

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

ตวอยางตอไปนเปนการเขยนโปรแกรมทประกอบไปดวยฟงกชนยอย และการประกาศโปรโตไทปของฟงกชน

1. การเขยนโปรแกรมทประกอบดวยฟงกชน โดยไมประกาศโปรโตไทปของฟงกชน

ตวอยางท 8.5 การเขยนโปรแกรมเพอแสดงชอของนกเรยนออกทางจอภาพ โดยใหแสดง รายชอนกเรยนในสวนของฟงกชน

1. #include<stdio.h> 2. #include<conio.h>

8.5 โปรโตไทปของฟงกชน

Page 16: เรื่อง ฟังก์ชัน

3. void displayname() 4. { 5. printf(“My name is Thanawan Kiriya”);

7. main() 8. { 9. clrscr(); 10. displayname(); 11. getch() 12. }

จากตวอยางท 8.5 อธบายการทำางานของโปรแกรมไดดงน

บรรทดท 3 สวนหวของฟงกชน displayname() โดยฟงกชนนไมมการสงคากลบ จงใชคำาวา void นำาหนา

บรรทดท 5 แสดงคำาวา My name is Thanawan Kiriya ออกทางจอภาพ

บรรทดท 7 คำาบงคบ main() บอกใหทราบถงสวนของฟงกชนหลก

บรรทดท 10 เรยกใชฟงกชน displayname()

จากตวอยางท 8.5 แสดงผลการรนโปรแกรมไดดงน

Page 17: เรื่อง ฟังก์ชัน

ภาพท 8.5 ผลการรนโปรแกรมเพอแสดงชอของนกเรยนออกทางจอภาพ โดยใหแสดงรายชอนกเรยนในสวนของฟงกชน

จากโปรแกรมท 8.5 จะเหนวาในการเขยนโปรแกรมทมฟงกชนยอยดงกลาว มการประกาศฟงกชน displayname() ไวเหนอฟงกชน main() ดงนนจงไมจำาเปนตองประกาศโปรโตไทปของฟงกชน เพอใหโปรแกรมรบทราบ

2. การเขยนโปรแกรมทประกอบดวยฟงกชน โดยมการประกาศโปรโตไทปของฟงกชน

ตวอยางท 8.6 การเขยนโปรแกรมเพอแสดงชอของนกเรยนออกทางจอภาพ โดยใหแสดง รายชอนกเรยนในสวนของฟงกชน

1. #include<stdio.h> 2. #include<conio.h>

Page 18: เรื่อง ฟังก์ชัน

3. void displayname(); 4. main() 5. { 6. clrscr(); 7. displayname(); 8. getch() 9. } 10. void displayname() 11. { 12. printf(“My name is Thanawan Kiriya”); 13. }

จากตวอยางท 8.6 อธบายการทำางานของโปรแกรมไดดงน

บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน displayname()

บรรทดท 7 เรยกใชฟงกชน displayname()

บรรทดท 10 สวนหวของฟงกชน displayname() โดยฟงกชนนไมมการสงคากลบ จงใชคำาวา void นำาหนา

บรรทดท 12 แสดงคำาวา My name is Thanawan Kiriya ออกทางจอภาพ

จากตวอยางท 8.6 แสดงผลการรนโปรแกรมไดดงน

Page 19: เรื่อง ฟังก์ชัน

ภาพท 8.6 ผลการรนโปรแกรมเพอแสดงชอของนกเรยนออกทางจอภาพ โดยใหแสดงรายชอนกเรยนในสวนของฟงกชน

จากภาพท 8.6 จะเหนวาผลการรนโปรแกรมของตวอยางท 8.6 เหมอนผลการรนโปรแกรมในตวอยางท 8.5 แตการเขยนโปรแกรมในตวอยางท 8.6 เปนการเขยนโปรแกรมทประกอบดวยฟงกชน displayname() และมการประกาศฟงกชนดงกลาวไวใตฟงกชน main() ดงนน จงจำาเปนตองประกาศโปรโตไทปของฟงกชน displayname() ไวเหนอฟงกชน main() เพอใหโปรแกรมรบทราบ

ในการสงผานคาระหวางฟงกชน ไมวาจะเปนการสงผานคาระหวางฟงกชนหลกไปยงฟงกชนยอยหรอสงผานจากฟงกชนยอยไปยงฟงกชนยอย มรปแบบการสงผานคาระหวางฟงกชน 4 รปแบบ คอ

8.6.1 ฟงกชนทไมมการสงผานคาไปยงฟงกชน

8.6 รปแบบการสงผานคาระหวางฟงกชน

Page 20: เรื่อง ฟังก์ชัน

8.6.2 ฟงกชนทมการสงผานคาไปยงฟงกชนทางเดยว 8.6.3 ฟงกชนทมการสงคากลบทางเดยว 8.6.4 ฟงกชนทมการสงผานคาไปและกลบ

8.6.1 ฟงกชนทไมมการสงผานคาไปยงฟงกชน ฟงกชนทไมมการสงผานคาไปยงฟงกชน หมายถง การเขยน

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

ตวอยางท 8.7 การเขยนโปรแกรมเพอคำานวณหาพนทสามเหลยม โดยใหทำาการคำานวณหาพนทสามเหลยมในฟงกชน

1. #include<stdio.h> 2. #include<conio.h> 3. void trianglearea(); 4. main() 5. { 6. clrscr(); 7. trianglearea(); 8. getch(); 9. } 10. void trianglearea() 11. { 12. int base, high; 13. float area; 14. printf(“enter triangle’s base : ”); 15. scanf(“%d”,&base); 16. printf(“enter triangle’s high : ”); 17. scanf(“%d”,&high); 18. area = 0.5*base*high; 19. printf(“triangle area = %.2f”,

area); 20. }

จากตวอยางท 8.7 อธบายการทำางานของโปรแกรมไดดงน

Page 21: เรื่อง ฟังก์ชัน

บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน trianglearea() บรรทดท 7 เรยกใชงานฟงกชน trianglearea() บรรทดท 10 สวนหวของฟงกชน trianglearea() โดย

ฟงกชนนไมมการสงคากลบ จงใชคำาวา void นำาหนา บรรทดท 12 ประกาศตวแปร base และตวแปร high มชนด

เปน int บรรทดท 13 ประกาศตวแปร area มชนดเปน float บรรทดท 14 แสดงคำาวา enter triangle’s base : ออก

ทางจอภาพ บรรทดท 15 รบคาตวแปร base ผานทางแปนพมพ โดย

ตวแปร base มชนดเปน int จงใชคกบ %d บรรทดท 16 แสดงคำาวา enter triangle’s high : ออก

ทางจอภาพ บรรทดท 17 รบคาตวแปร high ผานทางแปนพมพ โดย

ตวแปร high มชนดเปน int จงใชคกบ %d บรรทดท 18 คำานวณหาพนทสามเหลยม โดยคำานวณจาก

0.5*base*high นำาผลลพธเกบไวในตวแปร area บรรทดท 19 แสดงคำาวา triangle area = ตามดวยคาตว

แปร area โดยตวแปร area มชนดเปน float จงใชคกบ %d โดยใหแสดงทศนยม 2 ตำาแหนง

จากตวอยางท 8.7 แสดงผลการรนโปรแกรมไดดงน

Page 22: เรื่อง ฟังก์ชัน

ภาพท 8.7 ผลการรนโปรแกรมเพอคำานวณหาพนทสามเหลยม โดยใหทำาการคำานวณหาพนทสามเหลยมในฟงกชน

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

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

8.6.2 ฟงกชนทมการสงผานคาไปยงฟงกชนทางเดยว ฟงกชนทมการสงผานคาไปยงฟงกชนทางเดยว หมายถง

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

1. #include<stdio.h> 2. #include<conio.h> 3. void trianglearea(float b, float h); 4. main() 5. { 6. clrscr(); 7. float base, high; 8. printf(“enter base : ”);

Page 23: เรื่อง ฟังก์ชัน

9. scanf(“%f”,&base); 10. printf(“enter high : ”); 11. scanf(“%f”,&high); 12. trianglearea(base, high); 13. getch(); 14. } 15. void trianglearea(float b, float h) 16. { 17. float area; 18. area = 0.5*b*h; 19. printf(“area of triangle = %.2f”,area); 20. }

จากตวอยางท 8.8 อธบายการทำางานของโปรแกรมไดดงน บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน trianglearea()

โดยมอารกวเมนตททำาหนาทรบคาขอมล 2 คา คอ b และ h ซงมชนดเปน float

บรรทดท 7 ประกาศตวแปร base และ high มชนดเปน float

บรรทดท 8 แสดงคำาวา enter base : ออกทางจอภาพ

Page 24: เรื่อง ฟังก์ชัน

บรรทดท 9 รบคาตวแปร base ผานทางแปนพมพ โดยตวแปร base มชนดเปน float จงใชคกบ %f

บรรทดท 10 แสดงคำาวา enter high : ออกทางจอภาพ บรรทดท 11 รบคาตวแปร high ผานทางแปนพมพ โดย

ตวแปร high มชนดเปน float จงใชคกบ %f บรรทดท 12 เรยกใชฟงกชน trianglearea() โดยสงคาตว

แปร base และ high ไปยงฟงกชน trianglearea() บรรทดท 15 สวนหวของฟงกชน trianglearea() โดย

ฟงกชนนมอารกวเมนตททำาหนาทรบคา 2 คา คอ b และ h มชนดขอมลเปน float โดยอารกวเมนต b รบคาจากตวแปร base สวนอารกวเมนต h รบคาจากตวแปร high

บรรทดท 17 ประกาศตวแปร area ในฟงกชน trianglearea() มชนดเปน float

บรรทดท 18 คำานวณหาพนทสามเหลยม โดยคำานวณจาก 0 .5*base*high ผลลพธเกบไวในตวแปร area

บรรทดท 19 แสดงคำาวา area of triangle = ตามดวยคาตวแปร area โดยตวแปร area มชนดเปน float จงใชคกบ %f โดยใหแสดงทศนยม 2 ตำาแหนง

จากตวอยางท 8.8 แสดงผลการรนโปรแกรมไดดงน

ภาพท 8.8 ผลการรนโปรแกรมเพอรบคาความยาวของฐานและความสงของสามเหลยม ในฟงกชนหลก จากนนสงคาความยาวของฐานและความสงไปคำานวณหาพนทสามเหลยมในฟงกชน

Page 25: เรื่อง ฟังก์ชัน

จากโปรแกรมท 8.8 จะเหนวา เมอมการเรยกใชฟงกชน trianglearea() ในบรรทดท 12 จะมการสงคาตวแปร base และ high ซงแทนความยาวของฐานและความสงของสามเหลยม ไปยงฟงกชน trianglearea() โดยอารกวเมนต b และ h ทำาหนาทรบคาตวแปรจาก base และ high ตามลำาดบและฟงกชน trianglearea() ไมมการสงคาของฟงกชนกลบ จงใชคำาวา void นำาหนาฟงกชน

8.6.3 ฟงกชนทมการสงคากลบทางเดยวฟงกชนทมการสงคากลบทางเดยว หมายถง การเรยกใช

ฟงกชนยอย โดยไมมการสงผานคาจากฟงกชนทเรยกใชไปยงฟงกชนยอยแตเมอฟงกชนยอยทำาการประมวลผลขอมลเรยบรอยแลว จะทำาการสงผานคาฟงกชนยอยกลบไปยงฟงกชนทเรยกใชตอไปนเปนตวอยางการเรยกใชฟงกชนทมการสงคากลบทางเดยว

ตวอยางท 8.9 การเขยนโปรแกรมเพอคำานวณผลบวกของเลขคตงแต 1-10 โดยทำาการ คำานวณในฟงกชน จากนนสงผลบวกทไดจากการคำานวณกลบมาแสดงผล ในฟงกชนหลกหรอฟงกชนทเรยกใชงาน

1. #include<stdio.h> 2. #include<conio.h> 3. int summation(); 4. main() 5. { 6. clrscr(); 7. int sum; 8. sum = summation(); 9. printf(“sum of even no from 1-10 = %d”,

sum); 10. getch(); 11. } 12. int summation() 13. { 14. int i, tot = 0; 15. i = 2;

Page 26: เรื่อง ฟังก์ชัน

16. while(i<=10) 17. { 18. tot = tot + i; 19. i += 2; 20. } 21. return tot; 22. }

จากตวอยางท 8.9 อธบายการทำางานของโปรแกรมไดดงน บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน summation()

โดยฟงกชนสงคากลบมชนดเปน int บรรทดท 7 ประกาศตวแปร sum มชนดเปน int บรรทดท 8 เรยกใชฟงกชน summation() และนำาผลลพธทได

จากการเรยกใชฟงกชน เกบไวในตวแปร sum บรรทดท 9 แสดงคำาวา sum of even no from 1-10

= ตามดวยคาตวแปร sum โดยตวแปร sum มชนดเปน int จงใชคกบ %d

บรรทดท 12 สวนหวของฟงกชน summation() โดยฟงกชนไมมการรบคาอารกวเมนตเขามาในฟงกชน แตมการสงคาฟงกชนกลบ โดยสงคาฟงกชนกลบมชนดเปน int

บรรทดท 14 ประกาศตวแปร I และตวแปร tot มชนดเปน int ซงเปนตวแปรทถกใชในฟงกชน summation() และกำาหนดใหตวแปร tot มคาเทากบ 0

บรรทดท 15 กำาหนดใหตวแปร i มคาเทากบ 2 บรรทดท 16 วนรอบทำาซำาคำาสงในบรรทดท 18-19 ตราบใดท

คาตวแปร I นอยกวาหรอเทากบ 10 หากคาตวแปร I มคามากกวา 10 ใหทำาคำาสงในบรรทดท 21

บรรทดท 18 คำานวณคาตวแปร tot โดยคำานวณจากการนำาคาตวแปร tot บวกดวยคาตวแปร i นำาผลลพธเกบไวในตวแปร tot

บรรทดท 19 เพมคาตวแปร i อก 2 บรรทดท 21 สงคาตวแปร tot กลบไปยงคำาสงทเรยกใช

ฟงกชนโดยใชคำาวา return ตามดวยคาตวแปร tot

Page 27: เรื่อง ฟังก์ชัน

จากตวอยางท 8.9 แสดงผลการรนโปรแกรมไดดงน

ภาพท 8.9 ผลการรนโปรแกรมเพอคำานวณผลบวกของเลขคตงแต 1-10 โดยทำาการคำานวณใน ฟงกชน จากนนสงผลบวกทไดจากการคำานวณกลบมาแสดงผลในฟงกชนหลกหรอฟงกชนทเรยกใชงาน

8.6.4 ฟงกชนทมการสงผานคาไปและกลบฟงกชนทมการสงผานคาไปและกลบ หมายถง การเรยกใช

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

ตวอยางท 8.10 การเขยนโปรแกรมเพอหาคาเลขทมากทสดของเลขสองจำานวน ทรบผานทางแปนพมพในฟงกชนหลก และนำาเลขทง 2 จำานวนสงไปหาคาทมากทสดในฟงกชน จากนนสงผลลพธทไดกลบมาแสดงคาทมากทสดในฟงกชนหลก

1. #include<stdio.h> 2. #include<conio.h> 3. int maximum(int n1, int n2); 4. main() 5. {

Page 28: เรื่อง ฟังก์ชัน

. int num1, num2, max; 8. printf(“enter number1 : ”); 9. scanf(“%d”,&num1); 10. printf(“enter number2 : ”); 11. scanf(“%d”,&num2); 12. max = maximum(num1, num2); 13. printf(“maximum number is %d”,

max); 14. getch(); 15. } 16. int maximum(int n1, int n2) 17. { 18. int maxnumber; 19. if(n1 > n2) 20. maxnumber = n1; 21. else 22. maxnumber = n2; 23. return maxnumber; 24. }

จากตวอยางท 8.10 อธบายการทำางานของโปรแกรมไดดงน บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน maximum()

โดยฟงกชนมอารกวเมนต 2 ตวคอ n1 และ n2 ทง n1 และ n2 มชนดเปน int และมการสงคาของฟงกชนกลบมชนดเปน int

บรรทดท 7 ประกาศตวแปร num1, num2 และ max มชนดเปน int

บรรทดท 8 แสดงคำาวา enter number1 : ออกทางจอภาพ บรรทดท 9 รบคาตวแปร num1 ผานทางแปนพมพ โดย

ตวแปร num1 มชนดเปน int จงใชคกบ %d บรรทดท 10 แสดงคำาวา enter number2 : ออกทาง

จอภาพ

บรรทดท 11 รบคาตวแป ร num2 ผานทางแปนพมพ โดยตวแปร num2 มชนดเปน int จงใชคกบ %d

Page 29: เรื่อง ฟังก์ชัน

บรรทดท 12 เรยกใชฟงกชน maximum() โดยสงคาตวแปร num1 และคาตวแปร num2 ไปหาคาสงสด และนำาผลลพธทไดจากการเรยกใชฟงกชน เกบไวในตวแปร max

บรรทดท 13 แสดงคำาวา maximum number is ตามดวยคาตวแปร max โดยตวแปร max มชนดเปน int จงใชคกบ %d

บรรทดท 16 สวนหวของฟงกชน maximum() โดยมอารกวเมนตททำาหนาทรบคา 2 ตว คอ n1 และ n2 มชนดขอมลเปน int โดยอารกวเมนต n1 รบคาจากตวแป ร num1 อารกวเมนต n2 รบคาจากตวแปร num2 และฟงกชนนมการสงคาของฟงกชนกลบมชนดเปน int

บรรทดท 18 ประกาศตวแปร maxnumber มชนดเปน int บรรทดท 19 ทดสอบคาตวแปร n1 และ n2 หากคาตวแปร

n1 มากวาคาตวแปร n2 จรง ใหทำาคำาสงในบรรทดท 20 มฉะนนแลวใหทำาคำาสงในบรรทดท 22

บรรทดท 20 กำาหนดใหตวแปร maxnumber เกบคาตวแปร n1

บรรทดท 22 กำาหนดใหตวแปร maxnumber เกบคาตวแปร n2

บรรทดท 23 สงคาตวแปร maxnumber กลบไปยงคำาสงทเรยกใชฟงกชนโดยใช return ตามดวยคาตวแปร maxnumber

จากตวอยางท 8.10 แสดงผลการรนโปรแกรมไดดงน

Page 30: เรื่อง ฟังก์ชัน

ภาพท 8.10 ผลการรนโปรแกรมเพอหาคาเลขทมากทสดของเลขสองจำานวน ทรบผานทางแปนพมพในฟงกชนหลก และนำาเลขทง 2 จำานวนสงไปหาคาทมากทสดใน ฟงกชน จากนนสงผลลพธทไดกลบมาแสดง

Page 31: เรื่อง ฟังก์ชัน

จากโปรแกรมท 8.10 จะเหนวาโปรแกรมมการเรยกใชฟงกชน maximum() ในฟงกชนหลกโดยสงคาตวแปร num1 และตวแปร num2 ไปใหฟงกชน จากนนฟงกชน maximum() หาคาทมากทสด ของเลข 2 จำานวน และสงคาของเลขทมากทสด ซงเกบในตวแปร maxnumber กลบไปยงคำาสงทเรยกใชฟงกชน โดยใช return นำาหนา และทสวนหวฟงกชนทมการสงคากลบ ตองใช int นำาหนา เนองจากฟงกชนสงคากลบมชนดเปน int

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

ยงฟงกชน แตไมมการสงคาของฟงกชนกลบ และการเรยกใชฟงกชนโดยมการสงผานคาตวแปรไปยงฟงกชน และมการสงคาของฟงกชนกลบ ตอไปนเปนการประยกตใชฟงกชนทสรางขนเพอใชในการเขยนโปรแกรม แสดงตวอยางดงตอไปน

ตวอยางท 8.11 การเขยนโปรแกรมเพอหาคาเฉลยคะแนนของนกเรยน 10 คน โดยสง คะแนนของนกเรยนทง 10 คน ไปคำานวณหาคาเฉลยในฟงกชนและแสดง คาเฉลยคะแนนของนกเรยนทง 10 คนในฟงกชน

1. #include<stdio.h> 2. #include<conio.h> 3. average(float score[]); 4. main(){ 5. clrscr();

8.7 การประยกตใชฟงกชนทสรางขนใน

Page 32: เรื่อง ฟังก์ชัน

6. float score[10]; 7. int index; 8. for(index = 0; index < 10; index++) 9. { 10. printf(“enter student score :”);

11. scanf(“%f”, &score[index]); 12. } 13. average(score); 14. getch(); 15. } 16. average(float score[]) 17. { 18. int i ; 19. float sum = 0, avg_score; 20. for(i = 0; i < 10; i++){ 21. sum = sum + score[i]; 22. } 23. avg_score = sum/10; 24. printf(“average score = %.2f”,

avg_score); 25. }

จากตวอยางท 8.11 อธบายการทำางานของโปรแกรมไดดงน บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน average โดย

ฟงกชนมอารกวเมนต 1 ตว คอ score โดย score มชนดเปนอารเรยของ float

บรรทดท 7 ประกาศตวแปร score มชนดเปนอารเรยขนาด 10 ชอง โดยแตละชองเกบขอมลมชนดเปน float

บรรทดท 8 ประกาศตวแปร index มชนดเปน int บรรทดท 9 วนรอบทำาซำาคำาสงในบรรทดท 11-12 ตราบใดท

คาตวแปร index มคาตงแต 0 ถง 9 โดยแตละรอบเพมคาตวแปร index อก 1

บรรทดท 12 รบคะแนนผานทางแปนพมพ เกบไวในตวแปร score ณ ตำาแหนง index

Page 33: เรื่อง ฟังก์ชัน

บรรทดท 14 เรยกใชฟงกชน average โดยสงคาตวแปรอารเรย score ไปใชในฟงกชน

บรรทดท 17 สวนหวของฟงกชน average โดยมอารกวเมนตททำาหนาทรบคา 1 ตว คอ score มชนดขอมลเปนอารเรยของ float

บรรทดท 19 ประกาศตวแปร I มชนดเปน int

Page 34: เรื่อง ฟังก์ชัน

บรรทดท 20 ประกาศตวแปร sum และ avg_score มชนดขอมลเปน float โดยใหตวแปร sum มคาเทากบ 0

บรรทดท 21 วนรอบทำาซำาคำาสงในบรรทดท 23 ตราบใดทคาตวแปร i มคาตงแต 0 ถง 9 โดยแตละรอบเพมคาตวแปร I อก 1

บรรทดท 23 คำานวณคาตวแปร sum โดยคำานวณจากการนำาคาตวแปร sum บวกดวยคาตวแปรอารเรย score ณ ตำาแหนง i นำาผลลพธเกบไวในตวแปร sum

บรรทดท 25 คำานวณคาเฉลยของคะแนน โดยคำานวณจากการนำาคาตวแปร sum หารดวย 10 นำาผลลพธเกบไวในตวแปร avg_score

บรรทดท 26 แสดงคำาวา average score = ตามดวยคาตวแปร avg_score โดยคาตวแปร avg_score มชนดเปน float จงใชคกบ %f โดยใหแสดงทศนยม 2 ตำาแหนง

จากตวอยางท 8.11 แสดงผลการรนโปรแกรมไดดงน

ภาพท 8.11 ผลการรนโปรแกรมเพอหาคาเฉลยคะแนนของนกเรยน 10 คน โดยสงคะแนนของนกเรยนทง 10 ค น ไปคำานวณหาคาเฉลยในฟงกชนและแสดง คาเฉลยคะแนนของนกเรยนทง 10 คนในฟงกชน

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

1. #include<stdio.h> 2. #include<conio.h> 3. int findfact(int n);

Page 35: เรื่อง ฟังก์ชัน

4. main()() 5. { 6. int no, factorial; 7. printf(“enter number for find factorial : ”); 8. scanf(“%d”, &no); 9. factorial = findfact(no); 10. printf(“factorial = %d”, factorial ); 11. getch(); 12. }

21. int findfact(int n) 22 { 23 int index, fact = 1; 24 for(index = 1; index < n; index++) 25 { 26 fact = fact*index; 27 } 28 return fact; 29 }

จากตวอยางท 8.12 อธบายการทำางานของโปรแกรมไดดงน บรรทดท 3 ประกาศโปรโตไทปใหกบฟงกชน findfact() โดยฟงกชนม

อารกวเมนต 1 ตว คอ n โดย n มชนดเปน int และมการสงคาของฟงกชนกลบมชนดเปน int

บรรทดท 6 ประกาศตวแปร no และ factorial มชนดเปน int บรรทดท 7 แสดงคำาวา enter number for find factorial :

ออกทางจอภาพ บรรทดท 8 รบคาตวแปร no ผานทางแปนพมพ โดยตวแปร no มชนดเปน int จงใชคกบ %

บรรทดท 9 เรยกใชฟงกชน findfact() โดยสงคาตวแปร no ไปใหฟงกชนนำาผลลพธทไดจากการเรยกใชฟงกชน เกบไวในตวแปร factorial

บรรทดท 10 แสดงคำาวา factorial = ตามดวยคาตวแปร factorial โดยคาตวแปร factorial มชนดเปน int จงใชคกบ %d

บรรทดท 13 สวนหวของฟงกชน findfact() โดยฟงกชนมอารกวเมนต 1 ตว คอ n มชนดขอมลเปน int ทำาหนาทรบคาจากตวแปร no ฟงกชนมการสงคาของฟงกชนกลบมชนดเปน int

Page 36: เรื่อง ฟังก์ชัน

บรรทดท 15 ประกาศตวแปร index และตวแปร fact มชนดเปน int โดยใหตวแปร fact มคาเทากบ 1

บรรทดท 16 วนรอบทำาซำาคำาสงในบรรทดท 18 ตราบใดทคาตวแปร index มคานอยกวาหรอเทากบ 10 โดยแตละรอบใหเพมคาตวแปร index อก 1

บรรทดท 18 คำานวณคาแฟคทอเรยล โดยนำาคาตวแปร fact คณดวยคาตวแปร index นำาผลลพธเกบไวในตวแปร fact

บรรทดท 20 สงคาตวแปร fact กลบไปยงคำาสงทเรยกใชฟงกชน โดยใช return ตามดวยคาตวแปร factorial

จากตวอยางท 8.12 แสดงผลการรนโปรแกรมไดดงน

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

Page 37: เรื่อง ฟังก์ชัน