Upload
srinagarindra-the-princess-mother-school-kanchanaburi
View
152
Download
0
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 ดงน
1. ออกแบบหนาตาแอพพลเคชน และตงชอคอนโทรลตางๆ ดงน
ตวอยางการใชงาน Subroutine : ตวอยางนจะสราง แอพพลเคชนแบบระบบลงทะเบยนซงจะมการใชงาน
Subroutine ทเราเขยนขนมา
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/