Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

009

Published by pond_moku, 2022-01-30 17:23:17

Description: 009

Search

Read the Text Version

1   n อธบิ ายหลกั การทาํ งานของฟง กช ันได o ประกาศฟงกชนั แบบตา ง ๆ ได p เขียนโปรแกรมโดยใชฟ ง กช ันแบบตา ง ๆ ได q เขียนโปรแกรมโดยใชฟ ง กช นั รวมกับอารเ รยได r ประยุกตใชใ นชีวิตประจาํ วนั ได

2 ⌫  การเรียกใชงานฟงกชันจะตองมีการประกาศคากอนการ เรียกใชง าน มรี ปู แบบดงั นี้ รปู แบบ ชนดิ ฟง กช ัน ชอื่ ฟงกช ัน( ); ตัวอยาง void star( ); ความหมาย ประกาศฟง กช นั แบบไมมีการสงผานคาพารา มิเตอรช่อื star ในกรณที ี่ชนดิ ฟง กช ันเปน void หมายถงึ ไมมีการสงคา พารามเิ ตอรไ ปกลบั

3 ตวั อยา งการใชงาน void star(); void main() /* ประกาศฟงกช ัน main */ { star(); /* เรยี กใชฟ งกช ัน star */ } void star() /* ฟงกช นั star */ { printf(\"*************************\\n\"); }

4 ตัวอยา งโปรแกรม ฟงกช นั แบบไมม กี ารสง ผานคาพารามเิ ตอร #include<stdio.h> #include<conio.h> void star(); void main() { clrscr(); star(); star(); star(); getch(); } void star() { printf(\"*************************\\n\"); } การทาํ งานของโปรแกรม เรม่ิ จากประกาศฟงกชนั star แบบไมมีการสง ผานคาพารามเิ ตอรไ วเ หนอื ฟง กชนั main หลงั จากนัน้ มเี รยี กใชฟงกชนั star 3 ครงั้ ผลท่ไี ดก ค็ อื จะมกี ารแสดงผลของดอกจันทจํานวน 3 บรรทดั ตามที่ไดเ ขียนไวใ นฟงกช ัน star ผลการรันโปรแกรม *************************** *************************** ***************************

5 ⌫ ฟง กช นั แบบสง ผา นคา พารามเิ ตอรทางเดยี ว คอื การสงคาสงคา พารามเิ ตอรใหแ กฟงกช นั โดยไมมกี ารสง คา กลบั มคี าํ วา void นาํ หนา ช่ือฟงกช ัน ขอ ความภายในวงเล็บประกอบดวยตวั แปร และชนดิ ตัวแปร การประกาศฟงกชันมรี ปู แบบดังน้คี อื รูปแบบ ชนดิ ฟง กช นั ชอ่ื ฟงกชนั (ชนดิ ตัวแปร,ตัวแปร1,…,ตวั แปรn ); ตวั อยาง void sut_kun(int n); ความหมาย ประกาศฟง กช นั แบบสงผา นคา พารามเิ ตอรทางเดียวช่อื sut_kun ชนิดตวั แปรแบบเลขจาํ นวนเตม็ ช่อื ตัวแปร n) ตวั อยา งการใชงาน void sut_kun(int n); /* ฟงกช นั แบบสงผา นคา พารามิเตอรทางเดียวช่ือ sut_kun */ void main(void) /* ประกาศฟงกชัน main */ { int num; printf(\"Enter Number : \"); scanf(\"%d\",&num); printf(\"================\\n\"); sut_kun(num); /* เรียกใชฟ งกช ัน sut_kun โดยสง พารามิเตอร num getch(); เขา ไปในฟงกชัน void sut_kun(int n) */ } void sut_kun(int n) { int i; for(i=1;i<=12;i++) printf(\"%2d X %2d = %2d \\n\",n,i,n*i);

6 } ตวั อยางโปรแกรม ฟง กช ันแบบสง ผา นคา พารามเิ ตอรทางเดียว #include<stdio.h> #include<conio.h> void sut_kun(int n); void main(void) { int num; clrscr(); printf(\"Enter Number : \"); scanf(\"%d\",&num); printf(\"================\\n\"); sut_kun(num); getch(); } void sut_kun(int n) { int i; for(i=1;i<=12;i++) printf(\"%2d X %2d = %2d \\n\",n,i,n*i); } การทาํ งานของโปรแกรม เรม่ิ จากประกาศฟงกชัน void sut_kun(int n) แบบสง ผานคาพารามเิ ตอรท างเดยี วไวเหนอื ฟงกชนั main แลว ใหป อนตัวเลขเพื่อนาํ ไปเกบ็ ไวยงั ตัวแปร num เพอ่ื แสดงเปนแมสูตรคูณ หลงั จากนัน้ มีเรียกใชฟ ง กช นั void sut_kun(num) โดยสงพารามเิ ตอร num เขาไปในฟงกชัน void sut_kun(int n) ผลทไี่ ดก็คือจะมกี ารแสดงผลสตู รคูณตามตัวเลขแมส ตู รคูณทป่ี อ นเขาไปและนําไป เกบ็ ไวย ังตวั แปร num

7 ผลการรนั โปรแกรม Enter Number : 5 ==================== 5X1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5 X 7 = 35 5 X 8 = 40 5 X 9 = 45 5 X 10 = 50 5 X 11 = 50 5 X 12 = 60    ฟงกชันแบบสงผานคาพารามิเตอรไปกลับเปนการสงคาพารามิเตอรไปกลับระหวาง ฟง กช นั การประกาศฟง กช นั เริ่มจากประกาศชนิดตวั แปรนําหนาช่อื ฟงกชนั แลว ตามดว ยชนิดตวั แปร ชือ่ ตวั แปร การประกาศฟงกชันมรี ูปแบบดังน้ีคือ รปู แบบ ชนดิ ตวั แปร ช่อื ฟงกช ัน(ชนิดตัวแปร,ตวั แปร1,…,ตวั แปรn ); ตวั อยา ง char display(char a,char b); ความหมาย ประกาศฟงกช ันแบบสงผา นคา พารามเิ ตอรไปกลบั ชือ่ display ชนิดตวั แปรแบบ char ชอ่ื ตวั แปร a และ b)

8 ตวั อยางโปรแกรม ฟง กช นั แบบสงผา นคา พารามเิ ตอรไปกลับ #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<dos.h> char display(char a,char b); /* ประกาศฟง กช ัน display เปนตัวแปรชนดิ char คอื a และ b*/ void main(void) { clrscr(); display(37,13); /* เรยี กใชฟงกช นั display และทําการสง คา 37,13 ใหกับฟงกชัน getch(); char display(char a,char b) */ } char display(char a,char b) /* ฟงกช นั display จะรบั คา 37 เก็บไวท ่ี a และ 13 เกบ็ ไวท ่ี b */ { do{ gotoxy(a,b); textcolor(random(15)); cprintf(\"Bangkok\"); /* แสดงขอความ Bangkok เปน สตี า ง ๆ */ delay(500); }while(!kbhit()); } การทํางานของโปรแกรม เรม่ิ จากประกาศฟง กชนั void display(char a,char b); ใหต วั แปร a และ b เปน ตวั รบั คา ภายในฟงกชนั main( ) จะมกี ารเรยี กใชฟง กชนั display(37,13); และทาํ การสง คา 37,13 ใหกบั ฟงกชันchar display(char a,char b) โดยใหต ัวแปร a เกบ็ คา 37 ตัวแปร b เก็บคา 13 แลว ใชฟ งกชนั do while ในการกาํ หนดการวนรอบ ใชต าํ แหนงแถวและคอลัมนจ ากทส่ี งมาจากฟง กชัน main( ) แลว กําหนดสีตัวอักษรตามคาทีส่ ุมโดยแสดงขอ ความ Bangkok เปนสีตา ง ๆ โดยถาไมม กี ารกดคีย ใด ๆ ก็จะแสดงขอ ความสลับสีไปเรอื่ ย ๆ

9  ตวั แปรแบบโกลบอล(Global) คอื ตวั แปรทป่ี ระกาศคาแลว ใชไดท ุกฟง กชันในโปรแกรม นนั้ ๆ ในการประกาศคาจะตองประกาศกอนฟงกชัน main( ) ตวั แปรประเภทนจ้ี ะจองเนื้อท่ีใน หนว ยความจําตลอดเวลาในขณะทโี่ ปรแกรมกาํ ลงั ทํางาน ตวั แปรแบบโลคอล(Local) คอื ตวั แปรที่ประกาศคา แลวใชไ ดเฉพาะฟง กช นั ที่ประกาศเทา นน้ั จะนาํ ไปอางเพือ่ ใชง านในฟงกชันอื่นมไิ ด ในการประกาศคา จะมีการประกาศหลงั ฟง กช ัน main( ) และมกี ารจองเน้ือที่ในหนวยความจาํ เฉพาะฟง กช ันทถ่ี ูกเรยี กใชง าน ตวั อยางโปรแกรม การใชตวั แปรแบบโกลบอลและโลคอลรวมกนั #include<stdio.h> #include<conio.h> int num; /* ประกาศคา ตัวแปรแบบโกลบอลชื่อตวั แปร num */ void global_local(); /* ประกาศฟงกช นั global_local */ void main() { printf(\"Enter First number : \"); scanf(\"%d\",&num); printf(\"Main program Before calling Number = %d\\n\",num); global_local(); /* เรียกใชฟงกช ัน global_local */ printf(\"Main program After calling Number = %d\\n\",num); getch(); } void global_local() { printf(\"Enter Second number : \"); scanf(\"%d\",&num); /* ใชตัวแปร num ทปี่ ระกาศคาเปน โกลบอล */ printf(\"Sub program\\n\"); printf(\"Second number = %d\\n\",num); }

10 การทาํ งานของโปรแกรม เรมิ่ จากประกาศคา ตัวแปรแบบโกลบอลช่อื ตัวแปร num เปน ชนดิ เลขจํานวนเต็ม แลว ทาํ การประกาศฟง กชันชอ่ื global_local ประกาศฟงกช นั main( ) ในสว นของฟง กชัน main( ) ให ปอ นคา ตัวเลขแลวนําไปเกบ็ ไวย งั ตัวแปร num แลวทําการแสดงผล ตวั แปร num กอนท่จี ะมกี าร เรยี กใชง านฟง กช ัน global_local ในสวนของฟง กช ัน global_local จะใหป อนคา ตัวเลข แลวเกบ็ ไว ยงั ตัวแปร num โดยใชตวั แปร num รว มกับฟงกชัน main( ) จากนัน้ ทาํ การแสดงขอความ Sub program แลว แสดงตวั เลขที่ปอ นไปครัง้ ที่ 2 ขนั้ ตอนสุดทา ยจะกลบั ไปทาํ งานในฟง กชนั main( ) ตอ ไป คอื แสดงตัวเลขทเี่ ปล่ยี นไป น่ันหมายความวา ตัวแปรทปี่ ระกาศคา เปน ตัวแปรแบบโกลบอล จะสามารถเรยี กใชงานไดใ นทกุ ฟง กชัน ผลการรันโปรแกรม Enter First number : 20 Main program Before calling Number = 20 Enter Second number : 100 Sub program Second number = 100 Main program After calling Number = 100    การใชงานฟง กชันรว มกับอารเ รยเปนการสง ผานคา ขอ มูลของตัวแปรแบบอารเ รยเขาไปยัง ฟง กชัน โดยจะสง เฉพาะที่อยู(address) หนว ยความจําของอารเรยเ ทานน้ั เมอื่ เรยี กฟง กช ันโดยมีช่ือ อารเ รยจ ะเปน การผา นคา พอยนเ ตอรข องตวั แปรอารเรยตวั แรกไปยังฟงกช ัน แสดงวาภายใน ฟง กช นั จะตอ งมพี อยนเ ตอรสําหรับรบั ตาํ แหนงของตวั แปรแบบอารเ รยด ว ย

11 ตวั อยางโปรแกรม การใชฟงกช นั รว มกบั อารเรย #include<stdio.h> #include<conio.h> void func_array(int x[9]); int i; void main(void) { clrscr(); int num[9]; for(i=0;i<=9;++i) num[i] = i; func_array(num); getch(); } void func_array(int x[9]) { for(i=0;i<=9;++i) printf(\"Number[%d] = %d\\n\",i,x[i]); } การทาํ งานของโปรแกรม เรม่ิ จากประกาศฟง กช ัน void func_array(int x[9]); แลว ประกาศคาตัวแปรแบบโกลบอล ชื่อ i เปน ตวั แปรชนดิ เลขจํานวนเต็ม ในฟงกชัน main( ) มกี ารประกาศคาตัวแปรอารเ รยชื่อ num เก็บสมาชกิ ตวั ท่ี 0 ถึง 9 ใชล ปู for ในการวนรอบการทํางาน โดยใหตัวแปร num[i] = i; และมกี าร เรียกใชฟง กช นั func_array(num); ซงึ่ ในฟง กชนั นีจ้ ะมีการใชตวั แปร x เปนอารเ รยโ ดยแสดงผล ตวั เลขทเ่ี กบ็ อยใู นอารเรย จากโปรแกรมจะเห็นไดวาเราไดใ ชตวั แปรแบบอารเ รยมาใชง านรวมกับ ฟง กช ันในการรบั สง คาได

12 ผลการรันโปรแกรม Number[0] = 0 Number[1] = 1 Number[2] = 2 Number[3] = 3 Number[4] = 4 Number[5] = 5 Number[6] = 6 Number[7] = 7 Number[8] = 8 Number[9] = 9   การสงผานขอ มลู แบบกําหนดคา ขอ มลู ที่สามารถสง ไดคือ คาคงที่ ตัวแปร และนิพจน รปู แบบของการสงขอมลู จะถูกคดั ลอกคา จากฟงกช นั หลักไปยังพารามิเตอรในฟงกชนั ท่ถี ูกเรยี ก โดย หนว ยความจาํ ทีใ่ ชในการเก็บขอมูลของฟงกช นั ท่เี รยี กกบั ฟง กช ันที่ถกู เรียกจะเปน คนละตัวกัน

13 ตวั อยางโปรแกรม การสงผา นขอมูลแบบกําหนดคา #include<stdio.h> #include<conio.h> void swap(int a,int b) { int temp; temp = a; a=b; b=temp; } void main(void) { clrscr(); int num1,num2; printf(\"Enter number1 : \"); scanf(\"%d\",&num1); printf(\"Enter number2 : \"); scanf(\"%d\",&num2); swap(num1,num2); printf(\"Number 1 = %d\\nNumber 2= %d\",num1,num2); getch(); }

14 การทํางานของโปรแกรม เรมิ่ จากประกาศฟงกช นั void swap(int a,int b) แลว ทําการประกาศคา ตัวแปร temp โดย กาํ หนดคา ให temp = a และ a = b และให b = temp อกี คร้งั หนึง่ โดยสรุปในข้ันตอนนีค้ ือการสลับ คา ของตวั แปร a และ b การผานฟงกช นั swap(a,b) คา ของตัวแปร a และ b ยงั คงมีคา เทา เดมิ เนอื่ ง จากการสง ผา นขอ มูลเปน แบบกาํ หนดคา สงิ่ ทีส่ ง ไปยงั ฟง กช ัน swap เปน เพยี งขอมลู ของตัวแปร a และ b เทา นนั้ เพราะฉะนั้นผลการรนั โปรแกรมจึงไมมกี ารสลบั คาเกิดขน้ึ ในฟงกชัน main( ) ผลการรันโปรแกรม Enter Number 1 : 100 Enter Number 1 : 500 Number 1 = 100 Number 2 = 500  ฟง กชนั มาตรฐานคอื ฟงกช นั ทีส่ ามารถเรยี กใชไ ดจากไลบราลีในภาษาซี โดยจะตอ งระบุ อนิ คลดู (include) ไฟลต า ง ๆ ใหถูกตอ งตามที่ไดน ยิ ามเอาไว เราสามารถเรียกใชฟ งกชันมาตรฐาน ในภาษาซโี ดยไมต อ งเขยี นฟง กช ัน เชน ฟงกชนั ทางคณิตศาสตร ฟง กช ันเก่ยี วกบั ตัวอักษร ฟงกชนั เกี่ยวกับสตรงิ ก ในทน่ี จ้ี ะขอยกตวั อยา งเกยี่ วกับฟง กชันทางคณิตศาสตร ดังนี้ ตวั อยา งโปรแกรม การหาคารากที่ 2 #include<stdio.h> #include<math.h> /* รากท่ีสอง เปน ฟง กชันทางคณติ ศาสตรตองระบุ include<math.h> */ void main() { float a=49; printf(\"%.2f\\n\",sqrt(a)); /* ใชฟง กช นั sqrt แสดงคา รากทส่ี องของตัวแปร a */ printf(\"%.2f\\n\",sqrt(36)); /* ใชฟ งกช ัน sqrt แสดงคา รากท่ีสองของ 36 */ }

15 การทํางานของโปรแกรม เรมิ่ จากทาํ การระบุ include<math.h> เพอ่ื ทําการเรียกใชฟงกช นั ทางคณิตศาสตรเ พราะ ฟงกช นั sqrt เปน ฟง กช นั ท่ีใชในการหาคา รากทส่ี องซงึ่ เปน ฟง กช นั ทางคณติ ศาสตรดงั นนั้ จะตอง ระบอุ นิ คลดู ไฟลใ หถ ูกตอง จากนัน้ ทําการประกาศคา ตวั แปร a เปน ตัวแปรชนิดเลขทศนยิ ม กาํ หนดคา ใหมีคา เทากับ 49 แลวใหแสดงคารากทส่ี องของตัวแปร a บรรทัดสุดทา ยใหแสดงคา ราก ทส่ี องของเลข 36 โดยไมไดป ระกาศตัวแปรกส็ ามารถกระทําไดเ ชนกนั ผลการรนั โปรแกรม 7.00 6.00 จากตวั อยา งเปนการใชฟง กชนั ทางคณิตศาสตรใ นการหาคารากทสี่ อง ซึ่งฟงกชันทาง คณติ ศาสตรจ ะตอ งประกาศตวั แปรเปน ชนดิ float และระบุอินคลูดไฟล math.h กอ นการใชงานทุก ครัง้ ฟง กชันทางคณติ ศาสตรที่ควรทราบมีดงั น้ีคือ sin(x) ใหค า sine ของ x โดย x จะตอ งเปน มมุ ในหนว ยเรเดยี น cos(x) ใหคา cosine ของ x โดย x จะตอ งเปน มมุ ในหนว ยเรเดยี น tan(x) ใหค า tangent ของ x โดย x จะตอ งเปนมมุ ในหนว ยเรเดียน asin(x) ใหค า มุมในหนวยเรเดยี นของคา sin ของ x acos(x) ใหค า มุมในหนวยเรเดียนของคา cosine ของ x atan(x) ใหค า มมุ ในหนว ยเรเดียนของคา tangent ของ x exp(x) ใหค า ของ e ยกกําลงั x (ex) โดย e มคี า 2.718 log(x) ใหค า natural logarithm ของ x โดย x จะตอ งมีคา มากกวา 0 log10(x) ใหค า log ฐาน 10 ของ x โดย x จะตอ งมคี า มากกวา 0 pow(x,a) ใหคา x ยกกําลัง a (xa) โดย x และ a จะตองมีคา มากกวา 0 และเปนจํานวนเตม็ sqrt(x) ใหค ารากทส่ี องของ x fabs(x) ใหค า สัมบูรณของ x

16   ขนั้ ตอนการปฏิบตั ิ 1. ใหพ ิมพโปรแกรมโดยใชฟ ง กชันตามตวั อยาง #include<stdio.h> #include<conio.h> int function_return(void) { int num; printf(\"Enter number : \"); scanf(\"%d\",&num); return num; } void main(void) { clrscr(); int a = 2; printf(\"Start number = %d\\n\",a); a=function_return(); printf(\"Number after run function = %d\",a); getch(); }

17 2. อธบิ ายการทํางานของโปรแกรม 3. กอ นปอนคาตวั เลขตัวแปร a มีคา เทากบั เทาไร 4. เม่อื ปอนตัวเลขเขาไป คา ตัวแปร a เปลี่ยนแปลงไดอยางไร 5. ใหเขียนผังงานของโปรแกรมในขอ 1

18 6. ใหเ ขยี นโปรแกรมอะไรกไ็ ดโดยใชฟ งกชนั ในการเขยี นโปรแกรม 7. เขยี นผังงานของโปรแกรมไดด ังนค้ี อื

19   1. ฟงกช นั แบบไมมีการสง ผา นคา พารามเิ ตอรม ีรปู แบบดังนค้ี ือ 2. การสง ผานคาพารามเิ ตอรท างเดยี วมลี กั ษณะอยา งไร 3. ฟง กช ันแบบสงผา นคาพารามิเตอรไปกลับตา งจากการสง ผานคาพารามิเตอรท างเดียวอยา งไร 4. ตัวแปรแบบโกลบอลและโลคอลตางกนั อยางไร

20 5. ใหพ มิ พโ ปรแกรมตามตวั อยางแลวอธบิ ายการทํางานของโปรแกรม #include<stdio.h> #include<conio.h> void star(); void main() { clrscr(); star(); getch(); } void star() { int x=1; while(x<=50&&!kbhit()){ printf(\"*************************\\n\"); delay(1000); x++; } while(!kbhit()); } 6. นกั ศกึ ษาคดิ วา จะนาํ ฟงกช ันไปประยุกตใชใ นการเขยี นโปรแกรมไดอ ยา งไร


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook