Upload
srinagarindra-the-princess-mother-school-kanchanaburi
View
213
Download
1
Embed Size (px)
Citation preview
โปรแกรมยอยและฟงกชนมาตรฐานฟงกชนในภาษา C
สำาหรบเนอหาในบทนจะกลาวถงฟงกชนในภาษา C โดยจะประกอบไปดวยเนอหาหลก ๆ คอ เรองทหนง ฟงกชนมาตรฐาน เปนฟงกชนทบรษททผลตภาษา C ไดเขยนขนและเกบไวใน header file ภาษา C คอเกบไวในแฟมทมนามสกล *.h ตาง ๆ สวนเรองทสอง เปนฟงกชนทเขยนขนหรอเรยกอกอยางวาโปรแกรมยอย ทผเขยนโปรแกรมเขยนขนมาใชงานอยางใดอยางหนงตามความตองการของงานนนๆ โดยรายละเอยดของแตละฟงกชนมดงตอไปน
ฟงกชนมาตรฐาน (standard functions)
เปนฟงกชนทบรษททผลตภาษา C ไดเขยนขนและเกบไวใน header file ภาษา C คอเกบไวในแฟมทมนามสกล *.h ตาง ๆ เมอตองการใชฟงกชนใด จะตองรวาฟงกชนนนอยใน header file ใดจากนนจงคอยใชคำาสง #include<header file.h> เขามาในสวนตอนตนของโปรแกรม จงจะสามารถใชฟงกชนทตองการได ซงฟงกชนมาตรฐานเปนฟงกชนทบรษทผผลต C compiler เขยนขนเพอใหผใชนำาไปชวยในการเขยนโปรแกรมทำาใหการเขยนโปรแกรมสะดวกและงายขน บางครงเราอาจจะเรยกฟงกชนมาตรฐานวา ไลบรารฟงกชน” ” (library functions) ฟงกชนทางคณตศาสตร (mathematic functions)
เปนฟงกชนทใชสำาหรบการคำานวณทางคณตศาสตร และกอนทจะใชฟงกชนประเภทน จะตองใชคำาสง #include <math.h> แทรกอยตอนตนของโปรแกรม และตวแปรทจะใชฟงกชนประเภทนจะตอง
มชนด (type) เปน double เนองจากผลลพธทไดจากฟงกชนประเภทนจะไดคาสงกลบของขอมลเปน double เชนกน
ฟงกชนทางคณตศาสตรทควรทราบ มดงนacos(x) asin(x) atan(x) sin(x) cos(x) tan(x)sqrt(x) exp(x) pow(x,y)log(x) log10(x) ceil(x) floor(x) fabs(x) 1) ฟงกชน acos(x) เปนฟงกชนทใชคำานวณหาคา arc cosine ของ x โดยท x เปนคามมในหนวยเรเดยน (radian) รปแบบ acos(x);
2) ฟงกชน asin(x) เปนฟงกชนทใชคำานวณหาคา arc sine ของ x โดยท x เปนคามมในหนวยเรเดยน รปแบบ asin(x);
3) ฟงกชน atan(x) เปนฟงกชนทใชคำานวณหาคา arc tan ของ x โดยท x เปนคามมในหนวยเรเดยน
รปแบบ atan(x);
4) ฟงกชน sin(x) เปนฟงกชนทใชคำานวณหาคา sine ของ x โดยท x เปนคามมในหนวยเรเดยน รปแบบ sin(x);
5) ฟงกชน cos(x) เปนฟงกชนทใชคำานวณหาคา cosine ของ x โดยท x เปนคามมในหนวยเรเดยน รปแบบ cos(x);
6) ฟงกชน tan(x) เปนฟงกชนทใชคำานวณหาคา tan ของ x โดยท x เปนคามมในหนวยเรเดยน
โปรแกรมตวอยางท 7.1 แสดงการใชงานฟงกชน acos(x), asin(x), atan(x), sin(x), cos(x) และ tan(x)
/* math1.c */ #include<stdio.h> /* บรรทดท 1 */#include<math.h> /* บรรทดท 2 */#include<conio.h> /* บรรทดท 3 */void main(void) /* บรรทดท 4 */{ /* บรรทดท 5 */ double r, pi = 3.141592654; /* บรรทดท 6 */
r = pi/180; /* บรรทดท 7 */ clrscr(); /* บรรทดท 8 */ printf("%f\n",asin(r)); /* บรรทดท 9 */ printf("%f\n",acos(r)); /* บรรทดท 10 */ printf("%f\n",atan(r)); /* บรรทดท 11 */ printf("%f\n",sin(r)); /* บรรทดท 12 */ printf("%f\n",cos(r)); /* บรรทดท 13 */ printf("%f\n",tan(r)); /* บรรทดท 14 */ printf("\nPress any key back to program ..."); /* บรรทดท 15 */ getch(); /* บรรทดท 16 */} /* บรรทท 17 */
ผลลพธทไดจากโปรแกรม
คำาอธบายโปรแกรม จากโปรแกรมตวอยางท 7.1 สามารถอธบายการทำางานของโปรแกรมทสำาคญ ๆ ไดดงน
บรรทดท 9 คำาสง printf("%f\n",asin(r)); ฟงกชนคำานวณหาคา arc sin ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดงผลลพธทไดออกจอภาพบรรทดท 10 คำาสง printf("%f\n",acos(r)); ฟงกชนคำานวณหาคา arc cosine ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดงผลลพธทไดออกจอภาพบรรทดท 11 คำาสง printf("%f\n",atan(r)); ฟงกชนคำานวณหาคา arc tan ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดงผลลพธทไดออกจอภาพบรรทดท 12 คำาสง printf("%f\n",sin(r)); ฟงกชนคำานวณหาคา sine ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดงผลลพธทไดออกจอภาพบรรทดท 13 คำาสง printf("%f\n",cos(r)); ฟงกชนคำานวณหาคา cosine ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดง
ผลลพธทไดออกจอภาพบรรทดท 14 คำาสง printf("%f\n",tan(r)); ฟงกชนคำานวณหาคา tan ของตวแปร r โดย r เปนมมในหนวยเรเดยน และแสดงผลลพธทไดออกจอภาพบรรทดท 15 และ 16 พมพขอความใหกดคยใด ๆ เพอกลบสโปรแกรม และหยดรอรบคาใดๆ เชน กด enter จะกลบเขาสโปรแกรม
7) ฟงกชน sqrt(x) เปนฟงกชนทใชหาคารากท 2 (square root) ของคาคงทหรอตวแปร x โดยท x จะตองเปนคาคงทชนดตวเลขหรอตวแปรทมคาไมตดลบ รปแบบ sqrt(x);
8) ฟงกชน exp(x) เปนฟงกชนทใชหาคา ex โดยท x เปนคาคงทหรอตวแปรทจะใชเปนคายกกำาลงของ e โดยท e มคาประมาณ 2.718282 รปแบบ exp(x);
9) ฟงกชน pow(x,y) เปนฟงกชนทใชหาคา xy โดยท
x เปนคาคงทหรอตวแปรทใชเปนตวฐานซงจะตองมคามากกวาศนย y เปนคาคงทหรอตวแปรทใชเปนคายกกำาลง
รปแบบ pow(x, y);
โปรแกรมตวอยางท 7.2 แสดงการใชงานฟงกชน sqrt(x), exp(x) และ pow(x, y)
/* math2.c */ #include<stdio.h> /* บรรทดท 1 */#include<math.h> /* บรรทดท 2 */#include<conio.h> /* บรรทดท 3 */void main(void) /* บรรทดท 4 */{ /* บรรทดท 5 */ double x = 2.5, y = 7.0, z = 21.5; /* บรรทดท 6 */ clrscr( ); /* บรรทดท 7 */ printf("%.4f\n",pow(x,y)); /* บรรทดท 8 */ printf("%.4f\n",sqrt(z)); /* บรรทดท 9 */ printf("%.4f\n",exp(y)); /* บรรทดท 10 */ printf("\nPress any key back to program ..."); /* บรรทดท 11 */
getch(); /* บรรทดท 12 */} /* บรรทดท 13 */
คำาอธบายโปรแกรม จากโปรแกรมตวอยางท 7.2 สามารถอธบายการทำางานของโปรแกรมทสำาคญ ๆ ไดดงน
บรรทดท 8 คำาสง printf("%.4f\n",pow(x,y)); ฟงกชนคำานวณหาคา xy โดยท x เปนคาคงทหรอตวแปรทใชตวฐานซงจะตองมคามากกวาศนย และ y เปนคาคงทหรอตวแปรทใชเปนคายกกำาลง และแสดงผลทไดออกจอภาพบรรทดท 9 คำาสง printf("%.4f\n",sqrt(z)); ฟงกชนคำานวณหาคารากทสอง (square root) ของคาคงทหรอตวแปร z โดยท z จะตองเปนคาคงทชนดตวเลขหรอตวแปรทมคาไมตดลบ และแสดงผลทไดออกจอภาพบรรทดท 10 คำาสง printf("%.4f\n",exp(y)); ฟงกชนคำานวณหาคา ey โดยท y เปนคาคงทหรอตวแปรทจะใชเปนคายกกำาลงของ e โดยท e มคาประมาณ 2.718282 และแสดงผลทไดออกจอภาพบรรทดท 11 และ 12 พมพขอความใหกดคยใด ๆ เพอกลบสโปรแกรม และหยดรอรบคาใด ๆ เชน กด enter จะกลบเขาสโปรแกรม
10) ฟงกชน log(x) เปนฟงกชนทใชหาคา log ฐาน n (natural logarithm) ของคาคงทหรอตวแปร x โดยท x เปนคาคงทหรอตวแปรทมคาเปนลบ
ไมได รปแบบ log(x);
11) ฟงกชน log10(x) เปนฟงกชนทใชหาคา log ฐาน 10 ของคาคงทหรอตวแปร x โดยท x เปนคาคงทหรอตวแปรทมคาเปนลบไมได รปแบบ log10(x);
โปรแกรมตวอยางท 7.3 แสดงการใชงานฟงกชน log(x) และ log10(x) /* math3.c */ #include<stdio.h> /* บรรทดท 1 */#include<math.h> /* บรรทดท 2 */#include<conio.h> /* บรรทดท 3 */void main(void) /* บรรทดท 4 */{ /* บรรทดท 5 */ double m = 10.0, n = 3.0; /* บรรทดท 6 */ clrscr( ); /* บรรทดท 7 */ printf("%.4f\n",log(n));
/* บรรทดท 8 */ printf("%.4f\n",log10(m)); /* บรรทดท 9 */ printf("\nPress any key back to program ...");
/* บรรทดท 10 */ getch(); /* บรรทดท 11 */} /* บรรทดท 12 */
ผลลพธทไดจากโปรแกรม
โปรแกรมยอย Procedure และฟงกชน (Function)
วตถประสงคของการสรางโปรแกรมยอย1. เปนสวนโปรแกรมทใชซำากนในหลาย ๆ แหง และจะแยกออกมาทำาเปนโปรแกรมยอย
2. เปนคำาทสรางขนใหม เพอเกบไวใชตอไป3. เมอตองการเขยนโปรแกรมเปน Module จดประสงคของการเขยนโปรแกรมเปน Module กเพอตรวจหาทผดไดงาย ดงนน โปรแกรมยอยหนง ๆ กคอ Module ๆ หนง4. เพอสนองความตองการของการเขยนโปรแกรมจากบนลงลาง
การสรางและการใชงานโปรแกรมยอยโปรแกรมยอย (Procedure) เปนสวนหนงของโปรแกรม มหนาทเฉพาะในแตละตว โดยแยกการทำางานออกจากโปรแกรมหลกอยางอสระ การแยกโปรแกรมออกเปนสวนยอยๆ นมขอดคอลดความซำาซอนในการเขยนโปรแกรมในสวนททำางานอยางเดยวกน ถานำาโปรแกรมสวนทตองใชซำาๆ มาทำาเปนโปรแกรมยอยจะทำาใหโปรแกรมมขนาดเลกลงชวยใหทำาความเขาใจโปรแกรมไดงาย เพราะมการแบงเปนสวนยอยๆทำาใหสามารถแกไขและเพมเตมการทำางานของโปรแกรมไดงายขนชวยใหนำาโปรแกรมทสรางไปใชงานในโปรแกรมอนไดถาในโปรแกรมนนตองการฟงกชนในการทำางานทเหมอนกน
โปรแกรมยอยทใชงานอยใน VB.NET มอย 2 ประเภทคอ
* โปรแกรมยอย Sub มาจากคำาวา Subroutine – ซบรทน เปนโปรแกรมยอยทเมอทำางานอยางหนงเสรจแลวจะไมมการสงผลการท างานกลบไปยงโปรแกรมทเรยกใชงานซบรทนน* โปรแกรมยอย Function เปนโปรแกรมยอยทเมอท างานเสรจแลวจะคนผลลพธทไดจากการทำางานกลบไปยงโปรแกรมทเรยกใชงานฟงกชนน
ในบางครงโปรแกรมหลกจะมการสงขอมลไปทำางานในโปรแกรมยอยดวย โดยขอมลนนจะเกบอยในตวแปรพเศษทเรยกวา พารามเตอร “ ”(Parameter) โปรแกรมยอยชนด Sub
Sub เปนโปรแกรมทเขยนขนมาเพอการทำางานอยางใดอยางหนง โดยทไมมการรบพารามเตอรหรออาจจะมการรบพารามเตอรมาทำางานกได แตไมมการสงผลการทำางานกลบไปยงโปรแกรมทเรยกซบรทนนใชงาน มรปแบบการเขยน Sub ดงน
ตวอยางการใชงาน Subroutine : ตวอยางนจะสรางแอพพลเคชนแบบระบบลงทะเบยนซงจะมการใชงาน Subroutine ทเราเขยนขนมา
1. ออกแบบหนาตาแอพพลเคชน และตงชอคอนโทรลตางๆ ดงน
2. ดบเบลคลกทฟอรมเพอเขยนโคดใน Even Load โดยจะเรมแนะนำาใหผใชงานทราบวธการทำางานโดยจะเรยก Sub ทชอวา InformUser
3. ใหหนาตางโคดของ Sub InformUser โดยเขยนตอทายไปไดเลย
4. ดบเบลคลกทปม ลงทะเบยน แลวเขยนโคดเพอตรวจสอบความครวถวนถกตองของขอมลทปอนเขาไป ถาเรยบรอยถอวาลงทะเบยนได แตถาไมเรยนรอยแจงใหผใชทราบ
5 . สำาหรบ Sub CheckPassword นนมหลกการตรวจสอบความถกตองอย 3 ขอ ดงรายละเอยดทแสดดงในโคดตอไปน
6 . ดบเบลคลกปม เคลยร แลวเขยนโคดเพอเคลยรคาขอมลใน TexBox ตางๆ ดงน
7 . กดปม F5 เพอทดสอบการทำางานของแอพพลเคชน ไดผลดงน
โปรแกรมยอยชนด Function
Function เปนโปรแกรมยอยทเขยนขนมาเพอการทำางานอยางใดอยางหนง โดยทไมมการรบพารามเตอรหรออาจจะมการรบพารามเตอรมาทำางานกได เมอทำางานเสรจแลวจะมการสงผลการทำางานกลบมายงโปรแกรมทเรยกฟงกชนนนใชงาน มรปในการเขยนฟงกชน ดงน
ตวอยางการใชงาน Function : ตวอยางนจะสรางแอพพลเคชนทคำานวณผลตอบแทนจากการฝากเงนซงผใชจะตองกรอกเงนตน อตราดอกเบย และจำานวนปทฝาก
1. ออกแบบหนาตาแอพพลเคชน
และตงชอคอนโทรลตางๆ ดงน
2. ดบเบลคลกทปม คำานวณ เพอคำานวณผลตอบแทนซงจะมการเรกฟงกชน CheckInput เพอตรวจสอบวาขอมลทกรอกเขามาเหมาะสมหรอไม ถาเหมาะสมจำานำามาคำานวณโดยเรยกใช ClacSaving
3. สำาหรบฟงกชน CheckInput จำาทำาหนาทตรวจสอบวา ขอมลทผใชงานกรอกมาเหมาะสมหรอไมโดยตองเปนตวเลขทมากกวา 0 ทกตว และถาเปน ดอกเบยใหมคาระหวาง 0 ถง 100 โดยฟงกชนนจะรเทรนคาเปน True หรอ False
4. สำาหรบฟงกชน CalaSaving จจะทำาหนาทคำานวณผลตอบแทนเงนฝาก โดยจะคำานวณใหเหนในระยะเวลาตงแตปท 1 ถงปทกำาหนดไว นนยอดเงนฝากเปนเทาใด
5. . ดบเบลคลกปม เคลยร แลวเขยนโคดเพอเคลยรคาขอมลใน TexBox ตางๆ ดงน
6. ทดสอบการทำางานของแอพพลเคชน ไดผลดงน
ฟงกชนมาตรฐาน (Standard Function)
ฟงกชนมาตรฐาน คอ ฟงกชนทผใชสามารถเรยกใชงานจากไลบรารของภาษาซไดทนท เชน ฟงกชนทางคณตศาสตร ฟงกชนเกยวกบสตรง ฟงกชนเกยวกบการเปรยบเทยบ ฟงกชนเกยวกบการแสดงผล และฟงกชนเกยวกบวนเวลา เปนตน โดยจะเรยกไลบรารผานคำาสง #include แลวตามดวยชอของไลบรารนน ๆ ในสวนของ header directive ซงมรายละเอยดดงน
ไลบราร (library) stdio.h เกยวกบการแสดงผลทางจอภาพ มฟงกชนทใชดงน
- ฟงกชน printf() ใชในการแสดงผลขอมล
- ฟงกชน Scanf() ใชในการรบขอมล
ไลบราร (library) conio.h เกยวกบการแสดงผลทางจอภาพ มฟงกชนทใชดงน
- ฟงกชน getchar() ใชในการรบขอมล 1 อกขระ โดยการกด Enter
- ฟงกชน getche() ใชในการรบขอมล 1 อกขระ โดยไมตองกด Enter
- ฟงกชน getch() ใชในการรบขอมล 1 อกขระไมปรากฏใหเหนในการรบขอมล
- ฟงกชน putchar() ใชในการรบขอมล 1 อกขระออกทางจอภาพ
- ฟงกชน clrscr() ใชในการลบจอภาพ
ไลบราร (library) string.h เกยวกบขอความ มฟงกชนทใชดงน
- ฟงกชน strlen() ใชในการนบความยาวของอกขระทรบเขามา
- ฟงกชน strcpy() ใชในการทำาสำาเนาขอความจากขอความหนงไปยงอกขอความหนง
- ฟงกชน strcmp () ใชในการเปรยบเทยบขอความ 2 ขอความ
- ฟงกชน strcal() ใชในการเชอมตงแต 2 ขอความเขาดวยกน
ไลบราร (library)marth.h เกยวกบทางคณตศาสตร มฟงกชนทใชดงน
- ฟงกชน sqrt() ใชในการหาราก (root) ทสองของเลขจำานวนเตม
- ฟงกชน exp(x) เปนฟงกชนทใชหาคา ex (Exponential) - ฟงกชน pow(x,y) เปนฟงกชนทใชหาคา xy
- ฟงกชน sin(x) เปนฟงกชนทใชหาคา sine ของ x
- ฟงกชน cos(x) เปนฟงกชนทใชหาคา cosine ของ x
- ฟงกชน tan(x) เปนฟงกชนทใชหาคา tan ของ x
- ฟงกชน log(n) เปนฟงกชนทใชหาคา log ฐาน n
- ฟงกชน log10(x) เปนฟงกชนทใชหาคา log ฐาน 10
- ฟงกชน ceil(x) เปนฟงกชนทใชหาคาปดเศษทศนยมของตวแปร x
- ฟงกชน floor(x) เปนฟงกชนทใชหาคาตดเศษทศนยมทงของตว แปร x
- ฟงกชน fabs(x) เปนฟงกชนทใชหาคาสมบรณ (absolute value) xไลบราร (library) ctype.h เกยวกบตวอกษร มฟงกชนทใชดงน
- ฟงกชน isalnum(ch) เปนฟงกชนทใชตรวจสอบวาขอมลทอยในตวแปรมคาเปน ตวอกษรหรอตวเลข
- ฟงกชน isalpha(ch) เปนฟงกชนทใชตรวจสอบวาขอมลทอยในตวแปรมคาเปนตวอกษรหรอไม
- ฟงกชน isdigit(ch) เปนฟงกชนทใชตรวจสอบวาขอมลทอยในตวแปรเปนตวเลข 0 ถง 9 หรอไม
- ฟงกชน islower(ch) เปนฟงกชนทใชตรวจสอบวาขอมลทอยในตวแปรเปนตวเลกหรอไม
- ฟงกชน isupper(ch) เปนฟงกชนทใชตรวจสอบวาขอมลทอยในตวแปรเปนตวใหญหรอไม
- ฟงกชน tolowre(ch) เปนฟงกชนทใชในการเปลยนตวอกษรตวใหญใหเปนตวเลก
- ฟงกชน toupper(ch) เปนฟงกชนทใชในการเปลยนตวอกษรตวเลกใหเปนตวใหญ
ไลบราร (library) stdlib.h เกยวกบการแปลงคา string มฟงกชนทใชดงน
- ฟงกชน atoi(s) เปนฟงกชนทใชในการแปลงคา ขอความ (string) เปนตวเลขจำานวนเตม (integer)
- ฟงกชน atof(s) เปนฟงกชนทใชในการแปลงคา ขอความ (string) เปนตวเลขจำานวนทศนยม( flot)
- ฟงกชน atol(s) เปนฟงกชนทใชในการแปลงคา ขอความ (string) เปนตวเลขจำานวนเตม (integer) ชนด long integer
ไลบราร (library) dos.h เกยวกบการตดตอระบบปฏบตการ มฟงกชนทใชดงน
- ฟงกชน gettime() เปนฟงกชนทใชในการตดตอเวลาของระบบปฏบตการ
- ฟงกชน getdate() เปนฟงกชนทใชในการตดตอวนทของระบบปฏบตการ
ซงฟงกชนมาตรฐานยงมอกเปนจำานวนมาก ผศกษาสามารถลองศกษาไดจากการใช Help เพอเปนแนวทางในการเขยนและพฒนาโปรแกรมดวยภาษาซขนสงตอไปในภายหลงได
อางอง
ทมา : http://www.tice.ac.th/division/website_c/about/page8.htm https://nemo2475.wordpress.com/jiooj-j-k/