1 / 77

Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง

Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง. สัปดาห์ที่ 12 ฟังก์ชัน (Function). objectives. เพื่อให้นิสิตรู้จักและเข้าใจ การนิยามและการเขียนฟังก์ชัน ในภาษาซี สามารถเขียน ฟังก์ชันร่วมกับคำสั่งทำซ้ำ อาเรย์ ตัวแปรชี้ตำแหน่ง ตัวแปรชนิดโครงสร้าง ในภาษาซีได้อย่างมีประสิทธิภาพ

Download Presentation

Structure Programming การเขียน โปรแกรม เชิงโครงสร้าง

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Structure Programmingการเขียนโปรแกรมเชิงโครงสร้าง สัปดาห์ที่ 12 ฟังก์ชัน (Function)

  2. objectives • เพื่อให้นิสิตรู้จักและเข้าใจการนิยามและการเขียนฟังก์ชันในภาษาซี • สามารถเขียนฟังก์ชันร่วมกับคำสั่งทำซ้ำ อาเรย์ ตัวแปรชี้ตำแหน่ง ตัวแปรชนิดโครงสร้างในภาษาซีได้อย่างมีประสิทธิภาพ • สามารถนำความรู้เรื่องฟังก์ชันไปประยุกต์เพื่อแก้ไขโจทย์ปัญหาในชีวิตประจำวันได้ได้อย่างถูกต้องเหมาะสม

  3. Outline 1 Function 2 User-Defined Function p 3 Function Format Passing Parameters 4 5 Assignment

  4. What is function? • ฟังก์ชัน คือ ชุดคำสั่งของการทำงานที่ถูกเขียนขึ้นให้โปรแกรมเมอร์สามารถเรียกใช้งานได้โดยง่าย ** ฟังก์ชัน คือ ชุดของการทำงาน ** ฟังก์ชัน ถูกเรียกใช้งานได้

  5. Why the function is essential? ปัญหาที่เกิดขึ้นในการพัฒนาโปรแกรมที่ซับซ้อน • โปรแกรมเมอร์ไม่สามารถทราบการทำงานของระบบโดยละเอียดได้เช่น ไม่ทราบกระบวนการส่งข้อมูลผ่านเครือข่าย แต่ต้องเขียนโปรแกรมเพื่อเชื่อมต่อระบบเครือข่าย • โปรแกรมเมอร์ไม่สามารถทราบขั้นตอนการทำงานของคอมพิวเตอร์ทั้งหมดได้เช่น ทำอย่างไรตัวอักษรจึงปรากฏในหน้าจอภาพได้ • โปรแกรมบางโปรแกรมมีการทำงานที่ซับซ้อน และการทำงานซับซ้อนนั้นถูกเรียกใช้งานบ่อยครั้งเช่น การหาผลลัพธ์ทางวิทยาศาสตร์ การวิเคราะห์ข้อมูลขนาดใหญ่เป็นต้น

  6. Solution วิธีการแก้ไข • เพื่อให้โปรแกรมเมอร์สามารถทำงานได้โดยไม่จำเป็นต้องทราบรายละเอียดการทำงานทั้งหมดของระบบ จะให้โปรแกรมเมอร์ที่ทราบการทำงานโดยละเอียดของกระบวนการต่างๆ จะเขียนชุดคำสั่งในรูปแบบของ ฟังก์ชันแล้วแจกจ่ายให้โปรแกรมเมอร์อื่นๆ ได้ใช้งาน • โปรแกรมเมอร์สามารถเรียกใช้ฟังก์ชันโดยทราบเพียงวิธีการใช้งาน และผลลัพธ์ที่เกิดขึ้นหลังจากเรียกใช้งานฟังก์ชันเท่านั้น • เช่น โปรแกรมเมอร์ที่ไม่ทราบว่าทำอย่างไรตัวอักษรจึงจะปรากฎหน้าจอ สามารถใช้คำสั่ง printfได้เลย โดยโปรแกรมเมอร์จะทราบเพียงแค่ การเรียก printfจะทำให้มีตัวอักษรปรากฎบนหน้าจอได้เท่านั้น

  7. The Advantage of Function ข้อดีของฟังก์ชัน • ทำให้โปรแกรมเมอร์สามารถพัฒนาโปรแกรมได้โดยง่าย โดยโปรแกรมเมอร์ไม่จำเป็นต้องทราบว่าการทำงานของฟังก์ชันทำงานอย่างไรทราบเพียงผลลัพธ์ของการทำงานเท่านั้น • โปรแกรมเมอร์สามารถเขียนโปรแกรมให้มีการทำงานที่ซับซ้อนได้ โดยไม่จำเป็นต้องเขียนโปรแกรมส่วนที่ซับซ้อนนั้นหลายๆ ครั้ง • โปรแกรมเมอร์สามารถออกแบบฟังก์ชันได้ตามความต้องการของโปรแกรมเมอร์

  8. Type of Function FUNCTIONS IN C C STANDARD LIBRARY PROGRAMMER DEFINED FUNCTION

  9. Type of Function (cont.) • กลุ่มฟังก์ชันมาตรฐาน (Standard Library Functions) • เป็นฟังก์ชันที่มีอยู่ใน Libraryมาตรฐานของภาษาซีมาตรฐาน ANSI C มี 15 ประเภท • ใช้ Preprocessor #include อ้างถึงLibrary ที่เก็บฟังก์ชันมาตรฐาน • เช่น#include <stdio.h> • ฟังก์ชันที่ผู้ใช้กำหนดเอง (User-defined Functions) • เป็นฟังก์ชันที่ programmer เขียนขึ้นมาเอง เพื่อทำงานเฉพาะเรื่อง • ถ้าอยู่ในไฟล์อื่นต้องใช้ preprocessor #includeเช่นเดียวกัน แต่อยู่ใน “ ” แทน < > • เช่น #include “mylib.h” • ถ้าไม่กำหนด Path จะหมายถึงไฟล์mylib.hอยู่ใน directory เดียวกันกับโปรแกรมของเรา

  10. Standard Library Function • ฟังก์ชันไลบรารีมาตรฐาน (Standard Library Function) เป็นฟังก์ชันที่มีอยู่แล้วเก็บไว้ใน Library ในการใช้งานต้อง include ก่อน • Include directive คือคำสั่งที่เป็นการนำเอา header file มารวมไว้กับไฟล์ที่เขียน • การ include directives จะเป็นเหมือนการประกาศให้กับ compiler ทราบว่าจะใช้คำสั่ง ใน Library นั้นๆ เช่น การใช้คำสั่ง sin() ซึ่งอยู่ใน math.hจะต้องมีการประกาศ Library ก่อนเสมอ ดังตัวอย่าง • #include <math.h>

  11. Standard Library Function (cont.)

  12. Standard Library Function (cont.)

  13. How to use Standard Library Function? • การเรียกใช้ Standard Library Function มีขั้นตอนดังนี้ • ทราบว่าโปรแกรมที่เขียนต้องการการทำงานอะไร • การทำงานดังกล่าวคือฟังก์ชันชื่ออะไร • ทราบ header file ที่เป็นสารบัญของคำสั่ง • Include header file นั้นๆ • เรียกใช้ฟังก์ชันในโปรแกรม

  14. Example 1 #include<stdio.h> #include<conio.h> #include<math.h> int main() { double rad = -1.0; do { printf ( "Sine of %f is %f\n", rad, sin(rad)); rad += 0.1; } while (rad <= 1.0); return 0; }

  15. Mathematics Function #include<math.h> sin(var); cos(var); tan(var); sqrt(var); pow(var1,var2); log(var); log10(var); exp(var); fabs(var);

  16. Mathematics Function (cont.) Function Description sin(x) sine ของ x, x มีหน่วยเป็นเรเดียน cos(x) cosine ของ x, x มีหน่วยเป็นเรเดียน tan(x) tangent ของ x, x มีหน่วยเป็นเรเดียน sqrt(x) รากที่สองของ x, x>=0 pow(x,y) x ยกกำลัง y log(x) logarithm ฐาน e ของ x, x>=0 log10(x) logarithm ฐาน 10 ของ x, x>=0 exp(x) e ยกกำลัง x abs(x) ค่าสัมบูรณ์ของ x, x เป็นเลขจำนวนเต็ม fabs(x) ค่าสัมบูรณ์ของ x, x เป็นเลขจำนวนจริง

  17. Example 2 #include<stdio.h> #include<math.h> int main(){ float a = 3.14; float b = -123.456; float c = 2.7; int d = -2000; printf ("%.3f \n", sin(a)); printf ("%.3f \n", cos(a)); printf ("%.3f \n", tan(a)); printf ("%.3f \n", sqrt(a)); printf ("%.3f \n", pow(a,c)); printf ("%.3f \n", log(a)); printf ("%.3f \n", log10(a)); printf ("%.3f \n", exp(a)); printf ("%.3f \n", fabs(b)); printf ("%d \n", abs(d)); return 0; } //ผลลัพธ์ 0.002 -1.000 -0.002 1.772 21.964 1.144 0.497 23.104 123.456 2000

  18. String Function #include<string.h> strcpy(str1, str2); strcat(dest1, src2); strcmp(dest1, src2); strcmpi(str1, str2); strlen(str); #include<ctype.h> tolower(ch); toupper(ch);

  19. String Function (cont.) Function Description ฟังก์ชันสำหรับอักขระ – string.h strcpy(str1, str2) คัดลอกข้อความจาก str2 ไปเก็บที่ str1 strcat(str1, str2) ต่อข้อความใน str1 ด้วย str2 strcmp(str1, str2) เปรียบเทียบตัวอักษรในข้อความ ถ้า str1 = str2 จะได้ 0 strlen(str) หาความยาวข้อความ ฟังก์ชันสำหรับอักขระ – ctype.h tolower(ch) เปลี่ยนอักขระเป็นตัวพิมพ์เล็ก toupper(ch) เปลี่ยนอักขระเป็นตัวพิมพ์ใหญ่

  20. Example 3 //strlen printf("%d\n",strlen (string)); //tolower and toupper string[0] = tolower(string[0]); string[1] = toupper(string[1]); printf("%s\n", string); return 0; } #include <stdio.h> #include <string.h> #include <ctype.h> int main(void) { char string[10]; char *str = "Abc"; //strcpy strcpy(string, str); printf("%s\n", string); //strcat strcat(string, "Def"); printf("%s\n", string); //strcmp and strcmpi printf("%d\n",strcmp(str, "abc")); printf("%d\n",strcmpi(str, "abc")); //ผลลัพธ์ Abc AbcDef -1 0 6 aBcDef

  21. Size of Variable Function • sizeof(x) หาขนาดพื้นที่ในหน่วยความจำที่เก็บตัวแปร มีหน่วยเป็น byte,x คือตัวแปรที่ต้องการหาขนาด ไม่ต้องมี include ใดๆ เพิ่ม #include <stdio.h> #include <conio.h> void main() { int age = 14; float grade = 4.00; char song[] = "More than word"; printf("size of age = %d bytes\n", sizeof(age)); printf("size of grade = %d bytes\n", sizeof(grade)); printf("size of song = %d bytes\n", sizeof(song)); printf("size of double = %d bytes\n", sizeof(double)); } size of age = 2 bytes size of grade = 4 bytes size of song = 15 bytes size of double = 8 bytes

  22. Outline 1 Function 2 User-Defined Function p 3 Function Format Passing Parameters 4 5 Assignment

  23. User-Defined Function • เนื่องจาก Standard Library Function ทั้งหมด เป็นฟังก์ชันมาตรฐานที่มีเฉพาะการทำงานพื้นฐานต่างๆ เท่านั้น • หากต้องการฟังก์ชันที่มีการทำงานเฉพาะกิจ โปรแกรมเมอร์ต้องเขียนฟังก์ชันขึ้นมาเอง

  24. User-Defined Function (cont.) ข้อกำหนดพื้นฐานของ User-defined Function • ต้องมีการประกาศ function prototypeที่ต้นโปรแกรมเสมอ จึงจะเรียกใช้งาน function นั้นๆ ได้ (เป็นการบอก Compiler ว่าคำสั่งดังกล่าวคือฟังก์ชัน ไม่ใช่ syntax error) • ต้องมีการเขียนฟังก์ชันตามโครงสร้างที่ได้ประกาศไว้ใน function prototype เท่านั้น

  25. User-Defined Function (cont.) พรีโปรเซสเซอร์ไดเร็คทีฟ #include<file.h> type function_name(type); type variable int main() { type variable; statement-1; ... statement-n; return 0; } typefunction_name(type variable) { statement-1; ... statement-n; return(var); } ส่วนหัวโปรแกรม ฟังก์ชันโพรโทรไทพ์ ตัวแปรชนิดโกบอล ตัวแปรชนิดโลคอล ฟังก์ชันหลัก คำสั่ง ส่วนตัวโปรแกรม ฟังก์ชันย่อย

  26. User-Defined Function (cont.) • ฟังก์ชัน : กลุ่มคำสั่งทำงานที่มีการรับค่าแล้วทำตามคำสั่งในฟังก์ชั่น และมีการส่งค่ากลับ (return) Process (ทำงาน) ส่งค่ากลับ รับค่ามา Function Return_TypeFunction_name(Type variable)

  27. User-Defined Function (cont.) • Function • การเขียนฟังก์ชันโดยที่ไม่ต้องมีการประกาศก่อน • สามารถประกาศตัวแปรไว้ใช้งานเฉพาะในฟังก์ชันได้ • ฟังก์ชันประกอบไปด้วย • คำสั่ง (Statement): การทำงานอย่างหนึ่ง เรียงกันไป • Return : การคืนค่าที่เป็นผลลัพธ์การทำงานของฟังก์ชัน • Function Main • ฟังก์ชันที่ทุกโปรแกรมที่เรียกทำงานได้ต้องมี • โปรแกรมจะเริ่มทำงานจากฟังก์ชัน main ก่อน • ฟังก์ชัน main จะมีการเรียกการทำงานของฟังก์ชั่นอื่นๆ

  28. Main Function • ส่วนนี้ทุกโปรแกรมจะต้องมี โดยโปรแกรมหลักจะเริ่มต้นด้วย main() และตามด้วยเครื่องหมายปีกกาเปิด ‘{’ และปีกกาปิด ‘}’ • ระหว่างปีกกาจะประกอบไปด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้โปรแกรมทำงาน • แต่ละคำสั่งจะต้องจบด้วยเซมิโคลอน ‘;’ (Semicolon) #include <stdio.h> void main(void) { ... Statement ; }

  29. Main Function (cont.) ตัวอย่าง #include <stdio.h> intfeet,inches; void main() { feet = 6; inches = feet * 12; printf("Height in inches is %d",inches); } ผลการทำงาน Height in inches is 72

  30. Main Function • ตัว Main Function จะมีสามารถรับค่าจากภายนอกเข้ามาในโปรแกรมได้ โดยรูปแบบการเขียนจะเป็นดังนี้ • argcคือ จำนวนของข้อความที่ส่งเข้ามาในโปรแกรม • argvคือ กลุ่มของข้อความที่ส่งเข้ามาในโปรแกรม (array of char pointer) • การ return ของ main function เป็นการส่งค่ากลับไปหาระบบปฏิบัติการ #include <stdio.h> intmain(intargc, char *argv[]) { ... Statement ; return 0; }

  31. Main Function(Example)

  32. User-Defined Function (cont.) • สร้างฟังก์ชันหรือคำใหม่ขึ้นมาใช้งานตามที่เราต้องการ • ระหว่างปีกกาจะประกอบด้วยคำสั่ง(Statement) ต่างๆ ที่จะให้ฟังก์ชันทำงาน • สามารถเรียกใช้ภายใน โปรแกรมได้ทุกที่ #include <stdio.h> int function() void main(void) { ... Statement ; } int function() { Statement ; ... return (int value); }

  33. Example 4 ตัวอย่าง #include <stdio.h> int Feet2Inch(int); intfeet,inches; void main() { feet = 6; inches = Feet2Inch(feet); printf("Height in inches is %d",inches); } int Feet2Inch(int f) { return f*12; } ผลการทำงาน Height in inches is 72

  34. Example 5 #include <stdio.h> void adder(int , int ); intsumm; int main() { adder(20, 30); // จุดที่เรียกใช้ฟังก์ชันโพรโตไทป์ printf(“summary = %d”,summ) return 0; } void adder(int a, int b) { summ = a+b; }

  35. How to process function?

  36. Outline 1 Function 2 User-Defined Function p 3 Function Format Passing Parameters 4 5 Assignment

  37. Function Declaration • เป็นการประกาศการใช้งานฟังก์ชั่นที่อยู่หลัง main() typeคือ ชนิดของฟังก์ชัน ว่าฟังชันที่ทำการสร้างจะส่งข้อมูลชนิดใดกลับ function_nameคือ ชื่อฟังก์ชันที่จะสร้างขึ้น type-nคือ ชนิดของข้อมูลที่จะส่งให้ฟังก์ชัน typefunction_name(type-1,type-2,...,type-n);

  38. Function Declaration(cont.) • การเขียนโปรแกรมโดยมีฟังก์ชันที่สร้างขึ้นเองมี 2 รูปแบบ • สร้างฟังก์ชัน ก่อน ฟังก์ชันหลัก • ฟังก์ชันหลักสามารถเรียกใช้งานฟังก์ชันที่สร้างขึ้นได้ • สร้างฟังก์ชัน หลัง ฟังชันหลัก • ต้องประกาศ Function Prototype ก่อนเพื่อให้ฟังก์ชันหลักรู้ว่ามีฟังก์ชันที่สร้างขึ้น

  39. Function Declaration(cont.) #include<file.h> type variable; type function_name(type variable) { statement-1; ... statement-n; return(var); } int main() { type variable; statement-1; ... statement-n; return 0; }

  40. Function Declaration(cont.) #include<file.h> type function_name(type); type variable; int main() { type variable; statement-1; ... statement-n; return 0; } type function_name(type variable) { statement-1; ... statement-n; return(var); }

  41. Function Format #1 • แบบที่ 1:ฟังก์ชันแบบไม่มีการส่งค่ากลับและไม่มีพารามิเตอร์ • เป็นฟังก์ชันที่ไม่มีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา  และไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย void main() { my_print(); } voidmy_print() { printf(“Hello world”); }

  42. Function Format #2 • แบบที่ 2 ฟังก์ชันแบบไม่มีการส่งค่ากลับแต่มีพารามิเตอร์  • เป็นฟังก์ชันที่จะไม่มีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกขึ้นมา   แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย • void main() • { • my_print(‘a’, 5); • } • voidmy_print(char ch, int x) • { • while (x > 0) • { • printf(“%c”, ch); • x--; • } • } void main() { my_print(2); } voidmy_print(int x) { printf(“%d”, x); }

  43. Function Format #3 • แบบที่ 3 ฟังก์ชันแบบมีการส่งค่ากลับและไม่มีพารามิเตอร์  • เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้ฟังก์ชันที่เรียกมา   แต่ไม่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย  void main() { printf(“%d”,my_func()); } intmy_func() { int a; scanf(“%d”,&a); return (a*5); }

  44. Function Format #4 • แบบที่ 4 ฟังก์ชันแบบมีการส่งค่ากลับและมีพารามิเตอร์  • เป็นฟังก์ชันที่จะมีการส่งค่ากลับไปให้กับฟังก์ชันที่เรียกมา  แต่มีการส่งค่าจากฟังก์ชันที่เรียกมาให้ด้วย • void main() • { • char ch; • ch = my_print(5); • printf(“%c\n”, ch); • } • charmy_print(int x) • { • char lch; • printf(“Enter your character: ”); • scanf(“%c”, &lch); • while (x > 0) • { • printf(“%c”, lch); • x--; • } • printf(“\n”); • return lch; • }

  45. Example 4 START show_star(n) ********* * EE-UP * ********* num=9 i=1 show_star(num) T i<=n kmitl F * i++ show_star(num) end END

  46. Example 4 (cont.)

  47. Example 5

  48. Test yourself จากโปรแกรมตัวอย่างจงอธิบาย • ฟังก์ชันชื่ออะไร ? • มีการรับค่าหรือไม่ ถ้ามี มีกี่พารามิเตอร์ ? • ฟังก์ชันรับค่าเป็นตัวแปรชนิดใด ? • ฟังก์ชันมีการส่งค่ากลับหรือไม่ ถ้ามี ส่งค่ากลับเป็นตัวแปรชนิดใด ? • ถ้าต้องการตัดบรรทัด /*Function Prototype*/ ออกต้องปรับเปลี่ยนโปรแกรมอย่างไร ? • โปรแกรมทำงานอะไร ?

  49. Variable & Scope of Function • ตัวแปร global เป็นตัวแปรที่ฟังก์ชันใดก็สามารถเรียกใช้ได้โดยจะประกาศสร้างตัวแปรต่อจาก พรีโปรแซสเซอร์ไดเร็คทีฟ • ตัวแปร local เป็นตัวแปรที่สามารถเรียกใช้ได้ภายในเฉพาะฟังก์ชันที่ประกาศสร้างตัวแปรนั้นโดยจะประกาศสร้างตัวแปรภายในแต่ละฟังก์ชัน

  50. Example 6

More Related