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. นกั ศกึ ษาคดิ วา จะนาํ ฟงกช ันไปประยุกตใชใ นการเขยี นโปรแกรมไดอ ยา งไร
Search
Read the Text Version
- 1 - 20
Pages: